编程

三周里总结的Movable Type的问题

上次换网站的虚拟空间后,发现不知道中间少弄了哪一步,当时blog的1024px模板的侧栏不见了,去了页面下方,就像没有了css的效果。那个模板虽然不是我自己写的,但我当年也做了不少格式上的微调。我没写过PHP,因此对模板的改动也是现学现用,用了就忘,两年后早就忘了当时改了什么了。于是我那时就把blog程序换成了MT,主要想再学习理解一下另一个相当著名的blog程序。转眼三周已过,我在中间也写了不少文章,也发现了MT的一些缺点,总结如下。

1 上传程序会“创立页面”

pages 这是目前发现的最严重的一个问题。左边的截图就是我目前页面侧栏下方的截图,里面的关于我下面的uploads、2007、2008、06就是MT的上传程序给弄出来的。MT的上传图片窗口里,在Upload destination那一行的最右边有Choose folder链接,点击后就会出现下面的窗口:

从Twitter更新校内状态成功!

继续上篇文章,紧天吃午饭的时候觉得那里说的两种方向都不太容易解决。Python的那个最诡异,实在不知道是哪里的问题,而且Python那个脚本,用了几个库,好像我目前手上能用的虚拟主机上(Dreamhost和SDF)都没有;Bash的那个,我实在是不想把目前的宝贵时间花在学习一门新语言上。然后就想到了我过去最喜欢的Perl,既然它被称为是一门“粘合语言”,应该在里面可以直接调用yegle写的wget语句,而且前两天用Perl写过海词客户端简化版,里面就用了正则表达式来处理了HTML。相对与海词的那个排版混乱的HTML输出,Twitter给的XML可简单清晰多了。

我不知道Perl里怎么解析XML,不过Twitter的XML很简单,我几下就弄出了需要的最新的tweet文本和那一条tweet的时间。然后用yegle的wget语句提交,一下子就成功了。然后就发现了一个困扰了我长时间的问题:如果tweet里面是中文,就无法提交(实际上是提交了一个空信息)。然后让程序打印初那条tweet的文字,发现都成了写这样的东西,然后就到处研究怎么把它转换成正常的文字。后来从这里知道了需要用HTML::Entities来处理(代码里第38行)。做了这一步后那些wget语句就又好使了。

校内状态更新有进展

不愧是水木的Linux版主,yegle直接用wget就能成功的修改了校内的状态。不过话说wget、curl这种看似不起眼的命令行工具还真是牛屄,man了一下yegle的代码里面wget的参数,感觉我过去只把wget当成一个下载软件只是大材小用了。

我测试了他的代码。刚开始的时候一直不能成功,后来经yegle在Twitter上指点后也成功了。只是不会更新“目前”的状态,而是修改的“目前”的上一条状态。换句话说,目前的状态显式“什么都没做”,但从个人主页上可以显式状态被修改的历史。

这已经相当程度的解决了问题了。我对用shell处理xml还不熟悉,不能做到一直在后台更新Twitter的消息,有待以后研究。或者再继续修改那个Python脚本。要么就干脆结合Python和Bash,也可以解决问题。

被Python字符串弄崩溃了

受发芽网上的一段“校内网发帖机”的启发,最近想修改那段代码,让它可以部分的实现Twitter状态和校内网同步。之所以说“部分的”是因为我不知道怎么样让它像Facebook的Twitter插件那样Twitter的消息发送完毕后几乎同时(相差不到10秒钟)把Facebook的状态一并更新。另外一点很惭愧,就是我对HTTP编程不熟悉,目前还找不初修改校内的状态要提交的代码,只能修改一下原来的代码,在写日志上面做文章。

就算这样,也还是遇到了不少问题。我目前的打算是像过去WordPress上用过的一个插件,名字大概叫twitter-post那样,总结一天的Twitter消息,成为一篇文章,发送到校内上去。我开始用的是python-twitter这个包,很方便的就能弄到Twitter的消息。不过在它的GetUserTimeline()方法的说明中说到里面有一个since参数,提交一个“HTTP-formatted time”,就可以获得从那个时间点以后的消息。我觉得它应该能让我获得前一整天的所有消息,虽然需要做点处理,删除今天的消息。但这个“HTTP-formatted time”我实在是不知道是什么东西。昨天下午几乎找遍了我能从网上找到的所有表示时间的格式,怎么测试,它都只给我默认的最近20条的消息。可笑的是,python-twitter的代码里有test可以运行,而里面测试since参数的用例里用得Twitter帐号居然总共才不到10条tweets,这样GetUserTime()返回了所有的tweets,当然都是他要的时间段的啦。没办法,我只好去它的Google Groups里发问,结果今天居然找不到我提交的帖子了,难道是开发者觉得我是捣乱的?!!

让Movable Type生成Sitemap

上一篇文章里说,我目前的blog在Google索引里总是旧的链接排在前面,而新的排在后面。新的链接和旧的相比几乎没有变化,两者间唯一的不同在于旧链接的结尾是/,而新链接是以.html结尾的。把/换成.html就可以访问到新的页面,否则就会得到404错误。我是没有问题,但不知情的人从Google里搜索到我的页面,获得404错误就不大方便了。

因此我在上一篇文章里写过,我在想法子让Google把顺序调整过来。我当时的主意是先在robots.txt里面加上“Disallow: /”这一句,粗暴的阻止任何搜索引擎索引我的全部页面。等Google搜索结果里面不含我的站点的任何结果后,再去掉robots.txt里面的那一句,让Google重新索引。相当粗暴的办法,我也不知道有没有效。但写文章的时候我自己提到了Sitemap,我才想起可能我的问题可以用sitemap来解决。

海词客户端简化版

嫌在浏览器里用海词太麻烦,写了个Perl脚本来提取单词的解释。使用时把单词通过参数送进去就OK了。支持词组。查无此字时理论上不会有输出。

没有使用任何“高级”技术。通过LWP模块把网页弄下来,找到解释所在的位置,通过正则表达式提取出来就差不多了。本来想连例句一起弄出来,但只能做到一条例句的情况,如果例句多了只能显式第一条。如何完美的显式所有例句,还需要再想办法。

令人怀念的FreePascal

自从告别了信息学奥林匹克以来,我几乎没有用到Pascal语言了。现在想想,它对我影响颇深,使我受益匪浅。这么一来,过去不离手的“家伙”也都生疏了,以至于我今天看到了FreePascal的主页竟然感到比较震惊。

WordPress 2.2中的书写工具真棒

刚刚我手动的把过去算是有点价值的文章贴了过来,以使用这个独立的域名为止,没有复制原先在Smart: vulgar blog上的文章,算是有了个安慰。

过去我不知道Markdown这个超级棒插件时,先是直接在控制台里面撰写文章,后来是用ScribeFire来发表。这两个工具都有个缺点,就是每一段里不加