- 博客(69)
- 资源 (61)
- 收藏
- 关注
Python模板性能评测
本篇主要是对django, jinja, jinja2, mako和cheetah五大python模板引擎性能的评测。对于这几个引擎,分别测试它们渲染字符串,变量替换,以及循环处理的速度,所有结果输出均为unicode,变量替换均需html转义,所有模板中,只有django默认开启了html转义,其它模板需要显式地打开。所有测试均不计算模板加载、编译时间,只计算渲染时间,因为模板通常只会加载一次,...
2011-11-28 18:00:58
334
Mongodb内嵌文档插入性能评测
Mongodb作为典型的文档数据库,支持内嵌文档和复杂的查询,这给数据库建模带来了更多的灵活性。在一个博客应用中,有博客(Blog)和评论(Comment),每篇博客可以有多条评论。在关系数据库建模中,通常博客和评论分别对应一张表,评论表有到博客表的外键。在MongoDB中,也可以像关系型数据库那样,将博客和评论分别放到不同的集合中,另外也可以选择将评论嵌入到博客文档中。对于后者,一个博客的数据结...
2011-11-20 18:03:43
888
startup java fast
据我所知,有不少人[url=http://www.joelonsoftware.com/items/2009/01/12.html]鄙视java[/url],认为它笨重而缓慢,笨重倒是事实,但慢其实是站不脚的,据专业网站的[url=http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php]测...
2011-05-07 18:21:58
160
Mac OS将大写转换键变成ESC键
我之前写一篇如何在[url=http://marlonyao.iteye.com/admin/blogs/672940]Ubuntu下如何做类似事情的博客[/url]。为什么要将CapsLock键转成Esc键?经常用vim的人应当深有体会,还没有转过来的同学,我建议你试一下,刚开始可能会不适应,但以后会越来越顺手。在MacOS下做转换要比Ubuntu下要困难一些,必须借助专门的软件,但从另...
2011-05-05 22:44:19
953
支持通配符的DNS代理
hosts文件可以手动配置一些域名的IP地址,它的优先级最高,有些网站的IP地址不能被正确的解析,这么情形在我国比较常见,可以直接在hosts文件直接指定网站的IP地址来解决。hosts文件的一个缺点是不支持通配符,要为所有的blogspot网站指定IP地址几乎不可能。解决办法就是在本地建个DNS代理服务器,它负责解析hosts文件中的通配符域名,有一些开源的dns服务器,比如bind和dnsma...
2011-05-05 22:23:05
1139
《SED 单行脚本快速参考》的 perl 实现
《SED 单行脚本快速参考》的 perl 实现需要处理文本时,通常我会使用sed或者awk,但我从来没有掌握它们,每次用时都得临时去查怎么使用。最近又碰到一个问题,想把一个html里面所有的css及javascript链接取出来,用sed或awk折腾了半天没有整出来,最后终于放弃了。我决定转向perl,perl是门非常强大的通用语言,但它最初诞生是用于文本处理,因此它处理文本的能力非常强大...
2011-04-23 10:06:02
446
原创 java nio网络编程的一点心得
前几日用java nio写了一个[url=http://code.google.com/p/marlon-tools/source/browse/tools/tcpmon/TCPMonitorSelect.java]tcp端口转发小工具[/url],还颇费周折,其中一个原因在于网上资料很混乱,不少还是错误的。这篇文章中我会以一个EchoServer作为例子。先看[url=http://book.d...
2011-04-17 17:52:30
134
原创 在vim中运行Bash aliases
我比较喜欢用bash的alias,如果一些命令老是重复出现或者容易输错,我就会将它们写成alias,或者稍微复杂一点,写一个函数。慢慢地也还累积了不少alias,用得也很习惯,以至于我用别人的电脑,总不太适应,alias另外也会导致某些命令的自动补全失效。我这里要说的另外一个问题,我们知道在vim及其它一些工具中可以执行外部命令,但是它并不能执行alias和函数,这就比较令人困惑,我不得不输入展开...
2011-04-17 09:33:04
370
python变量覆盖陷阱
我已经好几次碰到这样的错误了,每次碰到都花费我大量的时间,下面总结下我所犯的错误,希望对大家也有帮助。[b][size=medium]闭包[/size][/b]我想抓取一系列的网页,抓取网页很慢,然后对网页内容进行处理,为了提高速度,我启动了多个线程去抓。以下是其代码:[code="python"]import sysimport threadingimport t...
2011-04-03 21:35:46
1009
原创 读《深入理解计算机系统》
最近花了十天的时间(加上春节前看的一点)终于将这部大部头的书看完了,整个过程很兴奋,感觉原本模糊的世界一下子变得清晰了,很久没有这样的感觉了。这里记下自己的收获。[b][size=medium]汇编[/size][/b]第三章讲的是汇编语言,我对汇编一直感到十分畏惧,曾经也捡过一部大部头的书来看,名字已经忘记了,貌似还是一部很经典的书,当时那个痛苦,完全感受不到编程的乐趣。好在...
2011-04-03 18:38:25
124
原创 gnu screen脚本相关
这里不会介绍如何使用[url=http://www.gnu.org/software/screen/]Screen[/url],只是记录我从脚本创建并操纵Screen会话(session)的一些尝试。 如果想看Screen的一些入门介绍,可以看[url=http://aperiodic.net/screen/start#tutorials]这里[/url],还有一个[url=http://aper...
2011-03-26 23:37:00
123
在App Engine下运行Django 1.2
我不知道[url=https://appengine.google.com/]App Engine[/url]是从什么时候开始默认支持Django 1.2的,好像支持的时间不长,我懒得去求证了,反正你去下载最新的SDK准支持,保准支持。要在App Engine下运行Django通常有两种方法:一种是使用[url=https://bitbucket.org/wkornewald/django-non...
2011-03-20 22:12:28
208
原创 Mlac下的vim编辑器:vim-cocoa
说起Mac下的GUI版本的vim,排名第一的当然非MacVim莫属了,我想这很大部分得益于它的名字。作为一个mac新用户,如果要找一个gvim,通常第一反应就是在Google上搜索[url=http://www.google.com/search?q=mac+vim&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firef...
2011-03-20 18:44:10
171
原创 模式对话框为什么不会让界面失去响应?
我很早就有这个疑问了,但一直懒得去弄清楚,直到最近又要开始写桌面程序才下决定要弄清楚。我们都知道在swing(或者wxpython)中使用事件处理使用单线程模型,即所有的事件处理、界面更新操作都是在必须在同一个线程中执行,这个线程又称为事件分发线程(Event Dispatcher Thread)。这样做的好处就是避免大量线程同步的开销,缺点是不能在事件线程中处理耗时操作,这会阻塞用户鼠标键盘操作...
2011-03-07 23:14:57
205
原创 增加vimperator的hints字体大小
之前有同事看我用vimperator时说hints字体太小,看不太清楚,我当时不以为然。后来在使用的过程中发现这确实是个问题,尤其是当两个字符挨得太紧时,很容易输错。一天12个小时都盯着电脑,已经深感视力不如从前,所以为了革命,要保护视力,就从修改vimperator的hints字体开始。在网上搜了一下,发现[url=http://userstyles.org/styles/4874]这里...
2011-03-02 23:46:44
143
原创 推荐vimperator插件char-hints
vimperator最为著名的一个特性就是hints功能,它可以使得你不用鼠标就可以浏览网页,打开其中链接。默认的hints符号用的是数字,输入数字可以直接打开相应链接,当输入字符时会从链接文字过滤链接。在平时使用过程中,我发现使用文字过滤比较少,因为这要输入较多字符,并且对中文链接无法使用,而数字过滤就要高效得多,但是数字恰恰很难打,因为它离手指太远。[url=http://coderepos....
2011-02-25 23:49:09
115
原创 扩充mongodb shell
因为项目对mongodb数据库的结构做了一点修改,仅仅是是因为添加/删除一列就导致我使用python写了两个小程序来实现这一功能,而这样的功能在MySQL等关系数据库实际就是一条alter table命令的事。事后我就思考有没有简单的方法去实现这一点,一种方法就是用python实现类似MySQL修改数据模式的一套,这涉及到语法解析,并不简单。第二种方法就是扩展mongo shell,既然mongo...
2011-02-25 23:18:14
99
原创 实现简单的Future
异步调用的困难之处我们不知道它什么时候会返回,通常的解决方法是使用回调来通知异步调用的结束。在大部分情况下,回调这种方式工作得很好,但是当异步调用太多时,太多的回调会将代码弄得很乱,同时很难跟踪代码执行过程。另外,它也使得在同步调用和异步调用之间切换变得困难。Java中有Future的概念,它封装了一个Callable对象,调用Future的get方法,不管Callable是异步调用还是同步调用,...
2011-02-19 19:38:24
110
原创 创建简单声明式python对象模型
创建简单python声明式对象模型要创建一个简单的Author对象,不考虑数据库操作,通常我都会这么写:[code="python"]class Author(object): """simple model represents Author""" def __init__(self, id=None, name=None, address=None, sum...
2011-02-19 12:27:36
185
原创 用RestrictedPython创建Python Sandbox
众所周知在Python下可以用eval和exec来执行任意的python表达式及脚本,但是,当运行的脚本来自于网络时这样做就会有安全风险,你总不想运行包含"import os; os.system('rm -rf /')"的脚本吧?对这类问题,通常的解决方法是为来自网络的脚本创建一个沙箱(Sandbox),浏览器在执行来自网络的Java Applet时会创建一个权限较低的Sandbox,在其中运行...
2011-02-13 17:35:17
1784
原创 用graphviz dot来画UML类图
其实我是看了[url=http://www.ffnn.nl/pages/articles/media/uml-diagrams-using-graphviz-dot.php]这篇文章[/url],我跟着做了,发现他最终做的效果还没有我的好。把我的代码贴出来,其实基本上就是用rank=same:[code]digraph G { nodesep=0.8; node [ fontn...
2011-01-24 20:50:28
363
原创 wxpython中工作线程与主线程交互
在wxpython中,像其它GUI框架一样,如果要进行耗时很长的任务,需要将该任务放在工作线程中运行,以保证程序的响应性。工作线程可能会需要与主线程进行交互。这可以分为两种情况:一是工作线程只是向主线程单向通知工作进行的状态,比如任务完成进度,并不要求主线程回应。第二种情况是工作线程要调用主线程的方法,并且要求其返回,例如工作线程运行中需要弹出对话框让用户输入必要的信息(在wxpython中,显示...
2011-01-15 23:56:32
1126
Java线程安全兼谈DCL
我之前写过一篇谈[url=http://www.iteye.com/topic/260515]DCL的文章[/url],最近又收到一个问题,本想直接回复,但我又不想再看原来写的文章,那些顺序分析其实很绕。这次我不会直接分析顺序,而是从基础概念讲起,希望大家能看得轻松一些。如果你搜索网上分析dcl为什么在java中失效的原因,都会谈到编译器会做优化云云,我相信大家看到这个一定会觉得很沮丧、很...
2011-01-15 20:15:40
182
原创 SMSBatchEditor: 基于规则的Android短信编辑器
我经常收到公司的短信,主要接收人并不在我,但又不得不接收,手机里充斥着此类未读短信,这就极大降低我看短信的欲望,某些重要的短信就这样被错过了。为了解决这一问题,我就想要写一个能自动过滤短信的Android程序,类似gmail中的邮件过滤器,或者lookmail中自定义邮件规则。但由于在android下收到短信时并不是立即存在inbox中,导致并不能直接对短信进行操作。我就退而未其次:仍然必须先建立...
2010-12-04 15:55:31
283
原创 Python下Base64编码
在Python下有Base64编码的库,可直接用,我自己写了个,主要是想调整编码字符的顺序。注意:如果只是想调整最后两个字符(默认为"+/"),用不着自己写,b64encode有个altchars参数,用来指定最后两个字符。先将代码放在这里,有需要的可以直接拿来用。[code="python"]_keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi...
2010-12-04 12:53:53
128
原创 PasswordMaker的Android客户端
我已经不止一次提到过[url=http://passwordmaker.org/]Password Maker[/url]了,我网上使用的密码基本都是用它生成的,浏览器中我用自己写的一个[url=http://marlonyao.iteye.com/blog/679113]vimperator插件[/url]生成,桌面客户端我有控制台程序。但在手机上就比较麻烦了,Password Maker实际上...
2010-11-25 23:46:56
121
原创 通配符匹配
在网上看到通配符匹配的[url=http://www.nsftools.com/tips/CTips.htm]C语言实现[/url],代码很漂亮。如果使用递归,代码可以更清晰一些,以下是我修改之后的代码:[code="c"]int wildcard_matches(const char *wildcard, const char *str) { if (*wildcard == '\0...
2010-11-20 13:18:20
140
原创 vim插件conqueterm: 打造REPL环境
[url=http://en.wikipedia.org/wiki/Read-eval-print_loop]REPL[/url],即read-eval-print loop,最早出现在Lisp中,Emacs的[url=http://en.wikipedia.org/wiki/SLIME]Slime[/url]模式编写lisp非常方便。在Slime中流程是这样:[list=1][*] 编写...
2010-10-03 00:28:47
424
原创 vim插件pathogen: 管理插件的插件
[url=http://www.vim.org/scripts/script.php?script_id=2332]pathogen[/url]很强大,要理解它的强大,需要先回顾下通常的插件安装方式。我们通常会将vim的所有插件一股脑地全部放在.vim下,插件A和插件B的plugin,doc等目录都混在一起,.vim/plugin既包含plugin-A.vim也包含plugin-B.vim,.vi...
2010-10-02 23:56:20
183
原创 Javascript代码格式化器
[url=http://jsbeautifier.org/]JsBeautifier[/url]是一个用Javascript写的在线Javascript代码格式化工具。用javascript写的好处是只要一个浏览器就可以运行,很方便,坏处在于若是想通过命令行(例如需要脚本化)去运行时就会比较困难。之所以说比较困难,是因为JsBeautifier是可以通过Rhino来运行的,Rhino是一个用jav...
2010-10-02 23:07:20
136
原创 控制台文件管理器vifm
vifm是Linux下的一个控制台文件管理器,我很少使用文件管理器,要用一下,就拿出vifm来。图形界面的文件管理器我不喜欢用,控制台下有人叫做[url=http://www.midnight-commander.org/]mc[/url]的,功能很强大,但快捷键实在用不习惯,还经常和Terminal下的快捷键冲突,找来找去也只找到vifm这个还勉强可用,快捷键模拟vi,符合我的习惯。vi...
2010-10-02 19:12:13
326
原创 Python中用MetaClass实现委托、不可变集合
委托(delegate)是许多设计模式(如Decorator, Proxy)的基础,实现委托的一般方法是在委托类为每个需要委托的方法定义一个方法,它的仅有的实现就是对被委托对象调用同样的方法。例如,要实现ImmutableList,可以这样做:[code="python"]class ImmutableList(object): def __init__(self, delega...
2010-09-13 16:01:42
121
原创 用编程语言作数据库测试的配置
在[url=http://marlonyao.iteye.com/admin/blogs/760763]上一篇博客:django, mongodb与测试[/url]中,我推荐使用json作为数据库测试的配置格式,因为json格式简单,语言中立,容易解析, 又不似xml那样繁琐。json有它的缺点,主要有:[list][*] 没有注释[*] json不能表达复杂的类型[*] json...
2010-09-11 11:25:44
112
原创 django, mongodb与测试
在django下很容易写测试,只需要继承DjangoTestCase,它会自动创建一个测试数据库,每次运行时加载必要的fixture数据,以保证每个测试的初始状态是一致、可预测的。其前提是必须使用它的dbmodel,如果使用MySQL, Oracle等关系型数据库,这自然不是个问题。如果使用其它数据库,例如当前相当流行的NoSQL,这时DjangoTestCase就不能直接拿来用了。如果我们hac...
2010-09-11 10:05:39
240
原创 Capture和Bubble事件阶段
做过Web开发应该都知道addEventListener,它接受三个参数,前两个都很好懂,分别表示事件类型和事件处理器,而最后一个参数是useCapture,就有点让费解了,它是boolean参数,为true时表示Capture阶段触发事件,为false表示在Bubble阶段触发事件。之前一直没有怎么关注这个参数,对它只是一知半解,主要原因在于IE使用AttachEvent来注册事件处理器,但它不...
2010-07-23 09:54:59
235
原创 用Apple Script备份Evernote
我十分喜欢Evernote,保存了大量的信息在Evernote上,包括一些技术笔记、网页摘录、日记等。这也给我带来了一些麻烦,最近Evernote又一次升级,不知怎么搞的,本地存的笔记全部丢失了,只得重新同步,同步速度非常慢,其实何止慢,简直同步不了,非得用代理,至于具体原因,想必大家都知道。这次同步之后我就想在本地备份一下Evernote,但Evernote备份起来很困难,自带的界面只能...
2010-07-22 22:37:23
123
原创 一个expect例子
expect能够模拟用户的交互输入,这相当有用,因为这使得很多原本需要交互输入的命令可以自动完成,而不需要人工干预。以下是一个简单例子,用来模拟登陆远程ssh:[code="bash"]#!/usr/bin/env expectset password [lindex $argv 0]set timeout 60spawn ssh username@remote.hos...
2010-06-26 22:52:45
118
原创 自定义Bash自动完成
Bash的自动完成功能很爽,它不知道免掉我多少记忆的负担,节约了多少键盘操作。 但是对于我们自己写的脚本也能够利用它的自动完成功能吗?回答是肯定的。下面以几个例子来说明。程序员需要记忆很多东西,bash, vi, screen, svn都有很多命令和快捷键,偏偏我的记忆力不行,不时查看cheatsheet,每次都cd到某个目录,从一大堆文件中找到那个文件,然后再打开,这个过程显然很烦琐。所...
2010-06-20 21:43:59
173
原创 几个Vimperator小插件
虽说标题是插件,但实际上我都写在.vimperatorrc配置文件中。第一个是用来在http和https之间切换的插件。很多网页同时有http和https版本,在两个之间切换比较麻烦,所以就写了这个,下面所有的代码都放在.vimperatorrc中,如果在windows下则放在_vimperatorrc下。[code="js"]:js ...
2010-06-20 20:41:51
119
SQL Puzzles and Answers 2nd Edition(2006).pdf
2008-11-06
Concurrent Programming in Java - Design Principles and Patterns, Second Edition.chm
2008-11-06
Manning - Hibernate In Action (2007).pdf
2008-11-06
Pragmatic Programmers - Pragmatic Project Automation(2004).pdf
2007-11-23
Eclipse in Action A Guide for the Java Developer.pdf
2009-03-03
JavaEE5_Performance_Management_and_Optimization.pdf
2008-12-02
non-designers_design.pdf_part2
2008-11-30
non-designers_design.pdf_part1
2008-11-30
Refactoring_Databases$Evolutionary_Database_Design.chm
2008-11-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人