Archive for December, 2008
December 17th, 2008 by 张磊
最近在思考相似度推荐的算法,想过不少主意,但觉得最省事的莫过于用Lucene或Sphinx之类的全文检索软件,把每个个体的tag信息放在索引中,用的时候直接去查。搜索引擎可以搞定计算TF/IDF、计算相关性之类的脏活儿,直接返回相关的内容,可谓省时省力。
不过还是我忍不住自己想了一下,感觉也还算简单,今天写一些自己的心得,算是抛一块砖头。相似度计算可以用余弦定理来算。简单来说,我们可以为一个个体找到一组描述其特征的值,比如描述苹果、梨、香蕉,可能有:
苹果: 球形 甜味 红色 多汁
梨: 球形 甜味 黄色 多汁
香蕉: 长形 甜味 黄色
把这些特征编个号,排一下,就可以把这些特征数字化了:
苹果: 1, 2, 3 , 4
梨: 1, 2, 5 , 4
香蕉:6 , 2 , 5
可以把上面每个看做是一个描述该个体特征的向量,这里有6个特征,于是向量是六维的:
苹果: [ 1, 1, 1, 1, 0, 0]
梨: [ 1 , 1, 0, 1, 1, 0 ]
香蕉:[0 , 1 , 0 , 0, 1 , 1]
通过余弦定理计算两两夹角(余弦定理还记得吧,cosA = 向量内积/向量模的积):
cos (苹果^梨) = 3/4 = 0.75
cos(梨^香蕉) = 2/(2*1.732) = 0.577
cos(苹果^香蕉) = 1/(2*1.732) = 0.289
两个向量夹角越小,说明二者相似程度越高。相应地,cos的值就越大。所以在这个简单的计算中,苹果和梨的相似程度要大于梨和香蕉,梨和香蕉的相似程度要大于苹果和香蕉。
举这样的例子其实不太适合,因为对于这些有明显特征的东西如苹果、梨,有更好的计算办法。但如果换成是一个blog上的文章,采用tag来提取特征向量方式会非常合适。同时这个例子中并没有加入对于词频的分析,也就是说对每个特征,给的权重都是一样的,实际上不该如此。
要计算词频并与权重相关联,就需要祭出TF/IDF算法,吴军写过一个详细的介绍。某一个特征的权重=ln(D/Dw),其中D是个体总数,Dw是这个特征在总数中出现的次数。
回到刚才的例子,6个特征的权重分别是:
球形: ln(3/2) = 0.405
甜味: ln(3/3) = 0
红色: ln(3/1) = 1.099
多汁: ln(3/2) = 0.405
黄色: ln(3/2) = 0.405
长形: ln(3/1) = 1.099
计算权重之后,相应特征向量为:
苹果: [ 0.405, 0, 1.099, 0.405, 0, 0]
梨: [0.405 ,0 , 0 , 0.405 , 0.405, 0 ]
香蕉:[0 , 0 , 0 , 0, 0.405 , 1.099]
再求夹角:
cos (苹果^梨) = 0.377
cos(梨^香蕉) = 0.200
cos(苹果^香蕉) = 0
可能你对苹果和香蕉相关度变成0觉得很难理解,他俩明明都有“甜味”啊。但别忘了,所有的样本都是有“甜味”的水果,所以在这种情况下,有“甜味”已经不是需要考虑的特征了。
写到后来计算对数累死了,以后这种活儿,还是该直接交给搜索引擎去干。当然,我们得明白其中的道理,这样才能更好地控制它。
今天又仔细看了看Google吴军的几篇文章(1 2 3),深入浅出的讲解,举重若轻的功力,实在令人佩服啊。
December 16th, 2008 by 张磊
老白参观了卓越亚马逊的北京仓库,对卓越不乏溢美之辞。像我这样连洗衣粉都想从网上买的人,自然也没少用卓越网。我对卓越网的配送速度很满意,一般发货之后一天就能拿到手,当然,这得益于他们在苏州有仓库,而我在杭州。
从今年5月以后我就没再从当当网买过东西,因为大部分时候,当当网能找到的,在卓越网肯定也能找到。直到最近要买一本李战的《悟透javascript》和一套《金庸小说全集(口袋版)》,没来由地想起要去当当试试。
于是我在卓越买了《悟透javascript》;两天后,在当当买了《金庸小说全集》,结果两家在同一天发货,我在同一天收到。当时心想,再牛的仓库,也不过如此。
不管仓库那头有多现代化的设备多完善的管理,在商品到送达顾客的环节上,卓越和当当在同一个地方,用的几乎都是同一家公司(比如在杭州,用的就是特能)。两家也都在全国各地分布了多个仓库,减少大多数商品出库时间的同时也增加了一小撮商品的调货时间。在这次比较中,卓越亚马逊甚至比当当慢了两天,其实就是经过调货的问题。
红孩子敢于组织成百上千的人专门做配送,但我觉得卓越没勇气再折腾个自己的物流公司出来,所以最后这一公里,很长时间内还会握在别人的手里——当当也一样。不过,如果你观察卓越亚马逊足够仔细,会发现他确实从亚马逊总部那边汲取了不少营养。在卓越,每一件商品出售以后都有办法查到用户是怎么下订单的,比如,是搜索来的,还是从banner广告过来的。仅仅是这一点,就让我觉得卓越那边的数据分析团队,要比当当更有料。
这正是:仓库超一流有个啥用,还不是穿着雨衣洗澡。
December 15th, 2008 by 张磊
今天到阿里妈妈后台,发现11月的收入已经到账,令人哭笑不得的是,一共不到43元的收入,阿里妈妈扣掉了13元的“技术服务费”。看看下面这张图:

预期收入42.39,扣除技术服务费12.98,扣费的比例大于30%,真够夸张的。虽然只是十来块钱,但我还是很不爽。首先阿里妈妈提高技术服务费用,没有任何形式的通知(至少我没看到);其次,30%的比例,真把网站主当成肥羊啦?一些网站联盟偷偷摸摸扣量也罢了,阿里妈妈这种行为,就是明火执仗地抢劫。
给淘宝的50亿难道砸到空气里了?今晚决定,撤掉所有阿里妈妈的广告;看我这篇blog的朋友们可以去看看收入明细,如果也是扣了这么多,不如不放他家的广告吧。
December 14th, 2008 by 张磊
去B2B那次,遇到了一个刚通过AIESEC的项目去印度交流归来的同学,我们是很好的朋友,所以到外面边走边聊。之前她是个不那么自信的女生,但这次见面发现改变了很多。哪怕是坐在椅子上,腰也是直挺挺地;在表达自己的想法时,更敢说也更有底气。
她也和我说起在印度的经历,眉飞色舞:在那个叫做孟买(没错,就是前几天发生恐怖袭击的那个)的城市,住的是总统套房;实习的公司在销售手机,实力雄厚;还有许多大场面,比如几十个人围坐一桌之类的。对这些经历我一点不感兴趣,但我很欣慰的是,原来这些经历也能改变一个原本不自信的人。
前几天看了Y和在Reader推荐的一篇文章,非常赞同作者的观点。我有时极端地认为,一些不自信或者恐惧,其实源自未知。所以经历的事情越多,人就越能从容,从这个角度看,出国转转,真的挺好。
身边不乏跑出国外读书的朋友,每次回学校和朋友们聊起来,都能听说有人去北美有人去欧洲.拿到奖学金欣喜挖到了资本主义的墙角,拿不到的也乐意出去镀金反正迟早都能把本赚回来。
大一那年我放弃了一次去瑞典的机会,那时一开始申请很积极,到了正式操办的阶段,突然就开始害怕。到底还是太年轻(那时我还不到18岁),最后和辅导员老师打电话说我不去了。今年才想起来,于是去申请了护照。对我来说,其实在哪都一样,每天可以写blog,有时间做点自己的事情,挺好;如果不能这样,那就挺糟糕。
alone同学正为德国留学大业奔忙,祝好运。
December 14th, 2008 by 张磊
这是今天第二个话题广告,关于面向学生的贷款:istudentloan.com。
我很佩服国外这群成天折腾debt, loan以及credit的人们,几乎能想到的都被他们做了,这不,又把手伸到了学生这里。istudentloan.com提供的是Private Student Loans,可以为学生提供每学年最多4万刀的loan,用以购买图书、电脑等等各种开销。
这个业务让我想起了国内的助学贷款。我周围确实有那样一些同学,家里非常困难。而国内的大学教育,收钱不是一般地厉害(其实小学中学也很厉害,不过都不敢放上台面),银行乐了,插一脚进来放贷。我周围有一些毕业出来的同事,每个月还得用工资去还大学里面的贷款。但我也明白,如果没有这些贷款,他们甚至都不能完成学业。
据我所知,国外的情况比国内好多了。一个是很少有真正供不起孩子读书的家庭,再者国外的孩子们大多自理能力不错,也不愿意靠家里。还有一些国家的大学,基本上不用花钱(没学费,爽)。从这个角度来看,这样的Private Student Loans还是挺难拓展业务的,要不,来中国试试?
December 14th, 2008 by 张磊
又是周末,又是话题广告时间。好在我已经在feed里面去掉了这个分类,所以订阅我feed的同学们该不会被骚扰。
今天写的是一个为信用状况不佳的人们提供贷款的网站,名字叫做Bad Credit Loan Shop,当然,它的业务是面向国外的。国外在信用体系方面比国内完善得多,所以如果一个人信用状况比较差,就很容易在贷款的时候碰钉子。通过这家Bad Credit Loan Shop,即使信用状况不好,也可以得到一些loan,也许对一些人确实有帮助。
但我的感觉,这样的业务必然伴随着更高的收费,所以不到万不得已,还是不要用。信用这个东西真的需要非常之小心,不管是国外还是国内。最好不要把它弄糟,不然只会让财务状况越来越糟糕。我有3张信用卡,每个月的最后还款日之前我都一定会把钱还掉。在用了两年多以后,招商银行给我寄来了信用证明(当然,现在应该还用不到)。
保持良好信用,最重要的是不要无节制地超前消费。如果下个月能收入8000,那用信用卡买一个笔记本没什么问题;如果只能赚2000,还是多攒几个月的人民币吧。
PS:这家网站做得很差,天知道是不是骗人的。
December 13th, 2008 by 张磊
这招相信很多朋友都看到过,但我之前没试成功,后来仔细找了下才看出端倪。有了Dreamhost做代理服务器,基本上畅通无阻,而且DH的代理,比起它的web服务器来,要快得多。我用代理以后,甚至都感觉不到速度慢了下来。
先去下载一个plink,然后在命令行输入:
plink username@xxx.dreamhost.com -D 8000
其实就和连ssh差不多,不过多了一个-D参数,后面的端口号就是一个在本地监听的端口。命令运行后会让你输入密码,之后就可以登入,代理服务器已经可用。
以firefox为例,这时从菜单栏依次选工具->选项->高级,之后选择“网络”标签页,会有一处“配置firefox如何连接至因特网”。点配置,在弹出的对话框中只填入Socks主机代理地址(localhost,端口8000):

点确定。试着访问一些页面,你应该已经位于加州了
。firefox还有一些方便设置代理的插件,可以去找一下。
翻墙的办法很多,但防火墙本身不是为能翻墙的人设的。成天看一些不该看到的东西,一不小心就变成了不明真相的一小撮。
December 12th, 2008 by 张磊
Hmm,抄袭了张宴的blog标题。
最近在一个项目里,改造支付宝信任商家的评价系统,比如这个介绍绿森数码的页面。接手以后看了看之前的代码,页面上n+1的查询就不说了,还有些过滤不严格的漏洞(黑盒肯定很难测出来的)。其实这个信任商家的频道在支付宝首页已经找不到入口,取而代之的是一个挂着软文(大家看看这个软文的地址,不知道的人还以为是高中生做的网站呢)的“信任宝地”,我并不觉得,把这个改造一下,有多大意义。
当我还在BuyRen论坛的时候,曾自己设计开发过一个“店评”系统。无非就是让会员给网店打打分,然后把评价给展示出来。没想到我到了支付宝,也要把这件事做一次,以前用php,现在用java。明年Q1可以预计地还要做一个专门用来购物返现的东西,这也是当年buyren的拳头产品,我像是在回忆未来。
怎么做着做着就回到两年前了,我自己也想不明白。在msn上和智勇聊最近的工作,更不可救药地想起了大学早年;也听说当年的愤青馒头同学,如今已经在做产品了。
December 10th, 2008 by 张磊
各位,已经快要2009年了。我的同学中间,很多人都拿到Offer,更多人挤破脑袋考研。可我,一不考研,二没Offer。HR在一个多月以前找我谈Offer的事,蜻蜓点水之后就没啥消息了。
或许真的不该抱怨,但既然有blog,还是该写写。
谈offer期间我在公司实习,曾希望离开A部门到B部门。A部门领导和B部门领导打过招呼,希望B的领导关注一下我并给个回复,没想到B领导谎称和我聊过但我还需要多学习锻炼,不露声色地把我打回去了。我苦等多日无果,只得找到hr说还是到A部门吧,谁曾想又袅无音信。火起。C部门一私交不错的主管,愿意接收我这个没地方要的本科毕业生,我下定决心找到老板说这件事,后找到A领导那里,居然无意中撞破了B领导的敷衍。B领导承诺近期找我谈一次,到这份上,我还能抱什么希望?
在将来几天里被B领导咔嚓掉我不会感到意外,这么一折腾C部门估计也悬了。A部门?如果我心甘情愿留在A部门,还费这么多周折干啥。辗转反侧想了两个晚上的决定,被一个意料之外的结果,砸得支离破碎。
总之,工作这件事,在今天晚上,被我弄糟了;但我不可能没止境地等着hr来联系我来眷顾我,施舍一个A部门的offer。我只能这样。虽然变成这样,但还是要感谢我现在的老板以及A领导的关心,从心里感谢。我也并不怪B领导,他很有可能是太忙或者忘了。
什么金融危机啊抱团过冬啊,家人也说先找个工作要紧,但我还是那个主意,找到目标更要紧。冬天再冷,我也不怕。
对了,我的基础很好,功底扎实,对互联网很感兴趣,有创业激情也有经验,更重要的是还没工作;我的邮箱和个人简介可以在about页面找到。
December 9th, 2008 by 张磊
读XXX后有感,这样的标题最有可能是一个小学生的(半)命题作文。但最近我读了《Java语言学校的危险性》一文,颇多感触,却又不知道用什么做标题来写。非常建议大家有机会好好读读这篇文章。
总的来说,这篇文章里的观点是:现在的大学里大多用java去教授计算机类课程,而java这个极易掌握的语言,让毕业生们很难有扎实的编程技巧,一些基本的东西被忽略了。下面这段话的最后一句,很有味道:
除了上面那些直接就能想到的重要性,指针和递归的真正价值,在于那种你在学习它们的过程中,所得到的思维深度,以及你因为害怕在这些课程中被淘汰,所产生 的心理抗压能力,它们都是在建造大型系统的过程中必不可少的。指针和递归要求一定水平的推理能力、抽象思考能力,以及最重要的,在若干个不同的抽象层次 上,同时审视同一个问题的能力。因此,是否真正理解指针和递归,与是否是一个优秀程序员直接相关。
我在高中就开始倒腾visual basic,相信很多人都是从basic这个简单的语言开始的。那时的我觉得事件驱动的东西真有意思,不过我一直到上大学,也只会做一个点按钮改变文本的windows程序。很庆幸我的大学没有从java或者c#这样容易的语言开始,而是c语言和delphi。我到现在也没有弄清楚c++中一些高级的面向对象特性(也没有机会再弄清楚),但c语言的基础是扎实的。在我看来,c一门可以直接操作内存的语言,它没有一大堆封装好的字符串操作函数,但是在c语言中,你可以清楚地知道一个字符串在内存里如何存放,它的开头是什么,末尾是什么;同样地,你可以用指针来操作这个你知悉的内存,虽然指针很难用好。
我在大一和大二的时候,参加了学校的ACM集训队,做了很多题目,也参加了省里的比赛。比起那些算法出色的大牛我自叹不如,基本上每次参加比赛,我拿到的都是二等奖,不管一等奖是3个还是12个。但我觉得参与到集训队最大的收获是在C语言方面的积累和进步,这让我一直都受益匪浅。
11月TIOBE编程语言流行度的排行,看这个排行榜,我算了一下,在不到4年的大学生活里,排在前10的语言中,我有9样都学过用过。还有一个好消息:那个我没用过的perl就快跌出前10,而第11是我非常喜爱的ruby。其实,如果能做得好,只要一门语言做好就够了;更不客气地说,语言只是个表达思想的工具,如果你自认思想足够牛X且出众,拿纸笔来表达也完全可以。但实际上,在有了C语言的基础,特别是再掌握了基本的数据结构和常用算法以后(比如链表的实现、栈和队列、hash、排序以及图和树的算法),学习一门新的语言,代价很低。如今那些流行的语言,都带了那些数据结构和算法,这样做的好处是无需重复发明轮子;坏处是:可能你不会知道,它到底是怎么工作的。
在不久前一篇对比几家银行信用卡的文章中,我曾抱怨中国银行没办法像招行那样轻轻松松自动购汇还款,必须填张单子,带着证件,购汇——哪怕你只花了0.1美金。我现在依然会抱怨但我觉得这件事让我明白了购汇还款背后的流程,也明白之前我被招行的优质服务惯坏了。如果我一直都是排队购汇,直到有一天用了招行的自动购汇,我肯定会明白,这背后是如何操作。这样的情景也可以类比到c和java,以及其他的例子。
我在使用rails框架做自己的东西,我喜欢这个框架。但我不建议没有过web开发经验的人一开始就倒腾rails,因为它强大到封装了一切,让人看不清背后的原理。如果你还不了解常用的HTTP状态代码(比如301?),还不那么明白请求和应答是如何完成的,最好抛开别的框架用php搭一个网站自己玩玩。
返回开头,读了那篇《Java语言学校的危险性》,终于印证了我这样一个观点:如果学一样东西的时候,觉得很难继续深入,不妨走走“回头路”,看看它本来是什么。从这个角度说,程序设计方面的思路来自于人的逻辑,而看我这篇blog的弟兄们,和我,都来自于大猩猩。
BTW:前些日子大辉赞不绝口的《深入理解计算机系统》,是一本从计算机底层原理讲起的书,非常值得一读。可惜如今小贵。
引用图片来自webdesign.org