阿龙的自留地

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

月度归档: 2014年1月

芋饺----别具风味的沙县小吃


身为版主,对于板块如此冷清需要负很大一部分责任,因为我太不勤快了。今天窝在家里,就写写酸不拉唧的文字,来增加这里的人气。

说到芋饺,很可能许多人还不知道是什么,因为在沙县小吃的菜单上并没有它,但对于沙县人就再熟悉不过了。沙县人一年到头在外面做小吃,每年春节回到家里,家家户户必做的小吃就是芋饺,即便是没有回家,有些嘴馋的人也会在小吃店里做芋饺吃,虽然没有在家里做的好吃。所以可以说,芋饺是在所有沙县小吃中最具特色沙县特色的。以至于正月初一时,常常挂在沙县人嘴边的一句话是,你家今天做芋饺了吗?如果哪家没有做芋饺,那么别人就会认为这家的家庭主妇太懒了。

下面来说说芋饺。从芋饺的名字可以看出,芋饺就是用芋子做的饺子,这是正确的,芋饺的确是用芋子做的饺子。那么全国各地几乎都有芋饺,沙县小吃的店里为什么就没有芋饺卖呢?我想,这主要还是因为原材料所限。做芋饺需要以下几种原料:芋子,木薯粉。对于芋子,要求淀粉含量很高,这样做出的芋饺才会有韧性,吃起来才会顺滑。当然光有芋子还必须有木薯粉,而木薯粉出了福建后并不多见,这也是为什么在其它地方很少有芋饺的缘故。光有原料还不行,还必须要会做芋饺。先将芋子煮熟,去皮,捣烂,再加木薯粉搅在一起,做成芋皮,木薯粉的份量非常难以掌握,即便是沙县人也马虎不得。太多和太少了,芋皮都会没有韧性,做出来的芋饺也自然没有韧性。因为木薯粉在外地实不多见,所以嘴馋的人只好以地瓜粉代替,但效果比不上木薯粉。

光有芋皮还不行,还要有馅。沙县人一般用竹笋做馅。福建多山,沙县也不例外,山中大多长有翠竹,每年春节,竹子就开始发芽,长出春笋,春笋极嫩,实在是不可多得的美味,再加入木耳或者香菇,有时也会加入猪油泡,加上炒功,美味的芋饺馅就做好了。每年春节包芋饺时,我都会忍不住吃上几勺馅,的确是太美味了。馅做好好,就剩下包芋饺了,芋饺一般包成三角形,不像蒸饺那样,何以如此,我亦不知。

美中不足的是,芋饺虽然好吃,但肠胃不好的人也不宜多吃,因为很容易造成胃酸。

追踪query too complex not enough stack错误


很早之前,在使用Sphinx搭建搜索服务时,遇到这个问题,到Sphinx for Chinese的群里请教,没有得到满意的答案,于是将sql_query_info 这个选项注释掉,就没有报错了。今天正好有时间,于是着手找到这个问题的症结,也算是为Sphinx做点贡献。

打开源代码,才发现用的是匈牙利命名法,看得不爽。也许因为没有Lucene那么出名,只有两个人在维护这个项目,代码里到处充斥这Fix Me,还好结构还算精良,要不然真不知道从和看起。本来想用GDB调试的,还不太熟练,于是就只好用最原始的printf输出。经过缩小范围,找到了一些蛛丝马迹, 在search.cpp中 的第331附近,主要的查询工作就在这里完成的,跳转过去之后

 if ( !pIndex->MultiQuery ( &tQuery, pResult, 1, &pTop, NULL ) )

锁定了到下面这个函数 在sphinx.cpp中 17301 if ( !sphCheckQueryHeight ( tParsed.m_pRoot, pResult->m_sError ) ) 继续跳转,到了下面这行 在sphinx.cpp中 16404 int64_t iQueryStack = sphGetStackUsed() + iHeight*SPH_EXTNODE_STACK_SIZE;输出之后,发现问题出在sphGetStackUsed这个函数里 在sphinxstd.cpp 中 1218行 int64_t sphGetStackUsed()

继续跳转,sphinxstd.cpp 中 1221行

BYTE cStack;
BYTE * pStackTop = (BYTE*)sphMyStack();

线程栈的使用大小就是上面两个值的差,继续查找 在sphinxstd.cpp return sphThreadGet ( g_tMyThreadStack );

这里用到了线程私有数据,看到私有数据的设置还是很正常,所以依然不知道哪里出了问题。于是索性将int64_t iQueryStack = sphGetStackUsed() + iHeight*SPH_EXTNODE_STACK_SIZE;这行改成int64_t iQueryStack = iHeight*SPH_EXTNODE_STACK_SIZE;这样sql_query_info就可以使用了,也不会再报query too complex not enough stack错误。

可是这个自己查询得到的中文显示出来都是乱码,我认为是没有设置SET NAMES utf8的原因,但又无法在sql_query_info这里添加这句。虽然在sql_query_pre = SET NAMES utf8已经设置了,但是因为不是同一个查询连接,所以无效。

所以最终我得到解决这个错误的结论,那就是注释掉sql_query_info这个选项。最坑人的是,官方的示例中是开启这个选项的。

Sphinx使用一元分词


之前说过用Sphinx给同事搭建搜索服务,可是他提了一个要求,也就是文本中有牛皮癣这个词,搜牛皮时也要能搜到牛皮癣,这个要求在经过分词后是不可以完成的。于是只好去寻求一元分词和二元分词的办法。 在http://lutaf.com/157.htm这里看到,“ sphinx只要把min_word_len设置为1,并配置charset_table,默认就是单字切分 ”于是试着配置,结果不行。于是只好看文档,在文档中找到,默认情况下,Sphinx已经支持一元分词。 只需设置 charset_type = utf-8 , ngram_len = 1, ngram_chars = U+3000..U+2FA1F 这样,再次搜牛皮时,就可以搜到牛皮癣了。

2013年的阅读


看了一下日志,今年读的书还是挺少的,特别是工作之后,有好多事情要做,人也变懒了,幸好还有记日志的习惯,知道自己变懒了。

《学习PHP和MySQL》,以备不时之需。

《看见》写的还不错,从这本书中知道新闻工作者是不能带着态度去采访的。

《野火集》龙应台的这本书就像一把野火,点燃了人们心中对自由的追求。

《推荐系统实践》一本推荐系统方面的入门书,不推荐看。

《那些忧伤的年轻人》与许知远的大学生活相比,自己的大学实在过得小儿科了

《在路上》,写得没劲,只看了前面搭车那段,后面就不想看了。

《旅行,人生最有价值的投资》,不愧是罗杰斯,这本书不仅仅是一本旅行书,书中更透露着许多投资方面的知识。而作者这种旅行方式极其令人羡慕,一边旅行,一边投资。

《集体智慧编程》只看了一部分章节,写的很不错,实践性强。

《且听风吟》随意的写,也是随意的看的。

《1973年的弹子球》,就这样不断的追逐,也许是一个在其他人看来毫无意义的目标。

《独唱团》,几乎每一篇都值得一看,个人最喜欢的还是石康的《看啦,这人》,写的很透彻。

2014厦门马拉松纪实


犹豫要不要去参加,因为今年元旦只放一天,且不是周末,这意味着要请假了,可是又没有去过厦门,没有去过传说中的海上花园,最终还是去了。

1 月2日早上,5:50分起床,刷牙洗脸之后,吃了一半前天买的红枣,不免俗的吃了一根士力架,就出门往会展中心赶,因为参赛手册中说,7:30就停止入 场,也停止放包。打的到了会展中心,很多了也在奔跑中,于是和志容也跑了起来,会展里已经很多人了,因为这次报名人数达到了8万人。找到存包处时,已经 7:40了,还是可以存包的,手册上吓人而已。存好包,热身,准备8:00开跑。

因为人太多了,到我出发时已经过了十分钟,所以只好以自己的时间为准。这一路上的人真是太多了,根本都跑不动,稍微跑快一点,前面就会有人挡着,所以顿时没有了跑步的兴致,私底下还决定以后不来厦门跑马拉松。

33 分,才跑到第一个5公里,顿时非常泄气,这人真的是太多了。我是喜欢跑步,但不喜欢凑热闹,所以一直都没有加入跑步组织,因为在我看来,跑步是一件非常孤 独的事,没必要加入大部队。《重庆森林》中更是说到,跑步这么一件非常隐私的事,怎么能让别人看到。跑着跑着,前面某个人的手机里传来许巍的《蓝莲花》, 顿时心情大好,在此之后,我也发现了在人群中跑步的乐趣,那就是再人群中穿梭前进,也就是在跑的时候,一定要估计周围人群的速度,抓住机会超过前面那个 人,就这样,一个一个的超过去,这样来不会被人群的速度所限。

1:03,到了10公里的地方,这个5公里的速度提高了一些,看来这个策略还不错。到了这里,人群已经不再像之前那么挤了,可以跑的快一些。

1:32,到了15公里了,此时已经到了中山路,道路变得宽敞,厦门的民众也在这里给运动员加油,顿时兴致大增,开始加快速度,一方面想展示一下自己的实力,给加油的人群一点信心.

1:59, 到了20公里处,这个5公里的速度明显快了不少,这也是在情理之中,因为前面跑的还是挺慢的,体力正好也保存下来了。之后就到了演武大桥,此时11444 号超过了我,于是与他展开了争夺,看他的实力,肯定是在4小时以内的,如果可以和他一起跑,那绝对可以在4个小时内跑完了。

2:50,到了30公里处,11444号,跑在我前面50米,渐渐的我的体力跟不上了,被他甩开,只能远远的跟着他,越跟越远。

3:32 到了37公里处,只剩下5公里了,如果是最初的5公里,28分内跑完是没有问题的,可是这是最后的5公里,也顾不上周围的人,就按自己的能力去跑。

3:44 到了39公里处,膝盖有些疼,双腿也不听使唤了,因为这次跑步忘了带护膝了,平时训练时都是有带的。如果拼命的话,也许可以跑完,可是我不想这样。于是只好慢慢的跑,事实证明,之后的三公里真是异常的慢。

4:05 到了终点。

在 此之前的广马和深山马,30公里开始才是我爆发的时候,那时候是多么的意气风发,所么畅快。可是这次跑厦门,30公里开始就是我痛快的来临,也许是因为前 一天去厦大逛,爬南普陀寺,消耗了我的体力;也许是因为与高手较量,打乱了自己的节奏。最终还是没有在4小时内跑完,不过,这次比上次的深山马快了9分 钟,也算是有进步了,下次有机会再超越自己吧。

领证书时,还是要排队,这令我想起当初扬州半程马拉松时,证书是由组委会邮寄的,这样多好,一张证书经过千里的奔波。

跑马拉松还真有意思,一大群人,为了各自的理由,来到这里,长距离的奔跑,在痛苦中挣扎,不断超过自我,跑的更快,更远。

期待下个月的香港马拉松。