用Surface Pro 3来编程 December 12th, 2014

Surface Pro 3买来这么久了,其实除了周末出去泡咖啡馆没怎么用过。作为一台咬了半天牙买来的生产工具(为此还买的i5 + 8G RAM + 256G SSD的次高配),为了不让投资沉没,感恩节期间花了两个上午在咖啡馆里折腾了一下,总算是可以用来干活了。网上有很多人问SP3体验怎么样,能不能用来替换笔记本什么的,我就来写写怎么用Surface Pro 3来编程吧。

/*

强赞一下家附近的Telegraphe Café,虽然小,但是早上人少,无线网很稳定,而且是能坐下来干活的咖啡馆里,少数咖啡和糕点都做得及格的。

*/

IDE

有那么几年没接触Windows,这个系统进化了不少,但其实在开发者工具上,它也就光升级VisualStudio了,这都快Windows 10了,还什么都往C:/Program Files(x86),里放。

不过好在Visual Studio真的是最好用的IDE无疑了,怎么说呢?有人说“Xcode和Visual Studio之间隔着一万个Eclipse”, 我个人的感觉就是,VS是一个能让你感觉自己更会编程了的工具,特别是对于我这样一个完全没有C#和移动开发经验的人,写起Windows Phone应用来也感觉上手难度很低。

IntelliSense虽然是在Eclipse火起来之后才出现,但是在微软自己封闭的语言和系统库环境里表现真的是值得点赞。另外MSDN从库手册到导引性文档到范例库的一条龙服务,实在是不能要求更多了。而不知道什么时候加入的Git支持和暗色界面,都是*nix码农眼里的加分项。

当然,VS Express能做的事情有限,可以写写Windows平台的东西,但是其他的程序,还得自己折腾环境。

命令行

一般码农从Mac切换回Windows,其他还好,有两点始终没法适应, 一是少了块丝滑的触摸板,二是少了一系列*nix系列的命令行工具的整合。

触摸板是没办法了,有的时候Type Cover上那块小小的触摸板实在用的不爽了,就上手指去屏幕上划拉,好歹还是比挪手腕去找鼠标方便点,现在鼠标对我来说,真是回不去的史前了。

至于*nix系列的工具,经微软的朋友介绍,开始使用PowerShell,虽然完全不能理解这个Shell为啥要用驼峰型的命令名称,但是比起cmd.exe来说已经是跨世纪的改进了,而且我是相信它其实很强大的,当然微软算是很贴心的用一系列的alias模拟了一部分linux命令行,比如ls ,让像我这样习惯性脑子堵了就强迫症似的一直敲ls的人不会被各种报错弄到抓狂。

文本编辑器和命令行工具

当然这很不够,为了写程序,我们至少还需要一个编辑器,一系列的命令行工具进行一些网络和字符串操作。

先说编辑器,虽然我自己习惯的Vim也有Windows版本,但是大多数插件对于Windows的支持都很抱歉,而且光是改.vimrc都足够繁琐了,所以干脆转向二十一世纪的代码编辑器吧。

目前尝试了Sublime Text 3和Atom:

  • 从速度上来说,Sublime完胜。
  • Atom在我看来的一大优势——Vim mode插件——在SP3上根本就不工作。
  • 两个编辑器都支持字体缩放,Atom是Ctrl加上双手指上下滑动放大和缩小字体,Sublime是Ctrl + -/+,而且在调整了字体大小之后重启编辑器,设置依然保留。这对于SP3这种高分屏来说还是有用的,因为这俩的默认字体在SP3上都显得偏小。

综上,虽然Atom现在很火,但是Sublime Text 3依然更适合写代码。

然后是其他的命令行工具,一开始我无比想念Mac上的Homebrew,有了它,其它的什么脚本语言解释器,命令行工具什么的,分分钟就安装好,简直比Linux上的包管理还要好用。因此为了节约时间,在Windows平台上找一个类似的工具是最快的捷径,最后找到了两个:

Chocolatey的特点是会打包一些图形化的应用,比如你可以使用

$ choco install atom

来安装Atom编辑器,类似的还有JDK,VirtualBox,Fiddler等应用也可以通过他来安装。

但是包装个Installer算不得好汉,从两个工具的形态来看,我更看好Scoop,因为它从各个方面都更像Homebrew,App Manifest的定义类似Homebrew的Formula,对于愿意给开源做贡献的人来说,参与其中应该能容易一些。而且它更加的关注开发工具的打包,因此它支持的*nix工具也更多一些。

所以我的开发工具包基本上都是靠它安装:

$ scoop install curl coreutils less ln grep

搞定基本的网络和字符串操作。

$ scoop install sudo

省去右键点击PowerShell->Run As Administrator的麻烦。

$ scoop install go python27 nodejs git

搞定Go,Python和JS+HTML5的开发环境机及其版本管理。

其它

如果要开发Android或者iOS程序,还可以安装jdk和Xamarin for Visual Studio

除了写代码,SP3还有一个很擅长的地方就是记笔记和视觉方面的创意,OneNote结合电磁笔和画图软件,码农客串起产品设计狗和五毛钱美工来毫无压力,一人搞定全栈开发不是梦啊同学。

到此为止,至少对于码农来说,SP3已经完全超越iPad,体现了其官方宣称的Laptop Replacement的潜力了

那接下来的问题是…

写点啥呢?

2014年黑色星期五的凌晨,我在推特上说,黑五了,啥也不想买,也不知道是因为挑还是因为穷。

现在虽然各种deal还在满天飞,但是星期五确实是过去了,总结一下自己,大概一半因为挑,一半因为穷吧。

其实今年的黑五有些折扣还是很给力的,比如BestBuy的iPad折扣,最新款iPad Air 2直接减100刀,苹果店自己都打不出这么大的折扣。更难得的是货源还非常充足,虽然网店早早地断货,但是我还是轻轻松松地在曼哈顿的两个实体店里帮朋友们剁了三只iPad Air 2。全程基本上都没有排队,都是进店之后问到发货的柜台,等前面正在结账的人结完账,自己走上去报完型号,刷卡,拿货走人,要不是因为限制每人一次只能买一台导致跑了两家店排了三次队,可能感恩节下午那次逛到BestBuy时就能给买齐了,那时候黑五都还没到呢,堪称史上最速剁手,怪不得这两天在BestBuy刷信用卡都还得看ID……

不过说起来曼哈顿岛上的黑五真是比新闻上小镇里的黑五要平和多了,几乎没看见吹着冷风排队的情况,更没有什么争抢啊,黑人大妈啊,电击枪什么的。可能一是过节很多人都回老家了,二是岛上的人平时买东西也挺方便也不贪图这一时吧,比如我走路去附近的两家BestBuy,一家苹果店,都是十分钟的路程,帮人剁手真是车费都不用报。

至于自己呢,虽然知道折扣很值,但拿着手里的老iPad,想想自己可怜的积蓄和高昂的税费和房租,还是咬不下牙花几百刀更新换代,只好帮人买买干爽几把,顺便感叹一下国内朋友们真是土豪。

此谓穷之一。

而因为住在曼哈顿岛上狭窄的公寓里,一不留神就把家里填满了,bed bath & beyond黑五早上全场八折,本来就才200刀一套的Cusine Art厨具11件套简直是烂便宜了,但是无奈家里放不下,还是只能买了一点洗衣液洗手液了事……

此谓穷之二。

至于挑呢,则是因为最近一年来养成了两个习惯:一是网购只从wish list里面下单,二是买衣服鞋子一定要先试好。

所谓网购只从wish list里面下单,是Amazon帮我养成的好习惯,为了防止冲动购物,每次需要买什么,我都习惯性把选好的商品先放入wish list,一是方便多个商品比价,二是Amazon的wish list有一个很好的功能就是帮你追踪价格,比如如果你wish list里面的商品降价了,那么查看的时候它会显示比你加入wish list时降了多少。

这一年以来,除了急需的生活用品,基本上都是从wish list里面下的单。当然更多的是加进去之后放了一段时间发现其实用不上然后就删掉了。

而买衣服鞋子先试好则是花钱买来的教训。跟所有刚来纽约的孩子一样,都觉得纽约的衣服烂便宜,110刀以下的衣服连税都不用收。特别是还有Century 21和Woodbury两大神地,突然觉得国内想都不敢想的牌子到了这边可以眼都不眨买下来,简直不能更爽了。

但结果就是为了折扣而买买买到停不下来,即使是去了C21或者Woodbury也更多地关注折扣而不是试衣服,当然这两大地方也没那么好的条件给你从容地试。最后花了不是很多的钱,买了一大堆不合身的衣服塞满了衣柜。以至于自己陷入一个奇怪的窘境:总觉得自己没什么衣服可穿,但是望一望塞得满满的衣柜,又实在说服不了自己去添置什么东西。

当然,明白那些名牌的五大道线和工厂线产品的区别又是另外一个知识点了……

另外还有一个原因就是因为今年锻炼坚持得好,一年之间腰围小了四个号,买衣服再也不能只瞄准大号了,所以网购衣服更加变成了几乎不可能的事情。

于是近来买衣服和鞋子变得更加的慎重,结果却出奇的好。今年几次在实体店里买的衣服,包括优衣库的运动裤,Suit Supply(强推这个牌子的男装!)的风衣,Red Wing的9111靴子,虽然基本都是原价,但是买了之后都觉得相当合身也相当合用,利用率也很高,综合性价比比起那些打折买来的大牌的工厂货要“高得不知道哪里去了”。

而亲自去Jack Rabbit在跑步机上一双双试出来的Brooks Defyance 7跑鞋,虽然一分折扣没有,但是确实跑得舒服多了,膝盖也不痛了,穿着它还刷新了自己的北马半程最好成绩。

从此也明白一个道理,不管是大小还是价格,合适最重要。靠折扣去买你本来买不起的牌子的断码货,穿起来不是大了就是小了,只会让你显得更廉价。

最后总结一下自己黑五的开销:

  1. 从Amazon的wish list里面买了一条Skins的A400,折后81刀,惠惠比价显示历史最低价是79刀,但是觉得这个价能接受,也就不纠结了。(题外话,自从惠惠网支持美亚之后,真是离不开它了,而美帝自己的比价服务,自从Decide.com被ebay收购然后关停之后,真没有找到过一个合用的……未来一定是天朝的。)
  2. 趁着HappySocks全场6折还免邮费,跟老婆合买了几双袜子,反正也不用试。他们家的袜子在还没有被《来自星星的你》捧红之前,其实在Century21常年5刀一双烂便宜,质量确实也还不错。自从被全智贤穿过之后价格就格外的坚挺,我觉得全智贤真的以后拍戏不用收片酬,就收广告费好了。
  3. 跟老婆去唐人街喝了个早茶,吃了一份40刀一磅的白灼基围虾被贵哭了。谁能预料到纽约这地方龙虾烂便宜,基围虾却这么贵呢?

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