三月有话说

有时候,想写点东西了,却又觉得廖廖几句,不够凑成一篇像样的blog。如果把每天的一点小想法就用blog记下来,那就是在唠叨了。唠叨的话,还不如用buzz。

三月份发生的事情,我也想用韩峰局长的文体来记叙下,按时间顺序,具体日期记不得了。

  1. 3月x号,下午在淘宝上看中了moto的milestone,在支付宝上付了款,下班后叫上y.bw一起去百脑汇拿手机去了。晚上在5楼随便吃了点东西,然后我就回家了。研究手机到12点后才睡觉。
  2. 3月x号,用了一段时间的android系统后,发现M8在J.W的修补下确实符合国人的使用,一些常用的小功能都整合进系统了。可是M8一直没法出手,没法收回现金流,很郁闷。
  3. 3月x号,晚上下班回到家时,看到手机里有未接来电,打过去才知道是老家的一个姑父来电。他是给我介绍女朋友的,大学生,还没毕业,并且还把手机号发给了我。女大学生的学校离我太远了,敷衍一阵,然后挂断。
  4. 3月x号,以前只在电脑上用Google Latitude,并且还是IP定位,玩着玩着就没兴趣了,现在手机上也有,并且支持GPS定位,还可以看到好友的位置,挺有意思的。
  5. 3月x号,早上正在上班,群里一个MM问我能不能帮她一个忙,我问是什么事情,她说他伯伯的女儿现在还没有男朋友,想让她帮忙介绍一个,MM问我能不能帮她这个忙,并且还把照片发给我了。MM的伯伯的女儿还不错,可是不是我喜欢的类型,直言无法帮忙。三月桃花运真旺。
  6. 3月x号,今天要搬家,昨天晚上把东西都收拾了一下,好多灰,今天早上睡醒后,感觉肺都重了许多。
  7. 3月x号,一直以来,都为wordpress的垃圾留言烦恼,用了官方的Akismet,还是不管用,每天总能有上百条。今天换了WP-SpanFree后,立马清爽了。(27号:一直到今天,也没有一条垃圾评论出现)
  8. 3月x号,今天把ubuntu从9.10升级到了10.04的beta版,变化挺大的,变好看了,再也不是以前的S黄色了。
  9. 3月x号,早上一进办公室,就听说g.cn退出中国了。失望,上网看新闻才知道,g.cn退到g.com.hk了,并且g.com.hk的”go to english”链接一直不起作用。(27号:今天又有一条新闻说,链接不起作用是bug,囧)
  10. 3月x号,这几天在抽空学习erlang, 这门函数式编程语言和以前学的语言太不一样了,感觉很新鲜。看到并发编程后,很是感慨,C++中那么复杂的进程间通讯,在erlang中仅20行不到的代码便能实现了。erlang我猜应该是ericsson language的组合。
  11. 3月27号,晚上下班回住处,路过小摊,忍不住买了一支玉米。老板都烤糊了一片,还说这是正常的。吃了几口发现是糯玉米,不甜,又放了很多孜然粉,扔了,浪费3块钱。

C/C++之简易Logger

用C++写Logger,常见的有这几种方法:

  1. 写一个Logger类,封装诸如Info(format, …)、Warn(format, …)之类的方法,然后用个实例化一个全局对象,处处皆可输出log,不仅到屏幕,而且可以到文件甚至是网络。
  2. 在c99之前,宏定义中的可变参数…是不能直接在宏中展开的,必须在函数中使用va_list这样的方式来处理,所以如果不使用c99标准,简易的Logger可以使用
  3. #define LOG_INFO(msg)   printf msg

    这样的方式来定义一个宏,然后用以下方式来使用

    LOG_INFO((“hello, %s!\n”, “world”));

    不过,这种方法的弊端在于,LOG_INFO宏在代码中的表现看起来不太符合常理,它应该像个函数,参数周围只用一对括号才好。为什么要用两对括号呢?因为只用一对括号,每个用’,’分隔的参数都会被传进对应的宏,而宏本身并不支持多态,所以只用一对括号,在c99以前的标准下,根本没法做到。并且如果我希望在每条log前都输出标识”[INFO] “的话,只能在每个使用了LOG_INFO的format参数中增加”[INFO] “,目的虽然能达到,但是灵活性不够,一旦需要修改,处处都得改。

  4. 在c99标准及以后,已经支持可变参数在宏定义中直接展开了,所以LOG_INFO可以这样来定义:
  5. #define LOG_INFO(…)   fprintf(stderr, “[INFO] “__VA_ARGS__)

    这样,我既可以选择将log输出到stdout,或是stderr, 或是某个文件指针(暂不讨论输出到文件,因为我暂时没这需求)。并且还可以随意地在format字串里加上前缀,甚至是文件(__FILE__)或函数(__FUNC__)信息,并且使用时就像正常的函数一样使用:

    LOG_INFO(“hello, %d!”, “world”);

    如果使用gcc 4.0以上的版本,总是会有警告”warning: anonymous variadic macros were introduced in C99”出现,编译时加上参数”-Wno-variadic-macros”就清静了。

你是我心里的一首歌

小时候很喜欢看的一部动画片,可是电视不如人愿,总是只能看到其中若干集,让人巨不爽。后来在大学其间,有刻意在网上寻找过,但搜出来的都是电影版狮子王的相关资料,与动画片版相关的完全没有。那个时候,youtube都还没出来,更别说是国内的跟风者了,所以无功而返。

今天突然兴起,在tudou上随意一搜,网络果然是个好东西,年代那么久远的动画片,居然还有人买了光盘,并放到了网上。时刻这么多年,能重新看到这部片子,真的是浮想联翩。

其实,我找这部动画片的主要目的是:我小时候觉得这首片尾曲很好听,很活泼的节奏。现在再重听这首歌,别有一番风味。下面,请听曾在CCTV-1/7播放过的意大利版《狮子王》片尾曲——《从林之王》: 继续阅读“你是我心里的一首歌”

手机变迁史

华为A318

我最早用的移动通信设备是华为的一款小灵通A318,这部小灵通伴随了我1年多,既当闹钟,又能发短信,时不时的还可以玩玩贪吃蛇。当年天冷时,就窝在被子里玩贪吃蛇,一直玩到没电为止。打电话时,我就跑到宿舍楼顶,反正我坐顶楼,比较近。那时候,一句话可以形容我打电话时的样子:“手持小灵通,站在风雨中,昂首又挺胸,就是打不通”。

就这样,伴我渡过了大学中碌碌无为的一段时光。可惜最后被我在一滑旱冰时不慎一屁股给到了。话说,我的PP还真厉害,一下就把屏幕给压碎了,然后A318同志就因此重症不治身亡。

继续阅读“手机变迁史”

可怜的耷拉

惊闻我国文学史上著名的“耷拉”一词被列为工信部官方指定花季少年上网专用泄洪软件——绿坝打入到屏蔽词汇行列,这让我想起了几年前在科幻世界上看到的一篇小说《寂静之城》。

我依稀记得这篇小说中的主角接上网络,与他人进行联系时,事先都需要下载一个“安全词汇表”,这个表中列出了当前能够自由在网络上传播的词汇,任何在网络上传播的信息仅能够使用这个表中列出的词汇来撰写;并且这个列表会不停地更新,你不知道什么时候会发生变化,可能当你写完一封email后,发现最新的“安全词汇表”中已经又少了几个可以使用的词汇,这意味着如果你的email中包含了这几个消失的词汇,你不得不想办法用其它词汇来代表它们。打个比方,如果“运动”被禁用了,你可以使用“质点位移”来代替它。总之,你需要在有限的词汇中创造出无穷的含义。

这篇5年前的文章和我们现在的生活是多么惊人的相似啊,从某种程度上来讲,甚至超越了小说中描写的情节。他们至少还有一本安全词汇表,可以知道哪些词还能正常使用,而我们则永远不会知道使用哪些词能够绝对安全。虽然在现阶段,我们的不安全词汇表还不能大过安全词汇表。如harmony现在只能委曲求全的叫做河蟹或水产,撡亇媽摇身变成草坭玛。

得益于一些软件或网站的程序设计漏洞存在,我有幸收集到一些软件的敏感词们。像老版本emule中的wordfilter.dat,起点中文网javascript中隐藏的forbidenwords,工信部传世之作(绿坝)中的falunword.lib等。它们,只是我们所接触到的一些软件或网站中为数不多的没隐藏好自己的孩子。在一些流量大的网站,如果你在一个著名的社区(比如说19lou吧)里写了一张长篇大论的贴子,我基本可以断定,这张帖子会由于敏感词的存在而让你发挥充分的想像力,利用比喻,排除等各式手法来将它们一一删除。这是件很痛苦的事情,因为它们在暗处,并且可能根本就不是你想的那样,如“1000块急转让一台独立服务器”中的倒数第5和第4个字,没有高超的断字技巧,你能知道这句话里在我们老大哥心中包含的深刻含义么?想快速的找到这些敏感词,我只能表示too young too simple, sometimes naive!

在可以预见的未来,当敏感词多于安全词;当河蟹战胜了草坭玛;我觉得像wordfileter.dat这样的黑名单将不复存在,取而代之的将是“Safewords.dat”这样的白名单,这就是我们的最高理想之一——网络言论的共産宔義!

注:本blog并未使用我收集的敏感词家族来进行言论过滤,所有火星文均在这里翻译所得,请自觉勿向我索要敏感词族谱,我是绝对不会通过QQ或Email的形式推送给你的!

一篇书评引起的八卦

早上看到TopLanguage的maillist, 提到一个八卦事件,《0 bug——C/C++商用工程之道》的作者肖舸和他的一位读者就书中的一些纰漏的豆瓣上所引起的争论。

我平时对这些IT八卦也有所关注,于是去凑了凑热闹。估计作者那天心情不怎么好或是其它原因,对好心指出文中值得商榷的地方读者Milo竟然不屑一顾,批评Milo在C++和服务器程序开发上没什么经验,没资格挑错等。如果Milo真是个无名小辈那也就算了,可是人家也是位牛人,并且能力据目测加道听途说好像是有可能高于作者,出于职业精神,在豆瓣和当当上发表了下书评,然后作者觉得丢份了啊,光天化日之下砸场子,于是乎就整成了这起杯具事件。事后作者也意识到自己作法不妥当,将自己的回帖全删了。还好有位喜欢看热闹的朋友将全部记录保存下来了,看这里能了解事情的完整经过。并且我居然还发现云风也去凑热闹了,-_-!

热闹凑到这里就够了,我从中得到一些启发:

  • 撇开技术层面不说,光谈技术交流,不能依仗自己的经验或资历,便不能接受别人的意见,甚至是指责,即使意见和指责是错误的。让人敬佩的胸襟应该是仔细分析对方的意见指责,平和的道出自己的意见,请求对方理解,就像Milo那样,谦谦有礼,他这点让我很敬佩。对儒家没什么好感,但是他提倡的礼,我觉得应该在自己的生活中贯彻执行。
  • 在技术层面,个人认为”0 bug”言过其实,作者自己也坦言做不到,人家做得最好的也都出了1个bug。可是0 bug真的可以达到么?测试没测出来,运维把系统运行了几个月、甚至几年也没报bug,这就真的是没bug了?对于”没出现”和”不存在”划上等号的这种行为,我不能赞同。
  • 如果发现是自己的错误,碍于面子死不承认是不好的做法,低头认错不代表自己就技不如人。作者之所以招来众人围观,并称之为群P他,是因为他一直认为自己是对的,不仅在书中知识方面,而且在对待像Milo这样的读者方面也是正确的。二十多年经验,在业内小有名声的人,如此心胸,太让人小看了。前段时间也是偶尔拜读到他给一位年轻学生写的回信,觉得此人还行,今日此等做法,实在让人难以再重新认识他了。如果及时承认错误,或者礼貌地澄清问题,我想这种礼貌待人之事也不会引起围观和“群P”了。

好吧,因一八卦事引发如此感想,是觉得自己还有上升的空间。如果等到作者这种地步还是如此心境,那就太可惜作者今天“以身作则”了。呵呵。

年初二三事

相对于以往平静的生活,这几天倒是多了一些值得记载的事情了。

  1. 一代神机M8终究顶不住不慎泼洒的茶水,摆身变成了只能看,不能摸的花瓶。米办法,只能返厂了。
  2. 在我的游说下,部门终于舍弃了通过Excel表格提交Bug并处理的流程,转而投奔到Redmine,对于日常的开发工作而言,算是进了一步。
  3. 代码仓库从cvs迁移到svn,命令行使用cvs真是糟透了,每次cvs st的时候都要等好久,并且出现一堆无用的信息,也许是自己cvs用得不够好吧。不过cvs先天不支持changeset,很难让我对它有爱了。
  4. 2010年初,一个阳光明媚的中午,在确认一个Bug属于误报后,打了个出租车奔到延安路,到中信金通开户了。意味着我已经迈入了扑朔迷离的中国股市里,顺带还开了个创业板。当然,不仅打的可以找中信金通报销,而且还送了张面值50银民币的超市卡。
  5. 下午接到Meizu电话,说是M8已经医好,可以送回来又让我继续摸了,带着广东口音的售后温柔地向我确认邮寄地址是否正确,我激动得不停的说“色色累”。
  6. 今天下班回来,静下心来,把该给学生的拖了好久的信终于搞定了,三页纸!已经很久没用笔写过这么多字了,竟然发现写了么这多字,居然没几行是歪的了。

以下是图片时间: 继续阅读“年初二三事”

使用Google Talk Chatback

云风的blog时发现这么个玩意,挺新颖的,不仅可以显示GTalk的状态,还能直接发起对话。

想我也是个GTalk控,尽管一直都是用的皮筋儿(pidgin),从没用过官方的客户端,这还是得益于开放的协议啊,说到这里,又忍不住BS腾讯了。

Google一番,找到了这个网页,很简洁的说明,要么使用默认的样式,要么自己修改一下,点击”update badge”来生成html代码以嵌入到自己的网页上。 继续阅读“使用Google Talk Chatback”

为什么不愿意分享?

今天看到一篇文章《为什么一些聪明的人不愿意分享》,那些聪明的人是没有时间,还是自闭或是其它?文中给出的总结如下:

Smart people want to give their best and as they learn more, they learn that they need to learn a lot more before they start sharing. They learn some more and they learn they need to learn some more. What they forget is that most of the expertise that they already have is either becoming “obvious” to them or better yet, going into their “background thinking.”

Becoming obvious means that there is nothing special about it.

Becoming their background thinking means that they don’t even realize that it’s knowledge. It becomes part of them. For example think about alphabets and multiplication tables. It is in our background thinking and we don’t think about that as knowledge.

大意是,聪明的人知道的越多,便觉得他们不知道的更多。很多理所当然的事情在别人眼中可能就是相当专业的技能知识了,也许,我们觉得很正常,不需要什么能力就能掌握的字母表和九九乘法表,但对于不了解这些的人而言,确实算得上是专业技能了。

我有个附加观点:当我突然发现某种技能并且学会了它后,我在想,既然能在网上找到这么多关于这个技能的资料,那我是否还有必要来分享这个技能?如果我不能发现这个技能更特别的用法,或是独到的理解,那还有必要把我所看到的资料原封不动地拿过来分享呢?另外我死要面子的认为,这是我本应就知道的,现在才知道应该觉得更要渴求才对,怎么还好意思把路人皆知的知识拿来分享呢?

写在09年的最后1小时,希望明年能够更加开放的分享,正如Blog副标题所言:“分享收获”。

年复一年

年末了,又到了反省的时候。

09这一年算得上是折腾的一年了,从年初,到年中,然后再年末。本来08年末也没定什么新年计划,都是打算当一天和尚撞一天钟般的过日子,所以这年末了,也就不能对着计划来盘点收获了。

工作上的事情不准备在blog里反省了,那就检讨本年度的生活大事吧。不过我发现在生活上,也没什么罄竹难书的事情,挑两三件,摆一摆。 继续阅读“年复一年”