近况

最近博客更新比较频繁了,但事实上我过的一点都不闲。之前很多时候需要了解一个东西,搜了半天,知道了答案,过了一段时间,又忘了。所以索性还是记到博客上来。但我是鄙视复制粘贴的博客的,这里发出来的东西,都是我自己整理的。即使我整理的不好呢,下面还提供了参考性很强的链接。这些都是我弄明白问题真正参考的链接,所以还是有价值的。

现在博客的样子也比较满意,该有的都有了。很长时间都不用再改了吧(但愿也不需要维护)。

过完年之后就回到上海上班,实在是忙。回来半个月了,守望先锋玩的时间加起来都不到俩小时。有点后悔没有在年假的时候把买的《最后的守护者》打完了,现在根本没时间去玩。假期里也比较浮躁,过年那段时间,天天都有人来,烦的很。我自己房间也没有电视,这盘游戏也不是很吸引人,是解密类的,在十天的假期里,我就完成了1/3左右。

一年一年,真的是越来越讨厌过年了。亲戚们问的问题越来越烦。想法也不一样。他们会问你大学四年花了多少钱,然后问问你毕业之后一个月能赚多少钱,给你算算,上大学划算不。真是无法沟通啊。明天不想回家过年了,找个地方旅行算了。

回来之后,感觉像是回到了文明的世界一样。

但是工作实在是很忙。虽然我不像年前一样996给自己加班了,时间还是不够用。

工作里面学到的东西挺多的,比如Django的框架吧,之前就以为自己很了解了。后来发现很多地方自己都没接触到,像是打开了大门一样。现在感觉要学的东西实在是太多了。工作其实挺开心的,每天都能学到新的东西。比如近期就搞明白了session和cookie,了解了Django的signal。对这份工作算是中等满意吧,其实不喜欢加班,上班的时候工作效率高一些,也可以不加。加班实在是太反人类了。

最近买了很多书,一共在亚马逊下了三单,分享一下:

  1. 剑指Offer:名企面试官精讲典型编程题(纪念版)
  2. 若为自由故 自由软件之父理查德 斯托曼传
  3. Redis实战
  4. RESTful Web APIs中文版
  5. 图灵程序设计丛书:图解HTTP
  6. 几何原本:建立空间秩序最久远最权威的逻辑推演语系(全译插图本)(全新修订版)
  7. 大问题:简明哲学导论(第9版)
  8. 乌合之众

图解HTTP这本书一般般,太浅显了,讲的和网络上的博客一样。不如阮一峰老师写的。

Redis,REST,剑指Offer这几本都是好书,学到不少东西。剑指Offer和几何原本这两本书,我买来主要是不想每天接触Web有关的东西,迷失在与用户交互里面。这两本书作为自己思考着玩,锻炼思维来说,非常不错。欧几里得真是厉害啊,这说明智商和历史是没有关系的。在发达的文明,还是有笨蛋。说不定越发达笨蛋越多。

若为自由故这本书不太推荐,49定价太贵。纸质很差。而且并不是自传。我觉得传记只有自传才值得一读。别人的视角来看另一个人,没意思。你看本人写的东西,就像和这个人对话一样,能了解到他真实的性格。

大问题这本书鼎力推荐。亚马逊哲学类销量第一,我看的津津有味。之前看过苏菲的世界,听说是哲学入门的书,但是对我来说还是太枯燥了。半读而废了。呵呵。

乌合之众这本书也很好。我觉得这本书可能有些偏激。对群体写的太弱智了,但也可能事实就是这样。书中有很多常人难以理解的观点,比如群体的智商是低于常人的,群体表现的低级进化型态的生命,主要以女性,野蛮的原始人以及儿童为主。但是写的也很有道理,旁征博引,话粗理不粗,算得上严肃读物。

猛兽总是独行,牛羊才成群结对。 ——鲁迅《鲁迅杂文精选》

最近有一个新的体会:学习知识最大的动力是因为我想知道。那些原理性的知识更加值得去钻研。挺好理解的,万变不离其宗。以前觉得看设计模式太浮夸了,我什么时候能用得到这些花哨的编程模式啊。其实模式就在身边,Django的信号吧,我估计就是个观察者模式。最近感觉debug的能力上升了一个档次。以前就会“怎么用”,程序出个Exception就看不懂了,要是知道它“是怎么运行的”,还怕什么异常看不懂呢。

女朋友给买了俩笔记本,这太好了。之前ps4放在电视下面,放不下,得用两本书把电视机垫起来,两本书还得找差不多厚的。现在好了,正好用这两本笔记本垫电视。于是把这两本书抽出来,一本书Python核心编程,这本太老了,而且看完了,不会再看了。另一本是曼昆的微观经济学原理。这是本好书啊,得重新读一读。

下面这段时间,给自己列一个list吧:

  1. 搞懂localstorage
  2. 写一个简单的web服务器,实现get post方法等
  3. 弄明白HTTP 1/1.1/2的区别

本来都下班了,唉,这么忙还唠叨这么多。下班。

 

Python文件的标准顺序

标准的Python文件应该按照下面的顺序来组织:

  1. 起始行(Unix shebang)
    • 有了起始行可以直接通过文件名字执行脚本
  2. 编码注释(# -*- coding: utf-8 -*-
  3. 模块文档(docstring)
  4. 从__future__导入的内容(参考PEP8):

    Python mandates that future-imports must appear in the module before any other code except docstrings.

  5.  模块导入
    1.  标准库导入
    2. 第三方库导入
    3. 应用程序指定导入
    4. 每种分组中, 应该根据每个模块的完整包路径按字典序排序, 忽略大小写.
  6. 全局变量定义
    • 应该尽量使用局部变量代替全局变量
  7. 类定义(如果有)
  8. 函数定义
    • 模块被导入的时候,class就会执行(定义)
  9. 主程序
    • 在主程序里面写测试代码,保证每次都会通过
 

Python的字符串编码

Python2的编码

在Python2中,str和unicode都是basestring的子类。

str是unicode经过编码后的字节组成的序列。

utf-8编码的str是可变长度,节省空间。unicode占固定长度字节,浪费空间。所以网络传输或者保存文件通常会使用unf-8.

下面这段代码,展示了str和unicode的关系。

要注意的是,要处理字符串,需要尽量保证要么都是str,要么都是unicode。否则可能会遇到编码错误,比如下面这样。

上面的代码就是试图用unicode格式化str,是一般pythoner都会遇到的错误。

可以看出,如果包含中文,又不只包含中文,就会打印出中文的编码。一种可选的处理方式是,用正则表达式替换出unicode编码的内容。

Python3的编码

Python3中,字符串是以unicode编码的,就没有str和unicode了,只有str,用unicode编码。

用unicode表示的str,通过encode()方法可以编码为bytes。网络传输或文件保存使用bytes,节省空间。byte可以通过decode方法转换成unicode。

建议使用uft-8进行转换。注意,str和bytes是python的对象,utf-8是编码方式。

建议在开头添加这样的编码声明:

实际上Python只检查#、coding和编码字符串,其他的字符都是为了美观加上的。这段代码是告诉Python解释器,对于这个文件采用什么样的编码方式。如果没有这一行,就会默认为ASCII,遇到汉字会无法解析。

在Pycon2012上有个名为Unicode之痛的演讲,讲的比较仔细。演讲中提出五个事实以及处理Unicode的三个建议:

我们有五个不可忽视的事实:

  1. 程序中所有的输入和输出均为 byte
  2. 世界上的文本需要比 256 更多的符号来表现
  3. 你的程序必须处理 byte 和 unicode
  4. byte 流中不会包含编码信息
  5. 指明的编码有可能是错误的

这是你在编程中保持 Unicode 清洁的三个建议:

  1. Unicode 三明治:尽可能的让你程序处理的文本都为 Unicode 。
  2. 了解你的字符串。你应该知道你的程序中,哪些是 unicode, 哪些是 byte, 对于这些 byte 串,你应该知道,他们的编码是什么。
  3. 测试 Unicode 支持。使用一些奇怪的符号来测试你是否已经做到了以上几点。

Pycon 20142015中都提到过Unicode,有兴趣可以看一下这两个视频演讲。

参考资料

  1. Python字符编码详解
  2. 廖雪峰:字符串和编码
  3. Python 字符编码判断
  4. Python如何输出包含在对象中的中文字符?
  5. 由__future__中unicode_literals引起的错误来研究python中的编码问题

 

 

Ubuntu终端和Vim使用Solarized配色

Solarzed是我最喜欢的配色,这个配色最大的好处就是全平台。无论是Item2,bash,Vim还是Tmux,都一应俱全。可以在所有的工具上都达到统一。

在Vim中更改配色非常简单,只要下载好solarized.vim,然后在~/.vim中创建一个colors文件夹复制进去,就好了。然后在.vimrc中做如下配置,就可以使用。

但是在ubuntu中,这样配置好了之后,打开vim,会发现vim里面是灰蒙蒙的一片。这是因为终端的配色方案还没有修改,按照一下的步骤将终端的配色方案也更改为Solarized,就好了。

修改方式如下。

1.设置dircolors

其中第二行你可以选择自己喜欢的颜色,不一定非得是256.第三行的.dircolors应该是你自己的路径。

2.设置终端配色

这样,Vim和终端的颜色都设置好了。

参考资料:

  1. http://luodw.cc/2015/10/06/vimcolor/
  2. https://github.com/seebi/dircolors-solarized#installation
  3. https://github.com/seebi/tmux-colors-solarized

 

 

滑雪记

新年结束回来那天是周六,公司决定周六周日都上班,加上接下来的六天(我司六天工作制),我已经连续工作八天了Orz,还伴随着加班。今天终于可以休息了,去绍兴乔波滑雪场浪了一天。

车是17座的中巴,司机老余说这车后座不行,靠背直接是直的,因为这车不能超过6米,就按照5.99米做的。亿维客也是这样的,所以后座特别难受。而且后座为了能在下面塞行李,还给加高了Orz!这是我坐过最难坐的座位了,而且我上次坐这车也是最后面,衰。

虽然早知道是个室内的滑雪场,但是实际看到之后还是稍微有些失望。本以为会和电视里面那样很长,雪很白,有大大的弯道……结果进去之后是这样子的。

后来滑起来,发现这并不重要。赛道再长,也是得扛着滑雪板上去……用到的也就那么一块。真正有关系的就是这雪下面是冰,太滑了,这缺点很严重。把滑雪板扛上去,一只脚踩上,抬另一只脚的时候,你就会滑下去或者滑倒。

所以要把滑雪板横着放,脚踩上去,再转过来。这也是个技术活,有可能没准备好,人已经开始滑了。

上图左边是练习的场地,用户要自己扛滑雪板上去,哼哧哼哧,两秒滑下来,爽完。再爬上去。就这么上去两趟,我就想回家了。

好在中间有“魔毯”,就是电梯,上面防滑,踩着滑板上去,电梯把你送到顶,从右边滑下来。

但是上这个魔毯有个条件,要经过场地里面教练的考试,考过了才能上。考试的内容是从练习场顶端直线滑下来,滑到一半的时候刹住。我后来发现这考试是很有必要的!因为这个考试我才真正掌握了内八字刹车。在这方面我发挥了自己考驾照的天赋,一次性通过。上了魔毯,简直是发现另一个世界的大门,好高啊,这才爽啊!运用我的刹车技巧,想快便快,想慢便慢。下来之后还能潇洒的做一个拐弯!顿时觉得自己掌握了滑雪的精髓。有点不想做程序员了,做滑雪运动员。

之后就根本不想回家了。上魔毯,嗖嗖嗖滑下来,再上去,不亦乐乎。缺点就是我觉得魔毯太慢了,虽然不用自己爬,也还是慢。我觉得可以设计成这种:

两边分别是两个相对的坡,从右边滑倒左边,左边垂直电梯上到顶,再从左边滑倒右边。这样就可以一直爽了。不知道有没有滑雪场设计成这样。我觉得自己不仅有滑雪天赋,可能还有建造滑雪场的天赋。做一个程序员很可能给人类的发展造成阻碍了。

说说摔倒。我玩过旱冰,冰刀,VR滑雪。都是摔倒级别的水平,这里面感觉最疼的是旱冰,冰刀这种,重心容易落在后面,摔倒就想用手扶,手会很疼。最不疼的当然是VR滑雪了,呵呵。谈谈真实的滑雪吧,我发现摔倒了一点都不疼!地上都是雪,穿的又厚。有个技巧就是一定要向侧边摔倒,别压着手,肯定没事,滑雪板那么长前后摔难度也挺大的……发现这一点之后,我疯狂地摔倒,进步很快,上了魔毯就再没摔过了。

今天一起去玩的同事小野晚上告诉我说他已经辞职了,有点伤感,放两张自拍吧。希望不会吓到大家。

明天开始又要写代码了,加油!