邓世龙的自留地

兼济天下则达 独善其身则穷

月度归档: 2014年3月

仅以此文祝福老妈以及奋斗在沙县小吃一线的妇女们


晚上呆在家里无聊,似乎应该做些什么。想到千里之外的老妈还在小吃店里忙活,心里不禁有些伤心,想打个电话去问候她,可不知怎么把那几个字说出口,于是只好写成文字。

老妈已经从事小吃行业有17年之久,在这17年里,她可以说是受尽了困难,尤其是在深圳那几年。那时,老妈身犯重病,胆结石一直困扰着她,即便是如此,她还是要在小吃店里帮忙,因为小吃店里只有她和老爸,找不到帮手。常常要白天干活,晚上就要去医院打点滴,可以说与死亡是擦肩而过。而那时,我还在都初三,享受着父母从深圳挣来的血汗钱,并且还不知道老妈病的如此严重。

也许是老妈命硬,后来竟好了起来,并一直健康的活着。到了杭州后,店里的生意还可以,而店里很早就有小学生来光顾,所以要起的很早,这也导致了老妈每天的工作时间极长。有一个暑假,老爸生病在家,为了缓解老妈的负担,我也顶替上去。也正是这一个月,我才真正体会到老妈的辛苦。

从早上5:30起床,老妈就得忙个不停,早上6:30到7点时,有一群人会来吃拌面和馄饨,而这时老妈就会忙的连馄饨都来不及包,此时如果我去晚了,老妈忙的几乎会哭出来了。就这样一直到9点,等其他两个人起床之后,老妈才有得休息,吃上一顿早餐。之后就要做饭,卤鸡腿,鸭腿,包饺子,而这些老妈都要参与,等到中午忙完之后,其他两人又要去睡觉了。而店里就只剩我和老妈,这时老妈又要做炖汤,炸大排,有人来吃时,就要做给他吃,因为我不会做。傍晚有人来吃时,如果那两人还没起床,老妈有得忙的焦头烂额,因为我不会做,只会收碗筷,收钱,洗碗。晚上8:00吃过饭后,有时炖汤没有了,老妈又得做炖汤,做好之后再去睡觉。一般9:00去房间,9:30就要睡觉了,要不然明天起不来。为了缓解老妈的负担,后来我学会做了一些东西,也算减轻了她的负担。

有好几次,炸大排时,厨房里特别热,我和老妈都中暑了,然而即便是这样,老妈还是不能休息。有时有空,我就会和老妈说,没必要那么多事都她做,她不做自然会有其他人顶上,但老妈说我爸和弟弟都没有那份心来做好店里的事,所以很多事都得她身体力行,还好她现在还做得动。也是在这时,我才认真看看老妈。岁月已经在她的脸上留下了痕迹,白发也出现了几根,而老妈的肚子周边也是赘肉横生,身体严重变形,然而生活还得继续。去年去店里走了一趟,老妈的腰也不行了,连蹲下都有困难。

想想其它小吃店里的情况,大部分情况下也是妇女们是店里的顶梁柱。因为妇女们心无旁骛,一心只为了小吃店,为了这个家,即便是那特殊的几天,妇女们也是必须照常工作。而男人们总会有各种娱乐,玩游戏,看电影,所以他们无法全身心的投入这里。曾到过堂姐的店里,店里几乎是堂姐一个人在做;听过堂哥的小吃店,也是由嫂子撑起来。放眼望去,全国那么多小吃店,大部分也是由妇女们撑着。这群妇女们一年四季不停的在干活,极少逛街买衣服和买化妆品,因为时间不允许,而逛街买衣服和化妆几乎是女人的权利。而为了生活,她们不得不放弃自己的权利。她们从早忙到晚,无规律的饮食与作息,使得身体严重的变形,细腰不再,而是赘肉横生,粗壮的大腿。

为了生活,她们牺牲的实在太多了,而这些男人们还不懂得珍惜。每年春节回家,男人们就会聚众赌博,而且赌注不小,有些人几乎会输光一年所挣的血汗钱。妇女们说他们几句,他们反而顶嘴相撞,有时还会使用暴力,而这时妇女们也毫无他法,只好来年继续做。有时我心里还想,真希望有天沙县小吃会改变,变得不再那么辛苦,这样这群妇女们就没有必要再这样牺牲自己。庆幸的是,希望还是有的,一种新的沙县小吃经营模式已经在北京、天津等地诞生,正在等待这股新模式能够吹遍全国。

此时此刻,能做的是,祝福这群奋斗在一线的妇女们,希望你们身体健康,尤其祝福我那亲爱的老妈,多谢你这么多年的付出。

青菜面--我的最爱


我也不知道什么原因,青菜面就成了我的最爱。也许因为它最容易做,只要将面条丢到滚烫的锅里,放好调料,也就是盐水和味精,煮上一会儿,将青菜丢入,之后将面和青菜一起捞起来即可。所以煮青菜面的过程即为简单,而面本身也即为简单,一青二白,青菜,白面,白汤。

也可能是受兰州拉面的影响。记得第一次吃兰州拉面,是第一次去大学时。那时老爸和我一起去扬州,在一户人家里住下。第二天早上吃的早餐就是兰州拉面。第一次吃的时候,看着师傅在那里拉面条,很细,很奇怪,面吃起来还有些生。印象很深的是,这碗面也是一青二白,青香菜,白面,白汤。之后印象比较深的一次是来广州时,坐了二十几个小时的火车,饥肠辘辘的,在大学城南区的一家拉面馆里,点了碗拉面,一样是一青二白,吃过之后,立马恢复了生气。现在想来沙县人的确是好吃的,即便是兰州拉面这样的竞争对手,假使它做的好吃,也会去光顾。

然而,兰州拉面和青菜面还有一定不同,那就是醋的使用。在兰州拉面中加醋,总有些奇怪,因为面本身已经加了拉面所特有的调料,加醋之后,无法体会到醋的香气。而青菜面则不然,青菜面本身近乎无味,加醋之后,可以闻到醋香,尤其是等到面条吃完之后,面汤中的醋香特别诱人。这里重要的一点是醋的选择,因为不同的醋有不同的风味。沙县夏茂盛产米酒,而米酒变酸后,就变成了米醋,所以沙县人一般喜欢在面条中加米醋,也因为米醋中还残留这一丝米酒的味道。在全国各地,最常见的还是陈醋。陈醋与米醋不同,但也绝不逊色。最不应该加的就是白醋,食之无味。

可笑的是,即使是一碗简单的青菜面,也并不是每家沙县小吃店都能做好,即便是这家店的主人是纯正的沙县人。尤其到了广州之后,竟然发现,这里的青菜面加了酱油。加了酱油之后,青菜面就不再是一青二白了,而且也不宜加醋,因为酱油的味道足以概过醋的味道,没有醋的香味。可是有些时候为了方便,想吃上一碗青菜面,而这时我也会观察这碗面的成色,实在难以入口,不吃也罢。

归结起来,喜欢上青菜面还是因为它的简单,一青二白,以及它与醋的极佳结合。另外,要知道醋可养胃。

吐槽小米,魅族和腾讯


因为买手机被偷,所以买了新手机,而这个过程中,也让我见识到了许多奇葩的事情,这样一想,反而庆幸自己被偷手机,要不然也不能见识这么奇葩的事。

先是小米。小米被称为国内最具互联网基因的手机厂商,可是其手机预约网站之烂,令人发指。在提示预约需要手机绑定后,我就用手机去绑定,之后输验证码,可是竟然没有绑定成功。在之后我要点预约时,总提示要绑定手机号码,于是我再次输入自己的手机号码,却提示手机已经被绑定,这是为何。在退出登录后,重新用邮箱登录,一次显示是没有绑定手机号,我觉得有蹊跷,于是退出。重新登录后,又显示已经绑定手机号。这时我去手机购买预约,依然提示请绑定手机号。于是我关掉了网站。

之后是魅族。放弃小米之后将目标转向了魅族,因为有两个前端同事用的是魅族,相信他们的眼光。购买过程容易很多,很快手机就到了。可是送来的手机是联通合约版,而我预订的是标准版,也就是非合约版。打给客服询问后,客服还理直气壮地说,我们都是刷如果买的是支持联通3G的,都是刷联通合约版,如果想要标准版,就得自己刷系统。我靠,什么情况,我花了钱就买会这样的服务,岂有此理。罢了。

之后是腾讯。安装好系统,想取回之前备份在QQ同步助手的手机号码,吃惊的是只取回两个,而我备份了170个号码。我以为我取回的有问题,再次取回依然如此。我靠,这是什么同步助手。因为之前面试时,腾讯的面试官给我的印象还是很不错的,都充满技术人员的那种气场。没有想到的是,大腾讯竟然会开发出这样的同步助手,真是出乎意料,于是将同步助手卸载,顺便将手机管家也卸了。

老妈曾叫我买个苹果的,可是我那爱国之心一直在劝我,还是买国产手机吧,支持国产。因为用惯了华为,于是买魅族,没有想到魅族也是这样的服务,真是令人失望。我想,这些手机厂商还是只停留在卖硬件的阶段,还是只停留在认为国人都只注重手机性能,而不注重售后服务的阶段。可事实上并非如此,谁都想买个性能飞快,而且售后服务很好的手机。而且如果国产手机确实做的很好,国人也就没有必要再买苹果和三星的手机的,只是现在国产手机还是不够争气。

追踪scws的分词错误问题


分词在搜索引擎当中是极为基础,分词的准确度,对于搜索结果影响很大。可是要写一个分词程序并没有那么容易,一般都是用开源的分词工具,公司使用的分词工具是SCWS。年前,我还不知道这个分词工具是存在一些问题的,直到组长回家之后,产品那边的同事和我说了分词存在问题后,我才注意到这个问题。

例如它会将”情歌接龙大串烧“分成“情歌/n 接/v 龙大/nz 串烧/v“,将”武松杀嫂雕塑是艺术“分成”武松杀/nr 嫂/ng 雕塑/n 是/v 艺术/n“。可是将这两个例子放在命令行中,用scws的命令行工具去分词时,得到的结果竟然是正确的,即它会分成“情歌/n 接龙/n 大/a 串烧/v”,“武松/nr 杀/v 嫂/ng 雕塑/n 是/v 艺术/n”。

刚开始我是一头雾水,根本不知道在哪里错了,比较了之后,才发现在命令行工具中,没有启用rules.ini这个规则表,而在程序中则启用了。于是去查看rules.ini的内容,查看之后,我发现其中只有词性语法规则表对这个分词结果有影响,也就是将v(1) + n = 5这条规则注释掉之后,“情歌接龙大串烧”这个句子分正确了。可是对于“武松杀嫂雕塑是艺术?"这一句,无论怎么修改,都没有办法解决,那么这样只有去修改scws的源码了。

曾一度想放弃修改源码,可是问题无法解决,于是只好去修改它,所幸的是,其关键部分都在scws.c这个文件中,总共也才1000多行,所以还是有希望解决这个问题。对程序所用到的数据结构有所了解后,跟着分词的步骤 一步一步走,有疑问的地方就printf。终于发现问题的症结。问题出在scws.c的885行这里。因为”武“是一个姓,所以它可以做为前缀,而一个姓氏的后面,一般可以跟一到两个字,于是它将"武松杀”合并成一个名字,于是我在885行后面加了个规则判断,如果“武”出现在一个词语的开头,就不用使用前缀规则,修改如下:

if (r1->attr[0] == 'n' && r1->attr[1] == 'r') {//这个是一个姓
    if (wmap[i][i]->flag == SCWS_ZFLAG_WHEAD)//是词的开头,跳过
        continue;

最终解决了这个问题。这里刚开始没考虑周全,后来又出现姓氏在词语中就会出现类似的问题,于是进行了如下修改:

if (r1->attr[0] == 'n' && r1->attr[1] == 'r') {//这个是一个姓
    if (wmap[i][i]->flag == SCWS_ZFLAG_WHEAD || wmap[i][i]->flag == SCWS_ZFLAG_WPART)//是一个词的一部分,跳过
        continue;

}

之后不久产品那边又反应了一个问题。“如果有一张纸写着自己的死亡日期”分成了“如果/c 有/v 一/m 张纸写/nr 着/v 自己/r 的/uj 死亡/v 日期/n",有了上次的修改经验,一看就知道是类似的问题,于是在同样的地方进行了修改,修改如下:

if(r1->attr[0] == 'n'&& r1->attr[1] == 'r' ) { //这个字是个姓氏
    if (wmap[i][i]->flag & SCWS_ZFLAG_WHEAD || wmap[i][i]->flag & SCWS_ZFLAG_WPART) //是一个词的一部分,跳过

        continue;
    if (i > 0) {
        rule_item_t r2 = scws_rule_get(s->r, txt + zmap[i - 1].start, zmap[i - 1].end - zmap[i - 1].start);
        if (r2 != NULL && r2->attr[0] == 'm') //前面是一个量词,跳过
            continue;
    }
}

最终也解决了这个问题。 之后又有一个问题。“一天都坐在办公室”分成了“一 /m 天都 /ns 坐在 /v 办公室 /n”,这里我无能为力了,只好将“天都"从词典中删去。

之后又有一个问题,而这次我无法解决了。”求陈明真的个人介绍“分成了”求 /v 陈明 /nr 真的 /d 个人 /n 介绍 /v“。因为分词的过程中,它会将“陈明真的"这个四个字利用词性语法规则,再加上每个词的权重进行分词,而单从这个四个字来看,“陈明 + 真的"胜出。

在我看了代码后,渐渐理解scws的运作机理,它先将句子中的每个字拿到词典里查询,看看是词的头部还是部分,之后在用一些前缀规则和后缀规则进行处理,之后在用词性语法规则进行分词。而词性语法规则对结果的影响非常明显,修改其中的一些规则,可以令分词错误的句子最后分对了,而同时确又将另一个句子分错了,这注定是一个无底洞,而我不想陷在这里。

这也再一步证明了基于规则的分词方法的缺陷。可是要自己去写一个基于统计的分词方法又不简单,所以还是先用着吧。

我的一点跑步经历


历经四年的努力,嗯,嗯,我俨然已经从一个跑步菜鸟变成了中级跑步者,所以可以写写自己的跑步经验了。喜欢上跑步,也许是因为那个陌生的年轻人,他一语惊醒梦中人一般地告诉我,我是难得一见的跑步高手。此后,为了证明他说的是正确的,我开始了自己的跑步生涯。

刚开始跑步时,是绕着操场跑。因为是刚开始练习跑步,所以不能图快,而是要求慢,因为慢即使快。从5圈,也就是2000米开始,每天都去跑,每个星期后就增加两圈,跑了一个多月后,就已经达到4000米的水平了。到了这个水平后,呼吸就非常畅快了,而这时发觉,周边的跑步的人已经不是和我同一个水平了。更吃惊的发现是,在参加其它体育项目时,显得得心应手,这是因为,在绝大多数项目中,耐力,速度,力量都是基础。在跑步之余,还有必要做力量训练,这样肌肉才会得到合理的锻练,也发现,跑完步做力量训练效果非常好,肌肉很快即会有型了。

到达4000米后,我就转向了跑大学城的内环。一方面,操场跑步人太多了,另一方面,操场跑逐渐显得单调了。内环的距离也就是4300米,所以跑下来毫无压力。几次跑步后,我就形成了这样的跑步计划。先到操场,跑1000米,热身,做准备活动,之后再去跑内环。这里需要说的一点是,在长距离跑步之前,一定要做准备活动,否则会受伤,这是有血的教训。就这样跑了两个多月后,已经可以绕内环两圈了。之后我就更加大胆了,也报名了2011年的扬州半程马拉松。

2011年1月份,在经历了几天的寒冷后,天气才适合跑步。于是穿上衣服往外跑,这天没有热身。在跑完两圈后,心血来潮,决定再跑一圈。而这一圈,就像最后一根稻草,对我的右脚造成了损害。跑完后,第一天还没觉得有不对劲的地方,第二天就不行,右脚掌疼的不行,连走路都很困难。我以为休息几天就没事了,没有想到,3个星期了都还在疼。于是经常泡脚,因为不知从哪里看到,泡脚对双脚很有好处。就这样泡着,泡着,脚真的好了,于是我养成了泡脚的习惯。

半程马拉松是跑不成了,于是计划2012年的扬州半程马拉松。按照同样的计划,不再那么突进,顺利完成了12年的扬州半程马拉松。再之后,由于找工作,毕业这些事,没有办法按计划跑步了,直到参加工作后,这个就不详细说了。

也许在很多人眼中,跑步是最枯燥、无味的运动,而我曾经也是其中的一员。直到自己经历了马拉松的洗礼后,我才发现,跑步是最好的体育运动了。如果每天能够跑上10公里到16公里,那么再适合不过了,而这个距离在我看来,也是最合适的锻炼距离。如果跑得更远,就要注意骨头的磨损等等这些问题了。前些天从香港跑完马拉松回来,更加坚定了我的看法。看到跑马拉松的那些人,因为肌肉酸痛,膝盖磨损等问题而面露苦色,我还是觉得,普通人还是没有必要跑马拉松的。

我的膝盖也不幸免。就在上周末,跑到琶洲大桥后,膝盖疼的一塌糊涂,最后一瘸一拐的走回家,花了整整两个小时时间。然而这依然阻止不了我跑马拉松的步伐,跑进4小时,最终跑进3小时依然是我的目标。因为体育精神是更快、更高、更强。只是今后要更加注意珍惜自己,避免造成损伤。

以下是给那些跑步新手的一些建议: 1.买一双趁脚的跑步鞋。多威,亚瑟士,美津龙,新百伦都有很不错的跑步鞋,李宁的慢跑鞋也可以。像我的多威鞋,已经陪我跑过4个赛事。 2.买一个护膝,保护膝盖。不要裹的很紧,那种髌骨带就满足要求了。 3.喜欢上泡脚,这样可以保养双脚。 4.循序渐进,跑步要慢慢来,慢即是快。 5.有耐力后,还要注意速度的练习。也就是要长距离练习之余,要注意短距离的练习,练习1000米,400米等等,这些距离的练习,最终会决定跑步的速度。我自己试过,即使能跑完马拉松全程,跑1000米,依然需要4分钟。所以短距离练习也是我的目标。 6.最好有一条魔术头巾。跑步时,必然流汗,用来擦汗,避免流入眼睛。雨中奔跑时,还可以用来遮挡头发,避免感冒。 7.冬天,一条紧身裤可以很好的提高跑步体验

最后,恭喜你加入跑步者的行列。拿起《跑步圣经》,穿上慢跑鞋,跑步去吧。

欧拉工程中文站第一版完成


知道欧拉工程,是在任晓祎的博客里,之后断断续续也做了一些题目,并被数学之美所折服。其中的许多问题,如果没有一个合理的解决方法,即使高性能的计算机也无能为力。典型的一题是素数的判断,记得微软实习面试时也问过这道题,当时还以为很简单,没想到这后面还隐藏着米勒拉宾算法,并且竟然会与费马小定理搭上边。

但是这个理由还不足以需要自己做一个网站,以及将题目翻译成中文。之所以这么做,出于两个原因。第一个是,想学习怎么翻译,提高英文水平;第二个是,学习如何做网站。

高三的时候,一次英文课上,老师叫我和几个同学扮演一个采访节目,其中我扮演阿迪力,也就是那个走钢丝的特技演员。当时我的口语水平很烂,所以放弃这次扮演,于是老师笑道,阿迪力不懂英语啊。当时很羞愧,学了五年的英语,口语竟然这么烂。但同时,我也觉得这个老师不好,怎么能这么打击学生呢?事实上,我的英语阅读水平一直都很不错,即使读起原版书籍也毫不吃力,只是我这人生性腼腆,不常开口说英语,以至于口语很烂。后来学日语的经历也证明了这一点,日语老师韩凌燕很耐心的教我们从发音开始学起,而当时自己学的很努力,最后日语的发音也还不赖,事实上,在普通话,英语,日语中,我的日语发音是最标准的。而为了证明我还是懂英语的,后来看了许多英文书,英语的阅读水平显著提高。为了学以致用,决定翻译欧拉工程,一方面锻炼英语,另一方面,也可以加深对题目的理解。

事实上,不会做网站一直都是我的一个心病,所以能够自己独立做一个网站一直是我的一个愿望。两年前找实习时,就问过余晟老师,如果要做Web开发要从何做起。余晟老师说,先从最简单的网站开始,从前端到后台,功能,设计全部走一遍,而后台语言的选择最好是PHP。当时还和余老师说,自己喜欢Python多一些,还是不学PHP了,因此还被骂了一顿。工作之后,看志容用Django做的博客,于是决定用Django做网站。可是后来发现并没有那么容易,很多时候都在学习Django如何处理Web开发,无法按照自己的想法做。于是还是听取余老师的意见,用PHP,在看了哈佛大学的《构建动态网站》以及李航用PHP写的博客,更加坚定了学习PHP的想法,其中Malan老师说,PHP就是为Web而生的,它为Web开发提供了许多语言特性。于是开始用PHP做这个网站。

不知道从什么时候开始做了,陆陆续续的用空闲的时间做。先从如何编写一个登录验证的程序,到新建一篇文章,修改一篇文章,增加一篇文章,实现分页,慢慢的,一个基本的网站就形成了,最终也就是现在这个样子。现在这个网站,如果对于一个熟手来说,不到一天就可以完成了,可是我是一个新手,所以只好一步一步来。接下来还有很多工作要做,功能上,如评论功能,RSS等还没有完成。而后台设计上,现在很多地方的HTML输出,还是用echo,没有做到MVC,接下来的机会是先用MVC重构整个网站,之后再添加评论和RSS等功能。

如果想看看现在网站的样子,可移步http://euler.dengshilong.org/

偷与被偷


2月15号,那天,去香港,在广州火车站等车时,发现手机被偷了。夜里,睡在美丽都大厦的小旅馆里,凌晨一点突然醒来,窗外的灯光通亮,或许因为太兴奋了,难以继续入睡,于是想起了偷与被偷的那些事。

偷东西一直以来都被认为是不好的品行,可是奇怪的是,在我看来,很难找到一个小时候没有偷过东西的小孩,即便是我这样从小被认为是品行优良的学生也曾偷过东西。还记得小学一年级的时候,家家户户都是比较贫困的,除了吃饱饭之外,就没有什么零食和水果吃。那时,学校旁边住着几户人家,在菜园里种了一些黄瓜。那天中午就和几个同学去菜园里偷摘黄瓜,不幸的是,被这个家人的孩子发现了,而他也是我们学校的学生,于是上课的时候被一个个指认,所幸的是,当时就我没被认出来。但之后我的日子也不好过,总要偷偷摸摸的躲着那个学生,直到这件事过去。此后,我就再也不敢偷东西了。

小学六年级时,一次和老爸去镇上买年货,在一家食杂店里买糖果。老爸称好糖果后,继续买其它的,让我提着糖,那时我还特别喜欢吃糖,于是我就拿出一个吃着。就在这时,我看到卖糖果女售货员双眼直盯着我,那种眼神仿佛在说,你是小偷,偷吃糖果,于是我记下了这家店。等到初中时,经常在这家店买东西,为了报复,就偷这家店的东西。记得偷的最多的就是打火机,因为打火机拿出来很容易。每个周末回家,在店里买偷东西,总会趁老板不注意时,偷偷拿走一个打火机,一个学期下来,家里的抽屉里就有一堆的打火机。直到后来觉得已经发泄完毕,就不再继续偷了。后来我才知道,这家店的老板其实是个好人,他叫姜承善,而那时的女售货员,就是他的女儿。因为03年非典时,各地白醋都在疯狂涨价,唯有他没有涨价。

长大以后,对小偷就非常讨厌了,因为小偷总是不劳而获,窃取别人的劳动成果。可是这个世界上总有人想着不劳而获,所以总有人会遭受损失。

高中的时候,班上要收500块钱的资料费,于是我提前一天去银行把钱取了出来,放在床上的背包里。不幸的事发生了,晚上睡觉时发现,500块钱中,被偷了400块钱,只剩下100块钱。当天晚上都失眠了,左思右想这件事究竟是如何发生的,然不得其果。一度怀疑是宿舍同学所为,可是那时一中的盗窃猖獗,连洗发水偷不幸免。

大学时,丢失了凤凰十二速,千里达公主车,每次丢东西,心情都要不好一阵子,可是还是没有办法解决这个问题。我想也许是因为偷东西的惩罚太轻了,相对于它所得到的回报。当然最终的解决办法是人人富裕,这样就没有必要做小偷了,可是又如何才能实现人人富裕呢?