新年计划

  1. 平均每周写一篇日志。全年写50篇。我不是快手,不是话痨,这个目标不算高,但是比较符合自己。有话则长,无话则短。坚持原创,非自己原创的文章不转贴到blog中。[blog]
  2. 继续学习和使用windows控件。现在正在学习的是treeview和tabcontrol,基本入门。有精力的话,再学习“编写 Windows 标准控件”的内容。[programming]
  3. 再学习一种新的界面编程方式,例如wxPerl。[gui programming]
  4. 正则表达式的深入理解。把以前的烂尾工程做完(一年之内能否完成呢?)。有精力的话学习编译原理。[regex]

立此存照。

fanfou vs twitter, base64 vs tinyurl?

在fanfou上与网友分享链接时,链接表面显示的是你所输入的网址,可是,这只是障眼法;实际上,当你点击链接时,fanfou是按如下格式把你带到目的地的:

http://fanfou.com/linkto/aHR0cDovL3poYXNtLmNvbQo=

仿佛是你给了A地的女朋友一张地址纸片,约她按纸片上的地址到B地找你。可是,她上了出租车,司机却从A地出发,绕经C市,才又到达B地。明明A到B有直线可以经过,为什么还要取道C地呢?女朋友并没有因此而来迟多少时间,可好奇而细心的你却想弄清究竟。

我怀疑linkto之后是加密了的网络地址。至于加密算法,既然大小写并存,还有等号在里面,那么80%是base64了。验证之后,果然如此。我把另外一个网址也做成fanfou的格式,如下:

http://fanfou.com/linkto/aHR0cDovL2NvZGUuemhhc20uZ29vZ2xlcGFnZXMuY29tCg==

至于什么是base64算法,可以参考这里,此文言之甚详:老罗的矛与盾的较量(4)——奇妙的Base64编码

至于为什么fanfou采用base64,推测如下:

  • 为了使网址格式统一,
  • 更美观,避免出现乱码
  • 被访页面从统计工具上显示页面来源是fanfou,可以增强fanfou的知名度,满足fanfou的虚荣心 :)
  • 这种算法速度较快,可以迅速生成,立刻指向。
  • 这种算法可以起到简单的加密作用,同时解密也简单(可逆)。

但是,这种方法造成的后果是,fanfou所生成的地址太长。

例如,请对比下面的原始网址和fanfou链接:

http://3.1415926535897932384626433832795028841971693993751058209
74944592.com
/
http://fanfou.com/linkto/aHR0cDovLzMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzg
zMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA1ODIwOTc0OTQ0NTkyLmNvbS8

好了,fanfou的事情告一段落,那位司机师傅也清白了:他没有私自带着别人的女朋友去不可告人的地方,而是统一按公司规定,先向公司告目的地,然后从公司取得统一的行程安排,所去的地方正好是原来的目的地。整个过程是安全而透明的,事先有计划,事中有记录,事后可追溯。

我们再来看一下fanfou的国外兄弟twitter是什么解决出租车路线问题的。

我把本文原创作者rex.zhasm的blog地址放入twitter,所产生的链接是:

http://zhasm.com

把刚才那个pi的超级变态网址放进去,仍然是原状:

http://3.141592653589793238462643383279502884197169399375105820974
944592.com

于是,我又进行更血腥暴力的实验:

http://www.iol.co.za/index.php?from=rss_Twitter&
set_id=1&click_id=79&art_id=nw20071229175550951C275909

地址放入twitter 中,产生的新的链接是:

http://tinyurl.com/2d39×2

之后把一个新浪博客的文章扔进去,链接还是tinyurl的。

原来是这样呀。我们对twitter作了不完全调查统计,至少有一部分网址转向符合以下规则:

  1. 如果网址是一级域名,即使长一些,也要完全显示。
  2. 如果网址是二级域名,或者是一级域名引申出来的链接,那么把链接改成tinyurl格式。

如果还用出租司机的例子做类比,就变成这样了:

司机先看看你去的地方是不是不拐弯能到的。如果您从长安街东头,一直坐到长安街西头,那么司机很爽快地把您送到目的地;但是,如果您要在中途拐哪怕一个小弯,对不起,咱做不了主,您得登记,按行业规定的路线送过去。

至于路线的安排,则是由tinyurl来制定。它所制定的路线是最短的,无论是http://zhasm.com这样短的路线,还是像刚才的pi一样的路线,都能压缩成http://tinyurl.com/yveppt这样短。

tinyurl这样的做法,其算法应该是不可逆的,根据所输入网址hash出一个N位的关键码。(不分大小写的英文字母,数字)。根据简单的数学原理,N=6时所记录的容量是:

36^6=2,176,782,336,即2个billion多。

根据一篇道听途说的文章: 第19次互联网报告之中国网页总数44.7亿个(2007年01月23日10:13)。 但是你想想看,一天看一百篇文章,能有几篇值得分享。大多数搜索出来的文章都是过眼烟云的垃圾。退一万步讲,tinyurl不够用了,我们再使用更短的一级域名来支持,(例如g.cn之类),稍长一些的关键码,因为36的10次方是3,656,158,440,062,976,一个让人数半天不知怎么念的数字。

总之,以上数据表明,如果使用tinyurl,是前途光明的。具体到twitter和fanfou中,自觉使用tinyurl也是立见其利:如果说一句话时非得包括一个长长的地址,你在tinyurl的亲切关怀下就能表达更多的内容,在140个汉字或140个英文字母中所提供的信息量越大。何乐而不为?

为什么fanfou不用tinyurl呢?猜测如下:

  1. 技术要自己研发,用着才踏实。
  2. 国外网站有被hexielization的危险。
  3. 如果要支付高额成本,价格问题谈不拢。
  4. 该技术或需大量硬盘,或需大量带宽,同时其利甚微,不值得做。
  5. 跟宗教一样,源自外国,到了中国,即自成具有中国特色的体系,不受外国教皇控制。
  6. 与国情相似:国外酌情搞外包,国内事无事无巨细,一概小而全。
  7. 现有模式就挺好。用户没有觉得不方便呀。

浪淘沙 姑姑的短信

今日收到二姑短信一条,调寄《浪淘沙

岁月去遥遥
无迹可蹈。
转眼又是新岁邀,
不拦流光催人老,
谁敢阻挠。

年轮四十遭。
少女成媪
期盼后嗣立业昭
而立之年该成家
二姑急躁

这不由让我想起之前写的《水调歌头》。不过,显然不能以旧作应付。推敲一番,写出如下几行:

浪淘沙 和二姑

去日竟迢迢,
奔三近了,
燕然未勒髀肉膘。
同龄儿女已恁高,
绕膝欢笑。

水涨船亦漂,
物价狂飙。
囊中何有钻戒包。
薪桂米珠居不易,
买房尚早。

简单翻译一下,就是,

时光过去如此匆匆,
眼看就是奔三的人了。
我像范仲淹一样叹着功未成就,因此无计还家;像刘备一样感叹征战不再,双腿离鞍已久,髀肉生出,建功立业的雄心无以施展。
同龄人都已为人夫人妇人父人母,
与膝前的儿女欢享天伦之乐。

如今物价飙升
人民币对外升值,对内滞胀,
手无余钱,又怎能买得起钻戒。
木柴贵得像桂树枝,米贵得像珍珠,生活在长安,纵有乐天之才也是白居不易,况似我辈庸碌者;
哪里敢奢望买套自己的住房呢?

上阙从主观出发,感叹事业未成,何以家为;下阙从客观出发,说明对了现在生活状态的无能为力。

效果来看,向姑姑解释了原因。从词的角度来说,只能说是勉为其难罢。

——————————–分割线———————————-

PS: 本词只有倒数第二句不是韵脚。为了押韵而把胡乱拼凑,将内容弄得乱七八糟的话,是我所不喜欢的。第二阙虽然说的都是实情,但是显得一览无余之白,没有曲径通幽之妙。相比之下,杜翁一句“安得广厦千万间,大庇天寒士俱欢颜”,就大气得多,穷则独善其身,达则兼济天下。不是单表一人之如何如何,而是上升到全部“寒士”。

本来是游戏笔墨,结果写成这个鬼样子,也是始料未及的。就此止笔。

21 Dec 2007

长城砖上雪

今日因公再登长城。这次时间相对宽裕,也就趁机多拍几张照片。回家后传到flickr,却被告知:免费用户的上限已到,您已经上传了200张图片了!看来,免费用户不止有每月100M的限制,还有总图片200张的限制。我开始反思,是删除其中可有可无的图片,还是另找其它的图片服务站点了。闲话少说,图归正传,我把今儿拍的照片贴在这里,专辑名为“长城砖上雪”。昨日北京普降瑞雪,长城与有荣焉。残雪尚存,遂择优入画,以资留念。

为节约传输速度,我将小幅图片贴出。请点击该图以观看大尺寸版的原图。

  1. 冬日长城·阳面


  2. 冬日长城·阴面

    DSC02054

  3. 长城砖上雪,之一

    DSC02068

    之二:

    DSC02082

    之三:

    DSC02084

  4. 忽然看到历史悠久的长城砖刻,想起时下沸沸扬扬的自由女神像上的中文“到此一游”事件,不由哑然:我们中国人连自己的伟大的长城都舍得刻划,还在乎你外国人的破烂女妖精?有图为证:

    DSC02079

    不过,倒也不可因此小觑友邦人士的贡献,如图:

    DSC02076

    果然如此,来而且不往非礼也。谁能甘心被白白非礼?孰先孰后,却也无须追究。

  5. 对此,我们能说什么呢?弱国无外交,只能仰仗中国之富而强,我们才能坚而挺。雄起吧,中国!

    DSC02088

    正面视图:

    DSC02090

  6. 愤青版长城图片暂告终结。来个小资版:琴键·退潮

    DSC02096

    积雪与阴影相对,既似静态参差的钢琴键,又似动态起伏的海滩退潮。故名。

  7. 本次最后一张:雪叶。我本怀疑sony dsc-t100的成像能力,不过感觉操作更易上手,确有自己的存在理由。看来,像机就得买两台,一台卡片机,便于出门携带:小巧玲珑抓拍机,随时随地记信息;一台大单反,便于高质量成像:光圈快门白平衡,完美配置力求精。

    DSC02092

提供中英文对照的正则表达式cheatsheet的pdf和png下载

正则表达式是我比较喜欢的编程工具之一。近日在网上发现了regular expressions cheat sheet的PDF版,于是翻译成中文,放在这里与大家分享。同时还推出了PNG格式,分别放在flickr和yupoo上。

该sheet上的正则表达式是perl风格。内容包括了Anchor,POSIX,Assertions,Quantifiers and Quantifier Modifiers,Escape Character and Metacharacters,Special Characters,Groups and Ranges,Pattern Modifiers,以及一些例子。

翻译时,一些术语参考了何伟平译的《Perl语言编程》第3版,并保留了原有英文(例子部分除外,以节约篇幅)。

由于没有搞到源文件,文档的制作是使用foxit pdfeditor 2.0,而不是使用最喜爱的latex。不过,我也给原作者发了Email,希望能早日收到回复。大家请访问他的主页,那里还有更多的cheat sheets。都是英文的,原汁原味。

好了,以下是深柳堂主http://zhasm.com推出的资源。

注:由于foxit pdfeditor的编码问题,发现该文档在ubuntu下阅读会出现乱码。对此深表遗憾。只能等待得到latex源码后才能彻底解决该问题。作为变通,请下载png版本。见谅!

由于中文字符原因,仅支持adobe reader(windows/linux均可),但是不支持(xpdf, evince,foxit pdfreader)。请下载png版。文件更小,解析度也不错。

点此下载PDF版(任一)(132K):

  1. 在boxstr.com上:regex cheat sheet
  2. 在mediafire上:regex cheat sheet

点此下载PNG版(155K):

  1. 在flickr上,点击看大图

  2. 在yupoo上,点击看大图

最后,再推荐一个.net的regularexpressions cheat sheet地址

——————————————更新分割线——————————————–

13.Dec.2007:

提供sed_awk正则表达式之PDF手册下载。从网上搜索到的,6.5M。扫描版,质量一般。请点击:

windows下的绿色unix工具集UnxUtils以及个人补充

注:本文所提及的工具附于文后。

假如你用惯了linux,那你很有可能跟我一样,是被一堆个头不大,却是精明能干的小工具所吸引的:im, ssh, perl, grep, agrep, fgrep, sed, wget, agrep, unzip, cp, mv, rm (我常用的,也就这些)……这些工具在windows不是不存在,只是有的工具加上了gui界面,个头太大;有的改成了彻头彻尾的windows版。这一切,让人感觉,不爽。

可是,你值得安装一整套cygwin么?你有必要安装虚拟机么?当然没必要。本文要介绍的,是一组小巧的实现方案:UnxUtils。自14-04-2003年4月14日之后,它有了升级版本,但是仍然都是03年、04年的作品。只要你需要,就不妨拿来用,不要因为它陈旧而轻视它的实用性。

下载UnxUtils以及UnxUpdates之后,解压到自己中意的文件夹,把\usr\local\wbin文件夹的绝对地址加到

我的电脑(右键)->属性->高级->环境变量->系统变量->path值

注意,在所加的地址之前,应该有个分号“;”以示区分。这样,你随时随地就能打开一个”cmd”console,使用如下工具:

agrep.exe; ansi2knr.exe; basename.exe; bc.exe; bison.exe; bunzip2.exe; bzip2.exe; bzip2recover.exe; cat.exe; chgrp.exe; chmod.exe; chown.exe; cksum.exe; cmp.exe; comm.exe; compress.exe; cp.exe; csplit.exe; cut.exe; date.exe; dc.exe; dd.exe; df.exe; diff.exe; diff3.exe; dircolors.exe; dirname.exe; du.exe; echo.exe; egrep.exe; env.exe; expand.exe; expr.exe; factor.exe; fgrep.exe; find.exe; flex.exe; fmt.exe; fold.exe; fsplit.exe; gawk.exe; gclip.exe; gplay.exe; grep.exe; gsar.exe; gunzip.exe; gzip.exe; head.exe; id.exe; indent.exe; install.exe; join.exe; jwhois.exe; less.exe; lesskey.exe; libfl.a libfl.lib ln.exe; logname.exe; ls.exe; m4.exe; make.exe; makedepend.exe; makemsg.exe; man.exe; md5sum.exe; mkdir.exe; mkfifo.exe; mknod.exe; mv.exe; mvdir.exe; nl.exe; od.exe; paste.exe; patch.exe; pathchk.exe; pclip.exe; pr.exe; printenv.exe; printf.exe; ptx.exe; pwd.exe; recode.exe; rm.exe; rman.exe; rmdir.exe; sdiff.exe; sed.exe; seq.exe; sha1sum.exe; shar.exe; sleep.exe; sort.exe; split.exe; stego.exe; su.exe; sum.exe; sync.exe; tac.exe; tail.exe; tar.exe; tee.exe; test.exe; touch.exe; tr.exe; tsort.exe; type.exe; uname.exe; unexpand.exe; uniq.exe; unrar.exe; unshar.exe; unzip.exe; uudecode.exe; uuencode.exe; wc.exe; wget.exe; wget.hlp which.exe; whoami.exe; xargs.exe; yes.exe; zcat.exe; zip.exe; zsh.exe;

根据自己的需要,我加入了自己常用的三个工具:vim,perl,ssh。

  • vim建议直接安装完全版,它自己就包括了console版和gui版。
  • perl:如果用得频繁,用得深入,建议你安装完整的active perl。但是,如果你只是使用正则表达式进行一些简单的文本处理,不用它的其它库的话,从activeperl里提取两个文件足矣:wperl.exe,perl58.dll。它能完美地运行我80%的脚本。使用它来预处理latex源文件,简单高效。(有一个小bug要事物声明:如果该程序没有任何输出的话,仔细检查你的程序吧!它不会提示你出错,而是学习甘地,以非暴力不合作的姿态进行消极罢工。)如果你vim用得好,处理文本只用vim也可,虽然它的正则式风格怪怪的。
  • ssh:我使用过putty,但是它还要自己开一个console,与windows自带的consol不兼容。现在使用OpenSSH for Windows,发现这是一个比较好的选择,与以上环境更融洽。我提取出一个ssh.exe,以及5个dll文件,就能完整地运行ssh客户端,远程操作自己的dh主机了。wget & unzip下载wordpress、安装插件,速度快得吓人;vim修改文件,也比使用ftp再edit快捷直接得多。

由于没有使用python,上面的方案就没有python的份了:( 如果你需要,自己在以上方案的基础上加以改动,应该可以。至于apache+php+mysql,这些都体积庞大,功能独立,有其集成解决方案,不在本文讨论之内。

以下是本文提到的各工具的官方地址:

其中,由本站http://zhasm.com修改过的文件在此:(使用了国外的存储空间;教育网用户需代理)

  • 精简版的perl(400Kb):wperl.exe,perl58.dll:点此
  • 精简版的ssh客户端(1.7Mb):点此
  • rex.zhasm自己使用的UnxUtils文件(5.5Mb),包括了上述的perl与ssh:点此

深柳读书堂

周末重新安装了blog,修复了Extended Live Archives插件。我原以为是阅微堂的模板与ELA不兼容所致。后来google得到答案:原来wp2.3与旧版本的ELA不兼容,需要对ELA进行一番手术才能和谐。

顺便为本博客起了一个比较附庸风雅的名字:深柳堂。出处是刘昚shèn,同慎虚的《阙题》

道由白云尽,
春与青溪长。
时有落花至,
远随流水香。
闲门向山路,
深柳读书堂。
幽映每白日,
清辉照衣裳。

使用ps做了一个logo,“深柳”是柳体,“堂”是方正小篆体。做完发现,所使用的颜色与本站favicon.ico的颜色一样,都是紫色

顺便贴两张国画,欣赏一下。点击看大图:

willow study

还有一张:

study in the deep willow

使用perl对wordpress数据库进行了整理

原来不是很理解post_name与post_title之间的差别。到phpmyadmin看了看,发现,
post_title是文章标题;post_name相当于文件名。我发现自己的数据库的表wp_posts里存在以下问题:

  1. 有的guid是http://zhasm.com/archives/94.html格式的,有的是http://www.zhasm.com/archives/94格式的。不统一。
  2. post_name有的是英文,有的是%+数字格式的乱码。

为解决上述问题,我写了一段perl代码,使用正则式自动解决问题1,手动解决问题2。代码如下:


#!/usr/bin/perl -w
#
use DBI;
#connect to the database
my $dbh=DBI->connect(”DBI:mysql:database=XX;host=localhost”,”user”,”password”,{’RaiseError’=>1});
#use the correct char-set
$dbh->do(”set names utf8″);
#
my $sqr=$dbh->prepare(”SELECT * FROM wp_posts”);

$sqr->execute();

while(my $ref=$sqr->fetchrow_hashref())
{

print “————————\n\n”;
my $guid=$ref->{’guid’};
my $id=$ref->{’ID’};
my $title=$ref->{’post_title’};
my $name=$ref->{’post_name’};

$_=$guid;
if(/www\./)
{ #delete www. from each guid
s/www\.//;
$dbh->do(”update wp_posts set guid=’$_’ where ID=$id”);
}
if(/\d{2,})$/)
{ #add .html to each guid if needed.
s/(\d{2,})$/\1.html/;
$dbh->do(”update wp_posts set guid=’$_’ where ID=$id”);
}
## change the postname
print $title.”\n”;
print $name.”\n”;
print “do u want to translate by yourself?(y/n)”;
chomp($answer=);
if ($answer eq ‘y’)
{
chomp($newname=);
print “your translation is :\t”.$newname.”\n”;
$dbh->do(”update wp_posts set post_name=’$newname’ where ID=$id”);
print “new translation has been aplied.\n”;
}
}

爆米花的回忆

IMG_1199

1306_200703210316362

107892-00001

popcorn

20070926_20fc1922857c40afb0dcZrHhXE7WOYno

120336395

2007118215456709

s111703124

我行被困:《囚困的魂灵》的电子书提供下载

使用LaTeX制作了《囚困的魂灵》的电子书,顺便写下几行。

他(令狐冲)接了木盘,缩臂回转,突然之间,在微弱的灯光之下,只见自己左手手背上凸起了四个宁,清清楚楚是“我行被困”四字。

“老夫生平快意恩仇,杀人如麻,囚居湖底,亦属应有之报。唯老夫任我行被困于此,一身通天彻地神功,不免与老夫枯骨同朽,后世小子,不知老夫之能,亦憾事也。”

—《笑傲江湖·二十一 囚居》

身陷囹圄,高手也未能幸免于难。虽不足炫耀,但也不必自卑。只要能够放正心态,立足现实,自有解脱之日。同样是回忆录,白色漩涡写出了《囚困的魂灵》,原文发表在tianya.cn上。作者说,由于看到别人发表同题材内容,他也有同感,因此写出了自己的经历,希望没有沾染过毒品的人不要跃跃欲试,在日常生活中感觉不到幸福的人要知足,毕竟与高墙内的生活比起来,外边的人的生活实在太幸福、太自由了。

充分尊重人的表达权,也是“17*大”的精神之一。读过白领骨干学术精英的著作之后,再去了解高墙之内的生活,别有一番感受。希望每一位读者都只是通过阅读来了解,而不是身体力行来验证。毕竟,代价太大了。

更新日期:2007.11.15
更新至:天涯第17页(18暂无新内容)

下载地址(点击下图中蓝色的“prison.pdf”即可下载):