无知的 tonyseek

Yet Another Seeker

对 Python Web 框架 Flask 的一些个人评价

Python 多到数不过来的 Web 框架已经成为了一大风景,而且不同于 PHP Frameworks 集体山寨 Rails 的风格,几乎每个 Python 框架都有自己的特色。我接触过的有 web.py、Django、Bottle、Flask ,其中属 Flask 最为我喜欢。有时候框架会被称为“轮子”,但是可以确定的一点是这四个框架一定不是轮子,我最喜欢的 Flask 有许多非常方便的特性,当然也有我想吐槽的不爽点。于是写一篇博客把吐槽记录下来。

一次笔试经历引起的反思

前不久申请了实习,今天早上刚完成了在线笔试。总体来说题目不难,但是我答题过程并不顺利,所以写下这篇文字,反思自己的不足。实习单位要求对试题保密,故我不谈及试题,只针对自己的知识疏漏总结。

计算机网络学习笔记——以太网

这学期修读了“计算机网络”这门培养方案中开设得比较晚的基础必修课。这也是继上学期修读软件需求课程之后,我再次修读尹剑飞老师开设的课,实在受益良多——尹剑飞老师的讲解总是一语击中要点。今天特此将入门一周的知识总结记录下来,以后还会不断更新续篇。一方面如 phppan 哥所说整理知识是对自己负责,另一方面我也希望能记录下学习的脚步。

用 greenlet 协程处理异步事件

自从 PyCon 2011 协程成为热点话题以来,我一直对此有着浓厚的兴趣。为了异步,我们曾使用多线程编程。然而线程在有着 GIL 的 Python 中带来的性能瓶颈和多线程编程的高出错风险,“协程 + 多进程”的组合渐渐被认为是未来发展的方向。技术容易更新,思维转变却需要一个过渡。我之前在异步事件处理方面已经习惯了回调 + 多线程的思维方式,转换到协程还非常的不适应。这几天我非常艰难地查阅了一些资料并思考,得出了一个可能并不可靠的总结。尽管这个总结的可靠性很值得怀疑,但是我还是决定记录下来,因为我觉得既然是学习者,就不应该怕无知。如果读者发现我的看法有偏差并指出来,我将非常感激。

[转载]《外交学者》蒋学勤:胡锦涛的遗产

上周,写"中国力量"专栏的同事David Cohen的讨论了中国主席胡锦涛最近发表的一篇文章,他认为中国和西方正在进行一场文化战。这篇文章所用的言辞让西方的观察者们感到警惕,并回想起那些挥着红宝书的红卫兵们——"我们必须清楚地认识到西方敌对势力正在加紧西化和分化中国,意识形态和文化战场是他们长期渗透的领域。"

在 Python 中实现 Ruby 的 Open Class 和特异方法

Ruby 中的 OpenClass 是个非常方便的特性,我们可以扩充一个已有的类,往里面添加方法。甚至还能脱离类,向实例中添加该实例独有的方法,称为“特异方法”。这种做法的前提是语言具有足够的动态特性,能够运行时更改语言结构,所谓“ 元编程 ”(Meta-Programming)能力。

Python 也有类似的能力,但是不像 Ruby 有原生的语法支持。在 Python 中实现 OpenClass 和特异方法基本原理与 Ruby 中的原理类似——“函数、方法也是一种对象”。

本文只讨论 Python 的 新式类 ,对于 old-style class 保持无视。

先让简单的命令模式消失吧

最近读《Ruby 设计模式》 [1] (第 n 次重读),对其中的一个观点特别认同:设计模式终将随着语言抽象能力的强化而消失在代码中。正如作者曾经在 C 语言中用函数指针结构体管理操作特定结构体的“面向对象设计模式”,随着面向对象融入语言而消失。GoF 的设计模式很经典,但是在 Ruby、Python 等表达力强大的语言火热之后,部分原来可以称之为“模式”的做法已经开始有了融入语言的趋势。

虽然这篇博客讨论的是命令模式,但我不会再絮叨一边命令模式是什么,已经有非常详细的资料 [2] 在先了。我想讨论的是关于在相对传统高级语言更“高级”的语言中,命令模式更佳的实现方式。这类语言包括但不限于:Python、Ruby、Scala、JavaScript。

Python 中 print 语句的诡异用法

真是孤陋寡闻了,到了今日看了一篇博客 [1] 才知道 Python 中 print 语句有种类似 C++ 流操作符的诡异用法:

import sys

error_log = open("./error.log", "a")
print >> sys.stderr, "some error message"
print >> error_log, "some error message"

error_log.close()

当然了,只有 2.x 的 Python 才有 print 语句一说,在 Python 3.x 中(以及导入了 from __future__ import print_function 的 ...

总结 XSS 与 CSRF 两种跨站攻击

在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式。在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了。但是,历史同样悠久的 XSS 和 CSRF 却没有远离我们。由于之前已经对 XSS 很熟悉了,所以我对用户输入的数据一直非常小心。如果输入的时候没有经过 Tidy 之类的过滤,我一定会在模板输出时候全部转义。所以个人感觉,要避免 XSS 也是很容易的,重点是要“小心”。但最近又听说了另一种跨站攻击 CSRF ,于是找了些资料了解了一下,并与 XSS 放在一起做个比较。

音乐播放器 Rhythmbox 乱码问题

音乐播放器乱码应该是 Linux 下常见的问题,主要原因是 Windows 下的音乐 ID3 中文部分是以 GBK 家族编码的,而 Linux 下则统一为 UTF-8 编码。

Google 一下,看到这篇文章 解决ubuntu下音乐播放器Rhythmbox乱码问题 提出的两个方法应该是我们常见的。第一个方法是修改音乐的 ID3 信息,这个方法非常糟糕——因为如果把 ID3 改成 UTF-8 编码,回到 Windows 就会乱码了,这是拆东墙补西墙的做法;第二个方法思路可行,修改 Linux 环境变量,让播放器先尝试 GBK 编码,再尝试 UTF-8,但是我更喜欢另一种风格的做法。