2008年9月25日星期四

不仅要造砖,还要和泥,还要讲究方法!

传说中的程序高手说写程序就像搭积木,把各个模块做好然后搭在一起就好了。

以前我都是把焦点放在积木上面,想着怎么造积木。积木的制造方法有个准则就是:高内聚,低耦合。

然而当积木造好以后却不知怎么搭起来。

此时我们需要的就是和泥,用水泥把各个砖头连接起来,从而造成高楼大厦。水泥也有另一个说法叫:胶水层,顾名思义就是像胶水一样把各个模块连接起来。

积木和胶水都有了,怎样才能更有效的把大楼搭建起来呢?设计模式,最有名的就是4人组的23个设计模式,当然我们不能局限于这几种模式,这些模式是前辈们总结整理出来的,具有一定的通用性和代表性。在实战中我们也要把自己的一些常用方法总结出来,如果也同样具有通用性的话,那可是造福人类了。

积木,胶水。其实也是软件分层开发的原因之一。

2008年9月21日星期日

欲善其事,必先利其器

欲善其事,必先利其器。不是说没了利器就不能善其事,而是在某种程度上利器是善其事的有力支持。相同的人去劈柴,在同样的时间内,钝斧的效率是远不及利斧的。
昨天我跟老婆一起从枫林路中山医院出发一路骑自行车去朱家角(计划是去上海大观园)。我骑的是一辆凤凰牌公路车,老婆骑的是普通城市车。公路车在速度上远高于城市车,而且骑的人也不会感觉到累。此为器一利。(中途,老婆也试着骑公路车,那个公路车的龙头实在僵硬,老婆在车上浑身紧张)
我的公路车是一周前买的二手车。自己从没骑过公路车,所以就当练习了。前面说过车子的龙头很僵硬,第二就是不能大转弯(非上海俗语中的大转弯)因为前车胎和脚蹬的距离太近,转弯大的时候会碰到脚。(如果这里有所改进,会成为灵活专项的利器之一)
昨天全部路程约90公里。到朱家角的时候,我的双手手腕有些疼痛,手掌更甚。为什么骑自行车手会很疼?我们走的路线是虹桥路转延安西路再转到沪青平公路(318国道)。这一路的道路也不是一马平川,路面状况绝不及奥运会公路自行车比赛的赛道。骑公路车时重心前倾,手臂承受不少的力量,我的公路车没有避震器,在坑洼路面上遇到的颠簸全部通过龙头传递到手臂了。近8个小时的颠簸,手掌已经有些肿胀。今早起来,肩部也是酸痛。(在道路不平的路面骑车,尤其是长时间的,一定要选择有避震器的自行车。这也可以成为利器之一.)
速度,公路车的速度可以轻松保持在25km/h 还可以快速的提高到35km/h。在车上被风吹得感觉太好了。可以上的了高速度,也是利器之一
以上举了一些例子来说明一个好的工具可以带来很多好处,但是这些都是提高成绩的要素,而不是基本功。如果自行车都不会骑,那给你辆超豪华的利器又有何用?
高手和俗人的区别之一是拥有扎实的基本功,并能熟练的使用利器。有了这个就能快速的消灭拦路虎!

btw, 在路上遇到4位看上去60岁以上的老人家,骑自行车。听口音像是北方人,他们向我打听去杭州的路线。猜想杭州也许并不是他们的目的地。

2008年9月17日星期三

强烈支持Web标准

我在linux下工作,支持正版软件!

有些网站就是懒,依赖着M$的统治地位,开发时就根本不在乎其他平台用户的感受!

今日,我访问国泰君安的网站准备开户在股市低迷时期杀入,可在firefox平台上,填写开户预约的时候,选择地区营业庭时,选择城市后就玩完了,下级菜单无法使用!这不是逼着我转向window吗?

虽然我可以依靠工作的优势得到正版Windows,可是我真的需要在linux下工作,学习!

再次鄙视一下那些乱来的,懒的,急功近利的网站!

强烈支持 Web标准

2008年9月16日星期二

记阿里软件开放平台--淘宝API

现在很多的internet站点都开放了API,吸引广大的程序员和有眼光的商人利用host站点的资源来进行扩展开发。这样会带来不少的好处。
1. host提供者可以免费的获取广大的资源(有技术能力的人)来为他扩展系统,从而提高host用户的粘度,并且host并需要为此负担更多的风险,还可以更便捷的收购!
2. 寻找更好的创意。俗话说三个臭皮匠顶个诸葛亮,何况隐藏在"民间“的程序/创意高手不计其数!
3. 让草根更容易赚到第一桶金。创业的成本是跟高的,host提供API并共享了庞大的用户群,让一些有能力的个人或小公司得以付出比较少的成本就能将技术转化成生产力!

基于以上和更多的诱惑,淘宝网也开放了自己的API。

这个中秋节有一半的时间在倒腾这个淘宝的API。
首先,阅读文档,这是入门的不二之选。我认为淘宝的文档实在太少,而且文档的发布也不怎么正规。随便找个不不知道是什么身份的人在淘宝的论坛里发个帖子就算是文档的发布了。文档中的示例代码残缺不全,以前看ThinkPHP文档的时候也是这个感觉。

阅读文档之后,实现一个demo。我选择的是淘宝的web版本的API,API调用的方式为REST。另外我需要一个虚拟主机用来托管程序,这里我选择了google的 app engine。所以python也就成了我的主要开发语言。

在淘宝的文档中介绍了.net,java, php 的示例代码。我选择python来实现其实也并不困难。东西准备的差不多了,我们开始实验下吧。在众多杂乱无章的文档中,我看到了些说明。在开发之前要验证一下淘宝API的有效性。如调用 http://sipdev.alisoft.com/sip/rest?sip_apiname=alisoft.validateUser 则会返回xml格式的数据。内容大致是需要appkey。 就这个URL我折腾了好久阿。win+ie, win+firefox, linux+firefox 几个平台我都尝试访问,可是返回的却始终是ContentLength=0的东西!而淘宝生产环境的API,http://sipd.alisoft.com/sip/rest?sip_apiname=alisoft.validateUser倒是能时不时的返回几个文档中说的结果。

至此只好用淘宝生产环境的API来开发了。

使用淘宝API需要生成一个MD5的签名用来认证。生成签名的步骤是,将code,appkey,appname等属性以及其值拼接成一个字符串后用MD5生成一个32位的字符串。我们都知道MD5签名时,内容有任何细微的差别生成的code都不一样。所以拼接这个字符串一定要小心小心再小心,不要多,不要少,注意区分大小写。

生成签名后就是通过REST来调用API了。

完整使用淘宝API还需要作很多工作,虽然文档比较烂,但总比没有的好。多看看,兴许能捡到什么有用的信息。

BTW:我的第一个淘宝认证API调用失败了,最后的erro是签名不正确。如果谁热心愿意帮助我一下,我把代码发过去帮我review一下!谢谢!

2008年9月9日星期二

保存劳动成果

在日常工作中,总要写一些小工具,或者一些代码片段等,这些都是自己的劳动成果,而且还有复用、备忘等功效。所以保存这些东西是有必要的。

管理这些文件是绝对有必要引入版本控制的,好处嘛是在是太多了,想知道的Google一下。因为是个人的文件管理,所以我选择了subversion

subversion 是一个CS结构的版本管理工具,所以我需要一个稳定的Server端。个人资金有限不能自己托管服务器以供使用,这时又想到Google了。Google提供了免费的SVN服务器为各个开源项目使用。虽然咱最开始的目的是为了私用,由于Google SVN Server的特性,咱的文档可以自由访问,如果自己的文档能为他人提供便利,也不枉自己一心想为Freedom Software做点贡献。

如果你也有兴趣跟大家一起分享,我随时欢迎您的加入!


项目地址: http://code.google.com/p/misc-snippets/

2008年9月8日星期一

我想哭但是哭不出来!

入行做程序员也不是一天两天了,居然还是犯这样的低级错误,绝对不可原谅。
最近在写一个开源的项目svnaccesspolicy(用于管理在apache环境下的svn用户信息) ,基本功能已经完成,这些天一直在重构代码,让项目变得更模块话,更现代一些。重构阿重构,慢慢的快成形了。

这时忍不住要玩 Debian Live USB了,也就是把debian安装在2G的优盘上。安装很容易,为了能让在windows上也能查看优盘上的信息,把优盘分了2个区,分别是fat和fat32格式的。这时也为后面的遭遇埋下了伏笔。

优盘上的debian可以使用了,我就迫不及待的把svnaccesspolicy的源代码cut到了优盘上进行开发。此时既没check in代码也没用copy。

在家里使用一切到还顺利,毕竟全是linux环境。等到了公司,才发现windows竟然不认识分区的优盘,只能看到优盘的第一个主分区。而那个主分区是live debian系统的,源码都不在那里。于是乎,打开vmware尝试重新整理优盘。在做这些之前,由于live系统的不方便,就把代码打包压缩,并复制到了 vmdk (vmware的虚拟硬盘上)。然后尝试安装了centos, suse, ubuntu 等,再次证明如此安装系统到优盘上是需要大量做工作的。就暂时放弃,改装最新的live debian。

一切算是回到从前,准备把备份在vmware虚拟硬盘上的文件还原的时候,这才发现虚拟硬盘上空空也!空空也!辛苦的工作就这样付之东流!

切记,切记,工作要稳重。 实验环境要和工作环境完全分开。否则真的是欲哭无泪阿!

2008年9月7日星期日

你必须了解他,才能真的随心所欲!

你要了解游戏规则,
你要了解语言的规则,
你要了解系统的规则,
你要了解计算机运作的规则,
......

要了解很多才行,事实上没有人能完全了解所有,这也是人与人之间的差异所在!
尽可能多的去了解兴趣所在的领域吧! Enjoy!

2008年9月3日星期三

google chrome 第一天体验

google 终于推出浏览器了,试想google的大部分应用都是通过浏览器操作的,怎么能让自家命脉捏在别人手上? 如今满天飞的浏览器,google chrome 又能给大家带来什么?

google 其实还是很霸道的(不霸道如何跟更强悍的microsoft抗争,不霸道怎么能降服如此之多的电脑菜鸟?哈哈),google chrome 的安装是一步到位,不给你任何选择的余地,默认安装在C盘。(还好根据以往经验C盘绝对是足够的大)

早在昨天就通过新闻和google blog了解了下google chrome,当启动google chrome以后还是掩饰不住对它简洁风格的喜爱。那是一个漂亮 ^_^。

今天是在公司初体验google chrome的,这个不刚使用就发现个有个地方让人无法忍受。我们公司的网络环境是这样的, ISA Server 把关,客户端使用代理上网。如果把网络连接设置为自动检测代理,google chrome的速度就真的让人无法忍受了,每次请求文件都要长时间的等待代理响应。把google chrome的rander快速的特性完全掩盖了。经过研究,把自动检测代理设置unchecked,速度会提升不少。

下班回家后,迫不及待的在自己的本本上安装 gogole chrome,公司里的代理问题不存在了。完全沉浸在它的快速,简洁的体验中。。。

BTW:老婆把我的本本霸占玩泡泡糖了,我只好在128M内存的图拉丁的ubuntu上写blog。有时间给大家介绍一下我的轻量级桌面。(其实也不轻量,web server 就安装了 apache2 lighttpd nginx , DB server 装了 MySQL, PostgreSQL 而且此时都启动起来了。呵呵)