2ndboy 的个人资料释放 2.0照片日志列表 工具 帮助
2007/1/8

新地方在这里:-)

  经过几天的调整,我在 HostMonster 上的 blog 已经可以拿出来见人了;-) 大家可以用 http://blog.2ndboy.net 访问,这里停止更新,post 会逐步转移到新根据地,请修改链接和 RSS 订阅地址,特此通知 :-D
2006/12/23

好吧,交作业

請列出 10 樣最想做的事情(短期/長期均可)
1. 学 Ruby,虽然之前也小学过一段时间,但还远没达到熟练运用的境界
2. 学 C#,.NET 时代,也至少搞个入场券吧?
3. 换个手机/PDA,每天花在路上的时间太多,有个智能移动设备一定不错
4. 多点时间运动,身体是革命的本钱
5. 尽快让在做的东西正式运转起来
6-10. ……
 
被點名人士除了要回答別人的問題,還要在最後多出 1 條問題
1. 上次哭是什麼時候?
时间确实不记得了,但记得是看《暖春》的时候
2. 最想去的城市是哪里?
马尔代夫算不算,网上的照片看了无数次了,但是每看一次还是口水一次
3. 你的夢想是什麼?
哪方面?最朴实的梦想是赚 n 多钱,然后做自己喜欢的事情
4. 難過的時候怎麼辦?
能找到人的时候找人倾诉,找不到人的时候坐在大街上看着人流也不错,反正不能一个人闷着
5. 如果有一天,你突然被一片突如其來的黑暗吞噬,你第一會喊出口的名字會是誰呢?
TMD,谁把灯关了?!
6. 如果你將之視為要珍惜的異性朋友對你表白,而你只想把他當做好朋友你怎麼辦?
不好说……还好没遇到过,遇到了再说
7. 說出你最大的優點
有耐心算不算
8. 描述一下給你題目的人?
气质型帅哥
9. 到目前為止,生命裏最重要的三樣東西?
健康,家人,智商
10. 說出你覺得最可愛的名字來。
谢丽婷(自己意会一下)
11. 你喜欢幻想甚麼?
拥有不借助任何器材就能飞行的能力
12. 簡單的描述一下你最好的朋友。說說你為什麼喜歡她(他)。
善良,不耍心计
13. 想像一個能讓你哭著醒來的夢。並簡單的描述一下。
曾经梦到老妈遭遇不测哭着醒来(小时候)
14. 如果有一個人說愛你,卻是一個和你同性別的人
谢谢,但是我还是比较喜欢异性
15. 做什麼事情最能心無旁騖?
写代码写到兴起的时候
16. 在你的生命裏什麼是最重要的
很多,参照 9
17. 最近看得印象最深的一部電影是什麼?
要说最近的话,可能是《父子》?
18. 如何看待戀父或戀母情結?
很正常,但不要太过就行了
19. 在愛情和親情不能相容的情況下,你是選擇愛情還是選擇親情呢?
我是不会让这种事发生地8-D
20. 生命只剩一天,你會做什麼?
那时我已经很老了,估计只能是躺着
21. 你最喜歡的異性是誰……別說沒有,如果非要找一個的話呢?
这种问题当然只能回答是 GF 了
22. 如果你愛的人一直忘不了他(她)的前女(男)友,你會怎麼辦?
当然放她走了,这个很容易选择
23. 如果有來生你想選擇怎樣的人生角色?
想试试做演员
24. 最喜欢最笃信的一句话吧。
看看本 blog title 附近:你无法改变生命的长度,但你可以改变它的宽度
25. 中国的什么让你最满意,什么让你最不满意?
这个话题太大了,讲一天也讲不完,改天专门写篇 post?
26. 你对现在的生活满意吗?
还行,但还远不是理想状态中的生活
27. 你相信爱一个人的永恒性么?
在一个封闭的环境下是可能的。基本上爱情最终都会转化为亲情的
28. 说出你明年的一个计划
升职,尽力而为吧
29. 你的他(她)是怎样的一个人,如果他(她)还没出现,你希望他(她)会是怎样的?
比较没耐心,也比较粗心,但是我喜欢
30. 在爱情中,你觉得理性重要还是感性重要?
当然都重要啊,在保持理性的基础上珍视感情
31. 留下你 MSN 曾经用过的签名档,说说其中的故事或者来历
这个……太多了,最近在用的是“Bluehost or Hostmoster”,意思就是说我在找价廉物美访问速度又快的虚拟主机
32. How often do you smile, and where and why do you last time?
经常啊,没有时间和地点限制:D
 
我的问题是:
你觉得人活着到底是为了什么?
我从读初中的时候开始到现在一直在想这个问题,希望听听别人的想法。
 
鉴于 Ricky 和 Wenq 已经做过这个作业了,就传给 RainbowD 和 Greentown 吧;-)
2006/12/19

如何在“新建”菜单中添加新的文件类型

  昨天帮同事一个小忙的时候学到点东西,记在这里备忘,也顺便给刚好有需要的朋友一点帮助。
 
  我们公司产品会产生一种自定义格式的文件,同时会在系统中注册这种文件类型,并且将其与我们自己的程序进行关联。昨天同事为了测试方便想在系统右键菜单的“新建”里面添加我们自己的这种文件格式,问题就从这里出现。根据从网上找到的资料,同事顺利的在 Windows 2000 下添加了我们自己的文件类型(只是菜单显示有点怪),但是在 Windows XP 下确不行。
 
  具体的添加方法可以看这个 post:Mastering File Types in Windows XP > Customizing the New Menu(http://www.informit.com/articles/article.asp?p=415193&seqNum=5&rl=1),其实就是简单的修改一下注册表就可以,而且新建方式有好几种,显示了 Windows 系统有着不错的可定制性。
 
  反复 Google 后都没有找到过有人提到过这种方法在 XP 下失效的情况,也没有找到其它方法,于是越发觉得奇怪。突然想起来在 Windows 2000 下添加了菜单项以后菜单文字有点怪,然后又注意到新建菜单里面既有的一些文件类型,比如 .txt 文本文件,它的菜单文字是“文本文档”。经过在注册表里搜索这个字符串终于真相大白(就是大家看到小白以后说的那句话;-))。
 
  HKEY_CLASSES_ROOT 下面注册了很多文件类型,比如文本文件是 .txt,选中 .txt 这个键以后会发现这个键的默认值是 textfile,好的,再在 HKEY_CLASSES_ROOT 下面找到 textfile 这个键,选中 textfile 键后就会发现这个键的默认值是“文本文档”。问题就在这里!我们注册文件类型的代码估计有点小 bug,没有给后面这个键设置默认值,但这个默认恰恰就是系统用来命名新建菜单的。在 Windows 2000 下,OS 发现没有默认值时会自做主张的给我们一个内定值,所以菜单还是可以显示出来的。但是 Windows XP 显然在这方面比较严格,没有默认值就拒绝添加这个菜单项,所以这个方法就没有生效。
 
  好了,笔记做完了,也该睡觉了
2006/12/17

如何在 BlueHost 空间中用 PHP 以 SMTP 方式发送邮件

  用 PHP 发邮件的方法很多,但自从我体会到了 PEAR 的威力之后就喜欢上 Mail 类。你可以用 mail,sendmail 和 smtp 三种方式来借助 Mail 类发送邮件。话说几天前刚买了个 BlueHost 的空间,在上面跑程序的时候用 PHP 发邮件搞出点心得来,放在这里跟大家分享。
 
  首先我在系统中添加了一个邮件账户 test,密码 123456,然后写下了如下代码:
require_once( 'Mail.php' );
$conf = array(
 'host'     => 'mail.yourdomail.com',
 'auth'     => true,
 'username' => 'test',
 'password' => '123456'
);
$headers['From']         = 'noreply@yourdomain.com';
$headers['To']           = $To;
$headers['Subject']      = '=?GB2312?B?' . base64_encode( $Subject ) . '?=';
$headers['Content-Type'] = 'text/plain; charset=gb2312';
$Mail = & Mail::factory( 'smtp', $conf );
$res = $Mail->send( $To, $headers, $Content );
 
  $To 是想要发送到的信箱地址,比如 foobar@gmail.com,$Subject 是邮件主题,$Content 是 GB2312 编码的邮件正文。结果用以上程序屡试屡败,后来经过多次试验才得出在 BlueHost 主机上用 PHP 以 SMTP 方式发送邮件的正确方法,注意事项如下:
1) BlueHost 帮助信息中说跟你账户(域名)相对应的 SMTP 主机地址是 mail.yourdomain.com,但其实应该是 localhost。你用 mail.yourdomain.com 只会得到 SMTP 拒绝链接的错误信息。
2) SMTP 服务器需要验证才能发邮件。
3) SMTP 验证时用户名需要写 user+yourdomain.com,不能写 user@yourdomain.com。想想这个也好理解,在虚拟主机上一个 SMTP server 要支撑很多个账户,这种写法应该是为了区别发件的账户。
4) 邮件头中的发件邮件账户一定要是存在于系统中的真实账户,象我上面那样注册了一个 test@yourdomain.com,但是发件人账户又写 noreply@yourdomain.com 是不行的,只会得到这样的错误信息:
SMTP: Invalid response code received from server (code: 550, response: Verification failed for No Such User Here Sender verify failed)
 
  知道了上面这 4 个注意事项以后就好办了,删掉刚才注册的 test 邮件帐号,注册一个 noreply 帐号,修改程序如下:
require_once( 'Mail.php' );
$conf = array(
 'host'     => 'localhost',
 'auth'     => true,
 'username' => 'noreply+yourdomain.com',
 'password' => '123456'
);
$headers['From']         = 'noreply@yourdomain.com';
$headers['To']           = $To;
$headers['Subject']      = '=?GB2312?B?' . base64_encode( $Subject ) . '?=';
$headers['Content-Type'] = 'text/plain; charset=gb2312';
$Mail = & Mail::factory( 'smtp', $conf );
$res = $Mail->send( $To, $headers, $Content );
 
  邮件被成功的发送出去了,而且由于邮件服务器在美国,发送到 GMail 信箱非常之快,一般这边一发那边刷新一下就能看到新邮件:)
 
  这里再说些题外话,买了 BlueHost 的空间将近一周时间了,感觉美国的虚拟主机市场确实非常成熟,功能强大。跟国内价格还行但是配置超受限的主机比起来性价比高的不得了!只要你选对了服务提供商,可以说绝对让你满意。但是缺点也比较明显,就是速度实在是慢!这里面的原因众所周知,感谢伟大的电信运营商,感谢伟大的 GFW!
 
  今天跟 HostMonster 的客户沟通了一下,问问他们那边从中国过去的访问速度怎么样,估计人家遇到这样的情况不是个别现象,上来就是一句,我们对来自中国的访问速度无法做出承诺。
 
  国内的虚拟主机服务商有万网这样把大家当 SB 漫天要价的主,但是也有兢兢业业踏踏实实做服务的公司,不过性价比跟国外的运营商确实没法比。一边是价格高不了多少,动辄几十 G 空间几百 G 月流量,支持 SSH,支持多 Addon domain 的国外主机,一边是价廉物不太美的国内主机,我想诱惑力是不言而喻的。但是速度,唉,伤心是一种说不出的痛!
 
  价廉物美,速度又快的好主机,你在哪里???
2006/12/12

开博三年,最近要加入独立 blogger 的行列了

  今天有人问我怎么好久都没有更新了,实在是最近手头事情多呀!工作上的事情折腾了一大圈,自己在不工作的时候也在弄点有兴趣的东西,所以也就疏于料理 blog 了,哈哈,幸好还没有长草。
 
  今天用同事的信用卡买了 Bluehost 的主机,主要是想给平时抽时间做的一个小 web 应用找块地方,由于一个 Bluehost 帐号最多可以支持 6 个域名,所以可以顺便把一直想做的独立主机 blog 做起来。从 04 年情人节算起,我写 blog 也要将近 3 年了,终于可以摆脱限制重重的 BSP 了:-)
 
  为什么放弃 BSP?
(1) BSP 的自定义太受限制,不能自己随便加东西上去
(2) 不是谁都可以留言的,很讨厌这一点
 
  至于主机选择方面,一开始是比较看好 DreamHost 的,网上称赞的文章看了不少,第一年的价格也便宜的吓人,不过深入了解跟搜索了一下就发现好像不完全是那么回事,最终还是选择了口碑不错的 Bluehost。一年 $95.4,50G 的空间,每月 999G 的流量,可以绑定 6 个域名,20 个子域名,50 个 MySQL 数据库,支持 PHP/Perl/RoR(对,你没看错,是 RoR),2500 个 e-mail 帐号,1000 个 FTP 帐号,支持 FTP 和 SSH(这个超好),Linux 主机。跟国内 500M 一年 ¥500 的空间一比,简直是一个天上一个地下呀!
 
  最近事情比较多,我自己的信用卡还没有到手(买其它域名用),所以虽然主机已经就绪,估计转到新的 WordPress 上还需要些时日,光是以前的 post 转过去就要花不少时间。所以,敬请期待吧:-)
2006/11/23

写 SQL 还真是要有点功力

  最近两周都在实现一个不大不小的 Web 应用,用的是 PHP + MySQL(当然,用了数据库抽象层,所以用什么数据库系统是无所谓的)。我本不是专业的 Web 开发者更不是 DBA,所以简单的 SQL 都不在话下,遇到稍微复杂一点的就搞不定了。我的应用里有一块类似论坛的东西,为了说得清楚一些,现将问题简化后描述一下:
 
有一个用户表,里面有两个字段,一个自增长的 id 字段,一个是用户名字段;还有一个贴子表,里面有四个字段,一个自增长 id,一个帖子标题,一个发帖用户 id 还有一个最近回复用户 id,建表的 SQL 如下:
 
CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nick VARCHAR( 16 ) NOT NULL ) ;

CREATE TABLE posts(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR( 64 ) NOT NULL,
userId INT NOT NULL,
lastReplyUserId INT NOT NULL );
 
如果需要在显示帖子列表的同时把帖子作者的名字也显示出来,我可以马上写出如下 SQL:
SELECT p.*,u.nick FROM users u,posts p WHERE u.id=p.userId
 
  但是如果需要在列出帖子列表的同时既显示帖子作者又显示最后回复人的名字,就难住我了:P 于是马上在 MSN 跟 GTalk 上求助,经过一番描述,两个同学和一个同事分别给出了三种不同的实现,同学 C 的方案是:
SELECT p.title,u1.nick user,u2.nick reply FROM posts p LEFT JOIN users u1 ON p.userid=u1.id LEFT JOIN users u2 ON p.lastReplyUserId=u2.id
 
同事 X 给出的方案是:
SELECT p.title,u1.nick user,u2.nick reply FROM users u1,users u2,posts p WHERE u1.id=p.userId AND u2.id=p.lastReplyUserId
 
同学 D 给出的方案是:
SELECT title,(SELECT nick FROM users WHERE id=p.userId) user, (SELECT nick FROM users WHERE id=p.lastReplyUserId) reply FROM posts p
 
准备了一些测试用例来测试这些 SQL:
INSERT INTO users (id,nick) VALUES (1,'tom');
INSERT INTO users (id,nick) VALUES (2,'jack');

INSERT INTO posts (id,title,userId,lastReplyUserId) VALUES (NULL,'test',1,1);
INSERT INTO posts (id,title,userId,lastReplyUserId) VALUES (NULL,'foo',1,2);
INSERT INTO posts (id,title,userId,lastReplyUserId) VALUES (NULL,'bar',2,1);
INSERT INTO posts (id,title,userId,lastReplyUserId) VALUES (NULL,'hehe',2,2);
INSERT INTO posts (id,title,userId,lastReplyUserId) VALUES (NULL,'none',2,0);
 
结果都可以得出正确的结果:
title  user  reply
test   tom   tom
foo    tom   jack
bar    jack  tom
hehe   jack  jack
none   jack  NULL
 
为了比较这三个方案之间的效率差异,我用程序在库里两个表中各放了 10000 条记录:
for( $i = 0; $i < 10000; $i++ )
{
        $sql = sprintf( "INSERT INTO users (nick) VALUES ('%s')", uniqid() );
        $res = & $db->exec( $sql );
        if( PEAR::isError( $res ) )
                exit;
}

for( $i = 0; $i < 10000; $i++ )
{
        $sql = sprintf(
                "INSERT INTO posts (title,userId,lastReplyUserId) VALUES ('%s',%d,%d)",
                uniqid(),
                rand( 1, 10000),
                rand( 1, 10000 ) );
        $res = & $db->exec( $sql );
        if( PEAR::isError( $res ) )
                exit;
}
通过对每次 SQL 反复的执行几百次(当然也是用测试程序:)),记录执行时间后得出如下结论:
同事 X 的方案最快,平均耗时为 0.0462s
同学 C 给出的方案跟同事 X 查不多,平均执行耗时为 0.0469s
同学 D 给出的方案在这三个方案中耗时最多,平均为 0.0572s
 
  同事 X 跟同学 C 的方案都是做表联合查询,但是为什么单纯的联合查询会比 LEFT JOIN 快呢?同学 D 给出的方案用了子查询,不知道是不是因为有三个查询嵌套在一起所以慢,请路过的高人给点提示,或者是不是有更好的解决办法?
 
  不管怎么样,经过实测,决定使用同事 X 提供的 SQL 来实现这个 Web 应用,谢谢他们几个人的无私帮助:)
 
20061127 Update:终于找到时间上来更新一下,其实同事 X 的方案在最后回复人为 NULL 的时候是有问题的(不能给出结果),所以最后用了效率稍有一点点差距的同学 C 的方案。
2006/11/13

今日杂谈

  今天刚上班就看见了躺在办公桌上的快件,哈哈,原来是我的 FireFox T-shirt 到了,赶紧拆开包装瞧瞧。原来除了 T-shirt 还有其他东西:一个 Yupoo 纸像框,10 个 FireFox 贴纸,10 个汽车用 FireFox 贴纸。Yupoo 的纸像框上还有 Yupoo 的历史介绍,现抄录于下面,以示对 Yupoo 和橘子的感谢(广告一下,没用过 Yupoo 的赶紧去注册吧:)):
 
2005/6/1 - Yupoo v0.61 版本诞生
2005/10/1 - Yupoo 正式成为两位创始人的唯一运营项目
2005/10/11 - Yupoo v0.7 版本发布
2005/10/15 - Yupoo 联合杭州各大网站及论坛,举办西湖博览会系列之一的“全民拍摄”活动
2005/11/5-6 - Yupoo 作为嘉宾出席第一届中文网志年会
2006/1/1 - Yupoo 第三位创始人正式加入,团队技术力量增强
2006/1/11 - Yupoo v0.8 版本发布
2006/5 - Yupoo 用户数突破 30 万,单日照片上传量突破 10 万张
2006/7/4 - Yupoo v2.0 版本问世,网站功能更实用,用户体验更舒适
2006/10 - Yupoo 正式确认参加第二届中文网志年会,并成为年会赞助商与图片合作伙伴
2006/10/10 - Yupoo 迁至杭州市数字娱乐产业园,开始新的征程……
 
  谢谢毛向辉跟 Mozilla 提供的 T-shirt!
 
-----
 
  最近感觉有种趋势,那就是美剧似乎要取代韩剧的流行趋势啦,《越狱》、《Lost》、《绝望的主妇》席卷中国大地,紧张刺激的情节、环环相扣的剧情让看惯了拖沓韩剧的人耳目一新(当然,我对韩剧本来就不怎么感冒)。最近在网上看了很多有关《越狱》和《Lost》的后续剧情猜想,而有关《Lost》的尤其吸引人。今天下班前在豆瓣上看到了一个用“Marseille Rousseau 鲁索基因镜象理论”来解释《Lost》的文章,值得一看,推荐!http://www.douban.com/review/1063956/
 
-----
 
  上周由于《Cars》出了清晰版本所以补看了这部据说很好看的动画片,结果——果然很好看!:)
 
  如果让我用一句话来形容我对这部片子的感觉的话,那就是:老美把完全虚构出来的动画形象拍出了感情!尤其是一些关键场景的音乐,恰到好处!感染力非常强!每次看到这些到处闪现着创意和灵感火花的片子的时候就不得不由衷的佩服起这些拍摄这部电影的人,编剧、动画制作、音效处理……不知道我们国内的动画片什么时候可以达到这种境界。
 
  最后还想说一下的就是这个中文译名,这部片子原本的英文名字叫《Cars》,本来这个简单的单词可以结合主题意会出一些很好的名字,但不知道怎么就被哪个便秘的家伙憋成了《汽车总动员》,让人不由的想起一系列的已经用俗了的名字《玩具总动员》、《海底总动员》……但愿下次引进宣传之前能先起个好名字。
2006/11/3

PHP 5.2.0 来了!

  今天看到新闻——PHP 5.2.0 已经发布了,到官方网站上看了看,似乎有不少不错的新特性(http://www.php.net/releases/5_2_0.php)!
 
Input filtering extension was added and enabled by default
这个扩展不错,数据库注入是 Web 开发永远不能避开的问题,现在官方已经有了这样的解决方案,我们自己可以省掉一部分工作了:)
 
JSON extension was added and enabled by default
JSON 就是 JavaScript Object Notation,看似是一个 JavaScript 数据/对象的 serialization 规范,还有专门的 rfc(http://www.ietf.org/rfc/rfc4627.txt?number=4627)。从来没用过,知道其中妙处的朋友不妨指教一二。这个扩展似乎在 SourceForge 上有自己的项目站点:http://sourceforge.net/projects/php-json
 
ZIP extension for creating and editing zip files was introduced
这个扩展比较实在,以后你就可以在 PHP 脚本中方便的操纵 zip 文件了!
 
Hooks for tracking file upload progress were introduced
在 PHP 里面跟踪文件上传的进度在以前来说是根本不可能的,文件上传之后你只能从解析器那里拿到临时文件和上传结果,中间的一切步骤都不能插手。如果你要用 PHP 来做文件或者照片共享程序,那么用户上传文件的时候将得不到任何进度指示,现在好了,有时间要试试这个新特性。这里有个额外的参考:http://blog.bitflux.ch/archive/2006/09/28/upload-progress-meter-extension-for-php-5-2.html
 
  另外这个版本还修复了超过 200 个 bug,性能也得到了一些提升,一些组件的 client library 也更新了版本。总体来说是个值得升级和尝试一下的版本!
2006/10/28

参加第二届中文网志年会(Chinese Blogger Conference 2006)

  今天请假去参加第二届中文网志年会(请假的原因是这周六要加班),早上 8:20 左右到达预定的会场——浙江大学西溪校区,谁知到了才知道,由于停电,会场临时改到了汽车北站边上的宾馆举行。真是好事多磨呀,这已经是第三个会场了(第一个是浙大紫金港校区,但被其他会议挤掉了)。

 

  现场的人集体坐车赶到新会场,会场在宾馆 3 楼,从电梯里一出来就发现签到点已经人满为患,我们不得不在走廊里排队等着签到。排队期间就看到了大名鼎鼎的 Keso,还有吕欣欣、叶子、袁子、文心……

 

  好容易轮到我签到,由于我的 ID 是数字开头(2ndBoy),所以比较好找,在第一页的前面位置。交会费 100 块,拿发票、领资料,进入会场。进去以后发现会场比较小,后来听一叶说前面预定的会场都比较大,尤其是浙大紫金港的会场。可能是由于仓促改订会场的原因,后来会议进行中大家都发现 Mic 问题比较大,经常不出声,有时还有巨响的啸叫声,很影响效果。不过组织者跟志愿者也很辛苦,有些事情确实是不可能预见到的。

 

  位子比较少,很多人都席地而坐,我也是其中之一:)坐下以后发现我前面就是 UUZone 的老冒,还发现了 zheng,期间出去找厕所的时候看见了 Zola。第一次看见叶子真人,发现真人比想象中要娇小,呵呵,怎么看都不像是快要当妈的人。

 

  第一个进行的是 Keso 做的题为“被 Blog 改变”的主题演讲,一上台就一起了台下一片热烈的掌声。Keso 先后谈到了最近沸沸扬扬的 Blog 实名制、Blog 商业化的尝试等等。

 

  会场上有很多老外,而且让我意外的是,很多老外的中文说得相当好,不夸张的说,比某些有口音的中国人的普通话都说的好:)第二项是 Rebecca 主持的“研讨:从中国看全球,从全球看中国”,毛向辉也在台上发言。看到真人后发现他比网络上的照片要瘦,而且现在留了一撮挺性感的山羊胡:)

 

  到场的有从台湾和香港赶来的朋友,也有从北京、深圳刚下飞机火车就赶到会场的。印象比较深的就是很多人都准备了个人名片(没有公司头衔,上面都是个人信息,比如 Blog 地址、E-mail 等等),大家都在纷纷交换名片,记住彼此的 Blog,不亦乐乎。会议资料里附送的 Yahoo 名片夹这时发挥了即时的作用,对了,另外一个年会特点就是很多大小公司都趁机在打广告,做问卷调查,送礼物,抓住商业机会。搞笑的就是在某提问环节,一位哥们儿站起来介绍了一下自己的项目就坐下了,根本没问问题,被大家“斥”为赤裸裸的推销:)

 

  由于改会场的原因,上午开始时间比预定晚了大概 50 分钟,所以上午的最后一项不得不被推到下午进行。中午 12:30 盒饭送到,午饭时间。午饭回来遇到了豆瓣的阿北,并有幸合影一张:)

 

  现场很多人都带了笔记本参会,据说 Wifi 很快就不堪重负了,庆幸自己没把本本背过来。下午见到了刚赶到的 tinyfool,虽然 id 里有个 tiny,不过体形绝对不 tiny,看样子得有一个半吕欣欣得样子,跟技术牛人 tinyfool 合影一张:)

 

  下午的“Blog 的商业空间”大家都比较感兴趣,探讨了一个 BSP Blog Network 的赢利模式。N 多人提问。会议途中由于音响的原因,很多环节进行的不是太顺畅。下午 5 点多的时候跟今天认识的杭州 Blogger Raenoll 一起打道回府,今天拍的部分照片放在 http://2ndboy.yupoo.com 上。

2006/10/25

FireFox 2.0 发布了!

  FireFox 2.0 正式发布了,但是我的 1.5.0.7 不能通过自动更新升级到 2.0,所以只好到官方网站上去下载,呵呵,简体中文版本也出来了。
 
  这次的新特性比较多,但是我比较在意的是:
Improved tabbed browsing:这也是 IE 7 的新特性,可以扔掉 Tab Mix Plus 了?
Resuming your browsing session:这个特性 Maxthon 一直就有,超方便,这回 FF 也有了:)
SVG text:IE 对 SVG 的支持都是通过 Adobe 的插件实现的,FF 这方面做得很好,就是不知道 SVG 什么时候能真正的流行起来。
 
  说实话,我装 FF 一直是为了方便 Web 开发的,因为 DOM Inspector、JavaScript Debugger、Html Validator、Live HTTP Headers 这些扩展实在是太方便了,平时用的多的反而是 Maxthon,如果 FireFox 真正能解决了内存跟稳定性问题,我想离他真正辉煌的一天就不远了。
 
  我为什么写这样一篇 blog?看这里
2006/10/14

快进人生

  的确就像是某影评说的那样,《Click(神奇遥控器)》是部既能让你大笑又能让你哭的好电影!
 
  面对工作跟家庭,你是否总是以工作为重呢?面对生活挫折,你是否总是想快进人生把他们跳过呢?建筑设计师 Michael 因为得到了一支可以遥控人生的神奇遥控器,用它来跳过与妻子的争吵、生病、跟父母家人的聚餐从而错失了跟家人在一起的美好时光,当后悔的时候却已无力回天。
 
  有了神奇遥控器,你可以跳到生活的任意一个章节,你从自己生活的主角变成了一个旁观者。其实根本不用什么遥控器,你的真实想法就决定了你的人生态度,当你想要忽略一些东西的时候,你自然会想处于自动导航模式的 Michael 一样,人在而神离。
 
  男主角是亚当·桑德勒,曾经看过他的《50 First Dates(初恋 50 次)》,是个不错的有自己特色的演员。女主角是我非常喜欢的凯特·贝金赛尔,从《Pearl Harbor(珍珠港)》开始熟悉她,更喜欢她在《Serendipity(缘分天注定)》里面的表现,不过这部片子里她的戏份不多。
 
  绝对是部值得一看的好电影,笑料百出也非常感人,推荐!
2006/9/26

功亏一篑

  今天知道了消息,最近一件做了近两个月的事情功亏一篑!虽然我还没有进化到可以对任何挫折都一笑而过,不过生活还是得进行下去,对一个误会耿耿于怀不会对今后的任何事情有什么积极的影响,人还是要凡事都怀有激情向前看的。
 
  能力越大,责任就越大。那些身处高位的人,你们可知道权力越大,责任就越大吗?一句话就可以决定整见事情的走向。
 
  留个脚印。
2006/9/23

加入黑社会了

  早就有了买个本本的念头,但是由于种种原因(最重要的原因就是没有余粮,哈哈)一直没有如愿。直到上周六下午,才如愿以偿的加入小黑家族,购入 ThinkPad T60 一台。
 
  当然真正购机之前免不了上网狂查一通资料,由于一个月前刚帮 GF 的姐姐买过一台 Dell 640m-n,所以开始就比较关注 Dell 的机器,不过在论坛泡了一段时间还是打算选 ThinkPad 了,贵是贵了一些,但是品质、手感、设计以及外观上 Dell 跟 ThinkPad 都不可同日而语呀!
 
  这里推荐一个小黑的论坛:http://www.yayanb.com/,里面的技术帖子跟购机手机都是不错的学习资料。
 
  看了不少资料以后打算买 T60 了,不过行货价格实在是高,最便宜的一款也要大概¥15000 吧,而且 T60 标配的指纹识别我根本就不想要,看来看去就只能买水货了。算我运气不错,8、9、10 这几个月正是学生机(香港/澳门特区政府联合厂商搞的只针对学生跟教职工的优惠机型,大陆没有)的购买季节,想买的时候就被我赶上了:)
 
下一步就是考虑配置了,我基本上确定了这么几个原则:
1.不要高分屏:本来 14” 的屏幕显示的文字已经够小了,分辨率再高眼睛实在是受不了
2.不要独立显卡:我基本上是不玩游戏的,何况独立显卡的机器要贵上大概¥1500
3.支持蓝牙:如今的移动设备越来越多的支持蓝牙了,有的话以后方便使用
 
  学生机本来就没有我不想要的指纹识别,看了看价格最低的那一款刚好符合我的要求,哈哈,这下又能省钱了。不过不爽的是这个配置的 T60 没有蓝牙支持,鱼和熊掌不可兼得啊。最后的主要配置如下:
T2400 1.83G 双核
512M DDR2 内存
SATA 60G 5400 转硬盘
CD RW/DVD Rom
无线网卡什么的就不写了,最后总价是¥9999。
 
  上面那个丫丫数码虽然可以购机,不过毕竟在北京,一来现场看货方便一些,二来出了问题也不用我先寄到北京,再从北京寄到香港去修,所以还是打定主意在本地找个可靠的经销商搞定。这里有个插曲,我一高中死党的姐姐姐夫也是做 ThinkPad 的,而且他自己的本本就是凭着一次很好的机会拿到的行货 T43,不过联系以后发现再想拿到便宜行货的机会已经没有了,所以只能向水货看齐了。
 
  几个月前刚买过 T43 的同事推荐了杭州本地的经销商:http://www.vipnb.com/,于是就趁周六的时候去买机器。现场就有一台现货,不过可惜的是一开机就发现一个点,好在仓库里还有一台同型号的机器,稍后就有人把机器送过来了。
 
  看了看机箱上的印章,都是科大的机器。之后开箱,见到了漂亮的小黑,比我想象中的要小巧一些,而且看上去就特别精致(外观设计上确实比 Dell 要强很多,这点不容置疑)。开机验点,还好,一个点都没发现,而且充电次数为 0。机器背面有正版 XP Professional 的 COA,但是据说盘在过关的时候被扣留了,这个也没关系,反正现在 XP SP2 好找得很:)
 
  当时就连上无线网络,到 IBM 的网站上(http://www-3.ibm.com/pc/support/site.wss/warranty/warranty.vm)验证序列号,机箱、机身跟 BIOS 的序列号完全相符。当然如果你不放心的话还可以查验每个部件的序列号,以防经销商换过部件。验好机器后付钱走人。
 
  回到家以后拿出“无限的未知:无人值守WINXP安装光盘 第四版 修正版”(http://phineas.blog.hexun.com/)装系统,本来一般的 XP 对 SATA 硬盘的支持有点问题,在装机前要该 BIOS 设置,装完以后打了补丁再改过来,不过我用的这个版本自带了驱动,就不用这么麻烦了。装系统细节暂且不表,都很顺利,就是遇到一两次网卡自动消失的问题,不过在网上看看发现这不是个例。后来在线更新驱动以后问题就没再出现过,看来是驱动的问题。
 
如今一个星期用下来,简单的谈点感受:
1.以前从来没用过指点杆,觉得鼠标板就挺方便的,结果试了试指点杆发现特别舒服,远比鼠标板来的爽快,这下随身带个外接鼠标的念头可以打消了
2. 屏幕顶端的照明 LED 特别方便,晚上用本本又不想打搅别人的时候非常有用。本来之前就买了个 USB LED 照明灯,现在看来是用不着了:)
3. 键盘比较舒服,Dell 640m 的键盘我用过两台,都有种敲击薄塑料片的感觉,用惯台式机键盘的人恐怕会觉得特别不爽。我身边的真实事例就是一位老兄在 640m 的包里放了一个外接鼠标跟一个全尺寸 PC 键盘:) 相比之下,ThinkPad 的键盘键程就比较长,手感也特别舒服
4. ThinkPad 的散热比较好,用几个小时下来掌托部分也只是微温,夏天用起来不会觉得不舒服。背面也只是部分区域有发热的感觉。就我用过的 Dell 机器,发热量比这个要大得多
5. 附带的实用工具很多,方方面面装起来可以让你用起来更贴心
 
  赠品包括一个 06 款黑色红点包、一个内包、一个 IBM OEM 小鼠标、3M 抹布一块、以及电源转接头和驱动光盘。说实话,红点包有点大,也太宽了,如果不用内包的话估计包里可以装得下 3 部 T60!内包看起来不错,可以起到缓冲的作用:) 由于是港行学生机,所以电源插头用的是英标的大插头,有些接线板是不支持的。但是送的转接头质量太差,弃之,重新买了一个公牛转接头。
 
  好了,购机手机就写到这里,由于相机拿去送修了,所以只好从网上找了几张 T60 的照片,除了在方向键下面多出来个指纹识别之外,基本跟我的小黑一模一样。
2006/8/18

今日杂谈

  上周从当当订的两本书今天终于到货,一本是《Effective C++》第三版,一本是《Ajax 基础教程》。
 
  最近两周遭遇了两次窘境,于是终于下了决心把一直该通读的《Effective C++》仔细看看。其实这本书的电子版我很早就有了,但每次都是遇到疑问才去翻翻,根本没有集中时间把它吃透过。最近发生的事让我觉得,是该抽时间好好修炼一番了。拿到纸版书一看,内容跟翻译都比电子版要好很多,印刷也比较好,这么一本好书,值得珍藏!
 
  在日志里说过很多次了,我是个客串的 PHP 程序员,对 B/S 开发也挺有兴趣。Ajax 早就研究过也写过一个小项目,但是毕竟接触的时间还是比较少,于是买本书来做参考,也顺便系统的看看 Ajax 的各种细节。
 
-----
 
  延续了将近三个月的口语课终于在昨天结束了,仔细想想发现口语提高的不多,不是外教教的不好,实在是这三个月正好是我比较忙的时候,基本上没有什么复习和练习的时间,只有等以后靠自己多练习了。
 
-----
 
  最近坐车的时候发现,前面说的快速公交线的 GPS bug 已经被修好了,现在不会一直响个不停了:-)
2006/8/7

Bug 无处不在

  杭州的快速公交开通已经 n 个月了,期间可以说是毁誉参半,由于开通以后我的线路没变,票价没涨,而且速度快了,车次多了,所以一直都挺喜欢这个玩意的。快速公交跟其它普通公交不一样的地方除了专用道和专用站台之外,最大的区别就是每量公交上都装着 GPS,站台上会实时显示下一趟车距本站还有多远,大概几分钟之后到达。
 
  其实这个玩意在用户界面理论里面还是有点讲究的,就像无处不在的进度条,加了和没加进度条的软件,就算处理起来速度一样快,用户也会觉得有进度条的那个程序比较快,比较爽。
 
  本来这个东西是个挺不错的“高科技”,在车离站台还有大概 300 米的时候还会发出提示声音,让坐在椅子上的候车乘客可以走近自动门去上车。不过今天我就发现了,这个玩意原来也有 bug。
 
  话说杭州相关部门意识到快速公交专用道是对道路资源的浪费,所以在大概一个多月前允许了其它两路公交车驶入快速公交专用道,并且可以实现同站换乘。不过同站换乘之后原来的 GPS 指示牌上不能显示其它两路新增公交的距离信息。
 
  今天晚上回家的时候去乘 B1(快速公交一号线)回家,发现指示牌已经可以指示其它两路新增公交的信息了,但是问题是同一个指示牌对三路公交车是轮流显示的,如果这时有一辆 B1 快到了的时候,指示牌每次显示到 B1 的时候都会响一遍提示音,很明显是没有记录内部状态导致的。
 
  看来有程序控制的地方就会有 bug,连政府筹建的公交系统也不例外。
 
-----
 
  今天试用了闻名已久的 yupoo.com,果然不错,注册了 http://2ndboy.yupoo.com,试着放了一些好看的壁纸上去,欢迎各位访客下载、留言。
2006/7/17

我们变了?!

  晚上十点多的时候打电话给大学同学 S,我觉得他一直是个精力充沛的乐天派,可是半年多没有长谈之后我发现,他像是换了个人似的。抱怨每天都要加班到十一、二点,抱怨从前的双休日现在变成了休息日,抱怨现在总是不开心被头头冤枉……
 
  我变了,我们变了,甚至是从前好像凡事都不放在心上的他!
 
  昨天下午看了刘德华投资的《疯狂的石头》,超搞,当看到片子快结束时包哥满不在乎的把宝石当赝品送给一直支持自己的女朋友,当看到包哥终于可以畅快淋漓的小便一回根本不在乎什么登台领奖。我会心的笑笑,是的,这就是普通人的快乐!我不是说我不是普通人,我只是说当我们追求太多东西的时候,我们已经没有了普通人的心态。
 
  今天下午的口语课结束以后我们的女外教要回 New York 一段时间重新办理签证,当拿到我们送她印有公司 logo 的 T-shirt 的时候,她的高兴劲儿感染了在场的所有人。看着她拿着衣服在身上比划的表情,我就问自己,多久没有象她一样这么兴奋了?
 
  心态很重要,对吗?!
 
  我们都变了,但是,祝福亲人、朋友、还有自己都快乐一些吧!
2006/6/21

今日杂谈

  最近杂务缠身,一晃有二十几天没有更新过 blog 了,不过近来生活也确实乏善可陈,杭州天气更是热的可以,坐下来整理心情的心思着实没有。
 
  下午收到了看起来是从荷兰寄出的 10 张 Ubuntu 6.06 Live CD,扣除成本不计,邮费就要 5 欧元,老外推广开源的投入还真是挺大,我也拾拾柴吧,马上在公司里开始分发。
 
  公司的项目上周时可以暂告一个段落了,在新版本需求还没有明确之前先帮同组的同事改改 bug,不过看了一下 reassign 给我的一个 bug,居然已经有两年多的历史了,寒一个!
 
  GF 超喜欢吃西瓜,杭州最近持续高温(对我来说:)),我们雷打不动每天吃瓜。为了吃冰西瓜就把冰箱温度开低了些,没想到隔天打算做黄瓜炒蛋的时候居然看到鸡蛋被冻裂了,不知道怎么的我顿时就想起了在《帝企鹅日记》里面被冻裂了的企鹅蛋。腌鸡蛋我见得多了,冰鸡蛋真还是头一次见,不过麻烦的是我得等到它化开了才能搅。
 
  口语课仍然以每周两次的进度继续进行中,上周读一个小段落的时候被拼音的 Qingdao 地名卡了一下,结果被外教鄙视了一下,说我中文不如英文好:)再寒一个!上周跟 Ruibo 聊天时说到动物的性别,我说中文里说性别可以有男女、公母和雌雄三对,结果把 Ruibo 吓的不轻:)还了解到一个挺大的差别,在杭州给狗买个 licence 要 RMB3000,在美国只要 $10,这也差太多了吧!
2006/5/29

口语培训 & Zen Cart

  之前报名参加的英语口语培训今天第一天上课,结果倍受打击,还是老问题——我的词汇量实在是太少了!初中的时候很少背单词,结果每次英语考试分数都挺高,其结果就是我觉得背不背单词没什么所谓。高中的时候遇到了一个好英语老师,此公对应试考试的门路摸的非常清楚,教我们的都是应试秘诀,结果是虽然我高中也很少背单词,但是高考英语是 116 分。大学里几乎对英语彻底放羊,结果就是我现在到了用的时候才发现,读东西的时候很多东西看不懂,想说的时候很多东西说不出,真是有苦说不出呀!
 
  工作以后彻底发现了英语的重要性,而且简直跟你的发展和薪水息息相关!是时候该好好背背单词了,虽然之前的口语测试中老外对我的表现评价非常高,但那毕竟只能说明我语感还不错,体现不出实际的基础来。木桶盛水的多少是由最短的木板决定的,今后要多记单词多看语法,写下这篇 post,以次明志^_^
 
-----
 
  最近研究了开源网店 Zen Cart,虽然客串 PHP 开发者久已,但看了 Zen Cart 的实现还是忍不住要佩服一下,Zen Cart 的架构可以让你不用或者很少修改其原始代码就能对其进行扩展。粗粗悟了一下,发现有些妙处跟 RoR 的思想一致,那就是用惯例和约定俗成来简化程序结构。除了表现层的处理略显过时和数据库抽象没有做好之外,还是很有些东西值得一学的。
 
  研究之下不禁对自己以前每写一个东西都重造车轮的行为感觉脸红,虽然是客串 Web 程序员,抽象和重用的功力却需要加强呀。
2006/5/21

今日杂谈

  昨晚看了《南极大冒险(Eight Below)》,GF 超级喜欢里面八条有情有义又机灵的雪橇狗,其实我一直都挺喜欢拉布拉多和哈士奇这两个犬种的,看完这部片子以后更坚定了以后有条件要养一条哈士奇的想法了!今年动物影片不少,虽然看完《帝企鹅日记》以后人们不能真的去养企鹅,但是狗年里一部《导盲犬小Q》和这部《南极大冒险》估计真的能拉动拉布拉多和哈士奇的销量呢!
 
  我从小到大,家里养猫的次数远多过养狗,猫这种孤傲的动物感觉不象狗那么跟人亲近,但是城市里养狗确实不太方便,毕竟体形和食量上,两者的差别还是挺大的,于是我们家只养过两条狗。我们那边的土狗虽不象藏獒那么威武凶猛但是体形上却也比浙江这边的土狗大的多,估计狭路相逢我们那里的土狗一定是占上风的:)
 
-----
 
  最近看过的电影还有《防火墙(Firewall)》,哈里森·福特宝刀不老,虽然这次化身银行计算机安全技术专家,但身上依然还带着印第安纳·琼斯打不倒的硬汉作风。认识并记住哈里森·福特这个名字是在《亡命天涯(The Fugitive)》中他扮演的医生角色,后来才看了他在 80 年代拍的《夺宝奇兵》系列。
 
  其实这部片子刚开始的时候感觉有点沉闷,谁知后来的情节就紧张的让人喘不过气来,一直到最后坏人罪有应得,一家人安全团圆为止。对了,顺便说一句,好像电影里的安全系统都有个特征,那就是字符终端界面,而非 GUI(当然也有这样的场面)界面,甚至这部片子里面的提示符等特征让人一看就觉得是 Unix 系统,看来 *nix 系统在大家的心目中才是安全牛人的象征呀!:)
 
-----
 
  昨天下午去参加了公司排球比赛的赛前训练,不经常做运动的我在 30 度的气温环境下一个小时训练下来已经累的喘不过起来。不过搞笑的还在后头,今天早上起来身上各处的肌肉就又酸又痛,甚至连起床和下蹲这样的动作都有点吃力!唉,老了老了,以后要多参加这样的活动锻炼锻炼呀!
 
-----
 
  最近研究了一下著名的开源论坛 phpBB,对 phpBB 的印象有所改善,但是对 PHP 的不足之处又有所体会。用 PHP 构建复杂应用时确实是陷阱多多呀,不支持 namespace 和 module(或类似概念)带来了很多潜在的冲突,尤其是跟其它应用进行互操作的时候,期望以后的 PHP 能够在这方面有所改善!
2006/5/20

Crash 惊魂

  本来一直下班都很准时的,但是昨天下午被一个问题拖住了。起因是其它 team 在调我们 team 的 dll 时程序异常,由于最近的一个新 feature 是我实现的,所以同事就找到我头上来了。结果调试了一下跟到了一个从来没看过的地方(我们的代码规模实在是太大了,每个人只了解自己 team 负责的部分的一部分代码而已),出错的代码大意如下:

void foo::bar( ... ..., void *pValue )
{
  bool bTest = (bool)*((bool *)pValue);
  ... ...
}
 
  调我们 dll 的同事传过来的值是 1,而上述代码中 pValue 是个指针,结果必然导致访问违例,程序就 crash 了。该同事说这块代码已经很久没改过了,他们一直是这么调的 pFoo->bar( ... ..., (void *)TRUE );,看了看 foo::bar() 的实现,pValue 确实是被当作 bool 值来使用的。
 
  找到我们 team 做这一块的同事,他检查了代码之后大吃一惊,说以前的代码一直都是 bool bTest = (bool)pValue; ,谁会改我们的代码呢?用 CVS 查了一下 log,最后找到了“肇事者”,原来是 Mac team 的一个同事,他们升级到 GCC 4.0 以后编译上面代码不能通过,所以就把代码改成了现在这个会导致程序异常的样子。
 
  这件事其实并不复杂,可是解决过程有点象是在破案一样:)给我们的启示就是:(1)在一个多人协作的环境中(我们目前有十数个 team,几十个人工作在同一个项目中),改其它 team 代码的时候一定要找到相关同事一起进行。(2)这位改代码的同事的代码通过编译是毫无问题的,但是由于上层调用的方式不是拿 pValue 当指针用的,是直接强转传值的,所以修改后的代码必然会出问题。所以,能通过编译的代码未必就能正常运行,修改代码前一定要弄清楚代码的确切含义。
 
  下班走出公司大楼以后比平时晚了不少,嗯,今天是周末了,可以好好休息一下了。