周五下班实在无聊,在地铁上拿手机UC上网,发现导航里有彩票一项,于是想去买个足彩。迄今为止我就在结婚领证的时候在双榆树民政局门口买过一次足彩,没中。

然后打开发现是500wan.com的页面,我耐着心去注册新用户,却发现我的id已经被用了!居然还有人跟我用同一个id?于是我去试了一下用自己的密码登陆……哈,居然登陆成功,原来是我自己以前注册的……一点印象都没有了。

更幸运的是,我发现我的账号里居然还有2元现金?我觉得这不太可能是我充的值,有可能是网站附送的……于是不用白不用,速度拿这白送的2元买了一张1077期的任选9场足球胜负彩。我把不太确定的场次都忽略了,所以一个复选都没有,就投一注,刚好2元,最低限额,呵呵。

当我提交结果时,我觉得我选择的胜负结果都太正常了,所以没想到奖金居然能有这么高,120元的奖金,相当于60倍的回报率,muwahaha~

 500w

今天打开网站一看已经派奖了。某同学昨天很速度很素质地说了一句见面分一半,我当时没觉得能中奖……现在后悔了……

PS:今天去年度体检,检出一堆问题,啥心律不齐,脂肪肝啥啥啥的,这算是一点安慰么…

循着发到俺gmail邮箱的邀请信点过去,发现tutorial的网页和手册都非常精美,有点让我觉得它不像开源,不像beta版,于是突然有了点学习的冲动。虽然很不想弃我现在的Symbian而去,但是大家都知道它没有明天了……

app_inventor

问题是要不要重拾越来越乱的Java呢?各位Javaer们,现在还有所谓的“官方”JDK么?

或者应该先问一个问题:要不要先去买个android手机呢?再次呼唤各位回答我:800元以下的山寨安卓机出了么?出了么?么么么么……

Attack Me August 31st, 2010

闲来无事看了一些关于GIS信息的网页,在mygeolocation.com找到了自己的ip对应的地理信息,于是把它作为meta加入了blog的源码,如下:

<meta name="geo.placename" content="Beijing, China" />
<meta name="geo.position" content="39.904667;116.408198" />
<meta name="geo.region" content="CN-Beijing" />
<meta name="ICBM" content="39.904667, 116.408198" />

最后一个值其实不太明白是啥意思,结果一wiki,发现是Intercontinental ballistic missile的意思...

也就是说它除了能让自己的网页对搜索引擎更友好一些意外,还可以让米国的洲际导弹来精准轰炸这个blog咯?

还有一个好玩的地方就是,在添加了这些meta信息之后,你可以去http://geourl.org/添加自己的blog,这样你的blog就能在地图上显示了,还能发现你附近有哪些blog...虽然是很穷极无聊的功能,但是在LBS这么流行的今天,总算是潮了一回。

哪里买? August 11th, 2010

这个世界有时候就是这样,时不时给你颠覆的机会。例如我本来以为有了淘宝京东,我们的物质生活已经极大丰富了,但是后来才发现,有些时候我们还是会问:哪里买?

例如我最近分析了一下自己减肥失败的原因,主要是慢跑计划无法坚持,然后就在某些专门的慢跑社区里查阅了一下相关资料,最后总结起来,觉得自己还缺一些东西:

  1. 减轻膝盖压力的加压护膝。
  2. 可以绑在身上不会晃动的手机零钱钥匙包。
  3. 可以在路上听歌或者广播的设备。

就这样三个需求,我却在网上选购的过程中遇到了不少问题。

首先,护膝是很好找的,但当我在淘宝上一搜“护膝”时,成千上万条各式产品涌向了我的浏览器。可以说,在淘宝这样的大而全的地方,细分产品的专业分类手段的缺失使得新手在选择商品时几乎一定会迷失在产品目录中。为什么我在选择电子产品的时候会更愿意去京东,最重要的是他们家提供按照产品重要规格参数和功能项筛选的产品目录。如果我做了一个月以上的调研,例如像我之前买护踝一样,当然可以在淘宝的搜索框里直接输入“McDavid 433R”,然后开始比价比信誉。但是当用户连买什么都不知道的时候,网店的一切信誉指标都是无用的,要把不同产品的指标一项项对比,有时候还得主动去联系商家问规格参数,这其中又会磨灭多少没耐性的人消费冲动呢?

护膝其实有很多种,防磕碰的,保暖的,避震的,最后发现,其实我需要的是“髌骨加压带”以缓解运动时地面对我半月板的冲击力。所以说很多时候,购物的时候我们还是需要花时间,而时间就是金钱,常说现在互联网没有机会的人,是不是可以靠帮一般消费者省点时间来赚点钱呢?

然后的一个大问题是包,与上面类似。但是更大的问题是我都不知道如何用可索引的名词来描述我的需求。我的意思是我想要买一个“适合跑步时贴身携带的,小而轻且不会晃动的小包,能放下手机,钱包和钥匙就行,要是能再装个mp3播放器之类的就最好了,当然,希望样子也紧凑一点,酷一点”。遗憾的是,这种描述性的需求是无法让淘宝给我回答的。去社区里问?一是反馈太慢,二是广告太多。在淘宝上换了好几个类别,搜了几个关键字,给我的都是大背包。最后通过google,才辗转从某社区知道那个东西叫“臂带”,于是用上专业名词在淘宝里搜,结果果然就给力了。

最后感叹一下,在苹果唱绝对主角的情况下,想要选一款非苹果的运动mp3还真是不容易。

不爱苹果一是觉得俗,二是觉得他们家的产品为了易用牺牲了过多的灵活性,感觉只适合憨憨傻傻的美国人(典型的例子就是导歌曲只能通过iTunes同步)。三是觉得虽然苹果可以很便携,但毕竟不是运动款。我巴不得能没有耳机线才好,甚至是那种头戴式的一体设计。遗憾的是,这样的产品要么不支持FM收音机,要么就很山寨。结果好不容易找到了一款看上去还行的Sony的Sports Walkman NW-S205F,结果人家还不卖了……虽然骚尼家的产品以其各种诡异的质量问题曾经伤透了我的心,但是还是抵挡不住他们家无敌的设计感啊。现在电子产品市场,在设计方面能跟苹果抗衡甚至要优于苹果的,也就他们家了吧。然后又在京东上找了一个功能齐全但是设计木讷的替代品,居然也还得预定,这到底是物质极大丰富了么,老师们?

就买个跑步装备就费了这么半天劲,一想到家里还在装修,好不容易才定好了家具,到时候买各种家电,那调研和比价的工作量,一想到就头痛啊……

准备开始运动减肥计划了,工欲善其事,必先利其器,置器需经费,肉痛促坚持!

很久以来,都感觉自己实在是太局限了,每天闲得无聊了,就上Google Reader和人人网,上Google reader主要是为了读新闻,上人人网主要是为了看八卦,同时瞅一眼各式各样的分享。

但是渐渐地,人人上的各种八卦都被我在上下班的时候看完了,上reader也只是读些愤青文,自己订阅的东西更新太快看不完,自己follow的人又太同质化,看了一个人的分享,其他人的分享基本上也看完了……看来这两个应用终还是经不起我这个时时刻刻在线的人折腾。于是觉得自己挺空虚的,天天泡在网上,居然就看两个网站!

于是某次在reader里偶然发现了StumbleUpon,文章里说它是北美超过digg的内容聚合类网站,我居然以前都没听说过。登上去看看,然后下载了一个firefox插件,发现这个玩意儿太好玩了。简直是杀时间的高手!

就好像在没有特别想看的电视节目时,你可以通过不断换台来消磨时间。只要无聊了,点一下浏览器工具栏上的“Stumble!”,他就给你带来一个你从没见过的网站(据说StumbleUpon会记录用户行为,绝不推荐给你你看过的网站),当然,推荐给你的网站是根据你的口味来的,在注册账号时,它会要求你勾选自己的兴趣点,然后对于每一个推荐给你的网站,你还可以投票,喜欢或不喜欢,也会影响未来的推荐。

同时,它让我找到了听电台的感觉,我不止一次表达过自己喜欢听电台音乐广播胜过MP3的想法,唯一的原因就是惊喜的可能性和发现的乐趣。用了一整天的StumbleUpon,才发现原来世界上有这么多形形色色奇奇特特有意思的网站,例如某个自命不凡的黑客的博客,某个列举20年来最有意思电影的网站,某个帮你测试网站浏览器兼容性,并把六十多个浏览器的显示结果截屏给你看的网站,还有各式各样的的图片和视频。

当然,对于天朝网民,还有一个玩法就是悲剧程度测试:把language设为英语,不停地点击"Stumble!",看看他推荐给你的网站有多大比例是访问不了的……总之我安装了StumbleUpon之后,他推荐给我的第一个网站是Youtube,第二个是Twitter...

回到StumbleUpon本身,看上去和它最相近的就是Google的手气不错,输入一个关键词,直接把你带到一个网站。但是它比Google手气不错有两点好:

  1. 他不用你输入关键字,你只要初始设定自己的偏好的大类就行,随后它会在你使用过程中不断学习你的偏好
  2. 它的推荐是个性化的。

说到底,StumbleUpon就是一个相关推荐系统+投票系统,但是人家做得很好的是有很方便的浏览器插件,还支持快捷键,对于因为有鼠标手导致只想用键盘的我来说,简直是太方便了。

当然,国内曾经有一个模仿者——趣摘,只是在我知道它之前,他就已经挂了。

围观Rakudo Star Perl6 August 2nd, 2010

Perl6在跳票十年之后,提前发布了……呃,因为还没到圣诞节呢……

Rakudo Star其实也不算是正式的perl6发布版本,只能算是Perl6的一个候选实现,因为还有一个pugs在哪里吭哧吭哧呢。但是出于好奇,还是去载了个windows版的来看看。 perl6

据perlchina google group上众人反应,这个perl6速度堪忧,我也看出来了,就一个perl6.exe -v就得反应个好几秒。

perl6 new animal

早就知道perl6基本上不是perl了,连吉祥物都变了,相比于花蝴蝶,其实我还是更喜欢骆驼一点……据说用蝴蝶作吉祥物是为了提醒开发者要不断创新,这个是文化差异么……

上述截图来源是perl6自带的手册,里面问:为什么perl6跟perl5不是一个语言还要叫perl呢?答曰:我们继承perl的理念……

不过比较开心的是,perl6终于支持交互式命令行了,这样对新手熟悉语法就很有帮助了。以前虽然可以用oneliner,但是总觉得还是不太方便,这下好了。

perl6 interactive console

又去编译了一下Unix版本的,发现lib文件夹里出现了几种新的文件后缀名——.pbc,.pasm,.pir。然后google了一下,在这里找到了答案:

There are three forms of input that Parrot can work with directly:

Parrot Assembly Language (PASM), which is a low-level human readable assembly language for the virtual machine,

Parrot Intermediate Representation (PIR) which is a syntactic overlay on PASM with nicer syntax for some expressions,

and Parrot Bytecode (PBC) which is a compiled binary input format. PIR and PASM are converted to PBC during normal execution. Only PBC can be executed by Parrot directly. The compilation stage to convert PIR or PASM to PBC takes some time, and can be done separately. We'll be talking about these processes a little later.

这大概也就是为啥有人抱怨Rakudo Perl6 跑得慢吧……按理说,编译成pbc之后执行应该会比直接执行pl脚本快点,可为啥perl6.exe -v也这么慢?然后我又跑了个oneliner hello world,俺的机器也不算老爷了,但还是得等个几秒钟才能有结果,看看CPU曲线,这效率确实有些堪忧啊。

cpu usage

呵呵,面向普通用户的产品就是好,随便在线测试……

google-test-ad

顺便唠叨一句,本blog征集友情链接,现在能访问这个blog的都是熟人,有兴趣的贴自己的链接吧~

想到手机里的音乐很久没有更新了,于是想去下载一点歌。现在自然是不用百度mp3搜索了。打开酷我,听着那首喜欢就右键点击下载,然后酷我让我选下到哪里,在硬盘里找了半天,猛然发现自己的电脑里已经没有一个名为mp3的文件夹了!
曾几何时,四处从高校ftp和bt站里下载mp3是我的爱好。新的,老的,歌曲,音乐……为此我甚至研究过一段音乐分类方法和对应的文件夹组织结构。今天,我的电脑里居然已经没有mp3这么一个文件夹了,而我直到今天才不经意发现。
仔细想想,生活方式在变化,听歌的时间更多的变成了在路上而不是在电脑前,有广播的时候都听广播去了。即使在电脑前,有了酷我(以及其他的音乐盒网络应用),自己已经根本不会再去想着下载专辑了。随意搜索一下,点击播放就行。
突然在想,这会不会是唱片工业的一个阴谋,用方便的网络音乐应用养懒了所有人,然后突然发起法律攻势,直到在线盗版音乐服务商都退却,而这时已经没有人记得怎么下载mp3了,唯一可指望的就只有水果店的iTunes了?
恩,我确定我是晚餐吃太多然后想太多了……

偶然在perlmonks的google group里面发现这篇文章:

Authoring A CPAN Module

其实这里面写的东西都可以用一句话搞定,例如我为了不去记忆参数就弄了个脚本:

 

#!/bin/sh
h2xs -AX --use-new-tests -n $1

不过里面的内容可以说是解释了一下一个CPAN模块包的基本结构,让人在用和写的时候都能更明白。可以说有时候太自动化了不是好事,所以把这个记在这里。

 

之所以我还在用h2xs主要是因为自己没有稳定的私有的Linux环境可用,所以只能用随perl附带的老工具了……

Tags: cpan perl

Posted in | Edit | Comments(0)»

前几天有博文视点的编辑让我帮忙给某牛人写的一本新书的样章提提意见。看了大纲和样章,又去作者的blog看了看。在膜拜大牛的同时又不觉有些感慨。“果然还是学生啊”,我想。

然后我又转念一想:我居然会这样想!

一直以来我都以出国读书,做学术为目标,现在看着这些东西,就好像看着以前的我自己。回顾这工作的一年里,感觉自己确实学到了不少东西,又或者说并不是学到了什么,而是印证了一些早就知道的东西。前天7月13号是我刚好入职一年的日子,之前写了一长篇不怎么淡定的工作体会,但是却没有冷静地总结和记录一下这一年的收获。趁着世界杯结束,工作也稍微闲下来一点,总结一下吧。

而总结下来其实很简单:精确,精益求精,时刻准备好迎接挑战。

做事要精确。用数据说话,这是很多公司都会教给你的东西。人在一起工作,不像在学校里搞科研,自己一个人凭着猜想搞,直到最后要发表点什么了,才想起来做个实验跑点数据出来补在paper的末尾。而在国内,这些数据有时候都是伪造的。但工作不同,工作中免不了合作,虽说是共同利益,但也免不了会有意见不统一的时候,而这个时候就需要说服别人。如何说服别人是一门艺术,但我想首先引用一段《软件随想录》里面我很认同的话:

老实说,只要有两个以上的人待在一起,就会有政治。这很自然。我说"不搞政治"的真正的意思是"不搞恶性的政治"。程序员早就练出了对公正有非常良好的判断力。代码要么能运行,要么不能。坐在那里争论代码是否有问题,这是毫无意义的,因为你可以运行代码,答案自然就有了。代码的世界是非常公正的,也是非常严格有序的。许许多多的人选择编程,首要的原因就是,他们宁愿将自己的时间花在一个公平有序的地方,一个严格的能者上庸者下的地方,一个只要你是对的就能赢得任何争论的地方。


在程序员的世界里,说服别人最有力的办法就是使用数据。

而当初的我是不知道的。记得某一次跟PM讨论一个产品特性的时候,我向他表达了我对于该特性将使得用户的浏览器cookie体积变大的担忧。“我能理解……”但他接着问:“你能知道cookie会变得有多大么?”我顿时语塞,坑坑巴巴在纸上算了半天,然后跟人解释,结果最后的结论是:这事没有那么严重。

是的,表示自己知道这件事很容易,但如何评估他的影响,如何精确地做出权衡之后的选择却不是很容易。也可能是我读书时学校里的老师都太好糊弄了吧,虽然知道这个道理,但却一直没怎么实践过。自此之后,我才慢慢地就培养起了一种习惯。凡事先拿出数据,讨论之前就想想别人可能问什么问题。就好像备战一样,只有准备充分,你才能得到自己想要的东西。又或者说:在你拥有足够说服人的数据之前,不要开口

做事要精益求精。这一年里,我受到的最深刻的打击就是:原来我在学生阶段什么挑战都没有遇到过。

一个东西,光做出来只能叫实验品,做好了才能叫做产品。为什么有的软件免费都没有人用,而有的软件可以卖钱,抛开商业模式不谈,区别基本上都在于质量。在学校里做的事情,往往只要求能运行,能展示,对于稳定性,可扩展性都没有要求,遇到实现不了的东西完全可以绕过,反正最后要的不过是论文上的一小段描述性文字和几行数据而已。但产品不一样,光做出来不行,还得够稳定,能扩展,还有那些你能提出一万条反对意见但是就是绕不开的客户需求,而挑战就在这里。

在学生时代,我也是个代码爱好者,可我的大多数代码都是一次性代码。一方面是因为自己写的程序既没有前期需求文档也没有后期的QA,写到哪里算哪里;另一方面,当时确实是有太多的时间可供挥霍。例如我在本科和研究生时期就分别拿perl写了两套不同的在线足球经理游戏,而这些代码现在看来,说好听了就是玩具,说难听了就是垃圾……

有时候盯着自己写的自认为完美的代码看是很无聊且很让人昏昏欲睡的,直到QA报告说程序在测试中崩溃了或者结果完全不对了,你才能打起精神来一行行地检查,最终发现原因是一个粗心的错误或是一个未处理的分支。这个时侯你才恍然大悟,仿佛眼前的代码立即变得漏洞百出,一伸手就能自己又揪出好几个bug,拍着脑袋说:唉,怎么能犯这种错误。

现代计算机的运算能力已经让重编译和执行变得简单,编译器或解释器的排查功能也非常的智能化,所以比起曾经在纸上写程序的前人们,我们不自觉地就会粗心很多,而这样其实是有问题的。如果一个产品需要通过不断地在运行中发现问题然后修改,那么损失的不仅仅是时间,还有别人对你的信心。就好像某水果公司,可能就缺乏一个足够精益求精的设计设和一个足够负责任的QA,否则怎么能新产品刚开始卖就发现手机信号会被手掌屏蔽这样的笑话级bug。

要时刻准备好挑战。计算机互联网行业其实是一个很不稳定的行业,在100次请求每秒的情况下工作得很好的服务器可能在1000次请求每秒的时候就挂掉了,现在看来完全合理的逻辑可能三个月后就变成了bug。同时,一串看起来跟你不怎么相关的邮件讨论,可能几天后就变成了一个指派给你的产品需求。所以说有些时候我们说关注big picture并不是说让你一个小工去帮头头们想事,而是为每一个有可能需要你面对的新的挑战做好准备。

有闲时看看也许跟你的任务不相关的内容,尽量搞清楚每一封发给你的邮件说了回什么事。只有这样你才能慢慢地了解你所在的这个经济实体的运行状况与盈利模式,从而明白自己做些什么以及怎么做才能为公司同时也为自己创造最大的价值。

===============下面是扯淡的分割线=======================

说完做事,说说自己生活上的一些改变。

最大的改变就是球踢得少了。公司倒是组织了不少活动,羽毛球,瑜伽班……但是必然都是那种对人数和场地要求都不那么严格的活动。别说足球,可能就连篮球赛都组织不起来了。我曾经在午餐的时候跟老板开玩笑说,咱们公司成功做大的标志,就是咱公司内部能组织起一支足球队。这件事情可能大公司好点吧,但是确实是所有人在工作之后就不再有那种不管日暴雨淋都能拉一帮人去踢大场的动力和激情了,这可以说是我工作之后最大的遗憾,也是最舍不得学校的地方。

钱挣得有过去的十倍多,但是却没有那种什么都不缺的感觉了。在学校的时候感觉自己除了钱,什么都不缺,工作之后就会感觉自己什么都缺,包括钱……

突然发现自己的时间少了,也许占用自己时间的不仅仅是工作,还有上下班的路程。但总之就是你没有时间发呆,没有时间灌水,甚至都没有时间学你很有兴趣的新技术了,这是一个很可怕的事情。

于是做计划变得很重要,如果每次你闲下来都要先花半小时想清楚下面干什么,那你基本上不可能完成任何事情。这个时候,你就需要把大的计划划分成小小的片段,每次做一点点,然后还要有办法不断地提醒自己去做。最简单的方法莫过于贴在电脑上的便签条了。

当然也有一些我觉得不错的应用和工具可以推荐。最近试用了了一下Gmail的task list功能,从用户体验来说,觉得非常合适,一条条编写自己想要做的事情,一回车就新开一条,其实有时候日程不是那么重要,要的就是有东西能时时提醒你得做点什么。很惊异自己为什么没有早点发现它。以前还曾经用google doc来记录自己的读书列表,现在直接也用它了。比起桌面的便签应用,他可以让我在多个地方同时使用,而比起其他的网络应用,它就在我查email的页面里面,又方便得多。

还有一个值得推荐应用就是ReadItLater。这个应用说来功能特别简单,就跟它的名称一样,让你read it later。因为每天我都要从rss reader或者别人的分享里阅读很多东西,有些技术资料或者有意思的东西来不及读完,或者需要较长的时间消化就可以把它加入到ReadItLater的list里,这样我在上班的时候发现有意思的东西都可以记下来,下班了或者是闲了的时候,直接打开这个list就能找到感兴趣的东西来读。读完之后打个勾它就从list里面消失了,以后还能在已读存档里面找到,非常的方便。这样也算是对自己的阅读时间做了一个动态的规划,使得我不必因为害怕以后找不到了就在每次偶然发现什么好东西时都停下来当时消化,极大程度地保证了自己工作的连续性和计划性,同时也省下了无聊时四处瞎转悠找资料看的时间。

这个应用有Firefox插件,安装之后在你访问google reader时还能直接在每个feed条目上生成一个小箭头图标,让你一键保存到read it later list里面去。另外还有Iphone,Android,Blackberry,Palm等平台的移动应用,可以让你随时随地阅读。(Symbian S60V3用户再次怨念地飘过……)

好吧,好像就这么多了。发现自己代码写多了,码字的时候也有了是不是回去校对修改的习惯,但往往把字句都改得不通顺了,可能学理科太多年了,那种写流畅文章的本事已经不复存在了吧。