`
marlonyao
  • 浏览: 248405 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
本篇主要是对django, jinja, jinja2, mako和cheetah五大python模板引擎性能的评测。对于这几个引擎,分别测试它们渲染字符串,变量替换,以及循环处理的速度,所有结果输出均为unicode,变量替换均需html转义,所有模板中,只有django默 ...
Mongodb作为典型的文档数据库,支持内嵌文档和复杂的查询,这给数据库建模带来了更多的灵活性。在一个博客应用中,有博客(Blog)和评论(Comment),每篇博客可以有多条评论。在关系数据库建模中,通常博客和评论分别对应一张表,评论表有到博客表的外键。在MongoDB中,也可以像关系型数据库那样,将博客和评论分别放到不同的集合中,另外也可以选择将评论嵌入到博客文档中。对于后者,一个博客的数据结构可能像这样: > db.blog.findOne() { _id: 1, title: "No Free Lunch", author: "Al ...
据我所知,有不少人鄙视java,认为它笨重而缓慢,笨重倒是事实,但慢其实是站不脚的,据专业网站的测评,Java和C/C++的性能平均差距不到两倍,在某些情况下甚至比C/C++还快。为什么Java给人的印象很慢?主要是在于java的启动速度特别慢,在我的机器上运行HelloWorld的时间需要平均0.35秒,这只是有短暂延时,但第一次启动可能需要2秒或者更长,这种进步得益于Class Data Sharing技术。一个python版的hello程序大概需要0.05秒,这可以说是“立即”。一个C程序需要5毫秒,仍然是“立即”,对人来说,python和c一样快,java就明显要慢多了。运行一个hell ...
我之前写一篇如何在Ubuntu下如何做类似事情的博客。为什么要将CapsLock键转成Esc键?经常用vim的人应当深有体会,还没有转过来的同学,我建议你试一下,刚开始可能会不适应,但以后会越来越顺手。 在MacOS下做转换要比Ubuntu下要困难一些,必须借助专门的软件,但从另一方面说也更简单,不需要写配置文件。从这里下载PCKeyboardHack,然后安装。安装完成之后,进入系统偏好设置,在其它类别中进入PCKeyboardHack选项设置,选中Change Caps Lock,将keycode改成53,也就是Escape的原始keycode,在下面的面板中可以看到。 完成之后可以需要 ...
hosts文件可以手动配置一些域名的IP地址,它的优先级最高,有些网站的IP地址不能被正确的解析,这么情形在我国比较常见,可以直接在hosts文件直接指定网站的IP地址来解决。hosts文件的一个缺点是不支持通配符,要为所有的blogspot网站指定IP地址几乎不可能。解决办法就是在本地建个DNS代理服务器,它负责解析hosts文件中的通配符域名,有一些开源的dns服务器,比如bind和dnsmasq,bind主要是充当DNS服务器,我不清楚它是否支持代理功能,另外它太重了。dnsmasq支持代理,也很简单,但是却不支持IPv6。我就python写了一个,支持IPv6,带缓存,源代码在这里,并不 ...
《SED 单行脚本快速参考》的 perl 实现 需要处理文本时,通常我会使用sed或者awk,但我从来没有掌握它们,每次用时都得临时去查怎么使用。最近又碰到一个问题,想把一个html里面所有的css及javascript链接取出来,用sed或awk折腾 ...
前几日用java nio写了一个tcp端口转发小工具,还颇费周折,其中一个原因在于网上资料很混乱,不少还是错误的。这篇文章中我会以一个EchoServer作为例子。先看《Java网络编程》中的写法,这也是在网上颇为常见的一个写法。 public class EchoServer { public static int DEFAULT_PORT = 7777; public static void main(String[] args) throws IOException { System.out.println("Listening for connectio ...
我比较喜欢用bash的alias,如果一些命令老是重复出现或者容易输错,我就会将它们写成alias,或者稍微复杂一点,写一个函数。慢慢地也还累积了不少alias,用得也很习惯,以至于我用别人的电脑,总不太适应,alias另外也会导致 ...
我已经好几次碰到这样的错误了,每次碰到都花费我大量的时间,下面总结下我所犯的错误,希望对大家也有帮助。 闭包 我想抓取一系列的网页,抓取网页很慢,然后对网页内容进行处理,为了提高速度,我启动了多个线程去抓。以下是其代码: import sys import threading import time urls = [ 'http://www.google.com', 'http://www.sina.com.cn', 'http://www.baidu.com' ] for url in urls: def _fetch(): sys.stdout ...
最近花了十天的时间(加上春节前看的一点)终于将这部大部头的书看完了,整个过程很兴奋,感觉原本模糊的世界一下子变得清晰了,很久没有这样的感觉了。这里记下自己的收获。 汇编 第三章讲的是汇编语言,我对汇编一直感到十分畏惧,曾经也捡过一部大部头的书来看,名字已经忘记了,貌似还是一部很经典的书,当时那个痛苦,完全感受不到编程的乐趣。好在这本书不是讲用汇编编写程序,只是要借助汇编理解计算机如何工作,这正是我想学习汇编的目的,或许正因为我和作者的目的完全一致,读起来十分轻松,当然作者写得非常好。除了汇编指令之外,还讲了:如何将if/switch/for/while等控制结构翻译成汇编语言,这些我之前也 ...
这里不会介绍如何使用Screen,只是记录我从脚本创建并操纵Screen会话(session)的一些尝试。 如果想看Screen的一些入门介绍,可以看这里,还有一个quick reference,很有用。 当要同时维护或开发多个项目时,我的习惯是每个项目一个screen会话,每个会话中打开多个窗口。切换项目时,先detach当前session,然后attach另一个项目的session,保持只打开一个控制台窗口,将不必要的窗口或应用程序关闭或隐藏是我的习惯。但总是要来回切换session,有时就显得比较麻烦,第一次切换需要先创建session,每个session基本上都要先启动一个django ...
我不知道App Engine是从什么时候开始默认支持Django 1.2的,好像支持的时间不长,我懒得去求证了,反正你去下载最新的SDK准支持,保准支持。要在App Engine下运行Django通常有两种方法:一种是使用django-nonrel,它是django的一个nosql分 ...
说起Mac下的GUI版本的vim,排名第一的当然非MacVim莫属了,我想这很大部分得益于它的名字。作为一个mac新用户,如果要找一个gvim,通常第一反应就是在Google上搜索mac vim,结果第一页全部都是MacVim,没有我今天要介绍的主角Vim-Cocoa的什么事。我不是说MacVim不好,我也用了MacVim大半年了,我只想说SEO很重要。 MacVim的主要优点在于和Mac OS X结合得比较紧密,例如它默认绑定Mac应用程序的常用快捷键(⌘X/⌘C/⌘V等),允许在一个进程中开启多个窗口等等,鉴于我基本上是在将Mac当作Linux来使用,就不多说了。MacVim令我不爽的主要 ...
我很早就有这个疑问了,但一直懒得去弄清楚,直到最近又要开始写桌面程序才下决定要弄清楚。我们都知道在swing(或者wxpython)中使用事件处理使用单线程模型,即所有的事件处理、界面更新操作都是在必须在同一个线程中执行,这个线程又称为事件分发线程(Event Dispatcher Thread)。这样做的好处就是避免大量线程同步的开销,缺点是不能在事件线程中处理耗时操作,这会阻塞用户鼠标键盘操作,给用户的感觉就是界面失去响应,这给用户的感觉很不好。但是,我们却经常在事件线程中弹出模式对话框,我们都知道模式对话框是阻塞的,因此它应该也会阻塞事件线程,从而导致用户界面不响应,但事实是对话框仍可响应 ...
之前有同事看我用vimperator时说hints字体太小,看不太清楚,我当时不以为然。后来在使用的过程中发现这确实是个问题,尤其是当两个字符挨得太紧时,很容易输错。一天12个小时都盯着电脑,已经深感视力不如从前,所以为了革命,要保护视力,就从修改vimperator的hints字体开始。 在网上搜了一下,发现这里,要先装Stylish插件,不过它的样式是为了vimperator 0.5和0.6而设置的,已经相当timeout了。我从vimperator插件的源代码提取了样式并作了修改,如下: @namespace liberator url("http://vimperator ...
Global site tag (gtag.js) - Google Analytics