-
无限递归导致 Segmentation fault
某服务器上一个 cron job 是 shell 脚本调用 Java 程序,最近老是报 Segmentation fault, 每次看见此信息 /bin/sh: line 1: 4285 Segmentation fault java … 总觉得无处下手,bash 的问题?Java 版本不对?信息量太少了。其实遇到这种事情不能谎,表面上没有信息一定要挖出信息来。今天仔细一看,这个脚本把标准输出重定向到一个日志文件去了,于是去看日志。这个程序的主体是对一个信息列表做循环,恰好在每个循环的关键部分开始前、结束后都会写一条日志。其目的是为了计时,不过正是这两条日志让我很快找到了错误缘由,因为发现日志文件的末尾只有一个开始前的,说面在这个循环的处理过程里面发生了 Segmentation fault. 找出程序的源代码,发现循环里面调用的方法有一个是递归的,情况就开始明朗了,猜测就是递归无法终止导致 stack overflow,segmentation fault. 果然,根据日志里最后一行日志中记录的真实数据,发现这条数据是有问题的,会导致此方法无限递归。 Wikipedia 的 Segmentation fault 词条里有一节是 “Common causes”, 我这次遇到的就是最后一条。
-
wget 自动发送用户名密码
有个 Server 需要 Basic Auth 认证,但是我发现在它自己上面有一个任务会通过 wget 访问一个自己的 URL,调用的过程并没有提供用户名和密码,竟然可以成功访问! 一开始我以为是 Apache 里面配置的访问规则是对本地访问不需要认证,但是并非如此。bash alias? 也不是。加上 –debug 参数调用 wget,发现它确实在访问本机的这个域名时会加上 Authorization 这个 header, 而访问其它域名的时候则不加。 最终通过 strace 发现它会打开 $HOME/.netrc 文件,原来秘密就在里面。中间看了半天 manual,只看到它会读取 /etc/wgetrc, $HOME/.wgetrc, 没注意到还会读这个文件。我不太喜欢这种做法——谈不上安全,又不容易维护。 参考: .netrc wget
-
QQ 输入法的词频
现在 QQ 和搜狗都开始做 Mac 上的输入法。搜狗的问题是没有投入足够的资源在这上面,而它做 Mac 输入法也似乎是无奈之举。当时 QQ 突然发布了 Mac 输入法,搜狗没隔几天也赶紧出来一个,结果 bug 一大堆,至今在软件的功能和稳定性方面,搜狗依旧落后很多。 前些天用了一下搜狗输入法,在 Gmail 里的聊天界面,候选窗口无法正确定位。可能跟我用两个屏幕有关系,不过在 QQ 群里(没错,他们用 QQ 群跟用户交流)报告了之后,有人告诉我用正在测试的 1.5 版本试试。我试了一下,完全不能用,应该是切到搜狗输入法它就 crash 了。 QQ 输入法的功能现在非常稳定了,我没有遇到过任何问题。官方网站的 Mac 页面做得也有模有样(搜狗跟它一比就显得山寨),属性设置里也有丰富的选项可供选择,可是有个很致命的问题,那就是词频。我遇到许多让人觉得不可思议的词频,仅选取一小部分放在这儿 (都是第一页): 难道就是这么烂?
-
小打小闹
在我的网站日志目录里先找到 Sogou spider 的 IP: # grep -h -F “Sogou web spider” * | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -n 5 109766 220.181.94.231 26244 220.181.125.69 93 220.181.94.235 90 220.181.125.107 83 220.181.94.236 然后看看从访问最多的那个 IP 来的都是什么 user agent: # grep -h -F “220.181.94.231” * | grep -v -F “robots.txt”…
-
grep: writing output: Broken pipe in iTerm2
前天用 iTerm2,在执行一个 grep “xxx” filename | head (filename 这个文件应该相当大,grep 到的内容也应该有很多)这样的命令时,遇到大量如下错误输出: grep: writing output: Broken pipe 而在 Mac 自带的 Terminal.app 里面执行完全一样的命令,不会有任何错误。用 which 查看,使用的确实是同一个 grep 命令,同一个 head 命令。再仔细观察,发现其实 iTerm 里面,命令也输出了正确的结果,那后面的这些错误信息应该是输出到 stderr 的。把命令改成 grep “xxx” filename 2>errors | head 确实,错误信息都跑到 errors 文件里了。这时又发现,在 Terminal.app 里命令在输出10行之后立即结束执行,而在 iTerm 里则取决于这个文件有多大,grep 出来的内容有多少行,它就会执行相应长的时间。网上看到有人说这是 head 取得10行后立即退出,这个 pipe 的读端就没了,grep 继续往 pipe 写,于是 – broken pipe, 只要将错误定向到…
-
李笑来《把时间当作朋友》
把时间当作朋友:运用心智获得解放 – 李笑来. 国内很少有人像这样认真写好书了! 在2012来临前把这本书读完了,收获比我想象中大得多(这本书是我买一本数学书时顺便一起买下的),值得多看几遍。这本书大致是关于时间,心智,思考,学习,坚持的探讨和思考,也有关于成功的定义,以及介绍达到成功目的的一些必要途径,不过当然不是市面上流行的成功学书籍。 关于时间管理,David Allen 那本著名的 Getting Things Done 我也看了,看到一半就觉得好像作者在反复重复本来很简单的一些事,就好像当年学政治一样,看不下去了,也许是我不够有耐心吧。书中介绍的方法基本了解了,但是对我的工作学习似乎没有什么帮助,该拖延的事我还是拖延。我觉得方法这东西,每个人都应该有自己的一套,别人的好方法对自己并不一定有用。李笑来这本书虽然名字“把时间当作朋友”听起来就是一本时间管理的书,实际上它并不是教你时间管理的方法,而是在整个过程中告诉读者思考、反省、心智的重要性。 记得中学的时候成绩好,好多同学老问我学习方法。我比较烦这样的人,就说我也没有什么方法。其实这是实话,突然被问到,我却是总结不出自己有什么方法。我不怕泄露自己的方法“给竞争对手做培训”,而是即使我公开自己的方法对任何人都没有帮助,还是不要浪费口舌了。这些人的关键是他们没有意识到高考前剩余时间的流逝,没有意识到学好这些课程的重要性,没有下决心要精心学习。现在大家都上过大学了,回头看看——高中的那些东西有大学一个学期的多吗?需要什么奇技淫巧才能学会吗…… 我曾经在一段无聊的时间里,早上起来,在电脑上安装我喜欢的游戏,打到晚上。那时感觉到自己一天什么事情都没有做,太堕落了,把游戏删掉。第二天早上又下载这个游戏重新安装继续玩,如此重复,越来越懊恼却没法改变。我觉得我的心智就比较弱,也许应该仔细想想,我已经到了什么年龄,财富、知识却少得可怜,我还有多少时间可以学习以及积累财富。 不知道以后再有这样无聊的时候,由于读了这本书对我有没有帮助。不过在读它的过程里我就已经在思考很多以前没有想过的问题,看到很多让我感慨的地方,仔细记下了笔记。不过到最后才看到李敖读书的方法,其中一点是不要躺着读,不过这本书我就是躺着读的,只是遇到精彩的部分偶尔起来记一下。当然我不舍得像他那样把书分尸了。以后要坐着读书(尤其是纸质),这样有什么想法可以随时记下。我有个 Book Stand 帮忙。 思考有很多方向,《把时间当作朋友》基本是教你用一种积极向上的态度思考。我曾有几段时间也大量思考,但是很悲观,把自己想到死胡同里,甚至有自杀的念头,多亏我想到我还有父母兄弟。自杀的念头多半实现不了,所以我们还得在这个世界上生存,积极的态度会有帮助的。 最后摘录一些书中有意思的地方: 李笑来对某搜索引擎用低劣手段疯狂敛财很不满(105页括号中内容)。我相信百度因为钱去干扰 organic results 只是失败者的谣言而已,但是它的付费广告确实没有底线,或者说没有控制住底线。 关于马克思和他的幻想,请看130页。这么荒谬的幻想,竟然被人利用愚弄了这么多的人口,这个事实更荒谬!209页——“亚当斯密用一生奠定了现代经济学的理论基础,而另外一个哲学家终其一生写了无数著作,引发的却是人类史上最大规模的、最失败的社会实验”。 24页——“五笔输入法只不过是阶段性妥协的过渡产品,早晚会彻底消亡。”我最初就是学五笔打字的,我相信这一点,很庆幸自己比较早地回到拼音了。 160页,有些人希望借助他人的力量,他越是渺小,越是衬得他的欲望无比强烈,一个特征就是日程生活中他们经常有意无意地用亲密的方式体积大家仰望的人物。“李开复”叫“开复”,甚至“俞敏洪”叫“小俞”。 书中提到的其它一些书: Knowledge and Decision The Tipping Point Mean Genes 少有人走的路 女心理师 奇特的一生
-
JVM 的 Client Mode 与 Server Mode
目前正在读“深入理解 Java 虚拟机 – JVM 高级特性与最佳实践”,这本书确实是国内少见的好书之一,虽然个人感觉也有一些不恰当的地方。例如第3章介绍 GC 策略时,一直没有简单解释一下”新生代 (Young generation)” 和”老年代 (Tenured generation)” 这两个概念。我也是在这书中才发现 HotSpot VM 有两个模式 – Server Mode 与 Client Mode,作者也没有介绍。也许是因为这些话题比较初级吧。 关于这两个模式的区别,这个 FAQ 里有介绍。简单地说,Client Mode 启动快,Server Mode 整体性能好。它们使用了不同的 JIT 编译器,Server VM 使用的那一个对代码做了更加多的优化。一般来说,像 Tomcat 这样的 Servlet container 需要长时间运行,启动速度相对来说不是那么的敏感,适合运行在 Server VM 里。而 GUI 程序对启动速度要求比较高,所以使用 Client VM 较好。 它还提到 “Some of the other differences include the…
-
让 Greasemonkey 脚本同时支持 Firefox 和 Chrome
Greasemonkey 最初只是 Firefox 的一个扩展,不过流行之后,很快被其它的浏览器以不同形式采纳。IE 我不喜欢,此文就不关心它了。剩下的市场份额较高的是 Chrome 和 Firefox, 本文就简单讨论一下如何写出同时支持这两种浏览器的 user script (所谓“跨浏览器”). 最早的时候也是热心用户给 Chrome 写了插件让它支持 user scripts, 但是现在 Chrome 不再另外需要插件就可以支持了。它的处理方式是每次安装 user script 的时候,自动把它转换成一个扩展!刚开始在 Chrome 上调试脚本的时候,我还尝试在磁盘上找到它存储脚本的目录——在 Firefox 里我都是直接编辑脚本,保存,刷新页面马上看到效果,简单粗暴。肯定有更简单的调试方式,只是我不知道。 看看 Chrome 的官方文档怎么介绍的: Chromium does not support @require, @resource, unsafeWindow, GM_registerMenuCommand, GM_setValue, or GM_getValue. GM_xmlhttpRequest is same-origin only. 这个显然有点过时。根据最近被完成的这个 issue,现在 GM_xmlhttpRequest 已经可以跨域请求了。 关键的一点,Chrome 不支持 @require 的写法,这可是个很方便的功能啊。我对 jQuery 相对熟悉一点,几乎每个脚本里都会用这个命令把…
-
Google Reader 与 Kindle
今天写了一个 Greasemonkey 脚本 – Google Reader Readability (点击安装). 该脚本同时支持 Firefox 和 Chrome. 效果如下,在每篇文章下面的工具栏添加一个新模块: Readability 是专注于阅读的一家网站,最近刚推出了一系列产品,覆盖主要的一些便携设备,当然针对阅读的话必须有 Kindle 了。它的 publisher tool 给我们这样写博客的或者那些新闻网站提供一个小的 widget,点击即可在 readability.com 阅读,还有一个很好的功能是发送到 Kindle. 而我的这个插件就是基于 publisher tool 的 JavaScript 代码 - 幸好他们没有压缩这个 JS,让我比较容易搞定了。其原理就是对网页作简单的处理之后,邮件发送给 @free.kindle.com,然后 Amazon 就会在你连接 wifi 的时候把这些文章推送过来,免费。另外,Readability 有浏览器插件和 bookmarklet 可以在阅读任何网页的时候把它发给 Kindle. 我现在 Kindle 里就有一个 Collection 叫 News & Articles,上网在 Google Reader 里看到比较长的好文章,就点一下这个按钮。定期 Turn on…
-
Dive Into * 作者 Mark Pilgrim 网上失踪 – 410 Gone
Mark Pilgrim 是 Dive Into … 系列编程书籍的作者,比较出名的是 Dive Into Python. 我最早接触他的作品是 Universal Feed Parser 中的 chardet library,后来还由于看见他网站的字体很特别,自己也尝试了一下。多产的人就是这样,有时候没有意识,突然有一天发现自己在用很多他做的东西。这只是他的贡献的一小部分,他把许多书都做成了网站让人免费阅读,比如 diveintopython.org, diveintopython3.org 等等。甚至他的 blog 名字也叫 Dive Into Mark. 下面是 Wikipedia 对他的简单介绍: Mark Pilgrim is a software developer, writer, and advocate of free software. He authors a popular blog, and has written several books including Dive into Python, a…