又一个python围棋工具库

既然已经有了pytools和其他成熟的python实现的围棋工具类库,为什么还要写?看起来是犯了重复发明轮子(reinventing the wheel)的大忌,但其实这里面存在软件工程(你看,又要婊软件工程这个概念了,有兴趣看此方面文章的请参考《软件工艺》一书)理解中的一个迷思:重新实现一个功能库就是重复发明轮子。在很多情况下,这两者的概念并不等同。另外,“重复发明轮子”在我看来本身就是好习惯,试想如果没有持续发明新的轮子,原始的木造车轮如何适应各种路面,我们也用不上成本持续降低但各方面性能都在提高的车轮。扩展开来说,正是由于不断有新车轮出现,人类社会才能一直进步不是吗。

“重复发明方形轮子”才是问题所在,杜绝无用的创造,不管它有多华丽。pongba老师的《锤子和钉子》一文中提到过埋头苦干,陶醉在自我世界中的框架设计者,看完后觉得浑身中枪。这便是方轮子的例子,“JOJO,我不重复发明方轮子了啊!”

大牛vczh曾经提到过他心目中学习开发知识的一个最佳流程,深以为然:

  1. 明确需求后,不管最好做法是什么先用自己的想法实现一个能用的
  2. 学习相关理论,反思自己想法中的问题
  3. 参考别人成熟、高效的实现进行修改
  4. 重写/重构自己的版本

等等,这篇blog似乎跑题严重,继续说这个工具库,地址在https://github.com/arakuma/py_golibs。考虑中分为三部分:

  • 棋谱文件(sgf)解析
  • 围棋相关的模型、规则定义
  • 网络对弈支持(gtp

这个列表也是整个库自底向上的层次。目前进度为sgf部分搞定,支持所有SGF FF[4]的定义。围棋实体部分完成了基本模型定义、对于sgf信息到上层事件的转换(将所有sgf node转换成Action类)、写了一个基本的演示用棋盘类;待完成的则是规则定义和gtp实现。

另外事件转换部分还有些问题,我之前认为以“添加棋子(AB/AW)”、“走一手棋(B/W)”为基本单元比较合适,但写着写着发现很多重要属性实际上不在这几个属性内,而是作为单独的属性出现,例如盘面价值(V)、图示(FG)等等,在不想将Action直接返回给上层使用的情况下,这些信息应该怎么通知还得想想。

对了,演示用的棋盘,本来计划用extended ascii的字符,期待中是这样:

 a b c d e f g h i
a┌─┬─┬─┬─┬─┬─┬─┬─┐a
b├─┼─┼─┼─┼─┼─┼─┼─┤b 
c├─┼─•─┼─┼─┼─☻─┼─┤c
d├─┼─☺─┼─┼─☻─☺─☻─┤d
e├─┼─┼─┼─☻─┼─☺─☺─┤e
f├─┼─☻─┼─┼─┼─┼─┼─┤f
g├─┼─•─┼─┼─☺─•─┼─┤g
h├─┼─┼─┼─┼─┼─┼─┼─┤h
i└─┴─┴─┴─┴─┴─┴─┴─┘i
 a b c d e f g h i

但这些字符在python中输出后基本都变成乱码了,不得已暂时改为下面这样。不过修改过程中顺手把之前懒得做的棋盘margin/padding/zooming都实现了。

SGF recorded with SGFC 1.16 by Arno Hollosi
Event 21st Meijin @ Nihon Ki-in on 1996-10-18,19
Black: Takemiya Masaki (9 dan), White Cho Chikun (9 dan)

   a b c d e f g h i j k l m n o p q r s   

a  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  a
b  +-+-+-+-+-+-+-+-+-+-+-+-+-+-B-W-W-+-+  b
c  +-+-+-+-+-+-+-+-+-+-+-+-+-W-+-B-W-+-+  c
d  +-+-+-W-+-+-+-+-+-*-+-+-+-+-+-B-W-+-+  d
e  +-+-+-+-+-+-+-+-+-+-+-+-+-+-B-+-B-W-+  e
f  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-B-W-+  f
g  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-B-+-+  g
h  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  h
i  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  i
j  +-+-+-*-+-+-+-+-+-*-+-+-+-+-+-B-+-+-+  j
k  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  k
l  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  l
m  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  m
n  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  n
o  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  o
p  +-+-+-W-+-+-+-+-+-*-+-+-+-+-+-B-+-+-+  p
q  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  q
r  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  r
s  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  s

   a b c d e f g h i j k l m n o p q r s

北京国际长跑节溜达了一圈

上个月在单位群里得到消息说今年的北京长跑节在4月办,还担心会不会因为今年天气普遍偏冷而跑得很痛苦。好在最近老天爷给面子,温度回升,早上七八点活动一下短袖问题不大。

参赛说明上写着“6:30检录”,实际上到发枪(7:50)前都可以,结果我五点多起来赶了个大早去……然后热身1小时有余\(▔^▔)/。

人山人海,几个组别加起来上万人,满眼都是热爱跑步的人,感觉很爽。开跑后强迫自己不要跟着牛人们的节奏走——实际上想跟也跟不上。但因为今天不光气温够高,空气也不错,整个状态起来后略微比平时提前进入了配速5’/KM的节奏。另外忘了给表设置距离提醒,心说这1KM也太长了,结果马上就看到了3KM的提示牌。

饮水处拿了一大瓶功能饮料,但只喝了两口就扔掉了,罪过——小杯装的都被跑得快的拿光了。

跑到9KM处出现极限,顶过去没什么压力,50分多跑完,比预想成绩好,而且膝盖和髋关节都没有反应。后面一半的路程,绕过天坛北门、东门后往南到玉蜓桥,再往西扎到永定门,也是我平时[跑10/15KM的路线。

和同跑的朋友讨论了一下,果然都感觉最后1KM缩水,跑表上的距离也显示只有不到9.7KM,整好差了体育场一整圈的距离。

run_20130414

(就没有几个网站能奈何火星坐标系)

之后北京还有长跑活动吗?貌似下个月有个50/100KM越野挑战(还限时+准入标准),这个就算了。弄不好只能等下半年的北马去挑战一下了。

p.s:Timex Device Agent刷新了我心目中“难用的客户端”之下限,什么iTunes什么Zune都不够看啊!

Timex Global Trainer到手啦

从开始长跑到现在经过了5个月,虽然提高不算快,但距离和速度都在慢慢进步。从开始跑个3KM就气喘吁吁的弱菜,到现在能以5’/KM配速跑上将近10KM,可以说长跑不仅在数据上让我感觉到进步的愉快,整个人的身体、精神状态都有了极大的变化。最近一个月天气渐暖(好吧,最近一段时间又冷了)开始逐渐将跑步地点从健身房跑步机改为跑道或者路跑,感觉到最大的难度在于保持速度稳定——变速跑实在太累人了。另外则是路线的规划。考虑到这两点决定入手一块跑表。

至于心率功能 ,不太关心,因为不太想在一两年内就追求速度或者继续大量减脂,所以心率区间靠我自己的心肺感觉就差不离。Garmin的Forerunner和其他系列的GPS性能没得说,但实在不喜欢触控环操作。后来看到了TGT的大屏能一下显示四个数据,立刻觉得就是它了。在跑步圣经上淘了块没有心率带的T5K267,因为有电池,SF陆运两天到手。

外包装就不放了。内容物包括表、自行车支架、电源适配、数据线、说明书各一。

WP_000139

具体的开箱评测和使用相关——例如数据导出什么的——可以参考光年大大的文章

明后天周末出去跑跑实际体验一下再来更新,这周跑量和其他运动量都太大,现在敲着键盘已经快睡着了。

豆知识:Toxic Leader

最近thedailywtf频繁发文婊那些不懂装懂的经典例子——虽然之前他们也发过不少——但最近两周的文章内似乎除了CodeSOD和Error’d外就是婊傲慢自大。婊过了同僚终端用户甲方之后,自然要轮到Boss或leader咯:The Tye That Binds。事实上之前那篇也是,但文笔、长度和欢乐程度都没昨天这篇好。

如果你打开链接后就想回复”TL;DR”或者“20字谢谢”的话,那么这里我缩写一下:

主人公Aargle负责某系统的开发。他的经理Tye说系统太慢了,让他处理一下——让他照着自己心目中的方案处理一下——将整个服务器备份后格式化硬盘再恢复,就像对付普通PC那样进行磁盘整理和重装系统。Aargle数次解释这样做不对,应该从程序入手而无果之后被告知“要么照我说的干,要么我找其他人来”。

无奈中他只好查找手册开始备份恢复工作,却看到手册上提到磁盘占用率到90%前系统会确保文件扇区内容连续,不需要手动介入进行调整。在确认当前服务器磁盘占用远小于阈值的情况下,他激动万分地给Tye看手册内容,然后被吼回来“你是要用这个违逆我吗?”。

作为有气节的程序员,Aargle到底还是没有按照Tye说的去做,但她监督Aargle的直接领导者Mack完全按照自己想法开始“提升服务器性能”。与此同时Aargle从SVN签出了代码查看到底哪里出了性能问题,发现有个叫做C.Pirouline写了烂到爆的排序程序。Tye(自豪地)说这位C.Pirouline是公司内的系统分析专家,时薪80刀,专门被请过来“仅仅用了一个月时间就搞定了这个整个系统需要依赖的部分”。但Aargle确定这堆烂代码远花不了一个月时间。

这个故事里面的Tye就是典型的Toxic leader:傲慢、刚愎自用且滥用职权。通常来讲这类人还会在因为自己的原因出现问题后将责任推卸到下属那里,就算是下属一直在帮他/她尽力避免和弥补错误也是一样。就像故事中的Aargle,恐怕之后因为服务器在备份/恢复后出现问题而塞到手里一口大黑锅。但现在还不知道,因为这篇文章可以说是难得在thedailywtf上一见的连载文,毕竟那是the DAILY wtf不是吗。顺带一提,已经有来自未来的高端用户帮我们发掘出了part 2的页面(目前还是空空如也)真正的part 2页面。,留言中网友Lorne Kates毫不留情地吐槽“I guess I know who got WTF’d today. :|”。

虽然可能程度上不同,但社会人或多或少都会碰到一些这类头头。我也不例外,但幸运的是是以第三视角看到的其他人的上司:对于别人的成果占有脸不红心不跳,无时无刻不在展现自己的权威带着大家把船往冰山上撞。下属们似乎已经习惯了这种形式,甚至已经形成了一套应对方法,让上司开心但又不影响工作效率,如果能亲眼看到的话,恐怕你也会对人类的适应能力感到佩服,同时觉得The theory of evolution翻译成“进化论”不是“天演论”还挺合适。

有关这个话题,或者想进一步了解有关Toxic leader,那么可参考的著作包括这本The Allure of Toxic Leaders: Why We Follow Destructive Bosses and Corrupt Politicians–and How We Can Survive Them,这里是它的摘要和介绍。值得一看的还有amazon上关于这本书的差评一则。很多人羡慕老外能在购书网站上发表长篇大论,将自己的读后感和看法供大家分享,以便后来人更好地选择读物。但考虑到我们有豆瓣,而且由于它的存在几乎导致各大网上书店的评论区已经变得没什么作用,多花一点时间移步豆瓣查看信息也不是坏事——当然,对于很多人来说选择书籍时候豆瓣才是起点。另外注意水军出没,上次刚有一例被广大人民群众给予了无情打击

一年来减肥 & 运动相关总结

如果没记错的话,从去年开始下定决心减肥到现在应该是整整一年了。效果很好,其中吃苦和快乐并存,今天略微总结一记,减肥部分供从事发福率比较高的IT行业、想恢复健康体态的同业者们参考;有关运动的部分会说一些这半年在力量训练和跑步上的心得,作为菜鸟起飞之后的一点收获分享。

身体状态的变化

去年开始减肥前,作为已经资深了20多年的胖子,实在是没有信心。胖到什么程度呢?BMI接近32,体重也一直从前年开始徘徊在182左右,高血压高血脂,脂肪肝中度偏重。每年能体会到的就是衣服越来越小、体检单上的上下箭头越来越多、进行大量体力需求活动时候越来越痛苦。多方面的刺激让我在信心超级不足的情况下制定了计划,好在计划制定过程中参考了很多资料,没有走什么弯路。

按照计划一步步走下来,效果显著且过程平稳。去年10月的单位体检时,体重到了140,BMI 24.2——这个体重和我初二时候一样了!并非夸张,因为在我高中毕业前,计算自己体重的简单方法就是年龄*10。

现在状态是体重128,BMI 22,BFR(体脂率)在13.5%左右。体检状态则是高血压、高血脂、甘油三酯这些之前超标大块的指标全部正常,脂肪肝完全消失。

减肥王道 = 饮食控制 + 运动

开始行动前的准备工作让我意识到饮食控制加上有氧运动才是减肥的王道。对于体态正常者来说,适度运动即可保持身体状态。但减肥者不行,运动足够但饮食结构和量级不改变,不会产生效果;光凭饮食控制当然可以减掉体重——注意,这里是说减掉体重而非减肥——体重下去了,但都是水分和肌肉,体形没什么变化甚至更加臃肿也是可能的。

至于更极端的一些做法,例如绝食、过度劳累等,当然也能减轻体重,但这些都不是正常做法,不仅对健康损害严重,反弹起来也会凶猛得很。07年我实习的时候,连续两个月,每个月加班时间在100小时左右,体重唰唰地到了170斤但没人说我瘦了。后来则直接反弹到185,惨不忍睹。

饮食控制

对于的确需要减肥且有心减肥的人来说,不要想着和之前、甚至和大家吃一样的饭量和种类了。减肥的基本要素就是在不降低基本代谢率的情况下,保证每天的摄入热量小于消耗的量。这里要再次提示,单纯靠饮食控制摄入热量,会让人基本代谢越来越低,更不要提随着年龄增长,代谢率也是持续走低的。更何况,人类是绝对无法长期同食欲进行对抗的。

首先要明确绝对不能摄入的食物种类:高糖类,例如点心蛋糕什么的(这点我倒是没什么感觉,因为之前也不吃)、饮料、零食(所有零食)等;高脂肪类,点心也算上,还有肥肉、动物皮、油炸类食品、快餐(赛百味除外)。当然也要因人而异,有人对于水果这类低热量食物却可以有相当高的脂肪转化率,虽然听起来不科学,但的确有这样的例子。所以除了高糖、高脂类之外,也要根据自己的身体状况避免一些不利于减脂的食物。

好东西则包括各类蔬菜,能生吃的最好;碳水化合物代替物,例如土豆、芋头、薯类等。

肉类的摄入也要跟上,大量的有氧运动会消耗肌肉,蛋白质补充不足也不行。这方面白肉好于红肉,鱼虾 > 鸡肉 > 牛羊肉。对,没有猪肉,尽量别吃猪肉,那玩意瘦肉的脂肪含量也不低。鸡肉我当时一直买鸡胸,便宜量足,开水焯好加点佐料直接吃。

每日的碳水化合物摄入量我在运动第一阶段一直控制在能接受的最小范围内,而且仅限于早午餐摄入。到了晚上基本就不吃这类食物,碳水代替物也是如此。这就是减肥这要在吃上忍受的痛苦。

这里只是泛泛谈一下,前两周给一个同事拉了一张系统和细致的减肥食物清单,有空再贴上来。

运动第一阶段:羽毛球和长走

有了饮食上的保证,才能安心运动。同事中有羽毛球爱好者,所以我的规律运动经历也是从最开始的4月到10月间这半年也是坚持每周三次羽毛球活动开始的。减肥需要运动支持,而且也是运动最好的动力。这半年间我(也是唯一一个)没有缺席一次单位羽毛球活动的参与者,从最开始拿个几十块钱的烂拍子穿着长裤瞎拍,到后来买了专业一些的装备并时刻关注羽毛球相关新闻,这期间获取的乐趣远大于所感受到的痛苦。

首先得益的并不是体重降低,而是之前被每天敲代码的固定姿势摧残得不像20多岁人拥有的肩膀又能灵活活动这个好处。体重则在这半年间以平均每个月8斤左右的程度下降——实际上最开始三个月的饮食控制并不严格,所以真正产生质变还是后来三个月这期间的功效。到了国庆长假期间,我也在坚持自己的饮食计划,而且配合了另外一种运动:长走。

减肥到了能让周围人觉得“你怎么瘦了”才叫有效果,可以说国庆节假期回来后这种效果在我身上体现得极其明显,因为休假期间我捡起了之前尝试过的“暴走”运动。前几年尝试过两次(12),没坚持下来。去年则系统地进行了一个月。可以说长走的效果不比慢跑差,推荐给体重稍大的减肥者尝试——当然,走的程度要到心率进入有氧区间位置,起码得走完后浑身湿透,所以也不能低估它的难度。后来我还在lang-8上写了相关的日记:都市ハイキングの試し

sporting_summary_walking

运动第二阶段:长跑

经过了第一阶段的减肥过程,体重已经进入了正常区间,而且天气渐冷,羽毛球活动也停掉了。于是我去办了张健身卡,选择长跑作为之后的运动。对于一个之前从有跑超过1500米经历的人来说,可以想象被教练告知“先跑个4公里吧,照着半小时”时候是多么的……想退卡。呼哧带喘跑完之后,真想下次不来了。

但为了提高自己的心肺功能,总算是爷们了一把,在周围都是办了健身卡一个月后就没怎么去过这样一种氛围下,我坚持跑了四个月到现在,并且已经把长跑当作乐趣。家里人现在不再唠叨让我每天多少运动运动,周末出去溜溜,而是觉得我运动过量——周末我有事甚至两天都要出去打球和跑步或者打球+跑步,三天不跑则感觉世界观崩溃一样。从上文提到的跑步弱菜到现在摸到了一些门道,达到可以15KM跑到1小时20分的程度,我才体会到跑步这项和自己对抗的运动虽然简单,但也是可能一辈子都摸不透的东西。

而且直到现在,才能理解村上春树那本《当我谈跑步时,我谈些什么 》里面所提到的一些跑者相关的想法和行为,例如不要给周围人推荐跑步这项活动,因为真的是“对长跑感兴趣的人,你就是不闻不问,他也会主动开始跑步;如若不感兴趣,纵使你劝得口燥舌干,也是毫无用处”。

跑步的时间虽然不长,但还是有一些心得体会。例如装备,虽然不能靠这装备提高自己的成绩,而且一般跑者也没有必要去追求成绩,但还是需要适合自己的好装备保持身体健康。两周前入手了一双Mizuno的宽掌跑鞋,才感觉到自己的大肥脚丫子有救了。有关跑步全身装备的专业的文章可以参考光年大神的系列文

另外长跑则是需要“听从自己身体”的运动 ,和力量训练不同,跑步时身体的信号一般都是“不要再坚持”,这个时候就停下来,别继续勉强自己带着痛苦的肌肉或者关节跑下去。不然结果恐怕会是得不偿失——伤了之后恢复期短则一两周,长到几个月的也有,这期间不光是身体上感觉没有规律运动不适应以及没有运动造成身体状态下降,还有心理上在重新跑起来后“十年怕井绳”的不良状态,会导致惯有的姿势变化,让身体其他部位分担过份压力出现未来伤情的隐患。

有关力量训练

既然提到了“听从自己身体”的运动,那么说一下力量运动中相关的话题。和长跑等有氧不同,力量训练中的信号一般都是“支持不住了”,这个时候一般还能再顶一下,比如还能再做一个引体、还能再推起来一下、还能再多拉动两次……一定要挑战自己的肌肉极限。

一般人是否需要力量训练呢?我觉得一定要持续性地进行一些肌肉练习,瘦人可以增长肌肉,加强自己的身体素质和提高基本代谢;减肥者更要增大强度,会让有氧运动事半功倍,也能弥补在减肥过程中损失的肌肉(这是不可避免的,大幅度降低体重不可能光减脂肪);长跑者也需要练习力量,腿部的力量耐力更好是大家喜闻乐见的自不必说,上肢力量和腰腹的锻炼也是至关重要。个人体会是这样,有兴趣的话也可以搜搜相关的文章。

在第一阶段运动结束后,我发现自己虽然体脂率降低不少,但并没有达到满意的效果——肌肉跟不上。当时的体脂大概是17%,算是正常范围内。但肌肉线条几乎还是和以前一样不清晰。于是决定从腰腹力量开始练起。当时正好在论坛上看到了有人推荐Tony Horton创造的P90X训练法中的Ab Ripper X(国内一般叫伏击撕裂者)部分,决定从它练起。看了一下17分钟的视频,觉得“这我还做不下来”?结果第一次尝试时候几乎受到了无比的打击:别说做不下来,我连1/5都没完成!25个动作一组的练习量,我减到了5个一组才感觉可以勉强坚持。

之后被告知,做不下来OK,可以减每组的量,但每个动作都要做到。于是我持续两天一次,能多做一个就多做一个,过了一个月已经可以完成一半。到年底时候则能25个顺利完成(动作标准度有待考察)。事实上,这套训练真的效果明显,两个月时间就让我从一块腹肌变成四块,到现在六块的线条也已经可以看到。

开始跑步的时候,我也给自己制定了练习其他部位力量的计划。开始的时候一周三练,后来跑量有些大减到两次。这才感觉到如果想同时兼顾长跑和力量训练实在是太难了,需要付出多几倍的精力才行。所以这方面也是要做取舍,时间精力都够的话自然最好,但不能的情况下,看自己的目标了。

有关力量训练的部分,可以多多参考知乎上的达人陈柏龄,例如他这两个精品答案没有锻炼基础的人,如何增肌与减脂?为什么美国有那么多肌肉极其强大的肌肉男?,可以避免不少减脂和增肌的误区。以及S1上这位小二在,在此想引用他一段狂赞的评论:

运动塑形这个事情,你需要有一个ideal self image,就是你理想中的自己,然后去落实。
所以知足的胖或瘦都是完全没问题。有问题的是整天嚎自己太瘦或太胖又不去改变。如果你的ideal self image不是现在的样子,你却啥也不做干瞪眼,那你就是个loser。

有关健身房的一些

因为现在也还是菜鸟阶段,所以只能说两个事情。

一个是关于跑步。有条件的话,除了在跑步机上练习之外,还是要出去路跑或者跑标准道。有人觉得跑步机比路跑难,有人则觉得正好相反。我的体会是路跑难度在于速度的保持。红绿灯、行人和车辆的阻挡外,顺畅路段是否能按照自己的速度跑下来很关键,变速跑练习体能很棒,但在长跑中恐怕顶尖高手不是为了打乱对手节奏也不会采用。

另一个是关于私教。私教一般都比较贵,如果你自身没有力量训练的基础,周围也没有人提供执导,买一些私教课是必要的。但最好打探一下教练的资质和实际能力。单纯为了减肥去健身房,就用不着了,耐心地有氧做下去,变化自己就能看到,这里则要赞同一下陈柏龄的签名“减脂是体力活,增肌是技术活”。