####2012-12-30html
今天继续写单机版BlackHole。碰到一个问题,想要将程序做为系统进程,后台运行,而且在shell关闭时不退出,有两种办法:一种是使用nohup,一种是使用Deamon程序的开发方式来写Java,并引入不少框架,例如Apache Commons Daemon。后者以为过重了,可是前者没法在控制台输出一些错误信息,也不够友好。最后用了一个很粗暴的方法:将错误输出重定向到一个文件,shell脚本退出的时候打印出来!赢了!android
后来使用package maker作了一个安装包,比想象中好用,支持shell脚本什么的。shell
遇到一个问题,在mac下设置两个DNS,BlackHole为主DNS,结果仍然没法保证每次都使用BlackHole进行解析。后来索性改为只有一个DNS,127.0.0.1,却是正常工做了。api
这个单机版本我取名叫hostd,大概是hosts取代者的意思吧。由于要保证程序即便被kill以后也能作出一些释放资源的操做(在hostd里,须要把修改过的DNS改回来),因此给wifesays增长了一个响应,用了Java里一个响应信号量的api。app
import sun.misc.Signal; import sun.misc.SignalHandler; Signal.handle(new Signal("TERM"), new SignalHandler() { @Override public void handle(Signal arg0) { shutDown(); } });
####2012-12-31框架
新年的最后一天,你们都无意上班,那么我就在上班时间鼓捣项目了!将hostd完善了一下,加入了实时响应配置更改的机制。ide
开始的想法是经过md5来判断文件内容是否被更改,可是这样每隔一个周期就必须彻底load一次文件,不划算;后来想到,为何不直接用文件的最后修改时间呢?大多数状况下,只要是人工修改的配置文件,多个配置文件的修改时间是不可能相同的,在Java里直接能够用file.lastModified()来查看,多方便!工具
晚上写了一篇广告帖,效果很差,你们都去过节去了嘛。code
后来有个之前搞手机的同事回复我,手机上目前没有方便的hosts修改工具。android下改hostd是须要重启的,至关麻烦。因而感受找到一个很大的应用场景了!视频
####2013-1-1
新的一年,新的日期格式,稍微有点不习惯。今天抽空看了一点Android开发的东西,鼓捣了一下adt。网易有个公开课讲android的,我的认为讲的不错,正好学点英语,地址密西西比河谷州立大学:Android应用程序开发。 由于视频有点模糊,附上其余地址:原文,讲义,源码