jul 31
《Head First Design Patterns》的作者很推崇 Scheme 这门“古老”的语言,而 GNU Emacs 本身也使用了 LISP 作为粘合剂,都说 Scheme 很优美,决定开始学习 Scheme。
Scheme 的资源非常丰富,最让我感兴趣的莫过于 Scsh ,一个内嵌了 Scheme 的 Unix Shell,FreeBSD Ports 位于 /usr/ports/lang/scsh 。可以使用 Scsh 编写系统管理脚本,这样,再也不用看到丑陋的 Shell 代码了,既能实现系统管理,又可以体验 Scheme 的优美。事实上,Python 的作者应该很喜欢 Lisp/Scheme,因为 Python 中有很多特性来自 Lisp/Scheme。
一些资源汇总:
dirk 发表于 2009-07-31 Fridayscheme jul 31
一直以来, Perl 都是以特强的文字处理功能著称,其实 Python 在这方面也相当不错。最近在项目中用到不少Python可圈可点的东西,在这里大概列一下,权当自己的Python Tips。
1、如何获取邮件地址?
我们分析邮件的时候,从From和To头信息中会提取到类似“DIrk Ye ”的邮件地址,如果我们需要只保留完整的EMail地址,可能需要正则表达式来提取,由于邮件格式的多样性,可能比较麻烦。Python提供了一个工具函数,可以方便的使用:
import email.Utils
def getCleanMailAddress(strAddr):
emails = email.Utils.parseaddr(strAddr.lower())
return emails[1]
2、利用Mimetypes确定文件的扩展名:
在邮件分析中,经常会碰到没有指定文件名或者扩展名的附件,我们可以根据附件的MimeType来猜测其应有的扩展名:
import mimetypes
def getFileExtension(strContentType):
guessmimes = mimetypes.guess_all_extensions(strContentType)
if guessmimes:
return guessmimes[-1]
else:
return ''
另外,mimetypes.types_map中包含了所有运行系统可识别的MimeType,如果没有你期望的类型,可以通过mimetypes.add_type(‘audio/midi’, ’.mid’)方法来添加自己的东西,甚至可以作出修改。
3、使用正则表达式从字符串中提取指定的模式: Python的正则表达式也是非常强大的,有搜索、匹配、抽取等。有时候抽取是有点麻烦但非常有用的功能。假设我们会有大量的文本类似:
abcd@mypdx.com
aaaa@mypdx.com
n234f@mypdx.com
其中前半部分的名称都是数字和字母的组合,现在我们使用正则表达式抽取名字部分:
import re
def getUserName(strAddr):
addr_re = re.compile('^([0-9a-z]+)@(.*)')
unames = addr_re.search(strAddr)
if unames is not None:
return mptos.group(1)
else:
return ''
Python在文字处理方面还有很多特点,我只能把用到的东西列一下。有不少专门讲解Python相关东西的书籍,有的还是免费的;比如专门讲解Python文本处理的 Text Processing in Python ,实用而精彩,而另外一本 Python Cookbook 也是相当不错的读物,现在已经有第二版了,覆盖了Python2.3、2.4的新特性;去Python主站看看有什么适合你的书: http://wiki.python.org/moin/PythonBooks
Python Cookbook相关的两篇文章:
jul 31
日常开发工作中使用的是 Emacs + ECB 环境, ECB 是建立在 CEDET 的基础上,CEDET 使用 Semantic 作为代码分析工具,所以在 Emacs 编辑目录中会生成类似“semantic.cache”这样的缓存文件,在我的 LinCVS (新版本叫 CrossVC )中会显示在“Non-controlled files”中,比较影响正常的使用,因此可以使用 CVS 的 ignore 机制将不需要的文件隐藏起来。但这些临时文件分散在各个子目录中,想要在每个子目录中创建一个 .cvsignore 文件是不太现实的,幸好 CVS 支持全局设置,可以在个人用户的 Home 目录设置一个全局生效的 .cvsignore 文件,比如我现在的 ~/.cvsignore 文件内容如下:
.cvsignore
semantic.cache
第一行是将 CVS ignore 文件本身隐藏起来,第二行是隐藏 Semantic 生成的临时文件。这样设置后,不需要在 CVS 的各个子目录中重复设置,全局生效。
事实上,CVS 支持多种 ignore 机制,具体方式如下:
- 服务器端 CVS 仓库的 $CVSROOT/CVSROOT/cvsignore 文件,这个文件控制着所有用户的操作;
- 每个用户 Home 目录中 .cvsignore 文件;
- 环境变量 $CVSIGNORE 的设置;
- 任何 cvs 命令中 -I 选项;
- cvs 遍历目录时子目录中的 .cvsignore 文件;
CVS ignore 文件中可以包含多行,每行可以设置多个文件,文件名之间使用空格分开。因此,如果你的文件名中包含空格,在 CVS ignore 文件中将被区别对待,忽略功能就会失效,不过我们可以使用 foo?bar 来匹配“foo bar”。
dec 07
邮件开发中非常重要的一些 RFC 文档,标记一下,方便以后检索:
电子邮件相关的 RFC 文档RFC | 描述 | 状态 |
---|
RFC 1939 | POP3 protocol | Updated by RFC 2449 |
RFC 2449 | POP3 Extension Mechanism | |
RFC 822 | STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES | Obsoleted by RFC 2822 |
RFC 2822 | Internet Message Format | |
RFC 2045 | MIME Part One: Format of Internet Message Bodies | Updated by RFC 2231 |
RFC 2046 | MIME Part Two: Media Types | |
RFC 2047 | MIME Part Three: Message Header Extensions for Non-ASCII Text | Updated by RFC 2231 |
RFC 2183 | The Content-Disposition Header Field | Updated by RFC 2231 |
RFC 2231 | MIME Parameter Value and Encoded Word Extensions: Character Sets,... | |
RFC 2387 | The MIME Multipart/Related Content-type | |
RFC 3462 | The MIME Multipart/Report Content-type | |
RFC 2111 | Content-ID and Message-ID Uniform Resource Locators | |
RFC 2632 | S/MIME Version 3 Certificate Handling | |
RFC 2633 | S/MIME Version 3 Message Specification | |
RFC 2821 | Simple Mail Transfer Protocol | |
dirk 发表于 2007-12-07 Fridayemail sep 27
距上次在 Windows 下编译 Magickwand for PHP 差不多过去快一年了, ImageMagick 升级到了 6.3.x 系列, Magickwand for PHP 也发布了最终的 1.0.5 版本,原先的 DLL 已经不能使用了。这期间,不断有人写信过来索要新版本,而 ImageMagick 官方论坛却始终没有人更新。
说实话,我现在完全在 Linux/FreeBSD 下开发,所以已经彻底不再使用 Magickwand for Windows 了;而且这个编译工作比较费时间,不太愿意做了;今天又花费了我一整天时间生成了一个最新(也是最后的)版本,使用 PHP 5.2.4 + ImageMagick 6.3.5 + MagickWand 1.0.5 + VC6 编译生成。
»» 最终文件请到此页面下载 ««
- 编译环境:Windows 2000,Visual Studio 6.0,PHP-5.2.4,ImageMagick-6.3.5,Magickwand-1.0.5;
- 测试环境:在 Windows 2000 + Apache 2.0.59 + PHP 5.2.4 环境下测试通过;
在此郑重申明:这将是我提供的最后一个版本,以后不再花费无谓的时间在这上面(感觉官方论坛对 MagickWand for Windows 没有任何兴趣)。我建议,需要做 MagickWand 开发的朋友,尽量转到 Linux/FreeBSD 下开发,软件的编译和安装更加方便,相关资料也更好找。
Update@2007-09-27 22:03
一个叫 Cully 的新西兰朋友下载我生成的 DLL 后,发现处理上传图片会产生一个错误:
Fatal error: magickreadimage(): C API cannot read the format "D:\PHP5\tempupload\0704I02C0681.jpg" (reason: UnableToOpenBlob `D:E:\PHP5\tempupload\0704I02C0681.jpg': Invalid argument) [on C source line 217]
研究了一下 MagickWand 的源代码,同时也对比了一下 0.1.9 的旧代码,发现 MagickWand 作者将原先针对 Win32 平台的代码删除了,Windows 下的文件路径带有盘符(冒号),这个和 ImageMagick 辨认图片格式发生冲突,致使新的 MagickWand 会错误的处理文件路径为图像格式,引起读取失败。我将部分旧代码合并到新版本后发现可以修正 Cully 的问题,但我没有把握里面有多少东西需要修正。暂时放弃吧。
我现在不敢断言,但怀疑 MagickWand 的作者可能想要放弃 Windows 平台,或者说,他们就没有在 Windows 下进行测试。That’s bad news.
Update@2007-09-28 09:31
经过排查,发现只有在 read_image 的时候做了特殊处理,所以我直接制作了一个 补丁 ,重新编译后,发给 Cully 测试通过。OK,发布最后一次更新,所有下载文件更新到最新补丁版本。
另外,我也将自己制作的 MSVC6 的工程文件也放到了下载目录中,有兴趣的朋友可以自己拿回去自己编译(自己制作一个工程文件真的那么难么?呵呵)。
dirk 发表于 2007-09-27 Thursdayubuntu sep 11
rfc2387 描述了 Multipart/Related 类型的 MIME 格式,通过在 EMail 中使用这种格式,可以创建丰富的内包含邮件内容,比如漂亮的信纸,比如特色的电子贺卡等等,最大的特色就是把所需要的资源文件直接包含在邮件中,不需要从远程服务器下载,这样既避免了下载网速的限制,又防止某些垃圾过滤程序默认拒绝显示远程资源的问题。
这种格式在Outlook和Thunderbird中都可以创建和显示,因此大部分终端用户都没有问题。但令我奇怪的是 Gmail 却没有支持这种格式,也许是出于安全性考虑吧。在开发 http://asweb.cn 手机邮箱过程中,也碰到需要针对这种邮件的解码,虽然确实存在安全隐患,但这种安全问题存在于所有 Html 格式邮件中,目前还没有特别好的方法解决。
利用 Python 的制作这种内包含的邮件,可以轻松实现漂亮的信纸和电子贺卡。
dirk 发表于 2007-09-11 Tuesdaymime may 07
System Message: ERROR/3 (<string>, line 1)
Error with CSV data in "csv-table" directive:
',' expected after '"'
.. csv-table:: **Rectangle command in Emacs**
:header: "Keystrokes", "Command name", "Action"
:widths: 15, 20, 60
"C-x r k","kill-rectangle","Delete a rectangle and store it."
"C-x r d","delete-rectangle","Delete a rectangle and do not store it."
"C-x r y","yank-rectangle","Insert the last rectangle killed."
"C-x r c","clear-rectangle,"Using spaces, blank out the area marked as a rectangle and do not store it."
"C-x r o","open-rectangle","Insert a blank rectangle in the area marked."
"C-x r r r","copy-rectangle-to-register","Copy rectangle to register r (where r is any character) ."
"C-x r i r","insert-register","Insert rectangle from register r (where r is any character)."
"(none)","delete-whitespace-rectangle","If a rectangle includes initial whitespace, deletes it, narrowing rectangle."
"C-x r t string Enter","string-rectangle","Change contents of marked rectangle to string (if string is narrower or wider than rectangle, dimensions change accordingly)."
"(none)","string-insert-rectangle","Prompts for string and inserts rectangle."
如果你曾经用过 UltraEdit 的 Column 编辑模式,应该会很喜欢 Emacs 的这个功能。
dirk 发表于 2007-05-07 Mondayemacs mar 18
3月刊的《程序员》杂志有一个“久违了,代码大全”的专题,提到曾经非常经典的书籍, 《代码大全》 马上就要出第二版的中译了。该书第一版中译好像是93年出版的,可惜我一直不知道这本书,看到有这么多人推崇,实在想找来看看。搜索了一下,第一版中译93年出版后没有再版,所以在我求学的当时市面上并没有这本书在流通。一直到大概2001年左右,有一批热心的网友将第一版中译整理成电子书,当时公开的网站是:http://www.delphidevelopers.com/,现在已经无法登录(我在北京,找不到服务器错误)。(非常感谢这批同好,具体名单电子书末尾有公布)
说实话,我为了下载这唯一的可用版本,找了很多地方,国内的下载站点实在有点让人恶心,哎!!!最后还是让我找到了,而且是最好的1.01版本,考虑到大家的辛苦,我也把这本书放在这里供大家下载:(请手动拷贝网址到浏览器下载;本站所在服务器配置比较低,下载的时候请尽量考虑服务器负载,谢谢!)
codecomplete_101.rar(4.0 MB)
注意:
- 如果有人认为公开提供此电子书下载侵犯了你的权益,请告知,我会撤除;
- 感谢王洋的朋友zhouzheng(抱歉,我不知道具体名字是什么)赠送此《程序员》杂志给我;
- 感谢 Ubuntu Linux ,让我结识了一些未曾谋面的开源朋友。
dirk 发表于 2006-03-18 Saturday
jul 31
6月份开始挂上Google Adsense的广告条,一个多月来,效果非常不理想,对于小型个人站点来说,真正想要靠这个挣钱简直是遥遥无期的。
想要从Google Adsense获得收入(Earn Money)并不容易,收益的多少和很多因素都有关系,比如展示次数( Page impressions)、点击率( Page CTR)、广告价格( Page eCPM)等等,而这些因素又取决于网站的访问量、网站内容的组织(搜索引擎优化,search engine optimization)、网站页面中广告位置布局、内容相关的广告关键字(Google Adwords)等等,另外,如果你挣钱的速度太慢,真不知道猴年马月才能达到100美金(Google Adsense的支付底线)。所以说,完全可以把Google Adsense当作一个业务去做,需要潜心研究。比如有人专门做Google Top Paying Keywords 业务,靠这个卖钱;也有人根据自己的经历和经验 出书 讲解如何从Google Adsense挣巨额财富;而 国内一家公司 更是提供了Google Adsense点击统计服务业务。
在众多复杂技巧的后面,需要大量的学习和实践(可能还需要经济投入),相对而言,一些简单的Tips值得参考和改进:
- 展示次数越大越好,也就是网站的流量越大越好;
- 点击率要适中(1 ~ 5%?),站长可能无法控制它,但可以适当的通过控制展示次数来间接调整;
- 网站的内容要有针对性,如果可能最好突出高价格的关键字;
- 尽量展示英文广告;(对于这一点,Wordpress似乎有优势,因为Wordpress使用UTF-8编码)
- 在页面布局上合理、有效的展示广告;
对于流量不大的站长来说,短时间增大流量是不太可能的,但可以适当的增加高附加值的关键字相关的内容,比如比较早的一份High Paying Google Adsense Keywords清单中,关键词 mesothelioma 的每次点击价值竟然高达$84.08。(为什么会有人出这么高的价格来利用这个关键词做广告呢?当然是利益的驱使,因为在美国有很多律师愿意出高价寻找得了间皮瘤(mesothelioma)或者石棉癌(asbestos cancer)等类似疾病的客户,因为代理这些人进行索赔诉讼所得的律师费将会非常之高。)如果你愿意失却Blogging的乐趣,可以有针对性的组织网站的内容。事实上情况可能要复杂得多,Google的每次点击价格都不太相同,和各种因素都有关系。
归根结底,最重要的还是做好自己,内容精彩了,流量自然上去了。而对于一个Blogger来说,不仅仅需要精彩的内容,还需要勤快!而所有这一切,又与Blogging乐趣背道而驰,所以,重点的重点,就是你自己想要什么了(make money or enjoy blogging)!
dirk 发表于 2005-07-31 Sundaygoogle
Recent Comments