使用tinc替代OpenVPN作为路由器自动翻墙方案

多年前发现了autoddvpn项目以后,从之前使用dd-wrt到现在用Tomato,都是把这套没人维护的代码不断的修修补补地放到路由上面用。虽然有一些其他搭梯子的方案,但是用OpenVPN加上自定义的routes,用起来感觉是最干净的,所有的用户都不需要在自己的电脑中设置,连接这个路由器的网络就可以自动爬梯了。

不过随着最近GFW越来越强大,它的Advanced DPI对普通的OpenVPN连接会进行干扰,导致使用一段时间就断开,或者干脆就连不上。按照我一贯的作风(懒),装个stunnel以后,把OpenVPN以TCP模式通过stunnel连接也将就用着了。

然后慢慢地发现,在吞吐量高的情况下,通过OpenVPN的所有流量,延迟都会变成非常高(4000ms+),要是看YouTube 1080p的话,别说开其他网页,能不buffering就不错了。OpenVPN用TCP的性能本来就没有UDP的好,加上一层stunnel,性能就更加不要提了。而且stunnel和OpenVPN全部都在路由器上面跑,除非你的是RT-AC68U、R7000这样的ARM路由,否则性能也就别想好到什么地方去了。

也因为这个原因,每当打开Google+各种卡的时候,我都会很自然地打开Chrome寻找替代方案……直到最近,我遇见了tinc

其实之前也已经看到过关于tinc的一些介绍,但是总觉得挺麻烦的,许多东西都要自己手动去配置(其实还是懒……)。但是实在忍无可忍了,既然决定折腾,那么就动手吧~

经过无数次trial and error,以及在网上参考了一些资料以及tinc的mail list以后,最终成功搭起来了!然后我把我用的脚本以及配置上传到了GitHub

  

虽然tinc支持IPv4 and IPv6,但是由于IPv6现在还比较少用的,所以这里就只针对IPv4了。

下面来简单说一下整个过程(以Tomato为例,其他平台配置应该也相似):

Prerequisites

  1. 首先你得有一个不在GFW里的服务器。我用的是Linode东京的VPS,系统使用Arch Linux。最便宜的套餐$10一个月,一次性购买一年/两年有打折~ 购买链接
  2. 你需要在路由上安装tinc。这意味着你需要现在路由上部署Optware/Entware。本文使用Entware为例。
  3. The ability to RTFM and follow instructions.

服务器端配置

i. Enable IPv4 Forwarding in sysctl.conf

首先,你必须把服务器的IPv4转发打开。在大多数Linux发行版中,这个选项默认是关闭的。

在Arch Linux中,你需要在/etc/sysctl.d/中新建一个文件(例如50-ip_forward.conf)来让这个设置在启动时自动生效。

在Debian/Ubuntu等系统中,你需要在/etc/sysctl.conf中添加net.ipv4.ip_forward=1来让这个设置在启动时自动生效。

CentOS的话……请自行Google,真没什么使用经验。

ii. 安装tinc

我使用的是Arch Linux的community中的tinc,版本为1.0.24-2。AUR中有一个tinc-pre,版本为1.1pre10,这个版本不建议使用,它使用新的experimental协议,配置上会有出入,而且据闻性能没有原来的版本好。

在Debian/Ubuntu中则是

iii. 配置tinc

Arch Linux:

tinc在安装后不会自动在/etc目录下建立文件夹,我们要手动建立:

这里面的server是你的NETNAME,这个名字将用于后面启用服务时使用。
hosts文件夹用于存放每个host的信息,后面会讲到。

写入配置文件:

(a) tinc.conf的内容

当中Name的值server为本机(服务器端)的名称。记住你的名称,在后面还会用到。

(b) tinc-up的内容

我使用的网段是192.168.4.0/24,你可以根据自己的需要对这个进行更改。记得把其他地方的subnet也改掉哦!最后的iptables规则中,第三条的eth0是你的VPS面向公网的网卡。

(c) tinc-down的内容

同样,根据需要修改subnet,必须与tinc-up中的保持一致。

(d) hosts/server的内容

在这里,server这个文件名必须对应前面在tinc.conf中设置的Name参数的值。tinc会根据Name去匹配hosts目录下的配置文件。

需要填写的配置文件只有这四个。完成以后,生成private key:

这样会生成一个4096 bit的私钥,生成的密钥保存在默认路径即可。-n参数后面的server为你的NETNAME,即/etc/tinc/serverserver部分。

Debian/Ubuntu

配置的过程基本相同,但是因为手上没有Debian/Ubuntu的机器,也懒得整VM,所以不能保证正确性。

根据Ubuntu的manpage,Debian/Ubuntu上的tinc所使用的config结构与Arch Linux不同:tincd将直接读取/etc/tinc中的内容,无需指定NETNAME。即:

服务器端的配置暂时告一段落。

客户端(路由器)配置

这里我仅以Tomato + Entware为例。使用其他平台的配置应该大同小异,请自行摸索。

路由器默认你已刷Tomato固件,并且配置Entware环境。具体操作不在此介绍,请自行Google。

文中Entware安装路径为默认的/opt

i. 安装tinc

使用Entware的opkg工具安装tinc以及git

完成安装后,git可能需要进行额外配置,步骤不在此细述。

ii. 配置tinc

安装完成后,从GitHub上将脚本clone下来:

执行配置脚本setup.sh(随手写的,有bug请大喊)

客户端的配置暂告一段落。

交换公钥

完成两边的配置以后,需要把生成的公钥放到另外的节点上。如果你是一直按照本文的设置进行的话,那么:

服务器端公钥位于:

Arch Linux

Debian/Ubuntu

客户端公钥位于:

tinc的公钥,当中实际上还包括对应节点的连接信息。例如,在/etc/tinc/server/hosts/server中:

这代表tincd将会在YOUR.IP.ADDRESS655端口上监听,允许来自0.0.0.0/0子网的用户。

/etc/tinc/hosts/client中:

则表示该节点被分配到的子网为192.168.4.2/32。从这里其实可以看出,tinc支持将一个Subnet分配给一个节点,让该节点通过DHCP或者static routing的方式来对整个VPN进行访问。但是我们只是用于简单的routing作gateway,因此分配一个地址就足够了。

那么,交换公钥这个动作就如字面所说的一样了。将服务器端的/etc/tinc/server/hosts/server放到客户端(路由器)的/opt/etc/tinc/hosts下;再将客户端的/opt/etc/tinc/hosts/client放到服务器端的/etc/tinc/server/hosts下。

这样,两边通过读取tinc.conf中的Name来决定自己的身份,客户端通过其中的ConnectTo参数来决定连接的节点,然后再通过hosts中的公钥和各自的私钥来进行身份的验证,最后建立连接。

tinc服务自启动

其实都比较简单:

服务器端:

Arch Linux

注意@后面的server是你的NETNAME,即/etc/tinc/serverserver部分。

Debian/Ubuntu

客户端(路由器):

Tomato的网页GUI中,找到Administration -> Scripts -> WAN Up,填入:

大功告成!

PS: GitHub上我放的脚本其实跟autoddvpn的非常相似,基本上只是把OpenVPN换成了tinc而已。在GitHub的README中,我会简单说明里面各个文件的用途。另外,如果你需要配置多于一个客户端,你只需要把客户端的Subnet地址(即上文中的192.168.4.2)换一下,重新生成private key,和服务器端再交换一下公钥就可以了。

from 

Replacing OpenVPN with tinc on Tomato/OpenWRT/dd-wrt for bypassing GFW // 使用tinc替代OpenVPN作为路由器自动翻墙方案 | this is my place.

喻氏族史

喻氏,原本姓姬,系出周公旦的长子伯禽。而周公旦,真名为姬旦,其父是周文王姬昌。姬旦有个哥哥叫姬发,姬发后来成了周武王。人们习惯称周公旦为周公,所谓“周公之礼”指的就是周公。

周公辅佐周成王有功,成王封伯禽的后代于祭(读zhai寨),是为祭公。祭公封地在今河南新郑,故址今犹有祭镇。祭国国君属于西周开国时期的畿内侯。周昭王南征荆楚,随行大臣祭公稷就是第一代祭公。祭公稷与南征六师一起死于王事。姬满即位,是为周穆王。祭公稷的儿子祭公谋父承父爵,辅佐周穆王。祭公谋父 病殁,其子祭公相如世袭父爵,辅佐周穆王。周穆王嘉奖祭公相如能以德谕民,赐姓为喻。此为喻姓得姓之始。因喻姓始祖喻相如的封地在江夏,故喻姓以江夏为郡望。

这么算下来,喻相如其实是周文王的后裔:

周文王->姬旦->伯禽->伯禽的后代 祭公稷->祭公谋父->祭公相如被周穆王赐姓为喻,即喻相如。

族谱上有明确世系传承记载的喻相如的后裔,现在多居住在浙江,安徽等地。据东晋成帝朝(326-333)尚书侍郎钟雅奉敕修撰的《喻氏家谱》之记载,喻猛、喻合、喻归等都是喻相如的后裔。另据明朝洪武四年朝廷和喻氏家族所签订的《喻氏合同》,知喻猛,喻希,喻迪冲,喻汝砺,喻樗,喻良能等都是喻相如的后裔。另据江西资溪嵩市喻氏族谱所载之《江夏统宗图》,在东周末代天子周赧王主政期间的大司徒喻宪,是喻猛的六世祖。由于历代战乱破坏,谱牒损毁遗失,喻宪和喻相如之间,喻猛和喻宪之间,现在尚未找到明确的世系传承档案。但有上述古代文献的记载,基本可以肯定天下喻氏的主干系一脉相传而来的。

前些年编修中华喻氏通谱过程中,由于能接触到的喻氏族谱资源有限,宗亲们根据所看到的部分族谱记载,尊喻猛为最早得姓始祖。喻猛,南昌人。公元89年官苍梧太守,族谱记载喻猛的父祖都姓谕,从喻猛开始才正式改姓喻。族谱记载他是郑桓公姬友(?-前771年)的后人分支,因汉代被赐姓喻而形成,实际上,在中国古代,“喻”与“谕”是通假字。本为一字。当今中国喻姓大多数为喻猛后裔。族裔最为繁盛。其发源地在江西南昌,即古豫章郡境。喻猛可确认为喻姓先祖,且已被南昌东晋喻襜墓考古发掘的文物所证实。但自从我们接触到东晋咸和年间钟雅所修喻氏家谱的谱序和安徽旌德喻氏族谱、浙江唐昌、临安昌化等喻氏族谱以及明洪武四年朝廷姓氏普查后和喻氏签订的《喻氏合同》后,我们觉得应该实事求是,尊重历史。虽然喻猛后裔最为繁盛,但他只是这一大分支的始祖。最早的得姓始祖应该是喻相如。从前述几大历史文献看,除开六朝梁武帝时的大将军俞药和唐明宗时的大将军俞药因皇帝赐姓由俞改姓喻外,其他喻氏各分支都来源于周穆王赐姓的喻相如之后。

这些族谱的记载,暂时还不能跟喻相如世系传承完全对接。这一方面是因为秦始皇因专制独裁而焚书,梁元帝萧绎因亡国悔恨而焚书,秦汉之际、晚唐五代、宋金之战,元末明初等战乱的破坏,以及二十世纪六十年代中后期的十年文革等文明浩劫的破坏,谱牒遭遇焚毁,缺失严重,中间必然存在断层现象。使原本一系的喻氏家族彼此失去联系。另一方面,也可能因为郑桓公姬友的后人那个喻姓分支和喻相如世系下来的喻猛合过谱,因此才会出现这种看似互相矛盾,而在官方文件中又被纳入同一个系统的记载的现象。否则很难理解为何东晋时期国家主持编修的《喻氏家谱》上的说法,可以得到浙江、安徽诸谱书上记载,甚至明朝洪武四年朝廷和喻氏所签《喻氏合同》的世系之佐证。

喻姓第三大分支是后唐明宗朝的将军俞药及其后裔。喻药本名俞本,为了纪念其主将药彦稠之冤死而改名为药,又因军功得明宗皇帝赐姓喻。这个喻药的后裔现在主要分布在江西万载,湖南平江、长沙等地。需要说明的是,梁武帝时的云骑将军喻药虽然也是皇帝赐姓,但现在还没找到他的后世世系传承的谱牒依据。且梁武帝时的喻药和后唐明宗朝的喻药是两个人。虽然他们都是武将。本姓都姓俞。都是皇帝赐姓。都身为将军。但两者相差数百年,不能混为一人。喻氏族人务必不要将这两个喻药混为一谈。这是我们要特别明确的。其次,迄今为止,,我们还没有找到梁武帝时的那个喻药后裔世系传承的记载佐证。

两千八百多年来,喻姓繁衍生息,开枝散叶,名人辈出。如周代著名政治家祭公谋父,辅佐周穆王的上卿喻相如,辅佐周赧王的司徒喻宪,辅佐晋成帝的尚书司徒、曲阜令、《西河记》作者喻归,和徐孺子齐名的庐山高隐喻合,东晋穆帝时的将作大匠喻希,南朝梁武帝的侍卫,云骑将军喻药,初唐开国元勋喻迪冲,中晚唐诗人喻凫,五代末、北宋初年的造塔大师、《木经》一书的作者喻皓,南宋初期名臣喻汝砺,南宋名臣喻樗,南宋“乌伤四子”之一喻良能,被誉为“天下清官”的明代刑部尚书喻茂坚,兵部尚书喻时,明朝兽医巨著《元亨疗马集》作者喻本元、喻本亨兄弟,明崇祯年间收复澳门的兵部尚书喻安性,明末兵学专家喻龙德,明末清初三大医家之首的喻嘉言。近现代有黄花岗七十二烈士之一的喻培伦,百岁辛亥老人喻育之,国宝级歌唱家喻宜萱,当代喻姓有棉花专家喻树迅院士,工笔花鸟画家喻继高,“疆独克星”喻林祥上将等杰出人才。 在中华姓氏历史上,喻姓一直被誉为帝王贵胄(哈哈),元圣苗裔。这“帝王贵胄”的意思是说,喻姓的祖先出自周文王之后。“元圣苗裔”的意思是说,喻姓得姓始祖祭公相如是周公旦的长子伯禽之后裔。宋代以前喻姓谱牒保存完整。在北宋初年依据社会影响力大小编纂的《百家姓》,喻姓位列第36位,据2017年全国人口普查数据,以人口数量排序,喻姓列247位。当今喻姓主要分布在江西、湖北、湖南、四川、重庆、浙江、安徽、贵州等地,在河南、陕西、辽宁等北方地区亦有少量分布。中华喻氏族史研究会(即今之重庆市历史学会百家姓文化专业委员会喻氏族史研究会)前些年组织全国各地喻氏力量,编撰有《中华喻氏通谱》1-4部,总计十巨册。喻氏家谱集中收藏地在重庆江津中华喻氏文化博览馆。世界喻氏宗亲总会近年来也主动肩负起喻氏族史研究的历史重任。在天下清官喻茂坚故里的开发和喻茂坚清官文化的发掘上,做过不少工作。

喻氏家谱,现在存世的已经公开的谱书,据不完全统计,约存近300种。2017年,我应浙江桐庐砚石喻氏的邀请,为其接续世系源流,编修族谱期间,为了弄清楚砚石喻氏的源流,我不得不到全国各地寻觅喻氏家谱。2018年年初,得重庆市历史学会姓氏文化专业委员会喻氏族史研究会之帮助,在重庆江津荣华酒店中华喻氏文化博览馆翻阅过200多种全国各地为修撰《中华喻氏通谱》历年寄送来的家谱文献。同年5月和7月,世界喻氏宗亲总会,江西省谱牒研究会喻氏文史委员会又分别为我提供了近百种扫描版喻氏族谱资料。感谢宗亲们的鼎力支持,使我研究喻氏族史的工作得以顺利进行。

在阅读这些馆藏家谱和到全国各地访寻喻氏家谱时,我都注意当场写提要。把各种喻氏家谱的主要信息及时记录下来。就这样,日积月累,形成了现在这本25万字规模的《喻氏家谱提要》。

我这本喻氏家谱提要和一般图书馆的书目提要有所不同。除开那些有关家谱的基本信息,我还有对始祖,始迁祖的记载,对相关支系源流的考证。对谱书中错误的考订,对体例不当的族谱的批评。简而言之,我希望这本喻氏家谱提要能够多一些学术含量。而不仅仅只是一本家谱式书目。另外,有兴趣阅读本人另一著作《族史管窥》(北京:中国书籍出版社,2019年9月版)者,最好结合这本《喻氏家谱提要》看。因为阅读全国各分支的谱牒是研究族史的基本功课。两书可互相配合。

族史研究最重要的是历史文献的汇聚和整理,因为研究族史不是写小说,必须用历史文献也就是历代流传下来的家谱包括相关出土文物说话。据我所知,散落在民间的喻氏族谱还有很多。仅从最近五年本人所经眼的喻氏谱书看,就有浙江唐昌、昌化,湖北大悟、竹山、陕西镇巴、石泉等处数十种重要谱牒,还有临安一位老道士的后人,为了躲避极左的迫害,将家中所藏老谱埋入了父亲的墓室。至今还有心有余悸的族人,不肯出示家藏旧谱。这些用各种办法保存的地上地下的喻氏家谱,既没有进入公家收藏目录,也没有出现在家族机构收藏目录之中。许多家族历史的谜底还在那些老谱中。当然,这还只是我有限的走访所见。至于没有接触到的,还不知有多少。因此,科学意义上的喻氏族史还在进行中。这里只是依据本人十年来所接触到的约300种喻氏谱书所做的极其简要的勾勒。不当之处,欢迎识者批评完善。

(本文系作者为《喻氏族谱提要》所撰自序)

from http://www.360doc.com/content/20/0419/20/16156500_907101965.shtml

------------

https://baike.baidu.com/item/%E5%91%A8%E5%85%AC/131359?fromtitle=%E5%91%A8%E5%85%AC%E6%97%A6

m1芯片的MacBook Pro

1月中旬的时候拿到了m1芯片的MacBook Pro,用了一个多礼拜了,整体来说非常的流畅,没有什么限制或者羁绊影响日常使用的。作为一个开发人员来说,目前只有Docker不能使用是略微麻烦一点的事情,除此之外真是没有遇到软件方面有什么真正的困难。

首先,令人最为惊讶的就是其超强的待机时长,20个小时妥妥的,丝毫没有夸张,对比之下之前Intel版本的MBP连4个小时都撑不下来。其次是键盘终于从铁板一块的蝶式回到了剪刀式,ESC键也回来了,苹果在这一点上真的是不用进步,退步就可以做的非常好,再退一步把TouchBar给退回来就普天同庆了。

我用的CLI的部分比较多,软件大多也都是Homebrew安装的,虽然iTerm以及Homebrew都已经支持了arm架构的M1系列机器,但是部分软件的安装还是存在问题,所以最简单的方案就是将iTerm直接制定以x86方式运行,然后再安装Homebrew,基本上没有遇到大的问题了,pyenv安装的Python可能会遇到一些问题,最后我都是直接使用Homebrew版的Python来解决。

总体而言,苹果这次把整个生态又一次的掌握在自己手里了,Intel最近是背腹受敌,加把油貌似还不太够,换了CEO不知道有没有什么改善了。

网页制作工具

做网页,我的常用工具包括Editplus、Coda和CSSEdit。

Editplus

在Windows上,Ultraedit太复杂,Aptana太笨重。Editplus小巧轻便,想开就开想关就关,一个字:快!无论是CSS、HTML还是Javascript我都用它包圆了。

Coda

Mac上很多人喜欢用Textmate,尤其是写Ruby的人更是对它赞不绝口。我则偏爱Coda,主要的原因是其用户体验好。不光是我这么认为,Apple也是如此-实际上,Coda是2007年的“Apple Design Award”获得者,奖项是“Best Mac OS X User Experience”。现在知道它的厉害了吧!

关于Coda的具体功能和特点,你可以去它的网站详细了解一下。顺便说一句,它的网站做的也是一流的棒!不仅视觉效果非常漂亮,而且和Coda的界面风格统一,更绝的是,就这样一个看似简单的网站,却发明了两种Javascript特效,一是“Download”按钮上面的浮动提示框,二是网页主体部分的滑动面板。目前这两种效果都已被jQuery爱好者封装为jQuery的插件。

CSSEdit

其实Coda也可以编辑CSS,并且功能也不赖,可是和CSSEdit比起来还是稍逊一筹。

CSSEdit最让我满意的,有两个地方。一是其代码提示的手感非常好,这手感堪比MS的IDE(比如VB),写代码时干净利落、一气呵成,爽快得很!二是其“实时预览”功能非常好用,屏幕大的话,左面放预览窗,右面是编辑器,一边写CSS一边看效果,不用保存、刷新和切换,工作效率之高可想而知!

另外,CSSEdit也是2007年“Apple Design Award”得主,奖项则是“Best Mac OS X Developer Tool”,它的官方网站做得也很棒!

我的移动Mac解决方案

我不堪忍受每天背着重达3公斤的MBP上下班长途跋涉,因此在公司申请了iMac。可是如何使两台电脑的数据保持同步?对于多少有些数据洁癖的人来说,这可是很重要的。

我所说的数据同步,不仅仅是指某个文件夹或某些程序的数据保持同步,而是当我需要时,我可以完整地使用MBP上的全部数据。比如我的照片、音乐、邮件、Adium聊天记录,乃至各种系统设置、自己编写的cron脚本和通过Port安装的软件包。简单地说,就是两台电脑的数据必须保持严格一致。

有人说这不难,市面上有很多现成的方案。开始我也是这么想的,但我查阅大量资料并逐一实践过去后,发现它们几乎全都不可行,好在最终我找到了自己的解决方案,这篇小文就是可谓一部血泪史。

Dropbox/SugarSync

这是我最初想到的方案。它们设置简单,并且因为支持增量备份,我不需要太多的存储空间和高速网络,花费虽然高了些但还勉强可以接受。

但试用下来很快发现两个问题:一是我严重地低估了每天使用电脑所产生的数据量,大量的数据在备份时还好,但在恢复时就会慢得无法接受;二是对于一些跟启动有关的文件,因为在恢复时系统肯定已经启动完毕了,所以此时再恢复它们就会失效或者冲突,并且这一点非常麻烦。

因此不仅是Dropbox/SugarSync不可行,其它的网络同步方式也都行不通。既然如此,要传输数据只能靠外置存储了。USB速度不够快,eSATA在Mac上没有接口,所以唯一可用的就是火线800,也就是1394B。下面就要考虑如何利用外置硬盘同步数据。

Apple Backup、Time Machine和Carbon Clone Copy (CCC)

这三者都是非常漂亮且稳妥的数据备份方案(Apple Backup不能备份所有数据),前两个是官方软件,老牌的CCC则有很好的口碑,所以我开始的想法是:能不能利用它们把数据备份到硬盘上,然后在另外一台Mac上恢复?

查阅资料后放弃了此类方案:它们无一例外不支持增量恢复,要让我每次在使用电脑前都花数小时恢复数据,那我肯定是疯了。

rsync及类似的实时同步工具

rsync还算是一个基本靠谱的方案,经过简单的测试,rsync配合cron脚本,可以比较好的完成两块硬盘间的实时同步工作。

rsync唯一的缺点是:它是黑箱的,你不知道在同步的过程中哪些文件出了问题,并且即使你愿意去看log,手工处理问题的成本也高到了你没办法做这事儿。

不过,既然已经用了外置硬盘,已经能够忍受rsync所带来的磁盘性能的降低,何不直接……

把OS X安装在外置硬盘上!

这是我最终选择的方案。具体地说,我是这样设置的:

  1. 买了320G 2'5寸硬盘,和元古双火线800接口的硬盘盒,拿到手才想起来这硬盘盒居然比硬盘还贵;
  2. 把硬盘分成两个区。一个是大容量的主分区,另外一个用来存放音乐、电影、下载和临时文件。这个分区被我命名为Second Sun,玩过COD 6的人应该对这个名字有印象吧。至于为什么要给硬盘分区,一会儿再说;
  3. 用CCC把MBP上的硬盘数据整个复制到外置USB硬盘的主分区上,然后把启动磁盘设置为外置硬盘并用它启动,此时算是完成了基本的工作,如果你不想继续折腾,到此为止也是可以的;
  4. 把主分区上所有你认为不涉及到隐私的数据,都复制到另外一个分区上去(对我来说就是那块Second Sun),然后在终端下用ln命令把这些目录链接回来;
  5. 如果你用Time Machine的话,你需要修改它的配置文件(一个plist),才能让它不会忽略/Volumes,具体方法Google即可。

现在来解释一下为什么要分区,并把不敏感的个人数据从用户目录中拿出来。这是因为我觉得比起一部电脑来说,一块硬盘丢失的可能性大大提高。一旦丢了,各种私人敏感和工作相关的数据都会泄漏,这可不是闹着玩的!因此必须对这些数据进行加密。

从易用性的角度考虑,OS X自带的加密方案FileVault是个很不错的选择。FileVault会对整个用户目录进行加密,而且要开启FileVault,你必须保证分区剩余空间至少是已使用空间的1倍,因此把大量的非敏感数据转移出去,既可以节省空间,又能大幅度地减少FileVault加解密的时间。

FileVault的负面影响

第一次使用FileVault的经历,大概比做一场恶梦好不了多少。

首先,如前面所说,FileVault要求用户目录所在的磁盘剩余空间,必须大于用户目录已经占用的空间,换句话说,FileVault使得硬盘的容量至少直接减少30%。

其次,如果你在开启FileVault时选择了“安全抹除原有的未加密数据”,那么在相当长的时间里你的硬盘都是满负荷工作的,因为所谓“安全抹除”,就需要在硬盘保存原有数据的扇区位置上进行大量的写操作。我一共开启过2次FileVault,平均来看它需要半个月的时间才能完成这个工作。在这段时间里磁盘性能会低到什么程度呢?这么说吧:连收到一条Adium的消息,UI都要停止响应3秒左右。一点不夸张,我当时和朋友聊天前都要先解释一下。更搞笑的是,两次安全抹除无一例外以失败告终。每次OS X在折磨我许久后,都弾出个框告诉我安全抹除失败。哦,对了,这个框不是在你打开FileVault的设置界面后弹出的,而是在操作电脑的任何时刻都有可能弹出来……这东西真不是Apple的临时工做的?

再次,开启FileVault后,Apple禁止在用户操作电脑时使用Time Machine备份,要备份只能在注销账户时。好么,它不是要花上半个月时间安全抹除吗?所以如果你刚开启FileVault,然后接上备份硬盘,规规矩矩地从系统注销,运气好的话你可以马上看到系统开始备份,但进度条绝对连动都不会动一下,我有一次等了一夜后早上起来看到进度条大概走了1/100。等吧,等安全抹除结束后就没这么慢了,你顶多需要猜测在注销系统后几秒、几分、还是几小时后TM会开始备份,因为注销后Apple不会给你任何有关的提示或按钮。

再再次,FileVault让Time Machine的时空隧道失效。你无法再使用官方提供的界面恢复单个文件,当然了,通过Finder手工恢复仍然是可以的。如果你看懂了的话,本段第一句是个一语双关的冷笑话。

最后,FileVault不支持OS X的“迁移助理”。用过迁移助理的人都知道这是个多么神奇的程序,它可以把你的数据几乎毫发无损地复制到另外一个OS X里,Time Machine和CCC都是整盘复制,而迁移助理能做到只复制用户数据(不仅仅是用户目录里的)。但对于开启了FileVault的用户数据,迁移助理无能为力。因此上次为了解决OS X 10.6.5更新带来的WIFI失效问题,我一狠心先备份数据再重装系统,结果恢复数据时十分杯具的只能先关闭FileVault、迁移,然后再开启,又是一次上述的痛苦过程……

当然了,数据加密就像数据备份一样,只有在出问题时,才会知道其好处,所以至少我现在不担心数据泄露或遗失。我使用这个方案有几乎5个月的时间了,成功减负以后我还能带着iPad或一本书在地铁上看会儿。

怎么在海外工作

没想到很多人问我怎么才能在国外工作。恰好我刚刚经历了这个过程,就索性把自己的经验分享出来。

1. 什么样的人适合

这篇小文主要是写给互联网从业者的。不过不管什么职业,最关键的是要有独立解决问题的决心和行动力

2. 什么样的人不合适

问别人这样问题的人就不合适:

  • (某国)移民局的网站是什么?
  • 我英语不好怎么办?
  • 我有很多问题要问,你能加我微信吗?

3. 去哪个地方

在上海生活久了,我就特别向往日照充足的地方(我自己编了个成语叫“无日不欢”),所以没事儿就在维基百科上查询世界各大城市的气候。时间长了,就对此类数据简直可说了如指掌。

总结下来,全世界有且只有三块地方,四季分明且冬天不冷夏天不热、阳光明媚且雨水不多。它们是地中海沿岸、美国加州和澳洲东海岸。这样美妙的气候,就是所谓的地中海气候

加州可以说是全世界互联网的中心,经济和文化之发达也是众所周知的,如果你实力强应该首选这里。不过加州最大的问题反倒不是对技能的要求,而是签证。H1B工作签证本来就僧多粥少,特朗普上台后就更难了。我面Google的时候,HR看到我申请了美国的职位,直接告诉我签证可能搞不定,当然后来没到要讨论签证的环节我就被拒了,这一会儿再详细说。回到主题,说实话我觉得曲线救国可能还容易点:去大公司工作然后申请内调走L1签证。

澳洲我一月份去玩了一趟。第一感觉是真是农村啊!我不是说没有高楼大厦就是农村,而是感觉澳洲不是个特别发达的地方,和同样是西方的欧洲比起来线条粗犷很多。不过天气确实很棒,即使盛夏也非常凉爽,和我国江南的那种桑拿天完全不一样。至于工作,大概是因为人太少,所以澳洲本地的互联网并不发达,工作机会很少。我大学同学移民到了墨尔本,他移民前后都在同一家跨国公司工作,他说在北京是项目追着人,在澳洲则是人找项目。

地中海沿岸中,西班牙的工作机会多一点,主要集中在马德里。另外其它大城市比如雅典也会有一些,这就要看运气了。如果你没有那么在意天气,甚至能够忍受冬天三个月几乎见不到太阳,那么西北欧有大量的工作机会,比如德国、英国、法国、荷兰和丹麦这些国家。特别是德国柏林,有非常多的互联网公司,而且创业气氛也很浓。工作语言则不必担心,我说的这些公司都讲英语。

接下来说一下日本。和中国类似,日本互联网的特点就是自己玩自己的,但不幸的是它的国内市场比中国小的多,而且由于历史和文化原因更加封闭。对于想去工作的外国人来说,最直接的影响,就是日本很少有工作机会,至少很少有非日语的工作机会。稍微扯远一点,我一直觉得我们东亚人民有点可怜。一是发达国家(地区)极少,二是没有共同语。最发达的日本和韩国都是自己玩自己的而且不说中文或英语,说中文和英语的新加坡实在太小,稍微大一些又讲中文的台湾我们又去不了。

最后说一下工资水平。毫无疑问美国的工资最高,计算机系毕业生在硅谷(湾区)的起薪就高的惊人。西北欧和北京上海深圳似乎处于同一水平线上,对我们来说甚至国内常常还要更高一些,因为工作久了就会有人脉和知名度嘛。澳洲和日本则感觉偏低。

4. 怎么找工作机会

想去海外工作,最大的问题往往是签证。你需要签证才能去国外合法生活并找工作,但反过来企业一般不会招聘没有长期签证的人,死循环。

愿意异国招人并提供签证的公司当然也不是没有,但就比例来说可谓九牛一毛。其实道理很简单:做过招聘的都知道异地招人是很麻烦的,而异国招人时,单单是协调不同时区的电话面试就不容易了,要进行现场面试和录用就都可能要折腾签证,而拿我天朝上国护照办理签证,难度就不用我再多说了吧……

但工作还是要找的,办法也是有的。这里介绍我自己的做法。一是使用专门的招聘网站,比如Who is hiringHN HiringAngelList,然后一家家投简历,我自己就用这个办法拿到了不少面试机会。另一个办法可能事半功倍,就是找猎头公司,比如WantedlyJusta,把你卖掉本来就是猎头的工作,所以他们会很乐意帮你。还有一条路当然就是找人推荐,实践证明这也是非常有效的,特别是推荐你的人本身很有知名度的情况下。

5. 英语

我刚才不是说我面试Google被拒了吗,就是因为英语。

前两次电话面试,一次是和在新加坡的印度人,一次是和在悉尼的澳大利亚人,这两次主要是HR了解我过往的经历,并介绍公司和职位,难度并不大。到了技术面试(我申请的职位是产品经理),是一个以色列人从欧洲打过来的。前面几次接通后,我听不到他说话,他大概也听不到我说话,反复接通挂断几次后我们终于可以通话了,但电话效果很差,而且我完全不适应他的口音,因此大概只能听懂80%,沟通效果可想而知,最后通话突然断了,我以为又掉线了,看了一眼手机发现没有,等了一会儿,只听听筒中传来一句“Thank you for your time”……

回想一下,如果是中文面试,那么即使通话效果不佳也能比较自如的应付,换到英语,语言本身就占用了太多的思考资源,导致回答的质量就会下降。简单地说,就是还不能像中文一样轻松自如地使用英语。

之所以写上自己的这段经历,是想说明真实的海外求职是什么样的。对方并不会因为你是中国人,就降低对你语言的要求,那恐怕是在国内的外企才有可能。一旦到了海外,对语言和跨文化交流的能力的要求就会一下子上升很多。因为,面试你的人很有可能就是在这样的环境中长大的,他们从小就一直在接触不同文化和语言背景的人,这和国内偶尔见到一个老外的情况就很不一样。当然,我申请的职位本来就对沟通能力要求很高,如果是纯粹的技术岗位,可能会容易一些。

顺便说一句,我考了一次雅思,成绩是阅读8、听力7.5、写作6和口语6.5。这分数对我来说有点糟糕,不过作为参考,如果你的口语和听力随便考一次都能拿到7.5的话,那么应该能比较好地应付面试。

6. 求职信和简历

这两样东西该怎么写,网上有很多教程,建议参考英文资料。另外无论怎样你都必须写求职信,因为这是基本的沟通技能和礼仪。我招人时,没有求职信的申请我一般都会直接拒绝掉。

7. 管理工作机会

我使用Trello管理我所有的工作机会。我把每个机会放进一张单独的卡片,标明公司和职位信息等等信息,再把这些卡片按照不同的进展放在对应的列表中,比如机会、已投递简历、面试、被拒和收到邀请等等,这样所有的机会都一目了然。

实际上我在招聘时也使用类似的做法,我认为这是一种很好的工作习惯。

8. 面试

面试是个熟能生巧的事情。老实说因为此前很久都没有求过职,而都是作为面试官参加面试,所以刚开始对此相当不习惯。不过我通常会在面试前做很多准备,包括内容和话术等,实践证明这很有用。另外一个建议,就是要抓住每一个面试机会,多练习,所谓谎话说多了自己就信了 XD

9. 写在最后的话

在海外找工作比国内要难很多,但求职面试的过程本身就是一种跨文化的交流,是一件充满新意和乐趣的事情,所以不管结果如何,都可以尽量享受这个过程。

最后最后,这篇文章是在黑莓Bold 9900上写的,衷心期待有人能带领全键盘手机实现伟大复兴。