这是我在2011年2月份珠三角技术沙龙iOS专场上面使用的暖场讲稿。附ios+tutor录音。
当天很多精彩的Topic,沙龙以后还会继续推出移动应用开发的专场,请保持关注 :)。
下午,一位同事急匆匆找我,说他在操作TotoriseGit时不小心点击了删除菜单,导致本地的项目整个被删,问我有没办法恢复。我看了看他的提交历史,最后一次提交居然是在几天前,基本上可以认为,这几天做的修改可能都要打水漂了。因为Git对代码版本控制的最小粒度是Commit,即一次提交。这几天下来积累的未提交代码没有被Git管理起来,一旦删除,将无法通过Git的手段来恢复。
发生这种灾难性的结果,不能只怪TotoriseGit没有做好删除确认这一步,更应该检讨自己没有养成良好的提交习惯。
关于良好的提交习惯,我在之前的文章中已有说明,其中一点就是控制好提交粒度,也就是提交的原子性,在此,我需要再补充一点,就是尽量使用小粒度的提交,用频繁的小粒度提交来代替较少的大粒度提交,即一天可以提交3次的话不可等三天再提交1次,因为累积的未提交代码越多越容易出问题:
按理说啊,程序员同学们应该享受提交代码的乐趣才对,该提交时就提交,别太腼腆了啊!
所幸的是,该同事几天来做的修改大都是新增代码文件,没有加入版本管理,TotoriseGit删除文件的时候没有把这些文件一起删除,解决办法就是checkout一次HEAD的版本再把新文件加进去,补充少量丢失的修改,也算是不幸中的大幸吧。但建议不要因此而抱侥幸心理,以后继续累积几天下来再提交一次代码。这次的教训值得深省了!呵。
另,为防止同类事故继续发生,我另一位同事给出了不在TotoriseGit菜单里显示删除功能的设置方法:
使用windows git的GUI的同志请注意,由于delete命令没有确认窗口,为了防止手震点到导致误删除,请空白处右键菜单进入setting,选set Extend Menu Item,勾选上delete和delete(keep local)。就可以屏蔽菜单里的删除(需要用到这两项的时候按住shift然后点右键就可以看到他们出来了)。

上个月筹备技术沙龙2月份的iOS专场,突发其想,既然是iOS专场,那手上这些iOS设备应该最大化的利用起来,于家有了这样一个想法:在iPad上开发一个签名应用,让到场的每个人用手指在上面画上自己的名字,然后马上同步到连接着投影仪的电脑上,电脑就把刚收到的签名显示出来,让全场的人都看到。
我花了一点业余时间完成了签名应用的第一个版本,项目名叫iSign,然后让网易的双木小神童同学给快速做了个Web展现界面,项目名叫iPicWall。我们当天在沙龙即将开始的前几分钟完成了预演。接下来就开始使用iPad签到了:
签名后,按一下同步按钮,马上在投影上出现自己的签名了。
有意思吧?反正我和双木都觉得非常好玩。以后我们还会继续把这个小玩意完善。
其实沙龙就是这样才好玩。
1、这个冬天(其实是寒冷的感觉)有点漫长,这一场连绵的春雨还夹着冬天的冷意,不知还要下多久。
2、大人们的春节果然都是那么无趣,探探亲,走走访,我们今年春节期间那么好的天气就这样送人了。
3、春节我又回了老家一趟,我想,不管怎样,以后一定会在我出生的地方老去。
4、老婆第三年跟我回家过年,我以前许过的隔年陪她回一次娘家过年的承诺从来就没有兑现,但她很理解地说,我一想起阿婆的眼神就抵抗不住要回你家过年的念头。谢谢你。
5、今年连正月15都没法抽身回去看望老丈人了,管理一个额外的iOS团队和面对一位要求极高的客户让我看起来像上足了发条的机器人。我想要在下周的iOS沙龙上寻找一位搭档接手我的工作。
6、ET团队前两天刚过完Sprint规划会议和工作量评估会议,都自觉地进入了作战模式。试验站立会议两个月后,Scrum的其他玩法悉数加入,对本月的迭代效果甚是期待。
7、楼价疯涨、物价狂升、生活成本越来越高,疯狂的世界啊,我去!
8、人还清醒着,手脚冰冻着,忙着,连忧伤都变成了侈奢品的时候,我脑子里应该想些什么?
9、这个冬天真的有点漫长。
10、晚安。
猫纸,即广东话说的CheatSheet。
这份Scala猫纸其实是一份示例代码再加上一些说明组成的。该示例代码是从我在上一次珠三角技术沙龙使用的版本精简过来的,代码行数缩减到了100行以内,里面已经包含了Scala大部份常见的语法以及特性,仅供新手参考,高手请无视。其他更高级的特性由于时间和篇幅的原因没有包含在里面,如类型的隐形转换、并发编程的更高级使用方式、“:”的乾坤大挪移神功等等。这些容我在以后的关于Scala DSL或分布式并发编程的文章中再进一步说明吧。
这里也顺便讲一讲这段代码的歌词大意吧,注意了,第56行开始才是主程序的入口:
从前有个叫techparty的用户组(Group)在举办活动,有一些技术爱好者(Member)参与了活动,活动开始时大家先自我介绍,然后带来Topic的成员开始宣讲,活动完毕以后大家一起去了聚餐,最后各自返家。会后有很多人来询问关于techparty的一些事情,组织者忙不过来就分发给几个组委来同时回答这些问题(并发编程原型),没想到,问题的答案竟全是一样的:名字叫Jeff的人实在太多了。
好了,不妨碍大家用纸。点击有大图!
这几天忽然发现iTouch4已内置Mic,可直接录音了。想想也对,人家都可以facetime了,为什么不能录音呢?于是拿它来录了一些东西来做试验,在iTouch上试听效果不错,没想到放上电脑上效果更佳,m4a格式果然非同凡响,体积小,效果佳。以后珠三角技术沙龙的录音技师非iTouch莫属了!
回正题,有了iTouch4这么一个强悍的录音机,于一个喜欢弹琴唱歌的而言可是如获至宝了。再者,赖总说,录音如镜!我们除了可以在录音中自省、寻找自己演讲的不足,更可以用于监视自己演唱过程中的缺陷。于是我决定以后经常用来录自己的弹唱,从中发现不足并提高技巧。还会挑一些录音放到博客上面来──会有翻唱歌曲,也有原创歌曲,我会为这些歌曲配上一些故事。这些文章将会成为一个系列,名叫边走边唱,以另一种方式记念我们(嗯,我们)的过去,现在还有未来。
我一直记得瓜老师的教诲:你喜欢唱歌就得大声唱出来,让别人能听见!可惜只是最近才完全明白当中的含义:其实做人也好,做技术、做产品、搞音乐也好,都应该放得开手脚,尽早地、大胆/大方地表达和展示自己,才能听到别人的批评或赞许,才会有取得进步,否则,永远躲在一个角落蚊声哼唱的结果就是像我这样,花了10几年才学会唱歌。在此再次感谢瓜老师的指点。
今天录了一首《歌》,嗯,罗大佑的曲,徐志摩的词。
知道《歌》,是因为刘区,8年前,他用一段很精彩的木吉他前奏开始,让我们直接感觉到《歌》的曼妙;7年前,我们毕业前在学校举办的原创音乐会终结时,作为键盘手的他用电钢琴现场演唱了《歌》:“我给大家唱首《歌》”;虽说现在刘区已皈依佛门,过午不食,我还是能清晰地记得他当年张狂的朋克模样,然后变得收敛,最后皈依的过程。我们认识、一起在宿舍录歌、乐队疯狂排练、因分岐而争论等场景历历在目,我们是一首歌!也许,最能代表刘区的,就是这首《歌》了。区,现在,我给你唱首《歌》吧。
录音文件:《歌》 ,文件格式为m4a,现普遍的播放器均可播放,请下载后试听。
附上《歌》词:
当我死去的时候亲爱的你别为我唱悲伤的歌
我坟上不必安插蔷薇也无须浓郁的柏树
让盖着我的青青草淋着雨,也滴着露珠
假如你愿意请记得我,要是你甘心忘了我
在悠久的昏暮中遗忘,阳光不升起也不消翳
我也许,也许我还记得你,我也许把你忘记
我再看不到绿水的青荫,觉不到雨露的芬芳
我再听不到夜茑的歌喉,在黑暗的夜里倾诉悲啼
本月23号我参加了珠三角技术沙龙2011年1月广州小沙龙,并在会上给大家做了一个关于Scala的分享,形式是通过一个设计好的剧本(以沙龙聚会为背景),现场编码至完成该剧本为止,在编码的过程中逐步引入Scala的各种特性。这里先送上讲稿及现场录音还有演示代码,稍晚我将整理一份文字版的《learn scala in half an hour》。
现场录音在这里。
示例代码在这里。
如果有兴趣与我探讨Scala,欢迎与我联系或给我留言 :)
好像一直没有写年终总结的习惯,2011年也很自然的没有写,这篇,也不知道算不算,趁有十几分钟的等人时间,快速review和展望一下吧。
感谢我身边的每一个人。好了再见,我去2011年。
这两周已经开始在公司几个项目/产品里推广Git了,有一些心得,在此分享:
实际上,工具神马的都是浮云!
Git或HG之类的DVCS就是神器吗?不,充其量也只是另一个VCS或SCM,所谓的分布式、轻量级分支神马的在某些人看来或许是扯蛋的玩意,人家可能用SVN用得不知有多爽多出神入化呢。如果你仅仅是因为要推广一种新工具而去推广Git,那你一定会饱吃闭门羮。不信试试。
真正重要的,是驾驭在工具上面的灵魂(思想),有些人虽然用着Git,但只把Git当作备份工具用;有些人尽管还用着古老的抢占式的VSS,但提交的守则却是规规范范,标签打得清晰条理!前者不管用什么版本管理工具,都是YAST(Yet Another Scm Toolkit),而后者不管用什么管理工具,都能把代码版本管理得齐齐整整。
记住一点:不要把版本管理工具当作代码备份工具用!否则,你需要的只是dropbox。
既然工具是浮云,那我为什么还选择Git?嘿,当你的团队开始有了强有力的版本管理意识支持后,就会下意识地选择方便趁手的工具(好吧,我这里不说强大),Git实际就是这么一种工具,适合各种各样有洁癖的人、提交狂人等。
如果你的团队习惯把SCM当备份工具用,那么恭喜你,你有足够好的切入点推广Git了。如何判断一个团队是否把SCM当作备份工具了,有大概以下几个可供参考的现象:
我推广Git,目的不是为了Show up,说我懂得一个很潮的东西,你们也跟着用吧,而是要彻底改变团队把SCM当备份工具用的习惯,是为产品代码质量负责。
代码版本管理,最终目的是要实现代码版本的可控性,包括大至版本级的重取,包括功能级别的增减,甚至是小至commit级别的回滚。我用以达到这种可控性的是一些规范,而非Git本身(当然Git及它的扩展Git flow立功不小)。
我制定的规范大致有两个:
并有一个推荐的(非强制的)最佳实践:
双分支指项目推进过程中总是保持使用两个主分支:开发分支(develop)、成品分支(master)。
日常的开发工作都是围绕该分支进行。开发分支上的代码只有在封版的时候才会被合并到master分支。
本地的develop分支,开发人员在上面开发功能并提交,当完成一个完整的功能开发并通过测试时,才能把代码push到远程的develop分支。
远程的develop分支上的代码,要求在任何时候总是可以通过编译,所以每次队员把代码push到服务器上之前,需要确保自己的代码已通过编译并测试。远程的develop分支的代码会用于项目的自动构建。
该分支上面的代码总是稳定的,成品级的。只有在每次发布新版本的时候,才会从develop上面把上版本开始到现版本的修改移到master分支,master分支通过标签(tag)来区分不同的代码版本。产品的实施人员所面对的总是该分支。
代码提交规范有三大点,必须严格遵守:
基本上,严格遵守上面的代码提交规范,在双主分支的结构上协作,过程马上会变得舒服,如果加上一个提交粒度辅助工具的配合,那么效果更佳。
git-flow的介绍可以参考我之前的文章(一、二),在我的实践中,开发团队当中使用git-flow的话,使用最多的命令仅是git flow feature star/finish xxx,版本的发布只需要有一个人负责就行,所以git flow release start/finish vxxx这样的命令他们基本上可以不懂,hotfix那些更远的点的功能则可以到时再说。
所以,在团队内使用git-flow的难度并不大,最大阻碍可能是不能与现有的Git可视化工具结合。
使用git flow feature命令的益处在于:
目前git-flow在团队内并不强制使用,不使用git-flow的前提是要使用双分支代码结构以及遵守提交规范,和细心地在各分支之间切换。
有git-flow那么方便的工具在,何乐而不用呢?
在多人的团队内推广新的思想或新工具不容易,问号多,大家水平参差不齐等因素都会制约着推广的成效。这一次的推广,我准备了比较长的时间,包括学习、熟悉Git,反复思考和对比,最终确信Git推广好了,对团队、产品甚至我自己都是大大的益的。我觉得,在向别人推荐一种东西的时候,最好确保你对它非常了解了,包括它的好处,坏处。
由于大家水平参差不齐,不要指望一次培训就可以摆平。尽可能去到队员的位置上,帮助他们开始。因为你是花了几个月的时间来实践的东西,怎么能要求他们听你一堂课就学会?
最后附上我在公司培训用的PPT:
点击这里下载: git
提前剧透了。明天的技术小沙龙我主讲的是自己的一个开源小工具,AutoForms,一个Django自定义表单引擎,受公司某项目启发,自己在业余时间重新实现一套更好的。
下面直接去片:
我承认,PPT里面的安装方式还没支持,最早明天上午把它实现一下。
另外,PPT里出现的made in china要翻译成“山寨版”。
有兴趣的,不妨明天寻觅咖啡见。