用Python写过处理文本经常会遇到需要decoding或者encoding, 尤其是处理中文的时候。
encoding的问题处理起来是个脏活儿,报错不太容易看懂,网上相关资料不太好查。有同感?请继续读下去。
常规做法是读取文件的时候立刻decode, 所有的处理工作都用unicode,写会文件的时候encode. 但是等到读取的时候在处理的代码读/写起来都很别扭,感觉像穿上鞋以后袜子滑下来了…Python 3.1.1以上的版本解决了该问题。在Python 3.1.1中,打开文件可以加入encoding的参数:
file = open(filename, encoding='xxx')
啊,这样看起来终于舒坦了。 不同写如下的code了
file = open(filename)
for line in file:
decoded_line = line.decode('xxx')
do something else
提倡使用utf8

Loading ...
mailper Python
应网友workout和其他热心读者的要求,我罗列一些自己觉得值得推荐的feed。用纯文字罗列如下,想找到以下的话可以通过Google。希望大家在此互相分享。
适合读者:广谱技术爱好者,国外互联网信息爱好者,用户行为和设计爱好者, 语言爱好者,阅读狂。
技术类
- Coding horror
- Joel on software
- unified Python planet
业界信息
- 谷歌黑板报
- Search Blog: Bing
- Search
- 百度爱好者
- silicon valley watcher
- Google Blogscoped
- Google Code Blog
- 月光博客
- apple4us
- 古奥
- 望月的博客
- Google Operating System
杰出个人博客
- Paul Graham Essays
- Pure Pleasure – lixiaolai.com
- The noisy channel
- 李开复新浪博客
- 韩寒博客
- the trump blog
- Matt Cutts
- Linus blog
- Paul Buchheit (Gmail创始人)
- Peter Norvig (人工智能大儒, Google 研究总监)
- too (Google 创始人博客)
- Alon Halevy’s Blog
- Daniel Lemire’s blog
- Clay Shirky
- Earning My Turns
- How to change the world
英语学习
- London Review of Books
- New York Review of Books
研究或学习类
- MIT OpenCourseWare: CS and EE
- Recent Google Publication
- Language Log
用户体验和设计类
- Mozilla Labs
- Taobao.com UED team blog
- uxday
- Alipay UED
- Aza’s thoughts
- A List Apart
娱乐消遣类
- the big picture
- 煎蛋
- 有意思吧
- Lolcats ‘n’ funny pictures
- Drawn! The illustration and cartooning blog
- 科学松鼠会
更多经典种子,亲爱的读者,等你添加。分享是快乐的。

Loading ...
mailper 技术新闻, 技术读物, 杂项资源
如果你不是订阅本站的用户,你很肯能可能是通过搜索引擎的魔力来到本文的。
微软的软件产品咱们暂且不谈,他们生产的键盘鼠标确实很不错。例如,经典的 microsoft natural ergonomic keyboard 4000 (见图)。著名Google工程师博主Matt Cutts用的就是这个(参考链接)。
可是每个入手该键盘的geek都会觉得,这个弱智的设计师把zoom键放在中间干嘛,应该用来当上下滚轮嘛。

无独有偶,该问题已经被先辈们解决,笔者只搜到了英文文章
为了让中文读者方便找到并使用,暂且将关键步骤翻译如下:
- 下载微软键盘驱动 http://www.microsoft.com/hardware/download/download.aspx?category=MK
- 找到command.xml文件,应该是在 C:\Program Files\Microsoft IntelliType Pro\
- 编辑command.xml文件(建议之前备份),替换所有 <C319 Type=”6″ Activator=”ZoomIn” /> 为<C319 Type=”6″ Activator=”ScrollUp” />, 所有 <C320 Type=”6″ Activator=”ZoomOut” /> 替换为 <C320 Type=”6″ Activator=”ScrollDown” /> 用Notepad或者记事本可以实现,应该是10个左右。
- 重启电脑(貌似这一步不能省)
图例:修改前

图例:修改后

这样你就可以用Zoom来替代鼠标滚轮了。

Loading ...
mailper 杂项资源
相信不少读者都是通过Google Reader (貌似没有中文名) 看到本文的,而多数Google Reader的爱好者都是贪婪的。如果你像我一样,估计未读数量从来都是1000+。遇到强迫症就麻烦了。下面一个方法能让阅读变得有“轻重缓急”。
- 承认不是所有种子一样重要,有些更新你想立刻知道(例如某新闻类的博客:古奥),有些只是希望不要错过(例如某经典博客:Joe l on Software),还有一些可能只是娱乐用的(例如:煎蛋)
- Reader是可以为种子建文件夹的,所有“重要而必读”的种子都可以放在一个文件夹里,文件夹的名称最好是用“_” 开头,这样排序的时候可以在最前面(见图解)
- 每当打开Google Reader的时候,先看重要的种子即可,其他的有时间再读。
笔者的Reader界面(献丑了)


Loading ...
mailper 编程语言 Google, Google Reader
以前本站发布过一篇《程序员的进化》,以一种幽默的代码展现方式调侃了程序。下面这篇是关于Python程序员的。以阶乘为例,很有意思。
新手程序员
def factorial(x):
if x == 0:
return 1
else:
return x * factorial(x - 1)
print factorial(6)
第一年的刚学完Pascal的新手
def factorial(x):
result = 1
i = 2
while i <= x:
result = result * i
i = i + 1
return result
print factorial(6)

Loading ...
耗子 Python, 编程语言, 轶事趣闻 Python
你会用什么样的算法来为你的用户保存密码?如果你还在用明码的话,那么一旦你的网站被hack了,那么你所有的用户口令都会被泄露了,这意味着,你的系统或是网站就此完蛋了。所以,我们需要通过一些不可逆的算法来保存用户的密码。比如:MD5, SHA1, SHA256, SHA512, SHA-3,等Hash算法。这些算法都是不可逆的。系统在验证用户的口令时,需要把Hash加密过后的口令与后面存放口令的数据库中的口令做比较,如果一致才算验证通过。
但你觉得这些算法好吗?我说的是:MD5, SHA1, SHA256, SHA512, SHA-3。如果你使用的是MD5算法来加密你的口令,如果你的口令长度只有小写字母再加上数字,假设口令的长度是6位,那么在目前一台比较新一点的PC机上,穷举所有的口令只需要40秒钟。而据我们了解,几乎有90%以上的用户只用小写字母和数字来组织其口令。对于6位长度的密码只需要最多40秒就可以破解了,这可能会吓到你。
如果你愿意花2000美金和一周的时间来构建一个CUDA,那么,你可以在你组建的这个集群中使用进行密码穷举运算,其速度是,1秒钟可以计算7亿个口令。对于目前实际当中使用的比较复杂的口令,其破解率也可以高达每秒一个。当然,这里说的算法是MD5,SHA之类的算法。
那么,对于这样的一种情况来说,我们怎么办?我们还是有办法的。
阅读全文…

Loading ...
耗子 编程工具, 网络安全 bcrypt
下面这个网站是一个关于Web浏览器的市场占有量的图:
http://www.michaelvandaniker.com/labs/browserVisualization/
这个图是从2002年到2009年,也许未来还会更新,把鼠标移到每个弧上你可以看到那个浏览器的的占有量的百分比。如下图:
这个图本来没有什么,但制作者把其做成了一个圆弧形,这样,看下来就有些不一样了。你还没有看出来?让我们来对比一下这个图和FireFox的logo吧。


Loading ...
耗子 业界新闻, 轶事趣闻 Firefox
啥也不说了,请大家围观下面这个网站吧。
http://www.michaelv.org/
打开这个网站,你会看到N年前DOS时代的Windows 3.1的界面,居然还可以扫雷,呵呵。真应了那句话——“只要是可以被Javascript实现的应用或程序,最终都会被Javascript所实现”。另,关于其它Web上更为疯狂的程序,可以查看本站的这篇文章。还有这个在线的IDE。下面是win3.1的截图:

Loading ...
耗子 Web开发, 轶事趣闻 Javascript, Windows
在过去的N年中,我遇到了很多使用囧然不同风格的开发者,下面是我所知道的一些,你还知道其它的吗?
散弹枪编程
这种编程风格是一种开发者使用非常随意的方式对待代码。“嗯,这个方法调用出错了……那么我会试着把传出的参数从 false 变成 true!”,当然依然出错,于是我们的程序员会这样:“好吧,那我就注释掉整个方法吧”,或是其它更为随意的处理方式,直到最后让这个调用成功。或是被旁边的某个程序员指出一个正确的方法。
如果我们把一个正规的程序员和一个撞大运的程序员放在一起做结地,那么,那个正规的程序可以马上变得发疯起来,并且,可以把正规的程序员的智商降到最低。两个撞大运的程序员不应该在一起做结对编程,这是因为他们破坏性的才能会造成的伤害会比只有一个还差。
撞大运编程
这是一种比散弹枪编程要温和一些的编程方式,我相信这种方式可能会是大多数程序员都会使用的方式。这种编程方式经常出现于程序员并不确切知道他们在干什么,也不知道所写的程序的本质和实际,但是可以让程序工作起来。他们以一种撞大运的方式在写程序,某些时候,他们根本就不知道某个错误的原因,就开始稀里糊涂地修改代码。一旦出现问题,他们会用两条路:1)停下来,理解一下程序,找到出错的原因。2)使用散弹枪编程方式开始解决问题。
测试驱动开发(Test Driven Development)是一种可以用来拯救上百万的撞大运编程的程序员。于是,他们有了一个更为NB的借口:只要我的程序通过测试了,你还有什么话好说?别骂我,测试驱动开发是一个不错的事物,其主要是用来控制撞大运开发所带来的问题。

Loading ...
耗子 流程方法, 程序设计, 轶事趣闻 program, Programmer, 程序员
最新评论