`
marlonyao
  • 浏览: 248798 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
vimperator最为著名的一个特性就是hints功能,它可以使得你不用鼠标就可以浏览网页,打开其中链接。默认的hints符号用的是数字,输入数字可以直接打开相应链接,当输入字符时会从链接文字过滤链接。在平时使用过程中,我发现使用文字过滤比较少,因为这要输入较多字符,并且对中文链接无法使用,而数字过滤就要高效得多,但是数字恰恰很难打,因为它离手指太远。char-hints插件使用字符作为hints符号,输入字符就可以直接打开相应链接,效率要高很多。默认char-hints用大写字母去过滤文字,我觉得用小写字母输入更快捷,这样就需要在.vimperatorrc中加入: " char ...
因为项目对mongodb数据库的结构做了一点修改,仅仅是是因为添加/删除一列就导致我使用python写了两个小程序来实现这一功能,而这样的功能在MySQL等关系数据库实际就是一条alter table命令的事。事后我就思考有没有简单的方法去实现这一点,一种方法就是用python实现类似MySQL修改数据模式的一套,这涉及到语法解析,并不简单。第二种方法就是扩展mongo shell,既然mongo shell可以运行javascript,就应当可以写javascript来扩充shell,通过mongo --help果然发现发现mongo可以直接运行javascript,并且通过加上--shell ...
异步调用的困难之处我们不知道它什么时候会返回,通常的解决方法是使用回调来通知异步调用的结束。在大部分情况下,回调这种方式工作得很好,但是当异步调用太多时,太多的回调会将代码弄得很乱,同时很难跟踪代码执行过程。另外,它也使得在同步调用和异步调用之间切换变得困难。Java中有Future的概念,它封装了一个Callable对象,调用Future的get方法,不管Callable是异步调用还是同步调用,它都会一直等到Callable执行结束。这种方式的好处是程序不再管调用是异步还是同步的,从而极大地简化代码。Future通常是由Executor来创建的,Executor抽象任务的调度过程,是在调用线程 ...
创建简单python声明式对象模型 要创建一个简单的Author对象,不考虑数据库操作,通常我都会这么写: class Author(object): """simple model represents Author""" def __init__(self, id=None, name=None, address=None, summary=None): self.id = id self.name = name self.address = a ...
众所周知在Python下可以用eval和exec来执行任意的python表达式及脚本,但是,当运行的脚本来自于网络时这样做就会有安全风险,你总不想运行包含"import os; os.system('rm -rf /')"的脚本吧?对这类问题,通常的解决方法是为来自 ...
其实我是看了这篇文章,我跟着做了,发现他最终做的效果还没有我的好。把我的代码贴出来,其实基本上就是用rank=same: digraph G { nodesep=0.8; node [ fontname="Bitstream Vera Sans", fontsize=8, shape="record" ] edge [ fontsize=8 arrowhead="empty" ] Animal [ label = "{Animal|+ name: String\l+ age: I ...

xargs运行例子

将当前目录下所有dot文件转换成png: ls *.dot | xargs -I % dot -Tpng % -o %.png
在wxpython中,像其它GUI框架一样,如果要进行耗时很长的任务,需要将该任务放在工作线程中运行,以保证程序的响应性。工作线程可能会需要与主线程进行交互。这可以分为两种情况:一是工作线程只是向主线程单向通知工作 ...
我之前写过一篇谈DCL的文章,最近又收到一个问题,本想直接回复,但我又不想再看原来写的文章,那些顺序分析其实很绕。这次我不会直接分析顺序,而是从基础概念讲起,希望大家能看得轻松一些。 如果你搜索网上分析dcl为什么在java中失效的原因,都会谈到编译器会做优化云云,我相信大家看到这个一定会觉得很沮丧、很无助,对自己写的程序很没信心。我很理解这种感受,因为我也经历过,这或许是为什么网上一直有人喜欢谈dcl的原因。如果放在java5之前,从编译器的角度去解释dcl也无可厚非,在java5的JMM(内存模型)已经得到很大的修正,如果到现在还只能从编译器的角度去解释dcl,那简直就在污辱java,要知 ...
我经常收到公司的短信,主要接收人并不在我,但又不得不接收,手机里充斥着此类未读短信,这就极大降低我看短信的欲望,某些重要的短信就这样被错过了。为了解决这一问题,我就想要写一个能自动过滤短信的Android程序,类似gmail中的邮件过滤器,或者lookmail中自定义邮件规则。但由于在android下收到短信时并不是立即存在inbox中,导致并不能直接对短信进行操作。我就退而未其次:仍然必须先建立规则,这些规则定义需要过滤短信的条件(根据发地址、内容等进行过滤),以及对这些短信需要进行的操作(标记为已读、删除、修改内容等),但是操作的执行需要手动触发。 我断断续续花了两周才完成了这个程序,它比 ...
在Python下有Base64编码的库,可直接用,我自己写了个,主要是想调整编码字符的顺序。注意:如果只是想调整最后两个字符(默认为"+/"),用不着自己写,b64encode有个altchars参数,用来指定最后两个字符。先将代码放在这里,有需要的可以直接拿来用。 _keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' def b64encode(s): res = [] leftover = len(s) % 3 for i in ...
我已经不止一次提到过Password Maker了,我网上使用的密码基本都是用它生成的,浏览器中我用自己写的一个vimperator插件生成,桌面客户端我有控制台程序。但在手机上就比较麻烦了,Password Maker实际上是有Android下的客户端,但不符合我的使用习惯,正好我又想学习Android下的手机开发,因此就拿它来练手了。总的来说,做Android下手机开发是比较简单的,模拟器很强大,由于我之前没有做过手机应用的开发,所以也无法和其它平台下手机应用作比较。还是上图吧: 程序源代码放在googlecode上,这里下载。
在网上看到通配符匹配的C语言实现,代码很漂亮。如果使用递归,代码可以更清晰一些,以下是我修改之后的代码: int wildcard_matches(const char *wildcard, const char *str) { if (*wildcard == '\0') return *str == '\0'; if (*wildcard == '?') return wildcard_matches(++wildcard, ++str); else if (*wildcard == '*') { for (++wildcard; *str; ++str) ...
REPL,即read-eval-print loop,最早出现在Lisp中,Emacs的Slime模式编写lisp非常方便。在Slime中流程是这样: 编写小段代码 <C-c><C-c>运行小代码 查看結果,继续编写小段代码 整个过程不用在编辑器和解释器之间来回切换。在vim下也是可以做到这样,虽然可能实现并不怎么完美。ConqueTerm可以在vim在模拟Terminal,运行:ConqueTermSplit ipython就可以分割一个窗口并在其中执行ipython解释器。在另一个窗口中选中一段python代码,按<F9>就可以执行选中代码,这已 ...
pathogen很强大,要理解它的强大,需要先回顾下通常的插件安装方式。我们通常会将vim的所有插件一股脑地全部放在.vim下,插件A和插件B的plugin,doc等目录都混在一起,.vim/plugin既包含plugin-A.vim也包含plugin-B.vim,.vim/doc下既包含plugin-A.txt也包含plugin-B.txt,这样带来的后果是卸载插件很麻烦,很难弄清楚哪些文件属于哪个插件 。 pathogen仍然是将所有插件放在.vim下,但每个插件各自分开,保持自己的目录,插件 A的所有文件都放在.vim/bundle/plugin-A目录下,插件B的所有文件都放在.vim ...
Global site tag (gtag.js) - Google Analytics