blog | 逍遥郡


  • Home

  • Archives

  • Tags

  • Search

静态绑定和动态绑定

Posted on 2011-05-27 |
在今年4月1日,Emacs24合并了lexbind分支,elisp终于也开始支持词法绑定(lexical binding,即静态绑定)了。其实词法绑定对于我们今天的人来说是再熟悉不过了,因为目前多数语言都是词法绑定,包括我们熟悉C、C++、Python、Java等等,这导致动态绑定(dynamic binding)现在看起来反而比较奇怪。 所谓绑定(binding)即变量在运行期的存在,即是变量名字和它的实际内存位置的映射关系。存在,是个时空概念,变量同样有它的作用域(scope)和生存期(extent)。对词法变量而已,它具有词法作用域和不确定的(indefinite)的生存期,这表示一个词法变量只能在一个函数或一个block内存在,它的绑定只在一段代码区域内有效,但从时间上来讲,它可以在任意的时间里持续存在,只是取决于该变量需要使用(reference)多久;而动态变量正好相反,它具有不确定的作用域,这表示一个动态变量可以在任意地方出现,只是取决于你在什么地方绑定它,同时它有着动态(dynamic)的生存期,这表示当绑定该变量的代码执行完毕,该绑定就失效了,也就意味着该变量失效了 ...
Read more »

信号的投递

Posted on 2011-05-26 |
逛BBS看到有人提到UNP 5.8节关于信号投递已经不与时俱进了,说记得信号是可以嵌套的。 POSIX guarantees that the signal being caught is always blocked while its handler is executing. 翻阅了APUE2,找到这段话: What happens if a blocked signal is generated more than once before the process unblocks the signal? POSIX.1 allows the system to deliver the signal either once or more than once. If the system delivers the signal more than once, we say that the signals are queued. Most UNIX systems, however, do not queue signals unless they suppo ...
Read more »

gnus的烦人提示

Posted on 2011-05-26 |
最近发觉gnus使用过程中总是有些烦人的提示。 Gnus auto-save file exists. Do you want to read it?</blockquote> 在 gnus FAQ 里有提到,具体参见 (info “(gnus)Auto Save”)。主要是退出 *Group* buffer 之前,直接退出emacs导致的,我的解决办法是避免直接 kill-this-buffer,另外加入hook: (define-key gnus-group-mode-map "\C-x\C-k" 'undefined) ; avoid kill *Group* manually (add-hook 'kill-emacs-hook 'gnus-group-exit) Buffer has a running process; kill it? 这是因为如果使用了 nnimap,那么进入邮箱的时候,会调用 gnutls-cli。而我的机器上没有安装 gnutls 相关的工具,emacs调用一个不存在的程序时进程状态会标志为 ...
Read more »

在gnus里阅读Gmail邮件(续)

Posted on 2011-05-23 |
在前文里讲了如何用gnus搭配一些工具收发Gmail,不过fetchmail用来收取POP3邮件,的确有很多缺陷,最重要的是它只能抓取Gmail INBOX里的邮件,对label无能为力,这很让人头疼。不过还好有offlineimap这个小工具,而且其中有一部分功能就是专门为Gmail定制的。 具体可以参考Sacha Chua的这篇文章Geek: How to use offlineimap and the dovecot mail server to read your Gmail in Emacs efficiently,文中使用dovecot在本地架设一个imapd,而offlineimap作为一个桥梁,默默地在后台把远端的Gmail邮件同步到本地imapd里去。这样gnus直接连接本地imapd即可。这篇文章的回复里,有人质疑为啥还需要本地imapd呢?让offlineimap直接同步Gmail到一个Maildir,然后gnus访问这个Maildir不也可以么?Sacha Chua没有直接答复,我试了一下的确也可行。 只是使用 nnmaildir 直接访问 Maildir ...
Read more »

在gnus里阅读Gmail邮件

Posted on 2011-05-22 |
几年前曾经写过 一篇blog ,讲gnus如何搭配fetchmail收取邮件。但是后来由于Gmail实在太好用了,所以完全投靠了web mail,而不再使用客户端。不过,最近由于gmail被墙得半身不遂,gnus又派上了用场。另外,我看到现在网络上关于gnus这个怪物的中文说明五花八门,而且不少无用的内容,遂把原来的blog再重新整理一下,补充一些内容。 gnus有很多的后端,可以上新闻组,也可以读邮件。由于国内网络阻尼太大,imap的方式经常会hang住emacs,因此,这里只讲述一种最传统的邮件管理风格: 收取邮件:fetchmail → procmail → gnus 发送邮件:gnus → msmtp fetchmail 虽然fetchmail支持imap,但是我认为它只适合做pop3的拍档,因为fetchmail收取imap会把邮箱的未读标记弄乱。这里给出一个适合gmail的 ~/.fetchmailrc: poll pop.gmail.com with proto POP3 uidl no dns user 'username@gmail.co ...
Read more »

One Key 掌控键位

Posted on 2011-05-21 |
经常见到有人抱怨Emacs里有些键位不用就忘记了,结果想用的时候还得翻配置文件,去看看自己原来是咋定义的。当然,键位不常用就会遗忘,这是记忆的正常规律;除非很多常用按键,经过日积月累会形成肌肉记忆。所以,Emacs另外也提供menu bar和tool bar来辅助记忆,这样只需要点击鼠标就可以完成一些功能,这也是一般IDE的做法。 不过,menu bar和tool bar的定制不是很方便,另外在console里也有局限;所以,这里推荐一套好用的工具 one key来帮助我们记忆键位。是不是想起了one ring?是的,就像铭文所表的那样: One Ring to rule them all, One Ring to find them. 使用one key能通过一个键位来寻找到你所有可能关心的键位。这里的精髓就是提示,利用提示来辅助记忆。具体做法是通过带提示的按键序列树,把所有零散的按键结合到了一起。既然每一步都有提示可循,那么你也就不会忘记你的键位了。 举个例子,比如你在vc模式下,Ctrl+x v = 是把你的工作拷贝和HEAD版本做diff,但是你可能记不清具体的 ...
Read more »

Hadoop streaming使用技巧

Posted on 2010-12-05 |
输入输出 Hadoop streaming框架默认情况下会以 \t作为分隔符,将每行第一个 \t 之前的部分作为key,其余内容作为value;如果没有 \t 分隔符,则整行作为key,value为空。 可以通过参数自定义分隔符和分隔符位置。 参数 说明 stream.map.input.field.separator 设置map输入中key和value的分隔符 stream.map.output.field.separator 设置map输出中key和value的分隔符 stream.num.map.output.key.fields 设置map输出中key的分隔符位置(从1开始)。如:对于A\tB\tC,如果separator=\t,fields=2,则key是A\tB,value是C stream.reduce.input.field.separator ...
Read more »

OAuth验证方法

Posted on 2010-11-14 |
前些日子试用twittering-mode,希望可以和twip一起搭配工作,可惜自己胡乱折腾发觉不行,无奈把twitter的oauth验证和API相关的东西捋了一遍,终于能够工作了,这里做个小结。 由于越来越多的第三方应用涌现,出于对用户账户的安全考虑,今年8月31日twitter宣布关闭basic验证,仅支持oauth验证。目前主流的oauth版本为1.0a,并且产生了rfc5849文档,现在已经成为了各大公司向第三方应用授权的标准方法。 oauth的使用场景很简单,它涉及到三个对象——用户C、服务S和第三方应用A,以及受保护的数据D: 用户C有受保护的数据D保存在服务S上,现在第三方应用A需要访问服务S上的数据D。 是不是想起以前遇到这样的情况是咋样的?比如,你注册了人人网(应用A),然后人人网要你的邮箱(服务S)联系人数据(受保护的数据D),居然会要求你输入该邮箱的用户名和密码,此时你心里是不是会咯噔一下,觉得有些不妥呢?如果服务S上部署了oauth验证方法,那么就可以很容易的解决这种授权访问问题。 各种介绍oauth使用的文档很多,那么它有什么优势呢? ...
Read more »

Doxygen使用心得

Posted on 2010-09-27 |
程序员很多时候都在阅读代码,平时可以在Emacs这样的编辑器中读代码,但有时候在网页上浏览代码也很有乐趣,比如在iPad的Safari里。 Doxygen 本来是一个文档工具,但是用来阅读代码也很给力。Doxygen 在生成文档的时候,我建议对每一个项目维护一份配置文件。为了避免手动编写这个配置文件,有人写了一个图形化的配置工具,在 ubuntu 下可以直接从源里安装: $ sudo aptitude install doxygen-gui 另外,推荐同时安装 graphviz,这样doxygen可以使用dot工具生成类的调用关系图,非常利于阅读代码。 装完之后,运行 doxywizard,就可以在GUI里设置项目参数。 根据使用经验,需要配置这些内容: Project 设置输出目录 OUTPUT_DIRECTORY = /home/www/proj 不要输出完整的文件名,只要保证唯一就可以了 FULL_PATH_NAMES = NO 用typedef的名字替代原来的结构名 TYPEDEF_HIDES_STRUCT = YES ...
Read more »

使用xelatex生成中文pdf

Posted on 2010-09-15 |
一直以来编辑LaTeX中文文档都是个麻烦事,因为TeX最初的设计就没有考虑多语言问题,所以后来使用CJK这个外挂包来处理中文字体。但是,由于CJK是个中文外挂,用起来很麻烦,需要自己编译生成中文字体集,而且常常有些问题,比如,中文目录的问题就一直没能解决,总是乱码。最近,由于想把org导出成pdf,于是研究了一下。发觉一个好东西 XeTeX,在LaTeX宏包里,它被称作XeLaTeX。 为什么说是个好东西呢?因为XeTeX就是为了支持多语言而重新设计的新一代TeX系统,这意味着在XeTeX眼里,中文文档和英文文档再没有任何区别,无需额外的外挂包;而且,XeTeX原生支持系统字体,这意味着我们无需再额外编译字体,系统安装了什么字体,我们就能使用什么字体。这两大优点简直就是大家一直以来梦寐以求的功能,所有的CJK环境、pdflatex这些老工具完全都可以抛弃了,以前碰到的让人焦头烂额的字体问题,再也不会困扰我们了。可以说,使用TeX的难度至少降低了50%。 在ubuntu上安装texlive包,就自动包含了XeLaTex工具集。不过如果不再需要pdflatex这些工具,我们也可以单独安 ...
Read more »
1 … 8 9 10 … 19
Julian Qian

Julian Qian

记录编程、Hack和自娱自乐的一些玩意。

189 posts
60 tags
RSS
Creative Commons
© 2024 Julian Qian
Powered by Jekyll
Theme - NexT.Mist