GothamGo小记 November 18th, 2014

因为住在纽约的关系,所以上周六有机会去参加了纽约的 GothamGo Conference

s

刨除200刀一张的门票和不提供午餐以外,这次GothamGo应该是我参加过的最好的技术会议之一。

会议议程总共一天,因为仅仅关注Golang这一个编程语言,所以其实内容已经十分充实了。

可能是因为之前已经拿Go写了一年多的程序,又是带着一些问题去的,所以上周六是我唯一一次参加整天的技术会议而没有一个Session感觉昏昏欲睡。

会议的节奏安排很不错,30分钟一个的session,不像国内的会议那样动不动45分钟到一小时跟老师上课一样,也不像很多开源社区喜欢的lightning talk那样时间太短导致很多东西都只能浅浅提及。每三个session中间有一个15-20分钟的break,既保证了紧凑,也照顾了肾虚的人。

组织者请了不少Google golang项目组的人以及开源社区的活跃分子来演讲,但是一开场却安排了个萌妹子来讲自己是怎么学习Go,而且该妹子声音还特别萌,真是开声全场静……想想不算太小的NYIT的剧场里,男性占比超过95%的技术会议,一开始来这么一招,组委会是真心机算尽拼到底了……

演讲的内容不能说完全一点水份没有,多多少少夹杂着一些推销公司/产品/个人影响力的内容,而且不同的人的内容之间还难免有交集。不过这倒也好,反倒类似一个语言特性和槽点投票了。比如当天Go的空指针被转换成interface类型之后与nil值比较的问题就被很多人吐槽。还好前排在座的Google家的人还算比较谦虚。承认了不足也说了一些改进的计划。

另外,即使没有介绍什么新技术和新项目,光是听听别人的经验,也能学到不少Best Practice,而这个和新项目新技术一起,是我认为参加这类技术会议能得到的最大收获。
比如针对Golang,我觉得这次得到大家普遍认同的有:

  • 不要把error当做简单的字符串,而要善用自定义错误类型来保持代码整洁,同时提供更多有用的错误信息。

  • 善用switch:

形如

if e := functionCall(); e == ErrType1 {
    //…
} else if e == ErrType2 {
    //…
}

这样的代码应该用Switch来简化,例如:

switch functionCall() {
case nil:
    //…
case ErrType1:
    //…
case ErrType2:
    //…
}
  • 尽可能使用interface而不是具体类型,同时应该尽可能的使用narrow interface(提供较少的接口函数),使用interface的组合而不是靠定义大而全的interface来实现功能。
  • 好好利用Go自己提供的prof和go test -cover来保证代码质量

不过Golang社区对于design decision的固执程度也真是不一般。比如我问Godep作者为什么”godep save” 命令不能在GOPATH以外的地方使用,结果被他羞辱说“为什么需要在GOPATH以外的地方使用呢?”,刨根问题之后他说,他觉得Go社区一开始就是默认一切都是在GOPATH下面,所以他也接受了这种设定然后觉得一切都还挺爽的。
只是如果默认不把当前路径加入GOPATH,这种设定就显得很怪了不是么?

然后还有一个体会就是,发现那些妙趣横生的演讲者,多数都是Ruby on Rails社区出身的。不得不说RoR不管技术怎样,还真是把技术演讲的水平推进了个两三年……

最后说说比较值得关注的两个Go语言的进展:

  • Oracle: 这个是一个Google自己做的Go代码的静态分析工具,目前还是原型阶段,但是不久的将来,应该可以提供更强大的代码分析和编辑器辅助功能。
  • Mobile: Google对Go有个野心就是希望Go能够用来做移动开发,目前当然还是半成品,不过预计明年能够支持用Go来编写Android程序,据说长期目标还包括iOS平台的支持。
Tags: golang nyc

Posted in | Disqus Comments

Surface Pro 3 September 15th, 2014

闻着Surface Pro3风扇里吹出来热风中的崭新电子设备特有的烧烤塑料和硅材料的气息,我决定写写个人的Surface Pro 3感受。
继去年入手Lumia 1020之后,我又抱着“不亲自体验就没资格使劲黑”的态度入坑了Surface Pro 3. 当然大前提还是我确实很想入手它,因为不管发布会上被人拿起来往地上丢还不坏,还是含Type Cover比13寸MBA轻这种硬货,还是手写笔一键唤出OneNote这样的机巧,都让我有一种“微软居然变得有料,变得酷了起来”的感觉。果然乔老板说得对,对自己的软件有爱的人最终都要自己做硬件。

买买买

但是,这些都不重要。

现在的我,购买电子产品其实很少关注硬件配置,因为产品的形态和花样越来越多,所以其实更重要的应该是它们跟其典型应用场景的适配度。我之前跟好几个Surface用户聊过,大家都有一个共同的感受就是:虽然没觉得这个产品有什么不好,但是就是买了不久之后就搁在那里不用了……我想大概也是因为Surface Pro 3之前微软只是想做个功能尽可能多的东西,但是应用场景不明确的原因吧。

那么之所以想买其实是基于三个典型的应用场景,而我现有的设备都无法满足我:

  • 因为用着Window Phone,所以了解了一下WP平台的开发环境和应用商店,结果发现居然异常的顺手,以至于入手SP3之前还在自己的Mac上开虚拟机玩了一段时间,但是有个原生Windows总是更舒畅一些。
  • 平时早上起来想看看新闻什么的,手机屏幕太小,而iPad拿着费劲,又不想开我那台2012年款的还装着机械硬盘的MacBook Pro并腾出双手去操作,所以能有个带Kick Stand的设备随便翻翻点点还挺好的。
  • 周末去泡咖啡馆,有时候会想干点正事,而不是光读书和刷微博时,Kindle显得不够用,iPad又太玩具,15寸的MacBook Pro又会显得过于隆重而且续航堪忧。

于是咬了一番牙之后入手了单价i5 + 8G RAM + 256G SSD的版本,单价1299,加上129刀的type cover和税,即使用上了@laosong同学分享的教育折扣码之后依然花了我将近1400美元。真的比顶配的Macbook Air都要贵了。

然而,一些小细节却让我差一点第二天就退掉它……

拿到它的当晚,我兴冲冲地给它装上了Visual Studio 2013 Express,但是却发现它在被按下电源键或者合上Type Cover之后就休眠了,再次按下电源键之后还得能十几秒才能点亮屏幕。这样的话, 根本不能当平板来用啊!更奇葩的是,再次唤醒之后,之前连上的WIFI不能用了,必须断开重新连接才能重新上网。

后来才发现原来是windows phone虚拟机需要的Hyper-V虚拟机跟自家的电源管理过不去。果然东西太复杂了就是容易被坑。关掉Hyper-V之后一切恢复了正常,只是再想拿Visual Studio写WidnowsPhone app的时候就得重新打开,并且牺牲所有的平板特性。当然,这个时候如果是乔老爷这种强势的PM一定会辩解说,如果你要做严肃的开发,你就不会把它当平板用……

在度过了最初的危机之后,我又花了几天的时间来重新熟悉很久没有用过的Windows系统以及新的Modern UI。现在终于可以说点SP3的好与不好了。

先说不好吧。

在入手SP3之前,其实我是想等Apple的MBA更新的,我当时想的是,如果苹果能推出Retina + 触摸屏的MBA,也许SP3就没什么竞争优势了。但是在用了这几天之后,我却逐渐理解了MBA的合理性了。

首先是触摸屏,如果一个设备你只是拿它当笔记本使用,而且配备了一块像苹果这样好用的多点触摸板,你根本不需要触摸屏。自从用上了苹果的触摸板,熟悉了触控手势之后,我就再也回不去用鼠标的时代了。如果说手都不用离开键盘就能完成所有的操作,触摸屏确实是多余的,反倒是多种操作并存的情况下,会让人有些无所适从。

而SP3的新Type Cover,虽然加入了背光,手感也有了质的提升(至少不逊于Macbook的敲击手感),但是那块小小的触摸板还是差得很远,手势识别不是很精准,而且翻页操作总是做不到丝般顺滑,虽然页面滚动速度比是可以调整的,但是总是很难把握,要么就翻得太慢,手累死,要么就闪得太快,眼睛累死。

其次是Retina屏,SP3的这块3:2屏幕被各种评论家誉为良心,但是在软件没有优化的情况下(典型例子就是Chrome浏览器),显示质量其实非常令人难受,不是字体支离破碎,就是整个界面变成了微缩景观。令我直接想起了初代Retina Macbook Pro的尴尬。

所以作为一个SP3用户,如果你想把它当笔记本来使用,那就忘了它的触摸屏好了。至于超高分辨率的屏幕,还是耐心等它真正发挥优势的那天把……

再说说好的吧。

首先是轻,对的,作为一个可以拿来编程的设备,它真的很轻!从此出门再也不用为要不要背电脑烦恼了。

然后是Window 8.1,很久没有接触Windows,现在发现这个系统已经有了一些自己的交互特色,微软在功能之外,终于有了一些自己的设计哲学。

点亮屏幕就能传递信息的动态磁贴就不说了,说些新鲜的。

比如在Modern界面上直接敲键盘就开始搜索应用和文件,回车就直接打开对应项目,直接让Everything和Alfred这样的应用下岗。

用手指从屏幕左侧边沿划入屏幕,就能切换至之前的应用,手指在屏幕左侧停住就能分屏显示,这可是我在Mac上想了很久但是只能靠第三方软件才能实现的功能,而且这个时候才能显示出SP3这块高分屏幕的优势。

Split Screen

如果说苹果的产品减法做得一直很好,以至于界面简洁,用起来也顺手,那么微软之前的问题就一直是过于繁复。当然繁复也有繁复的好,比如在想要的情况下,你能获得更多的信息:

Windows file transfer

所以公平的说,Windows是在另一个难度级别来尝试把软件做到易用和好用。借用《The Design of Everyday Things》里面的观点,复杂性并不是问题,因为这个世界本身就是复杂的,问题是复杂性带来的迷惑性。

类比一下,Mac OS的软件好像高中物理课本,其简洁和完美来源于对你的使用习惯的塑造和应用场景的限制,就好像高中物理里大多数定理都只能在理想情况下成立一样。而Windows软件则直接给你一个真实世界,复杂,却有着更多可能。

最初我还在想,Windows 8.1上会不会有Mac上那么多美轮美奂的软件可以使用,后来才觉得自己多虑了,Windows Phone平台的软件生态确实没法比iOS,但是Windows本身可一直是桌面软件的主流。比如最近有朋友推荐给我一款叫做Popcorn Time的软件,他在我的SP3上安装好之后说,原来Windows版的客户端比Mac版的多了这么多功能,还内置Chromecast支持,直接让我又找到一个SP3的应用场景:家用免费高清播放器.

另外,为了能够在泡咖啡馆的时候写写东西,我也一直在寻找一款跟Mac平台的The Journalist

类似的Markdown编辑器,而最后的结果,就是我现在正在使用的这款:Downwrite。Modern界面,简洁好用!

DownWrite

相比之下,The Jouralist那种继承了苹果iTunes设计风格的文件管理现在反倒让我觉得非常不方便了。

而且作为促使我买Windows机器的原因之一,不得不夸赞一下Windows下的应用开发工具,特别是最新的Visual Studio, 默认改用暗色界面之后,真是令人大爱:

vs2013

另外,电磁笔和OneNote的配合真是画草图的利器,涂鸦完毕之后直接框选就能生成图片,对于创意人员,设计师来说,是生产力利器无疑。即使像我这种没有艺术细胞的人,也可在做软件设计的时候不用去UML工具里拖拽,而用简单的手绘软件流程架构图来记录自己的想法。

对于开发者来说,可能最大的一个问题是Windows对于脚本语言和命令行工具的支持不如类*nix系统的Mac OS,这个倒是一直是一个我没想好怎么解决的问题,Cygwin显然不够优雅,也许putty+Linux云主机才是更好的方案吧。

在纽约考驾照 May 2nd, 2014

传说在美国人们最恨的四大机构是:有线电视公司,航空公司,移动运营商和DMV。皆因为垄断运营,效率低下,服务质量堪忧。

其中DMV,全称Department of Motor Vehicles(机动车管理局)是唯一的一个政府部门,不但掌管交通事务,还负责发放居民身份证件。这种地方放在国内就是交警大队加居委会派出所,想想也够烦的。甚至还有一部恶搞的美剧《Reaper》把DMV的窗口设定为地狱办事处。

来纽约大半年之后,终于决定要把驾照给考了,于是趁公司搬家的档口抽空去了趟纽约的DMV。

在美国,考驾照是分两步进行的,第一步是学交规,验证身份,然后过笔试。笔试之后就可以拿到一个叫做Learner‘s permit的东西,然后就可以在有经验的司机陪同下开始学习开车了。等熟练之后再去路考,考试过了之后才能把Learner's permit换成正式的驾照。

今天一大早去考Learner’s permit,之前在网上查了相关的步骤和证件需求,纽约的DMV网站还是非常不错的:比如如何拿到Learner‘s Permit

去之前填写了一个申请表(MV-44), 除此之外就是所谓的六分证件(SSN卡3分,护照2分,信用卡或者借记卡1分)。

地点我本来选的是34街的License X-press,进去之后工作人员说考笔试不在这里,就给了我一个地址,沿着找到两个街区之外的一个新办公室,看起来是新修的,在地图上也都还没有。到了之后工作人员帮我领了号,领进去坐好,然后指示我关注哪些显示屏。感觉流程还是挺清晰的。

第一次考驾照笔试的流程包括:

  1. 检查证件。
  2. 视力检查,这个很有意思,检查方法是在一块纸版上写满字母,然后某些行用彩笔涂上底色,放在离你大概3米之外,让你按顺序读出特定颜色的字母。作为色弱患者本来有些紧张,但是最后其实还是挺简单的。
  3. 上机考交规,工作人员会让你选择考试所用的语言,然后指定一个机位号,你坐过去在触摸屏上点点点,20道题里对14道就可以过关。
  4. 拍大头照,每次拍证件照我都没穿对衣服...今天又穿了个横条纹的衣服活像囚服...
  5. 再次检查证件,确认地址姓名。刷卡交考试,拍照以及检查费一共73刀,拿到临时permit。正式的Learner’s permit会在两周内寄到之前填写的地址。

整个流程我花了约一小时,继上次办社会安全卡去了SSA之后,再次体验了一下美国政府部门的办事风格,总体来说还是觉得税没有白交的。人员都比较的和善耐心,流程标识也都比较清晰。拿到号之后,每办完一步,工作人员都会把新增的票据跟你的MV-44表格钉在一起,然后让你回去坐着等着叫号,整个流程有多个队列,但是一号到底,手里的文件也只有一份,所以很省心倒是。

剩下的就是路考了,作为国内三年多的老司机,觉得胜利在望了。

理发记 April 21st, 2014

天平座的码农有一个致命的问题,那就是身为天平,对审美有要求,但是作为码农,又真不怎么会审美。

具体到理发这件事情上,直到我走进这家木北造型才想起来,大概有个几年没有独自去理发过了。我总是很害怕理发,因为如果我一个人走进理发店,面对理发师想要什么发型的询问,大概我只会说一句话:给我剪短一点就好。

幸好小时候有老妈,长大了有老婆,特别是老婆还是各种美发机构的VVVIP,所以每次理发都是过去蹭她的卡,让她帮着找发型师,沟通需求,我坐着不动就好了。就连选这家木北,也是因为之前在北京生活的时候常跟她一起来。

然而这次出差的时间太短而时差又难倒,老婆拒绝陪同,老妈又远在老家,只能自己一个人来理发。

一走进这家店,就发现店里的小伙子没有一个头发是黑色的,门口的大电视正在放着欧巴国的舞曲。隐隐觉得自己打开的方式好像不太对……

还没回过身来,小妹就热情地迎上来说我们家老师有48元,68元,120元,180元这几款您选哪一款?为了不露怯,我咬着牙选了120的首席总监。

总监老师果然不同凡响,一上来就质问我:很久没理发了吧,为什么这么久不理发,为什么这么不在乎自己的形象?!

我答:因为穷。

这个答案被忽视了,于是总监老师紧接着就开始劝我尝试新发型,无非就是烫染卷。难怪现在的理发店都已经不叫理发店了,叫造型。

可是他们得理解不是每个人都需要天天怒发冲冠头顶彩虹的呀,都掏了造型的钱了,要个简单的洗剪吹服务怎么还是这么难呢?

在一番推销未果之后,总监老师给我招呼来了一个小弟帮我洗头,完事之后坐下来,光速开剪,光速剪完。期间不管我说什么,他都能把话题向着烫染方面引导。

“给我把旁边多剪掉一点吧”
“剪太短了了就会向两边扎出来,除非你烫个型,否则会很难看”

“那给我把后脑勺多剪掉一点吧,我头发软,长了之后后面都塌的,扎出来还好一些……”
“塌了好办啊,把发根烫一下,随便就能揪起来,有蓬松感一些……”

“……”

说起来还真是怀念以前学校澡堂门口5块一个头的理发店呢。

改变2013 December 30th, 2013

我写年终总结大概已经有几年了,去年却断了,今年眼看就要过去了,竟也是啥也没写出来。

想想看之前之所以写,其实主要是想总结经验教训,为未来做准备。然而人长着长着就会觉得未来越来越近,只是不是自己想要的那个,于是便灰心丧气。

不过今年算是值得纪念的一年,因为这一年的变化,大概是我上大学以来最巨大的,所以既然未来是一定被改变了,就接着总结展望一下吧。

去年是我在北京的第十个年头。七年求学,三年工作之后,对北京已经没有什么不切实际的梦想了,一直觉得自己是个外地人,身上唯一北京的印记,只不过是在这里患上的过敏性鼻炎。

快年底时,在到底是去谋求些改变还是继续混日子之间摇摆了很久了之后,我把我的微博签名改成了:大部分的时候,求不得只是因为不敢追求。

对于我来说,以往有太多的东西因为担心“即使努力了也得不到会伤自尊”而根本不敢去追求。又或者不知道自己应该追求什么因而没有尽全力。而等到人家得到了之后,碍于面子,就更不好意思承认自己想要。不知什么时候终于想通这是一个恶性循环,而且预感到这种畏缩的性格如果不改变过来终有一天要害死自己。我想大部分的人之所以一生碌碌无为,其实不过是因为年轻的时候没想明白自己要为什么而努力,等想明白自己要什么的时候已经老得动不了了而已。 

于是今年年初就开始了一些具体的行动,谁知道真的得到了改变的机会。之后的选择倒是让我苦恼了好久,要不怎么说天平座的人选择困难呢。

在北京,三藩和纽约之间最终因为种种原因选择了现在的城市,其间把一个人能在职场上犯的错误都犯了个遍。现在想来每一次都蠢得可笑,而今反思起来,却只有一个原因——感情用事。而现今及时到来的报应就是目前大约一百万美刀的预期税前收益损失,所以说年度职场心得大概就是“谈感情伤钱”吧……

当然也不是全无收获,虽然又重新开始了租房生涯,但是每日通勤时间从一个小时十分钟左右变成了十分钟,每日多出来这两小时,让我觉得人生突然多出了一些可能。另外因为住在岛上,空气也不错,因为雾霾停滞了一段时间的跑步也慢慢开始恢复了。更好的是,一直担心的鼻炎,居然也慢慢的减轻了症状。

工作上,2012年开始做的一个产品开始创收,但也因为各种原因被看淡了前景(此处省去吐槽若干),于是又投入了一个新产品,基本上跟去年一样,一个人吭哧吭哧琢磨一块,打算如果有机会的话在打磨和精工细作方面下点功夫。

总之,搬家算是我家2013年最大的一件事了,虽然因为这件事其他的一些事情处理得有些草率,也很对不起家人,但换个地方重新做人,感觉挺不一样。而从2014年开始,又将是新的奋斗了,新的城市,新的生活探索,新的兴趣,新的工作内容……令人激动,期待,紧张,焦虑……

但我想我的梦想最终还是在加州,不光是事业,还有阳光,汽车,公路旅行……

所以做一个简单的计划吧,就说三十五岁之前去加州,四十岁之前创业如何呢?

对,我现在就在这里说出来我想要!做一条鳍损鳞破的活鱼,总好过做一条标致的咸鱼。

 

其他的一些:

年度数码产品:Nokia Lumia 1020

今年买的数码产品不多,总的来说上半年因为觉得要搬家所以啥都没买,下半年则是因为搬完家穷到死所以啥也买不起。对Lumia 1020属于一见钟情那种,刚发布第一天就花299刀签下了两年的合约,至今觉得还是不后悔(当然可能也是因为iOS和Android是在疲劳了)。在习惯了之后,WP8的系统确实非常的流畅顺手,慢慢地应用也多了起来,最重要的是,现在出去玩,从来不用专门带相机了。

年度最投入网络社区: 知乎

其实知乎很早就开放注册了,但因为早期的邀请制和我讨厌饥饿营销和小圈子的天性就一直没有太关注,再加上要求实名,对国内互联网产品的节操的不信任又让我退避。后来作为上下班时间休闲时补充知识或看段子的渠道看了一段知乎阅读。再后来就忍不住吐槽的欲望注册了账号然后火速改了名……目前看来里面的内容还是挺丰富的,就是慢慢也有被写手占领的趋势……

年度编程语言:Go

在邓公的推荐下开始使用Go了,写了一些代码,觉得这个语言实在是一门很学术的人做出来的,却特别适合生产的的编程语言。简而言之就是写东西不费劲,改起来灵活性很高,但是语言本身不复杂,坑少。

年度运动:慢跑

最早慢跑是我在2011为了恢复因为踢球受伤的伤腿的运动能力开始的锻炼。但跑了两年之后,球没怎么踢了,跑步却越发上瘾了,可是被北京的雾霾一干扰,锻炼得很不规律,无论是对自己的体重还是身体素质改善都不大。到了新的城市,倒是可以好好规划一下了,最近刚买了一个Endomondo的Premium,准备好好跟着训练计划练习一下,今年因为搬家错过了北马还挺可惜的,争取明年跑纽马!

年度最大生活改进:通勤时间

感觉每天一下子多出了两小时,目前这几个月还处在适应期,也许到了明年,能够好好计划利用一下。这两年比较可惜的就是是连着两年都是在跟着新产品学新东西,看标准,看文档的时间多过静下心来读书。也许可以今后每天拿出一小时读读专业书或者闲书吧。

年度最满意照片:)

Manhattan

Happy New Year!

最近开始学习使用Go,真心意识到工具就是生产力,特别是对于对于一门新的语言来说。 自己琢磨了几天,又经xiaoqiang同学提点,算是折腾了一个比较顺手的环境,总结一下。

首先说,我觉得写程序需要的一个基本环境包括:

  • 顺手的文本编辑器(语法加亮,定义跳转,语法检查,自动补全与提示)
  • 查询方便的文档
  • 然后为了效率,我们还需要一个方便的功能,那就是常用代码snippet的展开功能。

编辑器方面,因为一直用的Vim,自然是接着用,好在Go官方的发布包里就提供了相关的Vim插件。假设你是使用Homebrew安装的Go。 直接将插件所在路径导入Vim的run time path就行,修改~/.vimrc:

set rtp+=/usr/local/Cellar/go/1.1/misc/vim
au BufRead,BufNewFile *.go set filetype=go
filetype plugin indent on
syntax on

这样就有了语法加亮,定义跳转和文档查询的功能。但是语法检查还是比较弱的,好在go无论是编译还是运行都非常方便,只需要执行命令:

$ go run xxx.go

就行,所以简单修改一下键映射: 之前写C++的时候喜欢用\rm快捷键来编译:

nmap <leader>rm :!make -j4 1>/dev/null<CR>

同理映射一个go编译的快捷键\rg,只需同样在.vimrc里面加入:

nmap <leader>rg :!go run %<CR>

至于代码的自动补全,我觉得对于初学者来说简直太重要了.

我之前一直使用omnicomplete,但是这货的配置实在太恶心巴拉,用上Mac和Vundle之后,经xiaoqiang同学介绍,爱上了clang_complete,安装方法如下,依旧是.vimrc配置(本文后面的代码,如果没有$符号开头,都是写在.vimrc里面的配置):

"for clang_complete
let g:clang_use_library=1
Bundle 'Rip-Rip/clang_complete'

可惜的是,clang_complete默认并不能支持Go语言的自动补全, 不过好在有https://github.com/nsf/gocode这个好东西。 安装起来也很方便:

$ go get -u github.com/nsf/gocode

成功之后,在$GOPATH/bin下面应该会有一个叫做gocode的binary。之后再安装一个Vim的插件vim-gocode来使用他,我使用的Vim插件管理器是之前推荐过的Vundle,有了它,妈妈再也不怕我不会安装Vim插件了:

Bundle 'Blackrush/vim-gocode'

然后,理论上咱们就可以使用快捷键<C-x><C-o>来进行代码补全了,但这个操作太Emacs了,小拇指要抽筋的节奏,不过我会告诉你还有supertab这个插件嘛?

Bundle 'ervandew/supertab'

像bash一样直接tab代码补全,帅不帅?

然后轮到文档的查询,其实使用Go自带的Vim插件的:Godoc 命令就已经能够实现文档查询了,但是如何实现一个更好看更快的查询呢,想象一个飞速秒开的MSDN?

这里推荐一下Dash,也是xiaoqiang同学向我热力推荐,并忽悠我花50块人民币买的一个Mac软件,Dash是一个集合了非常多的语言和框架的手册的查询软件,更爽的是它可以和很多其他的软件集成使用,其中就包括Vim,配置也很方便,依然是使用Vundle:

Bundle 'rizzatti/funcoo.vim'
Bundle 'rizzatti/dash.vim'

然后我自己照着手册又剽了一些常用的代码片段,什么打印啦,定义函数,type,interface啦,新建http handler啦等等。这样就能够使用常用的代码片段快速搭建简单的程序了。 这里推荐另一个插件snipmate:

Bundle 'msanders/snipmate.vim'

最后我们打开Vim,安装之前配置这些插件的bundle:

$ vim +BundleInstall

Ok,看看效果。

最后分享一下自己的Vim files 配置,供参考。
lobatt/vim_files

 

因为这个小破blog老是受over quota的影响不能访问,于是就想稍微调试一下资源使用,但是micolog这一坨代码真是不知道怎么下手。于是自然的想法就是先找出最费资源的地方,于是就发现了Google官方提供的这个工具——appstats

其实这个工具根本就不用安装,他已经存在appengine的环境里面了,需要的只是在自己的app里面打开它。

首先,需要在app根目录下添加一个appengine_config.py。

这个文件里的内容可以在app运行时对appengine的环境进行配置,是一个很早就存在但是很少有文档的玩意儿,以至于有人专门给Google提了个issue,最后才有了这份文档

要打开appstats,需要在appengine_config.py 里添加如下代码:

 

def webapp_add_wsgi_middleware(app):
    from google.appengine.ext.appstats import recording
    app = recording.appstats_wsgi_middleware(app)
    return app

 

然后如果当然需要配置app.yaml让自己可以通过web访问统计数据。

 

- url: /stats.*
  script: $PYTHON_LIB/google/appengine/ext/appstats/ui.py

另外,appstats只hook了google自己提供的库,所以限制了app必须使用google的run_wsgi_app来跑,不过人家特地说明了只是需要这么启动而已,你自己用django什么的没问题。

 

from google.appengine.ext.webapp.util import run_wsgi_app
def main():
    app = ...
    run_wsgi_app(app)

 

 

重新部署app,在页面上点几下,然后就可以打开app_url/stats来访问app的rpc统计信息了。

appstats

打开一看,原来是各种爬虫乱爬我的blog的feed导致datastore的读操作过多...

于是简单提增加了一下Feedhandler的结果的cache TTL,又是一个一行代码的改动...希望有用。

 

 

端午节去了趟日本,回来以后就开始拼命讨生活,连相机里的照片都来不及打理,本来想写个像样点的游记的也无力了...于是就贴些路上吐得槽和记录的一些杂七杂八吧...有空再补图...

一下飞机就被日本这个国家震惊了。

..more

一直觉得换成Mac之后ctags就不是很好用了,结果今天终于被要读的一堆代码搞烦了于是Google了一下...
果然真理越搜越明!

在这边: http://vim-taglist.sourceforge.net/faq.html

Are you using exuberant ctags version 5.0 and above?
The taglist plugin relies on the features supported by exuberant ctags and will not work with GNU ctags or the Unix ctags utility. You can use the following command to determine whether the ctags installed in your system is exuberant ctags:
$ ctags --version

然后google了一下,目前觉得Mac下最方便的解决方案还是用homebrew

$ brew install ctags

$ /usr/local/bin/ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Jan 16 2013, 15:28:06
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Optional compiled features: +wildcards, +regex

$ echo "let g:Tlist_Ctags_Cmd='/usr/local/bin/ctags'" >>~/.vimrc

就这么多。

 

帝都十年 September 9th, 2012

写完标题我就后悔了,一个人如果随随便便就能从自己生命里摘出十年来啰嗦,该有多老。

十年前的差不多这个时候,我是欢天喜地地跑到北京来的,而其实当时的我对于将来一点计划也没有,高兴不过是因为考上了大学,终于可以离开父母的管束而已。想想如果当初能料到现在的情况,还会来这里么?

十年里我经历了两次毕业,第一次毕业的时候,虽然并没有真的想过要在北京工作,但是倒还是对北京很有好感的,认为留在北京是找工作时的第一选择。直到第二次毕业,我才知道过去七年里北京变化了太多,才醒悟本科时根本没怎么出过校门,对它的好感无非来源于无知而已。

当你真真实实地想要在这里扎根下去,才会发现地有多硬。

或许这里曾经是逐梦的天堂,甚至曾经宜居过,但现在生活在这里本身已经成为了一种负担。

第二次毕业的时候,正是逃离北上广正轰轰烈烈的时候。可不知什么原因,还是留了下来,留在了这一个外地人无权买车买房,但却分享着一样糟糕的天气和交通的城市,还要被本地人阴阳怪气地说我们把他们的空气弄浑浊了,路弄堵了。

留在了这个权与利的中心,却没有权也没有利。也许我就只是懒,然后习惯了而已。

十年里,我眼见了帝都的大气与繁华,却没能收获哪怕一点点的归属感。偌大的城市,真正让我感觉属于我的,竟然只有郊外的家和城里的一个格子间。这城市里大圈小圈,大围墙小围墙,各种机构,最后想起来唯一感到有些温情的,也只有那个校园而已。而偶尔再回去家乡,却也已经陌生。用十年时间说服自己,这里不是你的目的地,有些残忍,但生活就是这般的善于撕磨。理想,激情,全磨了去,只剩下全力挣生活而已。

过去的十年,现在回眼望望居然都没什么值得纪念的,于是渐渐明白了为什么我的大学同学一个个都离开了这里。

而马上新的一个十年又要开始,因为生活,我却还只能从这里出发。

但我不想在这浑浊的空气里让自己的鼻炎继续严重下去;

但我不想在这里花我出不起的价格买了房却还生活得像个租客;

但我不想每天要浪费十二分之一的生命在通勤路上;

但我不想自己再努力工作,挣再多钱也只能活得像个蚂蚁;

但我不想在这里跟同样因生活所迫,拼命插队,鸡贼甚至犯罪的人一起争抢;

但我不想让自己为了生活还得低声下气地跟得势的傻逼打交道。


所以我想我下一个十年的终点,一定不是这里。