June 2013

Automatic build xcode project and distribute to testers using Testflight

Here is my repo in Github:

https://github.com/hellosa/autobuild-upload-testflight

The script is help you build and archive your xcode project from command line, upload to testflight and notify your team members after finishing.

You can create an empty xcode project, read my README of the project and complete the configuration to go through it.

Enjoy !

Configure multiple default gateways in Linux box

Assume that you have a Linux machine which has 3 network interface cards, named eth0, eth1, and eth2. eth0 is 221.237.x.253/24, eth1 is 221.237.x.251/24, and eth2 is 172.16.200.1/22. Because there can be only one default gateway in Linux, the default gateway is 221.237.x.1 via eth0. Although eth0 and eth1 seem to be in the same network, and sharing the same gateway, but actually each of these 2 ip addresses has its own speed rate limit: 10Mb/s. We get total 20Mb/s ideally, but we can’t reach the max speed rate with the only one default gateway, that’s the problem. Let me solve it.

eth0 : 221.237.x.253/24
eth1 : 221.237.x.251/24
eth2 : 172.16.200.1/22 (for intranet, as the router of the local LAN network)
default gateway : 221.237.x.1 via eth0

Here is the situation, this Linux server, as the gateway of the office, I want to use it to route the traffic to the 2 network interfaces.

If some people on the local network want to access a specific IP address (e.g. 61.135.255.144), all the traffic flow through the eth1, all the other situations, through eth0.

1) Linux box, Debian 7, no matter which distro, just use the distro you like. I like Debian most.

2) iproute2, a powerful network utility package. I don’t like the old tools like “route” or “netstat” or something. iproute2 has integrated all the above network tools together. iproute2 is the swiss army knife for System Administrator.

In order to use “ip rule”, you have to make sure that,  the kernel configuration item, “CONFIG_IP_MULTIPLE_TABLES” should be set.

CONFIG_IP_MULTIPLE_TABLES=y

If your kernel doesn’t support this feature, bad luck, you have to recompile the kernel to accomplish the requirement.

Debian 7 ( 3.2.0-4-amd64 ) already has the feature, let’s skip to next step.

First of all, you must understand a concept: routing table.

$ ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

There are 3 routing tables here, by default, we are in the table main ( remember, not the table default !), and the other 2 tables are empty.

$ ip r s
default via 221.237.x.1 dev eth0
172.16.200.0/22 dev eth2 proto kernel scope link src 172.16.200.1
221.237.x.0/24 dev eth0 proto kernel scope link src 221.237.x.253
221.237.x.0/24 dev eth1 proto kernel scope link src 221.237.x.251

is the same as

$ ip r s table main
default via 221.237.x.1 dev eth0
172.16.200.0/22 dev eth2 proto kernel scope link src 172.16.200.1
221.237.x.0/24 dev eth0 proto kernel scope link src 221.237.x.253
221.237.x.0/24 dev eth1 proto kernel scope link src 221.237.x.251

“ip r s” is short for “ip route show”.

Now, let me do the job.

ip route add 221.237.x.0/24 dev eth1 src 221.237.x.251 table 163
ip route add default via 221.237.x.1 dev eth1 table 163
ip rule add to 61.135.255.144 table 163

Let me explain the above commands.

The routing table 163 has been created when the first command is executed. 163 is the number I like, you can choose yours, 99, perhaps. The table main, and the table 163, they are totally unrelated to each other.

1)The first command is to provide the information about the subnet.

2)The second command is to define the default gateway of the table 163. This is our SECOND default gateway.

3)The third command is to specify a rule to tell the OS when to use the table 163. Without this command, the table 163 is useless.

 

Now, if someone of the subnet wants to access 61.135.255.144, he use the router’s eth1 to communicate with 61.135.255.144.

Let’s have a look at the “ip rule show” again.

0:	from all lookup local
32765:	from all to 61.135.255.144 lookup 163
32766:	from all lookup main
32767:	from all lookup default

If someone has the LAN ip : 172.16.200.55 also wants to use the SECOND default gateway, we can use the following command:

ip rule add from 172.16.200.55 table 163

It’s pretty easy to understand, right?

0:	from all lookup local
32764:	from 172.16.200.55 lookup 163
32765:	from all to 61.135.255.144 lookup 163
32766:	from all lookup main
32767:	from all lookup default

If you want to clear the record of a table, just run the command:

ip route flush table 163

And remember, never run the command ” ip rule flush” when you ssh to this machine, because it will clear all the route rules, you will lost your connection.

American Dreams in China

中文译名:中国合伙人

陈可辛,一直是我很喜欢的导演。当然,我喜欢他绝对不是因为 2000 年后的几部电影。我最喜欢的是《双城故事》,然后到《甜蜜蜜》。他就是擅长表现那个时代,这次,他又带我们回到那个时代,所以,又赢了。恰好,我也很喜欢那个时代。

《双城故事》,让我第一次知道原来谭咏麟唱歌这么好听,尤其是唱 <Moon River> 的时候。<一生中最爱> 同样是一代经典了。那个时候香港的电影好奇怪,里面的角色喜欢用演员的真名,里面的 Alan 现实中也叫 Alan ,里面的 Eric 也叫 Eric ,当时的电影还有一个例子,就是周星星。曾志伟在这部电影里的表演,在往后的电影里,不会再见到了。“我一生最失败的就是爱上大海,它令我不可以脚踏实地。 ”

《甜蜜蜜》,张曼玉看到豹哥的尸体的 Micky 纹身,表情由笑转哭。单这个表情就可以赢得金像奖女主角了。

与其说我喜欢这两部电影,不如说我喜欢那个年代。

跑题了。跑回来。

尽管单从影片的中文名,加上主演名单来说,我是不会去电影院看的。但就因为陈可辛这个名字,我在上映后两天的周六,早早爬起来去北京我最喜欢的电影院百老汇电影中心(北京唯一有可能看到粤语电影的电影院)看了这部电影。在这家北京逼格最高的电影院看电影,可以看到大部分人都是很尊重电影人的,一般会等到字幕真正的完结才会离去(真正不尊重电影人的是电影院,刚放完就亮灯,甚至出来赶人),在 《岁月神偷》放映完时,大家起立鼓掌。虽然整个电影的故事,大家都知道与现在的社会有所相悖,但在某些情节上,我还是觉得很有激情,哦,叫励志。而女生可能会觉得煽情,观影过程中,频频听到周围女生的抽泣声。

影片开始的格调,还是轻松搞笑的。你想想,黄晓明说英文,你说搞笑不?(另外两位的英文,其实也没有表现出海龟和 GF 是鬼妞的水平。甚至好像有点后期制作过的感觉)成东青在电影中的逆袭,黄晓明同样从“闹太套”的笑话中逆袭过来,我猜,网民以往对他的英文的嘲笑,起了关键的作用,可见别人的打击,会对自强的人起积极的作用。

第一个泪点,孟晓俊终于达成自己当初的梦想,去美国前,和兄弟的泪别。可能大家对这个情景没有感同身受。但大家可能都试过大学毕业,想想离校前一夜,开心高兴兴奋,到了真正和室友说再见的时候,可能才会想起,也许此生没有再见的机会了。

第二个泪点,学生在废工厂,停电,所有学生打着手电筒让成东青能有光可以讲课。那个老师是幸福的。

第三个泪点,重遇苏梅。“我曾经无数次设想与她的重逢,我想,她会对我说,我会你今天的成就感到骄傲” 伴随着《外面的世界》的配乐。

第四个泪点,王阳的婚礼上,最后兄弟的反面,有点 social network 了。然后就是黄晓明的大哭。相信很多人会因为这一幕对他改观吧?

高潮,成东青,在 hearings,用背书的方式,告诉老外,这是中国学生考试高分的原因。擅长背书,为了考试的拼搏。可能是事实,但我不喜欢,不喜欢最后要用这种方式来还击。

 

大学时光过后,就和大多数人的现实生活一样,走向社会后,各种挫折,无论在中国或美国。异地恋开始的时候总会向着好的想,就像苏梅在机场,说,会回来,成东青听不到,这句话是她是说给自己听的。异地恋终会结束,口上说是败给了距离,事实上,从离开那一刻就注定了今天的结果。美国梦终会破碎,因为中国人在那边永远不是一等公民。

片中一个对现实最大的妥协的,是王阳。他选择了一个做饭很好吃的肥婆(原谅我用这个词,与鬼妞的选角的反差)作为终生伴侣。你会相信,这个王阳,在大学是诗人,混各种舞会,泡洋妞的浪子般的人吗?婚礼中,王阳和他的老婆,一个湿吻,镜头停留了好几秒。想象下,一个帅哥和肥婆的湿吻,好几秒。是败给了现实吗?还是已经安于平静的生活了?

“Do you have a Dream?” 这句话在国内这个环境问出来,内心中总有点不屑想笑的感觉。但紧接下来的这句对白,我马上笑不出来。”春梦算不算?” 从某个年龄段开始,我们就不再谈论梦想,开始调侃梦想,自己都想嘲笑梦想这个词了。却又偏偏到有人想笑梦想的时候,又喜欢跳出来,像黑胡子一样大喊:人的梦想,是不会终止的!喊完,又在想,我到底有没有梦想呢?

“梦想是什么?梦想就是一种让你感到坚持就是幸福的东西。 ”

还有很多“精彩”的对白。

中国的英雄是可以跪的,(当你还没有牛逼到姜文的程度时,放下逼格吧,站着是赚不了钱的!!)

我们这一代人最重要的是改变,改变身边每个人,改变身边每件事,唯一不变的就是此时此刻的勇气。如果我们能做到这一点,我们将改变世界。

假如生活欺骗了你,你会怎么办?你要欺骗回生活!(其实,是欺骗自己)

千万别跟最好的朋友合伙开公司。

到底是我们改变了世界,还是世界改变了我们。(单是台词就重复了好几次,还有苏芮的《一样的月光》)

如果额头终将刻上皱纹,你只能做到,不让皱纹刻在你的心上。

——————

影片最后,一个一个社会上认可的成功人物(老干妈 …)以照片的形式出现在荧幕上。配乐是罗大佑(这家伙现在就只剩下怀旧了吧)的《光阴的故事》。

也同样是泪点。 :-)

——————

同样地,电影配乐升华了电影,可惜我找不到原声,只找到了一个虾米歌单:http://www.xiami.com/song/showcollect/id/21558529 。

 

American Dreams in China,离我们比较远,好像只有 Dreams in China。电影说了太多太多,友情爱情,事业激情,我很喜欢。同时,电影太不真实,在中国,励志已经不能让人觉得励志了,只会觉得是骗钱。但我选择相信。如果真的注定是一个梦,那不要醒,因为在梦里,很幸福。