VimScript学习笔记(11):List和Dictionaries

Vim中有两种可以存放元素的集合(容器),列表和字典。

List

列表(List)在Vim中是有序的,可以混合存放不同元素的集合。

List是从下标0开始索引的,-1可以表示最后一个元素,-2表示倒数第二个元素。

Vim的list支持切片操作(类似Python),包含头也包含尾。

类似Python一样,VimScript可以对String进行切片。

可以使用+连接两个list。

List的默认方法

List有很多build-in functions。

Dcitionaries

VimScript的字典(Dictionares)和Python的Dict,Ruby的hashes,JavaScript的objects很像。

字典用花括号表示,value可以是任意类型,但是key必须是strings

Vim可以处理字典最后的逗号,因此我们最好永远在字典的最后加一个逗号,尤其是在多行字典的时候,这样添加新的键值对不容易出错。

取出字典值的方式和其他的编程语言一样。如果下表不是string的话,会先转换成string

也可以使用点号。

添加新的key-value也和其他语言一样。

remove函数可以删除某个键值对,并且返回被删除的值。unlet与它的功能一样,只是没有返回值。如果试图删除一个不存在的值,会发生错误。

字典有以下build-in functions,关于功能,请阅读:help.

  1. get()
  2. has_key()
  3. items()
  4. keys()
  5. values()
 

极力推荐《巨人的陨落》和《世界的凛冬》

在亚马逊看到《世界的凛冬》的时候,感觉就像玩了一款从没玩到的好游戏之后,还没从深深地满足感中回过神来,又发现这款游戏出了一个长度相当的DLC一样。之前读《巨人的陨落》,觉得真是一部不可多得的好书,写的如此真实,引人入胜,让人不忍卒读。发现此肯·福莱特手中的此书竟然是一个系列,《巨人的陨落》只是三部中的第一部!真是又惊又喜。于是这段时间又走着坐着的着迷这部书,上周终于看完了。

看过《巨人的陨落》之后,我逢人便推荐,还有一次在招聘的时候,和一个HR谈这部分谈了一个小时。我发现,虽然之前看过《一战简史》这种书,但是还是不能详细说出来几个国家经历一战的始末。但是看完《巨人的陨落》之后,随口就能说出来某个国家一站中的阵营,作战原因,同盟,利益等等。读完之后心里久久不能平静,却一直没在博客写点什么。难以下笔啊!作者的水平实在是高,我根本无从评论这部作品,只有惊叹的份。其实我向人推荐此书的时候,心里也是战战兢兢的,生怕自己说的不好,让别人对这书的印象坏了,就不想去看了,那这对别人来说可是不小的一个损失。

世纪三部曲分别是:《巨人的陨落》,《世界的凛冬》,《永恒的边缘》。

这部书以一种奇特的方式在讲述历史。书中从小处展开,将了五个家庭的故事,见证了浩荡的历史长河。作者像讲个故事一样,让你觉得一战,罢工,革命这些东西不再是过去一个世纪的事情了。而是发生在一个家庭的事情,如果你生在了一百年之前,这就是你要经历的事情。发生了战争,你家里的青年要去打仗。政府鱼肉百姓,你要去抗争。一战爆发前夕,从书中都能感受到弥漫在欧洲的火药味。虽然你我都知道,战争已经发生了。但是读到这里的时候,心还是提到了嗓子眼。为茉黛和沃尔特祈祷,不要宣战啊。

《巨人的陨落》作为第一部,从英国的工业革命开始,到德国投降,慕尼黑啤酒馆政变为止。几乎写到了这段时间欧洲发生的所有重要的历史:十月革命,一战,无限制潜艇战,施里芬计划的破产,威尔逊对于维护世界和平的热情。除了历史,还有几个家庭平凡的故事,比如贵族和女仆之间的悲剧爱情,被大战分离的英德恋人,爱上了弟弟的怀孕女友的俄国穷苦人,把黑帮老大的女儿搞大肚子阴差阳错继承家业的司机。使这本书充满着虚构而又显示的特有的魅力。

《世界的凛冬》也丝毫不逊色于第一部。从战后德国的破败开始,讲希特勒是如何在这种环境中建立起自己的政权。接着讲德国是如何走上法西斯的道路的。以前,我总以为这段时间的德国人是自卑的,将仇恨发泄在犹太人身上。读了这本书之后,才发现其实很多德国人也是无辜的,比如社会民主党人,共产党人,他们反对独裁,为争取民主斗争。可是纳粹在政治上的表现非常粗暴,几乎是用暴力夺取了政权。然后希特勒非常具有感染力的演讲能力俘获了大多数德国人(以及德国青年)的心,让他们相信了,纳粹可以给他们一个失业率低的强大德国。

20世纪三四十年代,这几乎是民主的低谷。欧洲笼罩在法西斯的阴影中,唯一还有抵抗能力的俄国是红色布尔什维克的天下。这好像在告诉世界:民主是不行的,世界上最强大的两个力量都不是民主的。甚至书中描写到,沃洛佳对美国总统还需要像选民自己做的事的原因感到惊讶。我觉得这个时候只有美国是一个自由、民主的地方。可惜美国对日本投的原子弹毫无必要,杀死了无数无辜的平民,不然的话,美国就是我心中完美的一个国家了。

从书中可以看出,作者是反对战争,反对独裁的。几次提到:不要让我们的后代再去参加战争,要让我们的后代生活在一个自由,民主的社会中。可以说,一战和二战都是父辈错误的决定导致的后果,让后代去偿还。

书中也有很多爱情故事非常感人。我认为此书的三观极正。年轻的时候,人们都会犯很多错误,但是犯错误并不可怕,怎么对待这些错误才重要。有些错误对人的伤害是永久的,无法选择逃避,无法用钱解决,我们只好永远地背负这些错误生活着。

什么是爱情。要得到爱情不是门当户对就可以了,不是你一个人优秀就可以了,就算是两人互相喜欢,也远远不够。要收获爱情实在是太难了。

茉黛和沃尔特,是一战时候跨越两个敌对国(英国与德国)之间的爱情。没有任何通信,几年不见,要忠于对方,还要对对方有信心,太难得了。要知道,战时军官的性生活一般比较混乱。艾瑟尔·威廉姆斯,年轻时爱上根本不可能的伯爵,还怀孕了,最后也终于找到自己的另一半,生活的也蛮不错。黛西,年轻时的不成熟和虚荣对身边的比利视而不见,患难时刻才知道自己爱的是谁。获得爱情是需要代价的。

肯·福莱特笔力了得,写的故事也一点都不狗血,从哪个方面看,这都是一部好书。

但这样的著作会存在一个很明显的缺陷:从五个家庭来写五个国家,其中难免要安排这些人物不断商场,就导致巧合实在是太多了。整个世界看起来像是一家人(又怎么不是呢)。我和欣欣发明了一个游戏,随便说出书中两个人的名字,看他们两个人不认识,如果不认识,需要通过多少人来认识,也蛮有意思的。

 

记录一个pip安装错误

今天使用pip安装一个requirements.txt列表的时候,碰到一个错误:

问题是出在了“cryptograp”,网上查了一下,有人说安装一下xcode的命令行工具就好了:

但是我执行这个命令的时候,说是已经安装了。

又在另一个地方查到,使用下面这个命令安装,居然成功了。

 

《重来2》:远程工作不再遥远?

如今一线城市房价高涨,我常常想,如果能在三线小城市生活,却拿着一线城市的工资,岂不美哉?今天读完了《重来2》这本书(其实这本书的书名翻译非常失败,原名REMOTE,是讲远程工作的。但是此公司之前出版了REWORK,这本书就被当做续作翻译成“重来2”),对这远程工作又有了很大的信心。认为在未来几年内,在家办公完全是可能的。

晚上和名一斋一起吃饭的时候又讨论的这个问题。名一斋想要一边背包走天下,一边写程序。而我想离亲人近一些,不用又太大压力认真做自己喜欢的事情(编程)就能过上美满的生活。一个很现实的问题就是,可以拿一线城市的工资回三线小城市生活,买房,孩子上学,照顾家人都不成问题。简直是逃离北上广的最佳实践。

远程工作的好处有:

  1. 拿一线工资生活在三线城市,生活水平大大提升(买房子压力不大,没户口问题,育儿成本也低。顺提一下,我认为学区房,重点中学之类的对教育水平不是关键作用,家庭环境,父母教育才是关键作用。将教育的权力和任务托付给机构已经是失败了)
  2. 可以随时旅行,甚至周游世界
  3. 不用花很多时间开会,一切工作和交流都会留下痕迹(邮件,IRC等),不会有冗杂的事项
  4. 没有人打扰
  5. 没有上下班通勤的时间(我的经历告诉我,时间、金钱、以及体力成本是巨大的,如果每天花3小时上下班,基本上是不可能有业余时间的,更不可能学习!)
  6. 可以从全世界寻找人才,而不是局限于某个城市/区域

远程工作的缺点:

  1. 不能面对面的交流
  2. 员工可能偷懒
  3. 难以建立公司文化
  4. 没有当老板的感觉
  5. ……

37singles就是远程工作的最佳实践,这本书里面很真诚地讲了他们公司远程工作的经验,可操作性高,非常有借鉴意义。

其实,我觉得远程工作最重要的,也是最难处理的就是信任。

书中提到很多问题,比如面对面交流,企业文化,协作工具等等,都是可以通过技术和工具解决的,尤其对于程序员来说,有irc,版本控制系统,基本可以无痛切换到远程。但是难以解决的地方就是,你是不是在工作,你的老板怎么能放心你在工作,以及如何让老板满意。

这对管理的要求就高了。要有完善的管理体系。怎么休假,开多少会,怎么评价员工的工作。好处是,对每个人来说,拍马屁这种事情显得越发不重要了,所有的工作成果都跃然纸上。管理阶层不会非要去做一些“没事找事让自己看起来很忙”的事情了,比如说没完没了的开会。

从员工的方面说,找到自己感兴趣的工作尤为重要。只要你有兴趣,喜欢你的工作,就会有动力把工作做的又快又好。就像书中说的那样,老板要考虑的不是如何保证员工完成一定时长的工作,而是想办法让员工不要超额工作(远程工作失去了生活和生活的界限)。

我感觉兴趣是远程工作能否成功至关重要的因素。如果没有了兴趣,又成了老板怎么想尽办法压榨员工,员工怎么想办法偷懒的糟糕的模式。但是有了兴趣,老板不用多操心,员工工作的也开心。

所以,在实践远程工作的时候,老板挑员工一定要看此人对这份工作的兴趣和热情;员工挑公司也要挑自己喜欢的。如果大家都在做自己喜欢的事情,那么做什么都会开开心心的。有真正的热爱,团队文化,员工之间的交流,绩效什么的都不会是问题。以前看到一个程序员说,自己只有40%的时间是在工作的,因为喜欢自己的工作,所以不觉得这是工作,只是做自己喜欢的事情而已。如果自己不在上班,也会做这些事情。只有那40%,是需要用“工作”来约束自己去做的。

其实,去年我去意大利旅行,就拿着一份外包(中国)工作的工资和CSDN的稿费收入,白天旅行,晚上工作。CSDN的编辑们我至今都没和他们碰过面。至于那份远程的外包工作,我们也只是通过视频通话和IM来交流。

现在看来,将他们作为全职工作也是完全可行的。至于现在,自己水平还不够,有很多东西是自己SOHO学不到的。但是等自学的能力和计算机基础扎实了,希望那天可以实现远程工作,回青岛去住在一个海边充满阳光的地方,做自己喜欢的事情。

 

在担路网的实习经历

去年11月到今年2月底,在担路网差不多实习了四个月。

这段实习给我收获很大,应该是所有实习里面学到东西最多的一个了。之前的实习要么是研究比价多,写代码少;要么是学校分配的外包公司,做一些杂七杂八的东西。在这家公司负责完成一个模块,从了解系统开始,搞数据表,后端代码,重构,然后前端。最后离职的时候还差点火候,大体上算完成了吧。

公司的张哥算是老Python程序员了,经验非常丰富。刚进公司的时候,配置环境有问题,哪一些都是需要我花大半天时间才搞得定的。张哥就能直接根据命令行输出的信息搞定。小到Debug的能力,大到对行业的认识,我都深深体会到了和资深从业者的差距。

现在想想,很多东西其实在网上都有,但是有一些可能是不来这个公司就不曾发现(或者不会现在就能发现)的:

  • 公司的bazaar4项目已经开发了四五年了,现在已经是非常大的项目,Git仓库(如果我没记错的话)就有500M。在这样一个大型项目里面,我接触到了很多之前没见过的Python和Django的高级特性。
  • 系统设计的思想。尽量把一个功能写成组件(或者模块)以便复用。这是老生常谈的问题,但如果开发经验不足的话,很容易就写的耦合性很高。
  • Debug的能力。分析错误输出,这其实不是垃圾信息。
  • 多看官方文档,代码文档,源代码等一手信息。
  • 关注业界顶尖的信息。不要觉得很多人用就很low。
  • 多买书。
  • 尝试新的工具,不要怕麻烦。
  • 遇到问题就去解决,不要想着这个问题的影响不大,先凑活着/放着。

张哥是一个很好的领导。由此偶尔在网上看到前同事写的离职感悟,也对张哥比较赞同。带新人,沟通,技术等方面都很赞。可惜我因为家里的变故,不得不离开这个公司了。有点可惜。

担路网全家福

担路网全家福