作者归档:Jacob Nie

系统之争

今天遇到两件事情,勾起了我对系统的思考。一件是看到一篇文章,linux和windows之争的相关文章,主要是强调windows下能干的有意义的事情linux下都能完成,而linux下能做的事情在windows下未必能完成。作者也承认了游戏不是linux的长项,但他说游戏有更成熟的替代器,如PSP等专门的游戏设备比windows下的游戏体验性要好上很多;第二件事情是思考iphone下的开发,iphone的开发环境需要在mac os下进行,这使得我目前比较难办,要么买一台mac的设备,这是比较保险的一种做法,要么尝试虚拟机安装mac os,或者在x86机器上直接安装mac os。但这几种做法都存在着一个问题,我为了iphone的开发真的就要从自己熟悉的windows系统转到mac os上去吗?

确实挺难办的,所以才成就了VMWare和VMPlayer这样的软件,因为很多时候我们都需要多个系统,有时候仅仅是满足我们一方面的要求而已。我非常赞成并支持linux下编程的做法,所有的程序或配置都能用文本的形式描述出来,而不需要复杂的ide,因为IDE毕竟需要一个庞大系统的支撑,切换成另外一个系统就不是那么简单的一件事情了。刚看完linux下处理问题的优势,就让我遇到了IOS开发的难题,真是不得不说这是一个极大的讽刺,每个系统公司都想让自己的系统占为用户的主导,这就导致了用户选择上的障碍,开发上的障碍,我为了开发.NET程序不得不装一个windows系统,我为了开发IOS程序,不得不装一个MAC OS;为了他们,我不得不在linux, windows, mac os三者之间做出选择,或者三者皆用,但这样要耗费掉我们多少精力啊

虽然虚拟软件可以解决一部分的问题,但并不能解决全部的问题,一些系统升级带来了开发不兼容的问题迟早会出现,到时候还是不得不再寻找一些这样的设备来完成自己的任务

c#对sqlserver中uniqueidentifier类型数据的as string 值为空白的问题

从数据库取数据我们习惯用以下代码:

string title = rows[0]["title"] as string;

当取的数据是uniqueidentifier类型,如id,则我们得到的数据就会为空白,可用如下方法解决:

string id = rows[0]["id"].ToString();

这个问题困扰了我近半小时,我也一直坚信uniqueidentifier是另外一种类型的string,但好像其遵循一定的规律,如果不符合这个规律也会报错,所以我不太喜欢使用它来作为ID,但困于旧代码的限制,目前只好这样做

git-svn协同工作

现在工作中已经离不了版本控制了,而作为两种目前比较流行的版本控制软件,SVN和GIT各有各的优势。SVN中小单位使用比较广泛,GIT作为分步式的版本控制更加能体现版本控制的独立性。在以往的工作中,我总是把它们分开来使用,因为现在不缺少git和svn的服务器,googlecode对两种版本控制都做了很好的支持。

但由于历史的原因,我还不能完全切换到GIT上工作,目前我们的项目大部分使用VISUAL SVN作为服务端,代码托管到WINDOWS服务器。在此之前我主要使用SVN客户端进行工作,但缺点显而易见,由于我们的SVN服务器是局域网,所以回家以后就不能再连到服务器,做的一些工作想做一个暂时性的保存是不可能的,如果能够整合GIT和SVN的各自优势,则就不会出现这些问题了。

而今天,最新版本的mysysgit和其外壳tortoisegit 已经完美支持git-svn和中文了,下面我说一下操作的步骤:

1、用git bash执行

git svn clone  https://svn-path/git

这句是针对visual svn的,因为大部分都是https协议的,又没有证书,如果不先用命令行你就没有办法选择和输入用户名密码,选择永久接受,并输入用户名密码,获取版本库

image

2、尽情使用git add, git commit ,git status, git log,然后git svn dcommit就可以了,期间你可以使用任何换基操作,最好不要跟原来的冲突,整合后再提交你的修改

3、tortoise git 的show log和diff相当好用,比命令行更加直观化,其blame可以让你看到整个文件的一生,让人有种时光穿梭的感觉

到此我才知道git提供换基与变基操作的真实含义,无论你在本地提交多少次,只要在dcommit前把这些合并一下,svn版本库里面就不会出现你合并前的操作记录,给别人看起来也更加清爽。

另外两个比较有用的设置,git bash虽然好用,但每次都要进行路径切换。可将git目录下的bin目录设置到path中,在工程目录按住shift右击,“在此处打开命令窗口”,就可以进行git操作了,如果ls会出现中文乱码,就直接用dir好了,这个保证不会有问题,使用git的相关命令也没问题,甚至你可以在任何地方使用vim编辑器了,多么酷的一个功能啊!

struts标签include页面不能显示

使用struts2标签<s:include value=”bottom.jsp” />始终不能显示,但上面的<s:include value=”top.jsp” />能够正常显示,让我查了好久,原来是在bottom.jsp使用了一个标签,但语法错了,将value写成了vlaue,所以不能正常加载

这个错误浪费了我至少30分钟时间

乐子

有时候人要去找点乐子,不同的人所能得到乐子的方式可能不太相同。大部分女人可以去逛街,她们觉得只逛不买也是一种享受。而男人就被定义为买任何东西都有自己的目标,大部分时候我们也是这样的一个状态。有些人的乐子可能是单独一个人看看书,上上网,这些乐子并不花费太多的东西,对自己正常的生活也不会产生太大的影响,被我们定义为正常取乐的方式。但有些人,已经有了很多钱,读书的时间逐渐减少,对上网也没有什么兴趣,于是就要去找一些大乐子,比如去开车刺激一下,就出来了所谓的“欺实马”的出现。有些人对车也已经提不起兴趣来了,于是就去吸毒,因为这是他们没有尝试过的,所以这也是一个乐子点。

没错,他们本身没有什么错,因为人活着,除了忙以外就要找点乐子。对于一个刚刚开始上网的人来说,上网对他是很有吸引力的,那么上网就是他自己的乐子。对于一个刚学会开车的人来说,开车是很有吸引力的,开车就成为他的乐子。对于一个刚开始接触某种游戏的人来说,玩游戏就是他的乐子。而这些都不具备的人,以自己喜欢的方式买自己喜欢的东西也是乐子的一部分,前提是要量力而行,不然就会影响到自己的正常生活。

一种乐子是随着时间的推移而逐渐消失的,所以我们今天可能对开车感兴趣,过几天就会对吸毒感兴趣了。而乐子也随着经济地位的提高而逐渐提高的,就像有个日本人,去了一次太空,回到地球上就再也找不到活着的意义了。因为他把自己终极梦想都完成了,人生不过如此,所以也没有再活着的必要了,他再也不能找到一个能刺激到他神经的乐子了,于是就选择了自尽的方式。

幸好,我还那个经济实力用掉自己所有的乐子,我没钱买房,就保留了对房子的向往;没钱买车,就保留了对车的向往;经济实力不足,就保留了对毒品的“向往”。但短暂的休息时间也会出现找不到乐子的时候,出现一种真空的时代,这个时间我会去看一些购物网站,目前的计划都是只看不买,这样才不会对自己的经济产生一定的影响,而影响我追求更大的乐子。但很多时候,更想买回一堆自己并不太用的着的小东西,也许这样才能弥补一下自己只看不买的状态

其实考虑下来,我花钱的大头还真是在电子产品和衣服上面,多少人不是呢

convention-plugin struts2 零配置

相对于是其他语言来说,java的轮子实在太多了,好用的不好用的一股脑的全部上来。能用的不能用了,只要你用在了你的项目里面,就说明你牛B。struts + spring + hibernate虽然已经成为现在java开发的主流,但我却一点也不敢苟同,其学习成本高,开发效率低下,开发出来的东西速度没保证,安全性也不能得到明示提高,实在搞不明白,因为一个小功能,其他语言一天能搞定的事情,要花一周的时间拱框架,再花一周的时间开发,开发出来的功能经过测试性能又达不到!

我们现在关注的地方应该有所转变了,我认为主要有两点需要提高,中间跳来跳去的环节都免了吧:

1、提高安全性,无论数据库注入的安全性,还是XSS跨站的安全性,在开发中应该让我们多注意这些方面的东西。

2、提高用户使用的舒适度,UI的提升也是必不可少的一个环节。

也许很多人会说,没框架不能协同,没框架不能很好完成大型项目开发,但我觉得,只要有一套良好的代码规范,并且所有开发人员都按照这个规范去做,无论用什么语言,开发多么大型的项目,所得到的结果都是良好的。为了代码的安全性与可回溯性,版本控制软件也必不可少。

今天接后一同事的项目,要在这个项目上改造成另外一个项目,并提供给别人使用,SSH框架,理论上来说整个开发过程应该还是比较熟悉的,唯一不知道的是他使用了convention-plugin实现struts的零配置,0配置就代码你使用默认配置,这就导致了我在配置文件里面找不到他页面跳转的路径。当然,查看他的jsp主目录很快就能看出其中的规律,但不知道他的默认配置写到那个地方还是让我心里有点不舒服。

于是google了一下其默认路径WEB-INF/content才知道,原来这是convention-plugin的功能,其配置当然在其jar包里,对开发人员是透明的,当然你也可以在struts.xml里面修改其默认配置。

git跟金山快盘实现私人代码协同开发

使用github和googlecode都有一个问题,如果你不愿意为些付费的话,就只能把自己的代码公开。有没有一种即免费又可以使用git进行协同开发的工具呢,经过探索与技术的进步,金山快盘已经具备了这个实力

1、安装git客户端和Tortoise Git(更好支持中文)

2、安装金山快盘客户端,最好新建一个账户仅用于同步代码使用,或者新建一个目录同步代码

3、在金山快盘建项目目录,将使用

image

4、勾选Make it Bare,点击OK就建好了一个空的仓库image

5、将项目目录推送到快盘目录(要自定义快盘目录,并选用英文名称)

这样就可以实现本地代码与快盘上的bare库的同步了,现在快盘对碎小文件的同步速度也有了大大的提高,所以基本不用担心速度问题。

接下来该讲一下怎么样协同操作

1、将这个项目目录共享给快盘好友

image

 

2、填写你好友的快盘账号,赋予可编辑权限,点击应用就可以了

image

3、通过你好友的快盘,查找到共享的这个目录,并使用git clone到本地,这样就实现了两的同步

同样,加人的操作都是通过快盘来实现的。这样就完成了多人协同开发的问题。

这里有一个问题,快盘并不像github 或googlecode那样可以判断多人同时提交的问题,如果快盘出现同步提交时会出现后者覆盖前者的问题,所以在一个人提交完成未同步完成时,另外一个人千万不要同步代码,不然可能会出现不可预料的问题。

不管怎么说,这样就实现了不花钱托管私有代码的目的,而且还能通过简单的操作实现多人协同开发,不得不说是开发人员的一大福音啊

互联网公司的赚钱方式

广告赚钱是大部分互联网公司赚钱的一种方式,纵观现在的手机或PC上的软件,大部分国产的应用软件都是免费的,又免费,又要保证一定的质量,必须想出一种赚钱的方式,那么广告或者点击付费的模式就成了一种选择。

作为一个软件开发人员,特别喜欢自定义的东西,最不能忍受的是我的行为给某些公司带来了流量,广告影响了我的使用,我可能因此而不再使用它。而这种放弃的过程是很快的。但现在想想,这样的做法何尝不是一种冲动呢?有些东西真的做的还不错,但由于它有广告赚钱的目的,我就唯恐避之不及,每当有人提起它的时候就离的远远的,好像如果使用它我将自矮三分一样。

现在明白了,好的东西我们就使用,如果能够让你用着舒心,并且还能够给别人带来利润,双赢的结果何乐而不为呢?很多时候我们都被这种恶意商给搞坏了,一定不能让任何一个人得到我的钱,其实真的没有这个必要。就做个假设来说,如果五笔输入法说以后使用要按月收费,怕我还是要使用这款输入法的,因为它在我生活中起了很大的作用,无它就不能这么顺利的写出文章,写出代码,写出测试报告等。

当然,赚钱也要看时机和场合,不是所有的地方都适合值钱去体验一些东西的,也并不是所有的人愿意去付费体验你的东西,所以还要综合考虑一下购买人的经济实力,考虑一下群体性,制定出多套不同的方案来供人们选择,这样才能持续长久的发展,才有动力再创新,再提供新的更好的服务以吸引更多的,良性循环

使用googlecode代替静态页面托管平台

googlecode是我常用的代码托管平台之一,由于后来git的出现,而googlecode当时不支持git托管,所以转向了github。但大概一年前,googlecode 支持了git,不过大陆访问不方便,于是也就没有及时转换,直到近期,再次发现git已经可以从大陆正常使用了,所以把部分静态的文件托管到了googlecode。

如果你的代码致力于开放,或者你的代码不需要特别的加密,或者你想共享自己的设计,那么你就可以把自己的设计或页面上传到这里来,这里提供了一个外链的窗口,可以及时给别人演示与共享。

很简单,在http://code.google.com/下方找到Create a new project,然后填写必要的信息,选择托管的方式,推荐使用Git,点击下方的image,就完成了项目的新建。

image

在项目的主页面http://项目名称.googlecode.com,点击Source,这里提供了获取和提交的方式,所以,只需要按照上述方式,通过git把代码拉下来,然后存放文件,提交就可以了。

image

那如果访问自己提交的文件呢?可以在Source->Browse里面找到,点击某个文件,然后View raw file就可以查看到了。其实地址是有规律的,就是http://项目名称.googlecode.com/git/+内部路径就可以了,这样就可以方便管理自己的静态文件了。

完成一件事再做另外一件事

是完成一件事再做另外一件事,还是几件事同时并行,这要视情况来定的。但如果几件事并行,但每件事情都没有完成,就会使人心烦意乱,不愿意做下面的事情。我们应该给自己定一个计划,多长时间完成一件事,把这件事情结实的完成,会让你有成就感,不会觉得是在浪费光阴。

读书也一样,不是说一味的买书就能说明你比较爱读书,虽然两者有一些关系,但不是必然。我可能只是喜欢发现新书,但不怎么深入,大部分书都是粗略的看一下,没怎么详细研究,也有少部分会深入看下去。当然这跟书的精彩程度也有一定的关系。但回顾一下我办公桌上的几本书,能全部看完的没有多少,大部分都是随意翻了一下,少数还从来没翻过,但我还是会去各种书店看有没有合适的新书,然后某段或某句话被看中,再买下来,囤积起来,不再看它,如此循环。

看完一本书再看另外一本书,虽然这样的要求有点不尽情理,不可能要求某个人在某个时间只读一本书,也不能要求某个人捧着自己不喜欢的书从头读到尾,也许这是在浪费时间,但如果能够把自己喜欢的书深入研究下去,积累到自己的知识库中,到后来你会发现这样做比较有“成就感”,也不会出现书到用时方恨少的尴尬局面了。