Pegasus' Blog
保持一颗好奇心

软件设计的一些基本原则

Everything Should Be Made as Simple as Possible, But Not Simpler. - Albert Einstein

我觉得编写软件的过程就是和和复杂度斗争的过程,无论是编写传统的pc软件还是web应用。对于python这种动态语言,很多问题是在运行时才暴露出来的,而且动态语言相对难以维护和重构。我一直感觉使用动态语言的时候要更加重视项目工程的管理,控制复杂度,防止代码仓库失控。了解一些常用原则降低复杂度还是有必要的。

Practical Vim

vim

Do one thing, and do it well. - A principle of Unix philosopy

学习和使用vim有几年了,我的编辑器学习之路也该告一段落了,目前使用vim和一些插件基本能满足日常代码和文档(博客,笔记,代码文档)的编辑需求了,也无力折腾其他编辑器了。现在大部分时间都是在终端和vim里工作,我觉得在vim上花的时间还是值得的。本博客所有的文章都是在vim里写的,配合markdown插件可以在浏览器里即时预览。本博客是《Practical Vim》读书笔记,不是一本入门书,以一个个tip的形式组织,凝聚了作者的使用智慧,结合自己的使用经验做个简单的记录。

深入浅出Mysql

A SQL query walks into a bar and sees two tables. He walks up to them and asks, “Can I join you?”

最近看了一本小书,网易技术部的《深入浅出MySQL数据库开发、优化与管理维护》,算是回顾一下mysql基础知识。数据库一直是笔者比较薄弱的地方,结合自己的使用经验(python+sqlalchemy)等做个记录,笔者比较喜欢使用ORM,一直感觉拼sql是一件比较痛苦的事情(主要是不擅长sql),以前维护项的目中也遇到过一些数据库的坑,比如编码问题,浮点数精度损失等,防止以后重复踩坑。

python generators, coroutines, native coroutines and async/await

Abstraction is not about vagueness, it is about being precise at a new semantic level. - Dijkstra

笔者之前学习python的时候就对这几个概念有些困惑,尤其是python3之后又不断添加了yield from, async, await等关键字用来支持异步编程。最近看到一篇比较好的博客就结合自己的理解翻译并解释一下这些概念,包括生成器,协程,原生协程和python3.5引入的async/await。 请使用python3.5运行代码示例。

《High Performance Python》

Optimization hinders evolution. - Alan Perlis

最近扫了一本《High Performance Python》,该书从多个角度比如性能度量(profile),内置数据结构调优,并发,多进程,多线程,使用C加速,异步,分布式,内存调优,其他网站使用经验等介绍了python优化经验,看得出几位作者的计算机体系结构和python功底很深。笔者非计算机科班出身,有些知识点超出了我的能力范围,不过多了解一些东西对于以后技术调研和选型还是很有帮助的,简要记录下涉及到的一些东西。

《刻意练习》

看一场,教一场,做一场。 -外科手术先驱 William Halsted

其实我觉得刻意练习挺适合编程领域的,一直很好奇那些编程领域的牛人们是如何思维的,不过一直没多少机会接触。用一定的方法练习虽然成不了牛人,但是至少能做到一个合格的工程师。我觉得这本书最好的思想就是让我们用一种『成长性』思维看待问题,不断用合适的方法磨练专业技能。

使用python编写vim插件

Use a single editor well. The editor should be an extension of your hand; make sure your editor is configurable, extensible, and programmable. - Andrew Hunt

平常总是用那些大神们写的vim插件,今天闲来无事学写了一下vim插件,顺便写一个简单的教程。
先来看下我一个旺盛的需求:平常总会遇到分享本机或者服务器代码的情况,我经常使用paste.ubuntu.com网站粘贴代码(我记性不好总是忘记scp咋使的),然后把链接分享给别人。类似github的gist服务,不过比较简单,而且gist国内用户访问有时候会出现奇奇怪怪的问题,所以一般我用ubuntu的pastebin多一些。但是步骤麻烦点,我写这个插件就是要一个命令帮我完成在vim里直接贴代码到paste.ubuntu.com的功能。

『简单』的python元类

Metaclasses are deeper magic than 99% of users should ever worry about. If you wonder whether you need them, you don’t (the people who actually need them know with certainty that they need them, and don’t need an explanation about why). - Tim Peters

平常都是写业务逻辑,从来没有使用过元类这种黑魔法(好吧,目前的编码规范是不推荐在业务逻辑当中使用元类的,不好维护并且一般来说并无这个必要)。不过貌似只有造轮子的时候才会用到,就像上边的引用里说的,当你不知道为什么要使用元类时,你是没必要使用它的,大部分时间python灵活的特性已经可以应付几乎所有业务问题。最近重新看了下元类,突然有了一种霍然开朗的感觉,用几个简单的例子介绍一些元类(使用python3.5)。

注重细节:代码排版,命名与注释

“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” – Martin Fowler, “Refactoring: Improving the Design of Existing Code”

可能又要被说吹毛求疵或者有代码洁癖了,但是最近协作的时候感觉代码风格不统一,看代码的时候很不方便。实际上良好的代码排版,包括何时分行,何时使用括号都是有讲究的。
良好的代码排版给人看下去的欲望,同时还能让人分清主次重点,方便快速理解代码。讲一下自己对一些编程细节的看法。

Getting Started with Pyparsing

The grammar specification should be a natural-looking part of the Python program, easy-to-read, and familiar in style and format to Python programmers. - Zen of Pyparsing.

上篇博客在讲设计模式解释器模式的时候提到了pyparsing库,当时用该库处理命令从而实现了很简单的DSL,这次详细介绍下该库。 pyparsing是一个文本处理库,可以用来处理html,日志文件,复杂数据结构或者命令的解析等。比如去除源码中的注释,或者写个简单的DSL等。