qyb的博客

2008/2009

关于 2008
年度电影:《WALL-E》
年度书目:《激荡三十年》
年度服饰:nike golf
年度纨绔:Mazda 6
年度个人用品:手表
最开心的事情:就不说了,我自个一个人美吧

最黑暗的事情:和2007年一样 :(

期望 2009
1. 家人健康
2. 达达能很快适应小学生活
3. 还是要多读书
4. 坚持学琴

5. 老板和HR大发善心,增加Headcount

一年前写的我的2007,和期望2008

Topic: 生活

《激荡三十年》读后笔记

“改革开放的历史,就是我这一辈子的历史”——相信和我同年纪的人有这样类似想法的不在少数。所以拿到这么一本讲述30年改革开放历史的书,就不忍释手一口气把《激荡三十年》看完了。

1. 改革开放30年,就是计划经济(管制)和国有资本不断被证明效率低下的30年

2. 于是很诧异为什么郎咸平对国退民进那么敏感。于是去google郎咸平的根底,发现原来他是财务方面的学者,研究公司治理的,不是所谓的"经济学家"。把财务等同于经济,可见大陆传媒素质之低下。郎咸平其人,也就教教 MBA 的水平,现在完全是在走穴。

3. 国有资本在竞争中已经只剩下资本密集型的垄断大国企了,从历史规律来看,它不敌民营和外资是必然的事,就是不知道最后会让给谁。最近民营好像很困难,加上这个State素有的“宁赠友邦”的思维,让人很担心啊。不管政治怎么改革,哪派精英上台,我觉得这一关都很难过。

Topic: 社会

network 还是 networking

"network 还是 networking", 大家应该都是从麦田老师那里看来的。但什么是 network, 什么是 networking, 估计大部分人只是对这两个单词是朦朦胧胧有感觉,却难以用熟悉的母语表述。麦田老师在某次访谈中也仅仅简单的汉化为"网络化还是正在网络"——老实说,这样的翻译更容易让人摸不着头脑。

直到今天,听说 linux 2.6.28 发布的消息,于是习惯的去看Kernel Newbies 的更新描述,不经意的发现 kernel development 里对 network 和 networking 的区分

  • Networking
    1. tcp: Port redirection support for TCP
    2. ipv4: Implement IP_TRANSPARENT socket option
    3. ...
  • Network
    1. e1000e: add support for 82567LM-3 and 82567LF-3 (ICH10D) parts...
    2. libertas_tf: New driver supporting "Marvell 8xxx Libertas WLAN driver support with thin firmware"...
    3. ...
  • 从这个角度看 Network 和 Networking 该怎么翻译就呼之欲出了:"网络还是互联"?

    Topic: 商业 技术

    电影里的三句半

    CCTV 我最喜欢的栏目就是《第十放映室》,周末看它介绍"香港喜剧电影",里面放了一段《92黑玫瑰对黑玫瑰》,当时笑笑就过去了,但今早醒来的时候居然第一时间心里头就响起了里面的一段音乐。

    我很郁闷,为什么这段音乐能绕梁三日,睡觉还能念念不忘呢?于是想了半天,听出来这是恰恰恰的节奏,再想了半天,靠,原来这里梁家辉两人表演的是一段三句半——这两天琢磨搜狐年会三句半的台词有走火入魔之势,连看的一段八竿子都打不着的电视节目也能入梦。

    从第8分钟开始看

    嵌入视频看不了的去:http://www.tudou.com/programs/view/Xke1As34cLQ/

    kaopubility

    从别人那里看到一个"水木靠谱男女鉴定委员会"给靠谱男女下的定义(针对网络交友):

  • 知道自己是什么,拥有什么
  • 知道自己想要什么
  • 知道需要付出什么才能得到自己想要的东西
  • 知道自己能不能付出那样的代价
  • 有信用守时,对家庭对社会保持自己的一份义务与职责
  • 这个定义很赞啊,实际上招聘员工也不过就这个标准了,把家庭二字换成企业就可以

    sohu 邮件支持 Gears 做附件断点上传了

    附件断点上次这个需求很早就提出了,但我一直不觉得我们邮件中心来做一个浏览器插件有什么可持续性,因此没有多想。直到 gears 0.4 发布前夕,看到了它的 feature list,包括了 blob upload 的功能,这才决定利用这个特性来实现断点上载。

    除了技术外,还有一个商业上的考虑就是在 sohu 的产品里,去引用一个来自 google 的服务是否好呢?我的意见是完全没有问题,我并不觉得这样会伤害我们自己的品牌或者商誉,反而是有助于传播我们开放的形象。当然,慎重起见,我也和KCN交换了这个观点,他并不反对我这么做。

    从产品的角度,我们并没有在免费邮箱里面去提示用户安装Gears——毕竟现在只支持10M附件,在这个容量级别,需要断点上载的必要性并不大,因此也没有必要在这里干扰用户——只不过是如果你浏览器有Gears支持的话,我们自动利用Gears的特性上载。在有更大附件服务的 VIP 邮箱,以及未来的网络U盘产品,是会鼓励用户安装Gears的。

    我想未来我们可能会更多的利用来自 google,或者其它厂商的网络API,来完善我们的邮件系统。当然,我们也会逐步开放自己的 API,以及一部分代码滴。

    Topic: 商业 技术

    Browser War 之搜狗浏览器

    很久很久以前,我就听说 sogou 有一个秘密的桌面产品项目,具体是什么不得而知,我自己简单推理了一下:

  • sogou 肯定做的是中国网民最常用的软件,以期获得最大用户覆盖
  • 这类软件按覆盖程度排列:浏览器、下载工具、Media Player、杀毒/安全工具、词典。
  • 浏览器肯定不是,竞争品牌太多,整个市场份额也不大——大部分用户还是用原装 IE
  • 那下面应该是下载工具了...
  • 结果前天传来的消息把我震惊鸟,搜狗居然真的是在做浏览器

    然后赶快去找搜狗的同事,要了个内部版试用。第一印象是 IE 内核,界面类似 Maxthon。用了一圈下来,没有感觉和以前用 Maxthon 有太大区别。当然,那个消息里提到的教育网免费访问国外是一个 killer app;另外,这个浏览器是我见过首个在右上角搜索框整合搜狗搜索的浏览器,从这个角度看,该浏览器对搜狗搜索引擎意义巨大。

    昨天中午吃饭的时候碰到小川,打听了一下他的真实想法,现在关于这个决策我大概能理解个7,8分了:

  • 浏览器是最重要的网络入口
  • 现有的产品远远不能满足用户访问网络资源的需求——离InternetOS的角度还差的很远
  • 微软在网络产品方面太弱,以至于可以忽略原装IE的市场统治力——所以市场是很大的
  • 最后一个原因,搜狗搜索的整合
  • 小川自认有七成胜算,我本来是有些怀疑的,但现在再想,他已经是破釜沉舟,从这个心态和气势上看,很可以加几分期望值。

    Topic: 商业

    iconv(3)

    iconv 可能是我遇过的最让人困惑的C标准库函数了——因为它竟然一次性的返回 5 个值,如果算上全局变量 errno 的话,那就是 6 个(如果你知道还有哪个 libc 函数能超过它的,请告诉我)。而作为调用者,必须对返回的 6 个值逐一检查,然后,OMG,可能还需要再调用 iconv 继续转码...如此反复。

    所以每当我需要在 C 里面 iconv 一个字符串的话,我会去找 php 4.x 的源代码(现在最新应该是 4.4.9),从 ext/iconv/iconv.c 里面 Copy&Paste 一段代码,再自己简单包装一下使用。

    在上周我帮一个程序员提供这个函数包装的时候,我不禁开始思考怎么会有一个如此违背 UNIX 设计哲学的函数存在,后来想到两种可能。一个是字符编码转换这件事情,本来就是一个不那么 UNIX 的操作,再牛的天才,也只能如此设计接口;另一个可能是这个函数完全是 UNIX 商业化过程中为了向非 ANSI 字符语种国家推广,而由一个标准化委员会搞出来的怪物。

    如果对 iconv 使用的复杂程度还没有一个感性认识的话,从 PHP 搞来的这段东西会帮助理解这一点:

    1. /*
    2. --------------------------------------------------------------------
    3.                   The PHP License, version 3.01
    4. Copyright (c) 1999 - 2008 The PHP Group. All rights reserved.
    5. --------------------------------------------------------------------
    6.  
    7.      "This product includes PHP software, freely available from
    8.      <<a href="http://www.php.net/software/>".
    9. */
    10. #include">http://www.php.net/software/>".
    11. */
    12. #include</a> <stdlib.h>
    13. #include <string.h>
    14. #include <iconv.h>
    15. #include <errno.h>
    16.  
    17. //from PHP 4.4.9 ext/iconv/iconv.c
    18. //为了便于在 blog 上表现,把返回简化成 3, 2, 1, 0, -1, -2, -3
    19. //返回值非零表示转码失败,其中大于零则说明返回的 out 不需要 free
    20. //这段代码只在 Linux 下测试
    21. int _iconv_string(const char *in_p, size_t in_len, char **out, size_t *out_len, const char *in_charset, const char *out_charset)
    22. {
    23.     iconv_t cd;
    24.     size_t in_left, out_size, out_left;
    25.     char *out_p, *out_buf, *tmp_buf;
    26.     size_t bsz, result = 0;
    27.     int retval = 0;
    28.  
    29.     cd = iconv_open(out_charset, in_charset);
    30.     if (cd == (iconv_t)(-1)) {
    31.         if (errno == EINVAL) {
    32.             return 1; // WRONG_CHARSET
    33.         } else {
    34.             return 2;
    35.         }
    36.     }
    37.  
    38.     in_left= in_len;
    39.     out_left = in_len + 32; /* Avoid realloc() most cases */
    40.     out_size = 0;
    41.     bsz = out_left;
    42.     out_buf = (char *)malloc(bsz+1);
    43.     out_p = out_buf;
    44.  
    45.     while (in_left > 0) {
    46.         result = iconv(cd, (char **) &in_p, &in_left, (char **) &out_p, &out_left);
    47.         out_size = bsz - out_left;
    48.         if (result == (size_t)(-1)) {
    49.             if (errno == E2BIG && in_left > 0) {
    50.                 /* converted string is longer than out buffer */
    51.                 bsz += in_len;
    52.                 tmp_buf = (char*)realloc(out_buf, bsz+1);
    53.                 if (tmp_buf != NULL) {
    54.                     out_p = out_buf = tmp_buf;
    55.                     out_p += out_size;
    56.                     out_left = bsz - out_size;
    57.                     continue;
    58.                 }
    59.             }
    60.         }
    61.         break;
    62.     }
    63.     if (result != (size_t)(-1)) {
    64.         /* flush the shift-out sequences */
    65.         for (;;) {
    66.             result = iconv(cd, NULL, NULL, (char **) &out_p, &out_left);
    67.             out_size = bsz - out_left;
    68.             if (result != (size_t)(-1)) {
    69.                 break;
    70.             }
    71.             if (errno == E2BIG) {
    72.                 bsz += 16;
    73.                 tmp_buf = (char *)realloc(out_buf, bsz);
    74.                 if (tmp_buf == NULL) {
    75.                     break;
    76.                 }
    77.                 out_p = out_buf = tmp_buf;
    78.                 out_p += out_size;
    79.                 out_left = bsz - out_size;
    80.             } else {
    81.                 break;
    82.             }
    83.         }
    84.     }
    85.     iconv_close(cd);
    86.     if (result == (size_t)(-1)) {
    87.         switch (errno) {
    88.             case EINVAL:
    89.                 retval = -1;
    90.                 break;
    91.             case EILSEQ:
    92.                 retval = -2;
    93.                 break;
    94.             case E2BIG:
    95.                 retval = -3;
    96.                 break;
    97.             default:
    98.                 free(out_buf);
    99.                 return 3;
    100.         }
    101.     }
    102.     *out_p = '\0';
    103.     *out = out_buf;
    104.     *out_len = out_size;
    105.     return retval;
    106. }
    107.  
    108. //qyb wrap _iconv_string
    109. //由调用者负责 free 返回值
    110. char *iconv_string(const char *string, const char *in_charset, const char *out_charset)
    111. {
    112.     char *result;
    113.     int retval;
    114.     size_t in_len, out_len;
    115.     in_len = strlen(string);
    116.     retval = _iconv_string(string, in_len, &result, &out_len, in_charset, out_charset);
    117.     if (retval > 0) {
    118.         return NULL;
    119.     }
    120.     return result;
    121. }
    Topic: 技术

    去铁道博物馆和电影博物馆的行车路线

    查看大图

    今天去了一趟铁道博物馆和电影博物馆,自驾主要是去铁道博物馆的路不好找。我去的时候是走北四环,然后霄云桥下上芳园西路,酒仙桥路,酒仙桥北路,然后受纸质地图的错误影响,拐到了彩虹路上——其实只要一直沿酒仙桥北路走过了五环就是了——还好从彩虹路一路往东北方向只有一条道,然后上了南皋路,某路口再误打误撞的向南拐,开到一个丁字口的时候停车四处张望,居然就是正确的路口。

    这两个博物馆靠的挺近的,适合一天的游玩。免费停车,中午可在电影博物馆里的食堂解决午饭。

    铁道博物馆适合小孩玩,和蒸汽机车头合影留念;电影博物馆适合大人,而且理所当然的配置了一个电影院。都值得一去

    注意:必须从上图的左下角那个点标示的路口进铁道博物馆,然后向东北方向的蓝线是行车路线;另外一条蓝线则是今天从霄云桥过去绕的大弯。据我从卫星地图上观察,走五环是不太可能绕到南皋路上的,还是从四环过去,走酒仙桥北路或机场高速辅路才靠谱

    Topic: 生活

    最近看吴晓波和张维迎的文章

    吴晓波是我所知不多的中国商业/企管作家,最近他的新文章首富与二富的劫难,将日照钢铁和4年前的铁本对比,让人嗟叹。

    最近几个月网上一直热议杨佳,陇南。。。直到现在还有人在打口水仗。其实我觉得民营资本和国家权力的博弈更能影响我们社会的走向,应该更多关注。

    还有就是张维迎,那个被网民骂烂了的人,在 FTChinese 上的文章我看中国改革30年。也可以看到很多政治事件和经济改革关联的地方,比如"...1988年春...邓小平同志...下决心搞“价格闯关”...同年8月份中旬,中央政治局开会讨论通过了《关于价格工资改革的初步方案》,并要求军队和警察做好准备...",真是环环相扣。他在文章里对未来三十年的预测也很有意思:"政治体制改革也可以分成两个15年。第一个15年,主要任务是建立相对独立的司法制度,减少政府部门的权力......第二个15年主要是要建立民主选举制度....."

    貌似比他"左"很多的郎咸平可从来不说这么激进的话,呵呵

    Topic: 社会
    订阅 RSS - qyb的博客