qyb的博客

参加了一个培训

华成咨询的课程:研发人员职业素养,讲师是朱光辉

无法评论该课程是否物超所值——毕竟头一次参加软件领域的专业培训,不过承认收获还是蛮大,甚至动了鼓动 HR 来请他到公司做内训的念头。

展示现场一张照片,人家做咨询的每天讲职业道德,自己确实也做得很不错

咨询是什么?

在 eYou 的时候,感觉老板挺轻视咨询的,经常拿手表的例子:咨询就是拿你的手表告诉你现在几点了——呵呵,可见亿邮的文化是强调执行力的——按我现在的理解,咨询公司就是提供方法论的,执行还是客户自己的活。

其实这是第二次做培训,第一次是很久以前在翠宫饭店去旁听(别人的内训,俺没有交钱)企业战略。短短的一个下午,现在能记得的就只剩下两个重要概念:一个是价值链,另一个是SWOT,还有就是讲师推荐吴晓波的《大败局》。毕竟无法学以致用,记得的东西肯定不多。

不知道多年后我还能记得这次课程上的什么东西,看以后怎么在工作中结合了。不过现在印象很深刻的已经有三条:(挺泛泛的,放之四海而皆准的)
A. 讲内因不讲外因,讲主观不讲客观,讲自己不讲别人——责任感
B. 从自己开始,从现在开始——关于变革
C. 善于总结经验,主动和领导沟通——这是讲师无意中说自己的优点,:)

貌似上面说的 3 点都很普通【呵,这就是拿起你的表告诉你几点了啊】,为什么我还欣喜若狂的专门写 blog 呢?培训的好处就在这儿:
.首先你交了钱了,这次才珍惜学来的经验;
.其次培训课有讲义,有声音图形,有白板,有讨论互动。。。这就是多媒体啊;
.最后就是培训课各个行业的人都有,从做电子器件测试到网络游戏,大家一讨论才感觉方法论真是有效啊,我们碰到的问题都是一样的啊...

回想起过去的职业岁月,倒是可以用一句名言来做总结:"百分之一的灵感加上百分之九十九的勤奋"。99%的勤奋当然很好,但经验总结和方法改进确实做得太少太少,能混到现在这个地步只能说明俺人品好,哈。
学习了两天,突然发现职业上增加了新的追求目标... go on

Topic: 商业

大连之行(2)

晚上去延安路的芒果俱乐部,听人演唱《那么爱你为什么》,以前没有感觉,现场听就觉得原唱应该是韩国歌。可能是以前看韩剧从里面听到的背景音乐,要么是我已经修炼到从配乐就能听出韩国Hip-Hop风格?反正回来搜索了一下,果然是 Turbo 原唱的 Always. 推荐体会一下原唱金钟国变态的音域。

昨天看 zsr 同学拍的照片,
老婆看到一堆 MM 照后大吃一惊:你现在的工作环境好危险啊...
俺赶快赔笑:她们都是校友录的...
老婆不屑的从鼻孔里哼了一声

后来又看我们踢沙滩足球的群裸照
我说:有人说我们都很瘦也
老婆指着前景中的 xwj:说的是他吧

View Larger Map

Topic: 生活

黑质三部曲

最近在看《黑质三部曲》,又或者叫《黑暗物质三部曲》

第一本读的时候觉得挺不错;第二本读到一半就理解到为什么人们将其和《指环王》相提并论——我甚至觉得其中的精灵比魔戒的隐喻更加深刻;第三本刚刚开始看,好像又开始探讨起基督教来,真是期待把它看完啊......

不过最近两天的课余生活打算尝试一下 webpy 的 session 支持,看来完成该心愿得是下周的事情了

PS: 现在更新 blog 少了,对于即将奔四的人来说,每天仰卧起坐比 blog 更重要

Topic: 文化

大连之行(1)


View Larger Map

中午入住盛兴酒店
然后步行到罗斯福附近的708车站
然后坐车去中山广场,拍了一堆照片
然后步行去码头,经过港湾广场
回来的时候直接从码头做 708,在青泥洼桥(其实就是大连火车站)下车,在韩国服装城兜了一圈
继续 708 回到罗斯福,晚饭,然后在金钱柜 K 歌
10:30 回宾馆上网 blog...

Topic: 生活

Milter 协议(2)

先贴一段 twisted 框架下实现 Milter 协议解析的核心函数 :)

  1. class MilterServer(Protocol):
  2.     def init_dataReceived(self):
  3.         self.lastdata = ""
  4.         self.len = 0
  5.  
  6.     def __init__(self):
  7.         self.init_dataReceived()
  8.  
  9.     # 注意:实践中发现一次 recv 中包括了两个完整的 packet; 而且理论上存在
  10.     # 一个 packet 需要两次 recv 才能取出来的可能
  11.     def dataReceived(self, data):
  12.         if len(data): print len(data)
  13.         if self.lastdata != "":
  14.             data = self.lastdata + data
  15.         if self.len != 0:
  16.             if self.len <= len(data):
  17.                 next = data[self.len:]
  18.                 self.proc(data[:self.len])
  19.                 self.init_dataReceived()
  20.                 if len(next) > 0:
  21.                     self.dataReceived(next)
  22.             else: #继续等待输入
  23.                 self.lastdata = data
  24.         else:
  25.             if len(data) < 4:
  26.                 self.lastdata = data
  27.             else:
  28.                 self.len = struct.unpack(">i", data[:4])[0]
  29.                 self.lastdata = data[4:]
  30.                 print self.len, len(self.lastdata)
  31.                 self.dataReceived("")
  32.  
  33.     def proc(self, data):
  34.         ...
  35.         ...

上述代码在线上曾短时间的跑了跑,协议解析的逻辑部分应该是没有问题滴(稳妥起见,目前我们实际用的还是 libmilter 的 python binding)

实现 Milter Server 需要注意的一个事情就是:和 SMTP 一样,是要能支持在一次
connection 中完成多次 transaction 的!!还有 abort 命令,实际上就是一次 RSET 请求。

由于相当然的以为 eom (EndOfMessage) 事件后会话就应该结束了,结果碰到了问题怎么也想不出头绪,绕了一个多星期的弯路才找到程序的毛病所在。

另外在 Postfix 实现里面,自定义的 replymsg 的格式要求严格遵循 RFC,格式是:
"%s %s %s" % (code, Enhanced-Status-Code, msg)
E-S-C 的第一个数字要和 code 的第一个数字保持一致,见 postfix 源代码 milter8.c 里 SMFIR_REPLYCODE 的处理

仔细阅读了一下 sendmail 的 Milter Technical Overview,原来在 DATA 阶段,MTA 是需要把信件整个接受下来以后,再依次发给各个 Milter 的,而且是给一个 Milter 完整的传送完一个 message 后,再接着向下一个 Milter 发送。以前一直理解有误,觉得应该是 on-the-fly 的把数据依次传递给 Milter,这样效率最高.

今日发现之:分布式版本控制

今天发现目前开源界除了 cvs、svn、svk、git(知道 svk 和 git 的人现在恐怕也不多吧) 外,一下子又冒出 MercurialBazaarmonotone 等一大票源码控制系统...

git、svk、mercurial、bazaar、monotone 等新秀都是 distributed version control system虽然俺还没有具体了解 distributed 是个什么概念,但猜测是允许开发人员在把代码提交到远程服务器之前,可以在本地不断的 check in 来管理正在开发中的代码,确实是非常非常的有用。

linux kernel 已经开始使用 git,而 Mozilla 决定转向 mercurial ...

如果你在考虑是否把项目从 cvs 转到 svn 的话,那么这里强烈建议也评估一下这些更 IN 的东东.

Topic: 技术

长虹 CHD29366

这次买的家电三大件,只有电视是国产品牌。买冰箱是为了要一个自动除霜,好像非对开门的机型只有日系有该功能,最后买了松下(东芝比较贵,现在其家电产品好像是专门面对高端人群的),连带着洗衣机也买了松下。

买电视是一件挺麻烦的事情,正如对非 IT 人士来说买电脑是件水很深的事情一样,买电视也有同样的问题——价格区间从几百到过万,知名国外品牌和国内品牌并存,CRT、LCD、PDP,还有什么量子芯、v12、双倍速、高清、FULL HD、720p/1080i/1080p...等名词并不比什么酷睿、速龙、双核、64位更让人摸不着头脑

所以在买电视之前老老实实的去 jd-bbs.com 和小熊在线的家电论坛去潜了好长时间的水。然后得出一个结论,在中国的大部分信号源还没有切换到 16:9 的数字信号之前,咱们还是老老实实的看 4:3 CRT 吧。

然后上国美和大中,记了一下各个主流 29' CRT 的型号,然后再回论坛继续潜水。学习到现在虽然短管 CRT 是主流产品,而且也省空间,看起来也比较新潮,但短管的技术要求也高,容易造成四角的聚焦不良。后来到现场看一款短管果然如此,在某个地方的显示都是弯曲的。于是最后还是选了如今卖场已经不多见的长管彩电——长虹的 CHD29366。没怎么讲价,1900 拿下

增加俺买长虹信心的也包括 jd-bbs.com 上的长虹专题,长虹的人也认为现在 29366 足以满足一般消费者的需求,而且理论上应该比稍微高端一些的 29300 更可靠一些(因为用的元件少)

最后说说我的使用感受:
1. 看电视节目的表现不错,虽然论坛上有部分人群觉得数字高清不如以前的模拟电视效果,但可能是我看电脑屏幕的时间太长了吧,反正是感觉比以前我家老的 LG 21' 强一些。而且看电视距离比较远(2米),确实有所谓的油画感,但完全可以接受。
2. 上淘宝买了根 VGA 线,以及 3.5mm 接头转莲花头的音频线,现在就可以拿笔记本当 DVD 用了,hoho,而且可以坐在沙发上舒舒服服的看 rmvb、avi 了
3. 买来后没有做任何的色彩,形状的调整,可能北京的这批货在出厂前已经调的很不错了吧。左右有轻微的桶形失真,但不注意是发现不了的,不影响使用。
4. 论坛有人反映声音小,至少我的这台还正常吧

5. 有两路 AV 输入、一个 PC/VGA,一路分量端子;但没有 HDMI,也没有 S 端子。反正对我来问题不大

Topic: 生活

FT 中文网的邮件列表服务不错

亲爱的会员:您好!

    感谢您曾经注册为FT中文网的会员。然而,在过去的两个月内,我们发现您
很少从您订阅的《今日焦点》或是《周五文摘》邮件中进入FT中文网的文章页面
进行浏览。不知道是因为繁忙的工作使您无暇阅读,还是 我们的邮件内容不够吸
引您?还是您更习惯通过自己登陆首页去浏览而不是通过邮件的标题进入文章页
面?

    虽然目前我们暂时中止了为您发送邮件,但我们希望给您善意的提醒:如果
您希望继续保留《今日焦点》邮件的订阅服务或是改为订阅 《周五文摘》,只需
点击以下按钮,我们将会重新为您发送,并在今后为您提供更多精彩的内容与丰
富多彩的会员活动。而如果您不再需要任何邮件服务,而是习惯直接通过登陆FT
中文网浏览文章,您可以直接点击以下的退订按钮,从此,我们将不再为您发送
邮件。

   在您不常登陆FT中文网的这段时间,我们增加了不少新的内容与功能:由FT
中文网经济评论员陈旭敏撰写的专栏《第一时间解读》及《财富管理》专题,
涵盖了当今经济社会中诸多热点问题,引起了读者的强烈反响;根据读者点击
量排列的十大热门文章中,与中国股市密切相关的文章内容精辟、眼光独到;
近期,我们还开设了名为"FT中文网博客"的栏目,邀请众多读者加盟。在功能
方面,我们增设了RSS功能,以便您随时定制个性化内容,把FT中文网变成完全
符合您口味的权威财经资讯源。

    我们期待您尽快回到FT中文网!

    P.S如果您有任何技术上或其它方面的疑问与意见,烦请您写信至foo@bar,
我们将立刻为您解决。

所以请放心订阅 FT 中文网的列表吧

Authentication War(续)

继 Yahoo 发布 BBAuth 将近一年之后(Authentication War),Windows Live ID Web Authentication SDK 也发布

和一年前相比,现在 Google Data API 可以说是全面开花,不再仅限于 Calendar 了

命运真是奇妙,去年我还在感叹没有机会在 CERNET 里面部署一套认证库,现在竟然又坐在了一个可能实现该服务的位置上。:)

不过 SOHU Passport 暂时的任务还是在内部打通,攘外必先安内。

不晓得网易和新浪有没有类似的计划。

Topic: 技术

Milter 协议

milter 是个好东东,但不知道出于什么样阴暗的心理,sendmail 的家伙们居然一直没有把这么重要的协议整理出正式的文档。开发者要么去使用 libmilter 函数库,要么老老实实去啃代码吧。

libmilter 应该说也实现的不错,而且还有 python binding,但它自己实现了一个事件循环,让现在酷爱 Twisted 的俺稍稍有些不爽。

感谢为 Milter 写 Perl 模块的程序员,也随代码同时提供了一封非官方的 milter protocol 说明。在这份文档的帮助下,很快就在 Twisted 框架下实现了 Milter Server 的骨架,大概 200 行代码吧。

Milter 协议最核心的就是:所有的 packet 都是首先 4 个字节表示接下来数据的长度,然后分析数据即可。另外就是在实践中发现一次 recv 中出现了两个甚至更多的 packet,协议分析需要注意。

另: twisted 2.5 的 epoll 似乎 memory leak 的厉害,本来想建议用 gc module 来试着解决的,结果换回缺省的 selectreactor 就好了

--Update--

milter protocol 说明文档目前搜索到的地址在:http://cpansearch.perl.org/src/AVAR/Sendmail-PMilter-1.00/doc/milter-protocol.txt

订阅 RSS - qyb的博客