Archive for the ‘未分类’ Category

这个2010年

Monday, December 27th, 2010

这个2010年我写了3篇blog,都在年初,而且和技术关系不大,几乎停滞。其实有接近10篇草稿,没有一个满意的,没有去润色到可发布。

这一年发生了很多事,我的大部分时间都在做美团,其它可以用来做点事情的时间很少。一年前的这个时候,2009年年底,在等待饭否被关站半年依然没有消息的时候,大家在华清嘉园那间房子的会议室,讨论了打算另起炉灶,做“团购”这样一个事。后来的故事就很多了,有各种报道,后来它还成了2010年中国互联网界最热闹的事,这个模式在它在中国诞生的第一年中,创造了上亿的销售额和数十万人的就业机会。

这一年,我所在的团队,从几个人变为一百多人,因为办公室面积始终不足,搬家两次。从四个工程师变为几十个工程师,每个人所经历的时间速度,是做其它事情的几倍,屡屡有“美团已经做了两三年”这样的感觉。这一年的每一天,如果做别的事,可能是三天或者五天,所以老得也很快。对,这类似传说中李献计的时差症。就算你忽然觉得生活变的平淡,但比起做其它事,你依然经历了更多。这很神奇。

这一年,我上班的地点又回到了中关村西区,离当初刚来北京的时候很近。差不多的写字楼,差不多的格子间,差不多的工作餐地点,让我去想这几年什么变了,而什么又没变。几天前Facebook的Mark来新浪的时候,@yuancheng凑巧在咖啡馆遇到了他,有合影为证。在街旁看到签到,在饭否看到照片的时候,我激动的想立刻冲过去,我好久好久没这么激动了。

这一年,饭否在各种努力下重新开放,老用户可以从 http://fanfou.com/login 登录,新用户只有用邀请链接才能注册。饭否对我的意义,无法言语表达,我因它经历了太多的起起落落。它对我来说,并不只是事业。

这一年,我回天津做了一次校园招聘,电话和当面面试过很多人。之后又认识了很多即将毕业,充满活力和潜力的应届生同学来公司实习。我喜欢把自己知道的都告诉他们,最好让他们能跑多快就跑多快。
(more…)

linux/macOS下解压中文乱码的zip包

Sunday, December 26th, 2010

从 windows 下压缩的zip包如果文件或者目录名有中文,在典型的 linux 环境(如ubuntu)和 macOS 下按照正常zip解压都会乱码。google一下搜到的答案有两种,一种是hack一下unzip的代码重新编译,还有一种是另外写一个解压的工具代替unzip。

其实这是一个困扰了linuxer很多年的老问题了,能搜到好多人问和答,但至少在半年前(6月份)我遇到的时候,没有让我满意的简单的解决通用的方案。

当时我是,遇到产品的同事给了一个做好的交互原型,输出一个zip包,而基本上公司里其它技术都是用linux或者macOS。参考了搜到的解决方案,用 php 的 zip 扩展来解压,并转换 GBK 为 UTF-8 即可。

存到自己home目录下的bin里面, 比如放到 ~/bin/punzip,然后 chmod +x ~/bin/punzip,以后就可以比较自由的直接调用 punzip foo.zip 来解压了。

依赖了 php 的 zip 扩展,如果执行时提示“php zip extension is needed.”(比如默认macOS就没有加载zip扩展,ubuntu有),需要修改 php.ini 添加 extension=zip.so,具体按照提示中的手册页面做就好。


<?php
/**
 * 解压含有文件名为gbk编码的zip包,到当前目录
 */
if (!extension_loaded('zip')) {
    
printf("php zip extension is needed. See http://www.php.net/manual/en/zip.installation.php\n"$argv[0]);
    die;
}
if (!isset(
$argv[1])) {
    
printf("Usage: php %s filename\n\n"$argv[0]);
    die;
}
$f zip_open($argv[1]);
while (
$e zip_read($f)) {
    
$filesize zip_entry_filesize($e);
    
$filename iconv('GBK''UTF-8'zip_entry_name($e));
    if (!
$filesize) {
        
mkdir($filename); 
        continue;
    } else if (!
zip_entry_open($f$e)) {
        continue;
    }   
    
file_put_contents($filenamezip_entry_read($e$filesize));
    echo 
"$filesize\t$filename\n"
    
zip_entry_close($e);
}   
zip_close($f);


程序员的优势和劣势

Monday, February 8th, 2010

有段著名的对话:

男:我是程序员。 女:哦,程先生,你好。 男:哈,客气了,叫我序员就好。

现实中的程先生多种多样,如果不去考虑程序员、工程师、架构师等不同的title到底有什么区别,作为通过计算机语言与机器打交道的人群,至少有很多共同的特征。

程序员比其他行业有一个天然的优势,就是自己几乎可以随心所欲的创造出工具来帮助自己,从而大大提升工作效率。这一点在许多传统行业中是完全不可能的,比如:一名建筑工程师,他如果想随心所欲地马上着手创造一把符合他手头工作的锤子,则并不太容易。这种效率提升的前提,是可以将重复手动劳动的自动化。就像一个本来要挖20米深地基的工人,忽然变出10个机器人代替他挖,而他只需要在旁边小屋透过玻璃窗眯着眼睛喝咖啡一样。所以,利用好这个优势后,优秀的程序员可以将效率提升至少一个数量级。

程序员还有一个天然的优势,他的学习成本和创造成本都比较低。首先,技术水平的提升是不依赖复杂昂贵的专有设备和密集的人员的,他需要的只是电脑和网线。其次,创造成本中,除了时间之外,材料成本完全电子化,知识和创意通过代码体现在二进制中。而更不错的事情是:创造出的东西在世界范围内都是可以重用的,可以基于大量经过他人完善测试的库来避免自己的重复劳动。所以,利用好这个优势,在于勤于动手去尝试去做,整理好可以重用的通用库,然后在需要的时候毫不吝啬地将自己的想法实现。

不过,也有劣势

程序员的世界是理想化的,不存在非逻辑的干扰因素。如果已经设计出一套完美的逻辑去做一件事,无论做多少遍,也不会出现无法处理的僵局。所以程序员希望这个世界井然有序,每个实体像系统中的各个模块一样各司其职、准确而高效地交互。而现实中,绝大多数钱能解决的问题不是问题,绝大多数技术能解决的问题也不是问题。

阮一峰在翻译《More Joel on Software》时写的blog(鉴于他的blog内容太敢说真话,如果访问不了请自己想办法),也提到了原作中的一句话:

许许多多的人选择编程,首要的原因就是,他们宁愿将自己的时间花在一个公平有序的地方,一个严格的能者上庸者下的地方,一个只要你是对的就能赢得任何争论的地方。

是。有人会在旁边冷笑,并可能说出类似 “Too Simple, Sometimes Naive” 这样的江湖名句。某种意义上,我并不是个纯粹的理想主义者,但我还是有些偏执地要说:可编程的世界,就是程序员自己构架的理想国。

表演类艺术与创作类艺术

Friday, January 22nd, 2010

最近半年有些事情,让我试图去探索和理解“表演”与“创作”这两类艺术类别的共同点和差异点。

或许这对一个以用计算机语言编写程序作为职业的人来说,有些生僻。但对一个喜欢古典音乐,从5岁开始练习小提琴,业余时间参加了10年交响乐排练和演出的业余小提琴手来说,这个问题在促使我去思考学生生涯那么多 年,这门作为表演类艺术的业余爱好,到底带给了我什么,并使我擅长做什么,布擅长做什么?

于是我先考察了艺术(Art) 的具体定义。在我理解中是一个相对广义的概念,和传统意义上的美术来说,是一个更 general 的定义。参考 wikipedia上的艺术词条如下(适当翻译成简体中文习惯):

艺术是由所有具有智能思考能力的动物,以通过各种 形式及工具用以表达其情感与意识形态,所产生的形态泛称。

为了让事情明朗一些,我列举了一些我能想到的典型的艺术活 动,并试图用表达载体来分类。举一些例子:

  • 文字
    • 文学创作
    • 剧本
    • 作词
  • 声音
    • 作曲
    • 声乐
    • 器乐演奏
  • 图像
    • 摄影
    • 绘画
    • 平面设计
  • 物体
    • 时装
    • 雕塑、雕刻
    • 建筑
    • 室内装潢
  • 影像
    • 动画制作
    • 电影导演
    • 电影演员
  • 舞台
    • 舞蹈
    • 相声
    • 戏剧
    • 指挥

看完之后,我发现大部分的艺术活动,都是和“创作”紧密相关的。而只有少数是和“表演”紧密相关的,比如:

  • 声乐
  • 舞蹈
  • 相声
  • 戏剧
  • 指挥
  • 电影演员
  • 器乐演奏

我将他们分为表演类的标准是,通常这类活动有一个范本,有类似观众一样的表演受众。表演者在尊重范本的基础上,融合自己的理解产生某种艺术感染力, 通过再现范本来表达给受众。比如:

  • 一位小提琴演奏家需要理解某部作品中作曲家的意思,按照乐谱演奏作品。
  • 电影演员需要读懂剧本,扮演一个虚拟的角色。

再看看创作类的艺术活动。我理解为:在遵循一些公认创作原则的基础上,从无到有地表达创作者希望传达地内容,并无范本可以参照。通俗的说,我觉得这类艺术需要一种 sense,需要一种没有其他参照的巧妙的表达。比如:

  • 王小波写一部小说
  • 贝多芬写一首钢琴奏鸣曲
  • 凡高画一幅抽象画
  • 乔布斯和他的团队带给大家 iPhone 出色的工业设计和用户界面设计

好吧,现在我的问题是:

  • 一个从事表演类艺术的人,转而从事另一种表演类艺术时,是否更加容易?
  • 而如果转而从事另一种创作类艺术时,是否变的困难?
  • 或者本身如此分类和思考就不合适?

思考这个问题的同时,我也对在比较 general 层次上艺术与设计的区别,也产生了兴趣。有机会可以继续写一写。

为wikipedia捐助

Monday, December 28th, 2009

Wikimedia Foundation Logo踩着2009年的尾巴,跑到wikipedia的捐助页面,用信用卡刷了$20。这个想法由来已久,几个月前注意到开始这个捐助项目时,这个总金额750万美元的项目募集了不到三分之一,当时就动了捐助的念头。最近看到时已经到660万美元了,在这个不是太顺利的一年快要走完的时候,我希望完成这个心愿。

说到捐助的原因,其实很直接。维基百科是让我觉得对我帮助最大的几个网站之一。基于非盈利非商业的前提下,维持服务器、机房等费用的来源只有捐助。所以捐助一笔也是我应该做的回报方式。同时,维基百科在促进全世界信息知识的流通和共享方面发挥了不可替代的作用,而促进信息的流动分享,也是我一直以来的理想。

这个链接是维基百科创始人关于捐助的公开信。如果平日因为维基百科而受益,并且有意贡献,或者只是对这个事情感兴趣,请猛击:
http://wikimediafoundation.org/wiki/Appeal2/zh-hant

捐助的支付方面,可以用信用卡 或者 Paypal。国内普通的双币信用卡,支付美元即可(我没有试过支付港币),我用的招行的。

ps. 支付的时候有一个页面可能是因为墙或者碰巧其他什么网络故障,结果页访问不到。于是我再提交了一次,最终捐助了两份$20(这倒不是个杯具)。大家捐助时遇到结果页无法访问的话,可以先等一等信用卡支付成功的短信,我这里大概延迟几分钟收到。

linode的VPS主机

Saturday, September 5th, 2009

这个blog是架在 VPS(wiki)主机商 linode.com那里的。

VPS基于虚拟机,相当于提供了完整的root ssh访问权限,和操作一台普通的Linux服务器没有区别,适合和我一样愿意折腾的同学们。

当初购买价格是360MB内存,$19.99/month。和朋友一起买的,一个人买有点贵。初步使用感觉主要还是内存有些不够用,尤其是平时用主流Web Server习惯了,很少考虑内存问题。但实际观察了一下,一个apache进程启动后占5MB,一旦有一次访问,加载了mod_php之后就跳到二三十MB。apache自己prefork几个进程,就吃掉一大块内存。至于硬盘和流量,暂时还不是瓶颈。

目前有口碑的两家VPS主机商是 linode.comslicehost.com,当时买的时候比较了一下,slicehost单价更贵,于是选了linode。

这是一个技术blog

Saturday, September 5th, 2009

从06年工作之后,就基本暂停了技术blog的写作,更多的是忙于工作上的事。写这个blog是希望积累知识,也是督促自己整理。

主题范围主要是LAMP平台下的各种后端技术(性能、架构、存储等)。