2010/3

你们知道的太多了

不知道怎么回事,除了我那几个朋友之外,在我这里留言的人几乎每次都在变,每次评论都有不少需要审核的,给我的错觉是怎么这人换了一茬接一茬?你说是不是某些人闲着蛋疼老是换ID捏?

反正,总体上给我的感觉是这里来的人太多了。

我有的同事也知道我的博客。我就纳闷了,我又没告诉他们,他们怎么就知道捏?如果万一哪一天我那美国的上司也知道我的博客,然后借助 google translate 来看,那我写着写着估计连奖金都没了!这让我写博客很尴尬——公司的不少事不能写;家里的事想写没啥可写;技术的东西吧,不能老写;写贵国时政的东西吧,这种事又不能写太细!

写博客这种东西,就像是吸毒,明知道有害你还偏偏上瘾!有百害而无一益!写技术吧,费力又不讨好,写的不好了遭骂遭鄙视,写得好了被转载了半天连出处和作者都找不到的。这还不如稍加润色润色,整理整理,然后投给杂志社什么的,这样还能赚点儿零花。写生活吧,唉,本来就那么点儿糗事这么一说谁都知道了,连从未谋面的人都知道,搞得跟路人皆知似得,很尴尬。爷们儿还好些,关键是姑娘!你说要是哪一天我约一个姑娘出来,人家姑娘第一句话就是:我看你的博客了,我觉得你是一个^%^&#的人……刚见面就被剥了两层皮!情何以堪?而且你说写这玩意儿有啥用!能当饭吃嘛?不能。能当姑娘看嘛?也不能。而且也没见有哪个姑娘说我看了你的博客想认识一下你啊!

写博客最好的状态是只有你的朋友们知道,写了也是让他们看的,省我电话费。其他人看了就是知道的太多了!

所以本博即日起决定进行分级分类处理,技术的东西放到一个博客上,生活等其它东西放到另一个博客上。正好,最近空间提供者 cocobear 同学在转移空间,我的博客也需要拆迁搬迁。而且鉴于国内大局域网发展的大好形势,也为了不给党国抹黑,本域名 wangcong.org 已经决定移民人quan环境最差的美利坚。所以未来几天内,本网站及其博客将处于被维护的状态,开放时间未定,视美利坚信产部备案手续审核时间以及本博主心情而定。重新开放后本博内容将会因此做出调整。

哦,顺便说一句,我最近心情不好。你懂的。

工作和生活

有同学说我工作和生活不分,这其实蛮对的。对于一个上班时间打台球,下班回家继续处理邮件的人来说,工作就是生活,生活也是工作!水乳交融。

可是,比起我们西朝鲜的领导来,我真是太惭愧了!看看日记局韩局长,工作时间在家玩手机,下班后仍然坚持在妇女工作前线,夜深了也要加班加点和女同志在床上讨论工作。这样的领导难道不值得我们学习嘛?这样的精神难道不值得我们提倡嘛?国家有这样的好领导让你先感谢国家咋了!你还有什么不满的呢?有什么不满组织给你解决!

恩,这个国家我先感谢了,你随意!

对“富饶之城”的改进

本来我不喜欢打桌游的,尤其是“三国杀”,第一次跟别人玩时觉得规则太复杂,可能是我们人太多的原因,记得当时有十个人,一圈打了近一个小时。

后来过年回家时和一个哥们坐硬座,为了打发时间就一起打起了桌游。他当时带了两种牌,一个是“三国杀”,一个是“富饶之城”。我刚学会打“富饶之城”便喜欢上它了,感觉它规则比较简单,可玩起来很复杂,讲究策略和心理战术。“三国杀”也跟着他仔细学了学,虽然会打了但是还是感觉规则太繁琐,而且运气成份太大,有时候大半天都摸不到好牌,只能郁闷地一过再过……所以我还是喜欢“富饶之城”。

买“富饶之城”的牌会送一本规则说明,我们一开始打时没仔细读,导致在一些细节打法不对,后来看着说明更正了。但是直到昨天才发现我们还有两个地方打的不对,我认为这两个地方值得商讨:

1) 若一个玩家建成8个建筑,游戏便在该回合结束时结束。而且,最后一个出场的“军阀”(假设你没有加扩展牌)不允许拆拥有8个建筑的玩家的城市!我们之前打的都是允许。我觉得允许才更有意思,因为当某个玩家建了8个建筑时游戏不会立即结束而是等到这个回合转完才结束,这么做无非就是允许后面的玩家继续建建筑,因为第2个建够8个的玩家会加2分。既然允许后面的继续建,那就也应该允许后面的“军阀”去拆,这样才会使最后的胜利不至于很容易倒向第一个建够8个的那个玩家。

2) 第一个建够8个建筑的玩家可能获得的加分太多,比如我如果建了5种颜色的建筑,那么我第一个建够8个时可以加7分!7分是个什么概念?如果你打过你就知道,建一个7分的建筑有多么不容易!最后加分太多就会导致前期更注重建筑数量而不是质量,反正后面有4~7分可以加嘛!我只要保证我不落后别人那么多分即可。而且,如此一来,“建筑师”角色到后期会成为重点防范的对象,只要谁建够5个了,那么那个人就得开始被全场人提防了!

以上两点都是在照顾第一个建够8个建筑的玩家,过分地鼓励了注重建筑数量而非质量,这让该游戏失去了更多的精彩。

我觉得可以这么改进:

1) 允许“军阀”拆建够8个建筑的玩家的城市;

2) 减少最后的加分,比如:建够5种颜色的建筑加2分,第一个建完8个加3分,第二个加2分。

如果你觉得这两条太激进,你可以考虑只选择其中一个。

其实,桌游打多了你就会发现,设计桌游最重要的是什么?平衡!一定要做到游戏玩起来时各个玩家之间的平衡,平衡只要稍微被打破,出现一边倒的局面,这游戏就不好玩了。至于里面有多少运气成份,那要看你个人喜好了,我不喜欢运气成份太大的桌游,因为思考在某种程度上被弱化了。

另外,打桌游没必要太遵守“规则说明”,自己觉得怎么打更合理就可以怎么打。

以上是个人意见,仅供参考。

仿韩峰体日记一篇

3月12日星期五-2――8℃晴

上午到了公司,继续检查昨天发现的 bug。中午和其它几个部门搞了个Lunch&Learn,讲了很长时间,我吃了两盒饭。下午提前下班去踢球,晚上凌晨要开会。吃完饭和同学在家打了桌游《富饶之城》,输了。

神啊,赐个妞儿吧!

唉,你不知道,我的苦说三天三夜都说不完!

你说,人生咋就这么坎坷捏?时运咋就这么不济捏?命途咋就这么多舛捏?

你说,找姑娘这么种事儿,说简单吧也简单,没准三言两语就勾搭上一个;说难吧也难,没准相亲相了四五十个也碰不上一个对眼儿的。可为虾米这种事儿到我这咋就如此难于上青天捏?

说来话长……

很久很久以前……

我上高中那会儿,喜欢一个文科的姑娘,正儿八经的美女。那时多傻多天真啊,连搭个讪都不好意思!况且高三文理分明,隔行如隔山啊。最后千辛万苦啊,跋山涉水啊,好不容易才认识了人家姑娘吧,上大学去了,当然不是在同一个地方,然后没多久散了……

然后上了大学。事实证明人的进化是和环境密不可分的。以前上高中时下课还可以遥望一下文科班美眉,身在理科心在文嘛!上了大学就不行了,整个新校区基本上全是理科恐龙,要望只能去隔壁的师大或者“可望不可及”的外院。而且,你想想,万一哪天校园里蹦出个美女来也是狼多肉少啊,僧多粥少啊!你还没闻到姑娘的味儿姑娘就被抢走了!久而久之,对女生也就没多大兴趣了,终于进化成奥特曼了!

忙忙碌碌过了四年,毕业了,上班了。我一直以为我的大学够杯具了,上班后我发现我错了!作为一个搞挨踢的男青年,公司里的女的(注意,是“女的”,不是“女生”)竟然还不如以前上课教室里的女生多,而且结婚的结婚,生娃的生娃,有些简直都可以叫大妈了。这叫我们情何以堪?所以每天只能仰面四十五度,对着黑黑的电脑屏幕(对不起,不是哥装13,哥用的是 console 界面,而且屏幕有些高),内牛满面……

其实那段时间也不是没啥发展,我又不是太宅太腼腆太害羞的那种,偶尔碰到看得上的美女也搭讪。看看人家别人怎么搭讪:“哎,姑娘,这块砖头是你丢的嘛?” 再看看咱,挨踢青年怎么搭讪:“喂,这位女程序员同志,请问这XXX源代码中YYY文件第Z行是你写的吗?问题其实是这样的……” 结果可想而知嘛!姑娘也许会说:“你才是程序员呢,你们全家都是程序员!哥无恩!”

于是我没事还出去旅旅游,旅途上可以顺便看看有各地特色的姑娘,也确实遇到几个不错的姑娘,说中文的有,说洋文的也有,可问题是人家姑娘才认识你多久啊,总不至于跟你回西朝鲜的首都这种破地方吧?再说了我又不是犀利哥,哪有本事去勾引姑娘们来?还不如好见好散咯。所以不要动不动就喜欢姑娘!博爱可以,但要爱对地方!

转眼间时间到了去年,认识了那么一个姑娘,正儿八经的文艺女青年,学文学的,腼腆内向,有时还会害羞,聊也聊得来,说也说得开,也有很多共同喜好,总之呢,挺合适的,也挺喜欢的。可姑娘偏偏要回家考研,她又是个好学的姑娘,所以很长时间基本上见不到人。等呗,等考上再说呗,可成绩一出来偏偏又没考上,得了,北京人家不来了!散吧。

你说说,这到底是怎么回事儿捏?说我长得丑吧?不至于,咱也有好几个姑娘追过啊,虽然追我的姑娘长得确实不咋的……说我性格不好吧?也不是啊,咱虽然不算是阳光灿烂型的,可至少也是开朗型的。只要不是某些极品人士,都可以谈得来。是猿粪问题吧?对不起,我都这把年纪了,这玩意儿我早就戒了!是我要求高吧?也不高啊,只要是长得说得来的,说话谈得来的就成,这怎么说也不算挑剔吧?

唉,你说我还能怎样!神啊,赐个妞儿吧!

网络端口预留

最近这些天我在做内核的一个新功能:/proc/sys/net/ipv4/ip_local_reserved_ports,这个文件的作用是告诉内核保留一些指定的端口,这样以来对于那些使用固定端口号的第三方应用程序来说就能保证它们总是能成功使用这些端口,而不是被内核自动分配端口时抢占。

我们知道在调用比如 bind(2) 时指定端口0其实是告诉内核自动去分配一个可用的端口,这个端口是随机的,而且范围是在 /proc/sys/net/ipv4/ip_local_port_range 指定的之内。不光 bind(2),你调用 connect(2) 时也会自动获得一个端口,它也是这样得到的。所以,如果我们都使用端口0去让内核分配端口世界会很和谐,各个程序相安无事,但是很多服务器程序需要有个固定的端口的,随机分配的端口是不能接受的,于是就有了那些已知的固定端口号。问题还没解决,如果我们的服务器程序的端口号不在里面怎么办?去 IANA 申请吧,不至于,可能你的程序不够知名,或者 IANA 没有批准等等申请不上,怎么办?

一个方法是使用那个 ip_local_port_range ,把范围调整到不包含你的端口的范围。这样做有个明显的缺点,如果你的端口号正好在当前 ip_local_port_range 的正中间,那样会有一半的端口都要被排除掉了,而且很明显 ip_local_port_range 的本意也不让你做这种事的。于是就有了 ip_local_reserved_ports,引入它的目的就是为了让你在这种情况下预留端口。

我写的最初的补丁只支持像 ip_local_port_range 那样的输入格式,比如:”50000 50100”,但是 Octavian 觉得这种格式灵活性不高,如果能支持指定多个任意范围的端口号那就更好了。于是他接过我的补丁继续做,从我的 v2 一直到现在的 v6,期间经过了多次讨论和测试,现在基本上已经成熟了。如果不出意外,应该可以汇入到主线内核中。新的 ip_local_reserved_ports 可以支持“50000,50100-50200” 这种格式,可以非常方便地指定要预留的单个端口或者端口范围。

注意,ip_local_reserved_ports 和 ip_local_port_range 关系不大,前者里的端口完全可以在后者的范围之外,这么设计一是为了简单,二是为了防止竞争,你可以先把 ip_local_port_range 调整到你预留的端口范围之外,然后等写好预留端口的列表之后再把前面的范围调回去。比如我们可以这么写代码:
[bash]
from=cut -f1 /proc/sys/net/ipv4/ip_local_port_range
to=cut -f2 /proc/sys/net/ipv4/ip_local_port_range
if [ “$1” -lt $to ] && [ “$1” -gt $from ]; then
echo “$from $[$1-1]” > /proc/sys/net/ipv4/ip_local_port_range
fi
original=cat /proc/sys/net/ipv4/ip_local_reserved_ports
original=”$original, $1”
echo “$original” > /proc/sys/net/ipv4/ip_local_reserved_ports
echo “$from $to” > /proc/sys/net/ipv4/ip_local_port_range
[/bash]