为Mac OS设置国内外地址不同的访问路由

环境越来越恶化,这两天到处都是Gmail彻底被墙的消息。我等屁民只有迎难而上,把vpn,ssh给用好。

原先一直都是在用Chrome+SwitchySharp+ssh的方式,但这个方式不爽的是只支持http/https,很多时候git或brew更新时都会出问题,到时就只有祭起VPN大棋,但VPN的问题呢又在于走的是全局路由,包括国内的站点也都走了VPN,既慢又费流量。以前偶尔用用,一直懒得折腾,今天研究了一下,可以根据国内外地址设置不同的访问路由。这真是一个折腾的时代。

在mac下需要的几个工具:修改路由的chnroutes和开源的OpenVPN客户端Tunnelblick,原理就是:

利用来自APNIC的数据生成路由命令脚本,让VPN客户端在连接时自动执行。通过这些路由脚本,可以让用户在使用VPN作为默认网关时,不使用VPN访问中国国内IP,从而减轻VPN负担,并提高访问国内网站的速度。

如果你VPN服务使用PPTP,mac下很简单,参照chnroutes说明即可,可惜我的VPN提供商PPTP,L2TP,Cisco IPSecVPN几种连接方式相继被GFW干扰,目前只有采用OpenVPN的连接方式,参见Mac OS X通过Viscosity连接OpenVPN,不过Viscosity不是免费的,我就找个开源的Tunnelblick替代。

说明一下过程和注意事项:

  • 下载chnroutes
  • 在目录下执行python chnroutes.py -p mac ,生成 ip-up 与 ip-down 两个文件。
  • Tunnelblick中导入你的vpn服务提供商提供的配置文件。
  • 修改Tunnelblick的连接配置文件,增加

up {your directory}/ip-up
down {your directory}/ip-down
networksetup -setdnsservers "Ethernet" 8.8.8.8 8.8.4.4
networksetup -setdnsservers "Wi-Fi" 8.8.8.8 8.8.4.4
  • Tunnelblick中的设置里Set DNS/WINS为“Do not setnameserver”,由前面的配置文件来指定。
  • Tunnelblick连接VPN,连接成功后,可以访问ip138.comip.cn,前者为访问国内站点的ip地址,后者为访问国外站点的地址,两者应该不同。

– 12月30日更新:
发现连上VPN后,公司内网无法访问,参考如何在连接国外 VPN 翻墙的同时,访问公司内网服务 - Alsotang’s blog在ip-up/ip-down中增加公司的域名以及内网地址即可。对于Chrome来说可能需要清除缓存,否则总指向到该死的189so。

参考的文章有:

为七牛云图床的上传生成markdown格式日志

博客迁移到hexo后,使用七牛云作为图床,日常就用它的命令行工具qrsync上传图像,上传成功后会显示日志。有点不爽的是日志中只是显示上传到服务器上的相对路径的文件名称,在写markdown 格式时,还需要自己去补充类似“![]”,然后再补充完整url信息。

于是就在日志信息后加一个sed的脚本做替换,帮自动生成markdown格式,书写自然就方便了。

1
/Users/yangbin/bin/qrsync /Users/yangbin/bin/qiniu-conf.json 2>&1 |sed -e 's/\(=> xbin999:\)\(.*\)/=> ![](http:\/\/xbin999.qiniudb.com\/\2\)/'

另一种只显示结果文件格式的可以参见gist

豆瓣购书单和亚马逊促销

对于一个爱看书的人来说(我能说我自己吗?),豆瓣和亚马逊是不可缺少的两个网站。豆瓣可以猜你喜欢,有推荐的豆列,还可以建立购书单,并且会提供购书单中各网站购买的价格对比,一般我选择在亚马逊购书比较多,这里除了种类和价格因素外,还有就是亚马逊的书籍推荐服务。

我习惯的购书是日常在豆瓣中把要买的书加入购书单,然后去亚马逊购买,有活动自然会更划算。亚马逊经常会有各种各样的促销活动,但活动活动往往会有范围,而不是针对所有的书,比如现在的“满199元返100元图书券”活动,也有35万中文图书的限制。这样带来的问题就是,把书加入购物车后,却发现书又没参加活动,凑单的时候就更苦恼了。(不差钱的就不用管这些了)

所以我一直想能不能有个服务,能检查一下我的购书单,看看有哪些书是参加了亚马逊的促销活动的。不过貌似豆瓣和亚马逊都不会有人提供,第三方的也总不见,无奈只有自己用ruby写了一个“从豆瓣购书单中挑出有亚马逊促销的书籍”

机制也很简单,先在浏览器打开你的豆瓣购书单,另存为cart.html,然后用了三个正则表达式用来做html的解析,你只需要修改最后的一个prom_regexp,提供亚马逊促销活动对应的促销码即可,比如“满199元返100元图书券”活动的促销码就是“6HREB5FXXK”,运行后的结果输出的就是你的购书单中参加了活动的书籍和豆瓣链接(当然你的电脑上需要安装有ruby的环境),适用于在购书单中列了一堆书又还没有钱,等着促销活动的朋友。

比如我的运行结果就是:


=== books in promotion ===
跑步,该怎么跑?, http://book.douban.com/subject/22993407/
自控力, http://book.douban.com/subject/10786473/
学习要像加勒比海盗, http://book.douban.com/subject/5946563/
教育就是解放心灵, http://book.douban.com/subject/4864406/
无器械健身, http://book.douban.com/subject/11608712/
怦然心动的人生整理魔法, http://book.douban.com/subject/10747883/
设计并不重要, http://book.douban.com/subject/20375121/
戊戌政变记, http://book.douban.com/subject/5315180/
共读绘本的一年, http://book.douban.com/subject/24295824/
...

喜欢的朋友可以从github上获取源代码自行修改。

没钱买SSD的人可以用内存做临时存储



在知乎上看到一个问题程序员如何优雅地使用 Mac?的回答,里面提到了一个mac上的工具TmpDisk,开源的内存磁盘管理工具,用来将你的内存虚拟成硬盘,加速文件的读写,缺点当然是关机或弹出磁盘文件就丢失了。不过这个貌似也看成是优点,你都不需要去考虑清理文件。

立即下载安装,设置好后,将我常用的下载目录(包括邮件附件)设置到该虚拟硬盘上,体验果然飞快啊。其实大多数邮件的附件下载下来并不需要长期保存,只要当时快速处理即可。这样只需要每天关机前将需要保存的文件转移到硬盘即可(刚好是一次整理过程),其他自动删除,爽。

没钱买SSD的人有福了,不过速度越快,心倒是更痒了。

编写markdown文档直接发布到wordpress上



我现在用nvALT来书写markdown文档,有时想把写好的文章发布到自己的博客上,比较土的方式往往是先预览,然后打开博客编辑,复制粘帖。

想想是不是可以简化一下,能直接把写好的markdown文档发布到wordpress博客上。试了一下,分三步走:

1. 可以把nvALT的存储模式设置成普通文本文件(Plain Text Files ),这样写好的内容就会以单个文件形式保存在设置的目录中。
2. 然后使用flavor 讲文件转换成html文件,需要安装ruby 和json。
3. 发布到wordpress上,这个原来想偷点懒,直接基于wordpress提供的发布邮件账号,通过邮件发出即可,但后来发现直接基于命令行上的mail命令,不支持html文本。只好另外想办法,找个API来直接调用接口发布。wordpress支持xmlrpc,有个简单的例子Simple WordPress Posting from Ruby via XMLRPC,直接搬来使用即可。
4. 最后做的事情就是把flavor和上面的例子串接一下,代码放在github上。
这篇文档就是以这个方式完成发布的,测试的过程中碰到几个问题:
运行flavor时报错

~/.rvm/gems/ruby-1.9.3-p125/gems/json-1.7.5/lib/json/ext/parser.bundle: [BUG] Segmentation fault
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
</pre> 这个原因是flavor.rb指定了/usr/bin/ruby,和我的rvm环境不一致,修改ruby运行环境即可。 * 命令行下mail 运行时报错 <pre>sendmail: fatal: chdir /Library/Server/Mail/Data/spool: No such file or directory

这里需要设置mac下的mail环境,有篇详细的说明
* 中文字符的问题

xmlrpc/create.rb:46:in `join’: incompatible character encodings: UTF–8 and ASCII–8BIT (Encoding::CompatibilityError)

这里需要讲flavor调用github解析返回的结果做强制编码html.force_encoding(“UTF–8”).encode(“UTF–8”)。

采用markdown来编写文档

很多时候记会议纪要,用word写吧,觉得太笨重,慢;用文本写,写标题1, 2, 3, … 结果前后一调整,或者插入/删除一行就要去重新调整序号,实在难受。随它去呢,又让我这种偏执的人感到别扭。

讨厌在书写的时候要考虑格式的设置,markdown确实是一个很好的解决方法,好好学学,强迫自己习惯markdown的编写。最基本的编写也就那么几个:

  1. 用几个#号来标识标题。
  2. 段落的写法,第一个是数字,那就按数字1,2,3排,非数字就是符号排的段落,第一个字符用-, *, + 都可以。
  3. 链接的写法,最简单的就是中括号里写文字,后面小括号里写链接,相同主机内可以使用相对路径。
  4. 对写代码的人来说,还有一个要记住的是用反引号`把代码给括起来。
    我觉得有这么几招就差不多了,顶多用两个星号搞搞粗体、一个星号斜体,详细的使用帮助可以参见markdown语法说明

“工欲善其事,必先利其器。”

首先,我得选择一个文本编写工具来替代Stickies,支持markdown,简单一点,能自动保存。Mou 不够简单,还是觉得nvALT 不错,简洁得很,同时支持Simplenote 的云服务。(Simplenote 同时提供iphone/ipad下的客户端应用,虽然Simplenote 在国内访问貌似不畅。)

其次需要能把markdown文件转成html文件,将格式内容进行保存或者发布到博客中(我一般还是会保存在Evernote中,话说Evernote什么时候能支持markdown啊)。nvALT 本身能提供预览并保存html文件。另外mac下还有两个不错的工具:

  • 一个是chrome扩展Markdown here 对于使用gmail的人来说有帮助,先用markdown写邮件,然后使用该插件Markdown Toggle做一次转换即可;
  • 一个是md ,提供了mac OS下的一堆服务,让你在文本编辑下右键菜单出现一堆常用的markdown服务。
    最后再推荐gollum ,基于git 的个人wiki管理工具,和nvALT 配合(nvALT 本身也能提供页面的跳转,够强大吧),一个写markdown文件,一个提供wiki页面和搜索。

先写这么多,等使用时间长了,有心得再做更新,这篇文章就是基于nvALT 写的。

在safari中使用https google reader订阅RSS

之前在safari中一直使用Add To Google Reader订阅RSS,不过由于老外不必担心GFW,采用http即可,但是我使用的时候经常都很杯具的是http无法访问google,从而必须手工改成https,再刷新一次,很不爽。

就像修改一下,去找代码,codaset已经不能访问。就到github上找了个Rob Wilkerson 之前参考的版本,也就是Chupa源代码。我也clone了他的代码,做了一些修改。

一是采用https的方式访问google;

二是点击RSS按钮后直接采用google reader订阅,而不需要选择iGoogle或Reader。

你可以直接在target中下载安装即可,或者在read-in-https-google-reader中得到源代码。

iosapp推荐 - 《历史上的今天》

之前在微博上推荐过一个ios的应用《历史上的今天》,iphone和ipad上都有,免费带广告。意犹未尽,决定再说说自己用的体会。

功能和界面都挺简单,每天自动告诉你历史上今天发生了什么,包括大事记、出生、逝世、节假日和习俗四个部分。你并不能自己选择某一天去查询事件,但我恰恰觉得这点限制使得该应用成了一个很好地讲述工具,象一本历史故事书,能让你娓娓道来,而不是定位于一个历史工具书。对于事件中的关键字一般会提供链接,进行百度搜索,一般需要详细解释时,我会跳到维基百科、百度百科、互动百科等查看详细描述。

历史上的今天

小乐向来对历史有一定的兴趣,故每天晚上小乐临睡前,都会有几分钟时间,我给她讲述一下《历史上的今天》,一般我会挑一些小乐有兴趣的内容,或者拓宽知识面的点,有些只是照读,有些则会查询百科细究。相比于历史百科全书来说,应用还是有很强的优势:

1. 新鲜感,每天都是不同的内容(一年后不知会怎样,不过一个应用能持续用一年我想已经非常了不起了。另外到时也许又会有新的兴趣点);

2. 方便性,不需要大部头,以及内容链接带来查阅的方便性,虽然背后依托的是百科类网站,但手持ipad,那种上知天文,下知地理的感觉,哈哈,小乐一定崇拜死了;

3. 选择性和启发性,在讲述的过程中针对一天中的历史点,有着丰富的选择性,完全可以针对孩子的不同兴趣点选择要讲述的内容;而且很多内容如果没有这样的事记形式我想是永远都不涉及到的。

比如昨天2月7日,我就给小乐讲述了:

1977年,在中国共产党中央委员会主席华国锋的授意下,《人民日报》发表社论,公开提出两个凡是

1923年,京汉铁路“二七”大罢工;

1812年,狄更斯的诞辰;

1964年,披头士赴美,在纽约开始巡回演唱;

还有其他一些,内容丰富吧。

在讲二七罢工的时候,我说我去过河南的二七广场,有点联系。小家伙问领导人都有谁,张国焘不认识,项英,嗯,上次说皖南事变的时候提到过;

讲披头士的时候,说了一下列侬的死。不能理解歌迷怎么会刺杀他的。还有用QQ音乐听了一下yellow submarine,多媒体教学;

而讲“两个凡是”的时候,我问了小乐你对两个凡是的这两句话能理解吗?你觉得对吗?这也算是政治启蒙吧。

mac下的Calculator直接支持货币汇率转换

刚想换算一下港币,google能直接告诉我们答案,不过一开始输入的查询语句有问题,后来改成“1港币等于多少人民币”才行。

不过也正因为此,想去找一个mac下的汇率计算工具,才发现Calculator就提供了这一功能,选择”Convert - Currency”,真是方便。

freemind/filezilla/dropbox在mac下使用的几个问题

之前养成好习惯,尽量使用一些跨平台的软件,比如Evernote, dropbox, Filezilla, Freemind,这样在切换到mac上的时候能加快过渡。

不过在实际使用的时候,在这几个软件上都碰到了一些问题:
1. Freemind无法输入中文
解决方法:先切换到英文输入发,再启动Freemind,就可以输入中文了;
2. Filezilla连接上ftp server后,不能显示目录
解决方法:今天服务器上传了一些去苏州玩的照片,结果上去一看服务器上啥文件也看不到。原来是编码的问题,在站点管理器中修改站点的编码为gb2312就可以了;
3. dropbox无法实时更新
解决方法:这个应该和mac无关,只是因为一下子有了两台机器实时更新的需求,才发现它的存在和严重性。月光博客上有篇详细的文章,还是要感谢伟大的GFW。没用privoxy,我暂时还没去管它。