Xie Yanbo

Recent Entries

Journal Info

linux killbill
Name
Xie Yanbo

View

Navigation

Advertisement

February 9th, 2007

at命令隐藏的陷阱

Add to Memories Tell a Friend
linux killbill
昨天晚上八九点钟用at命令设置了一个脚本执行一系列统计运算:
at -f /path/stats.sh 3:30am tomorrow
经过讨论,又修改了其中的几个地方,改完的时候我已经饿的不得了,赶紧离开办公室找吃的。也因此,忘了之前想到的一个隐患,我改完了脚本,是不是应该用atrm从任务列表里删除之前添加的命令,重新设置呢?今天早晨来到办公室,检查完统计结果,发现昨天的担忧应验了,果然它是按照老脚本执行的。查了一下man at:
For both at and batch, commands are read from standard input or the file specified with the -f option and executed.
这句话可真是暗藏玄机,如果你没有像我这样被陷阱坑过一次,决不会意识到它的二义性。一般说来,参数“-f”是说:从这个文件里找东西。但这里的问题是,对于at这种事后才执行的程序,这个参数是告诉at记住这个文件的路径,到时候来这里找?还是立马就读,哪怕你删除了脚本,它依旧能执行?从稳定性的角度来看,立刻读取要执行的脚本并保存下来是非常好的方式,不过在这一点上没有明示用户是个不太好的习惯。文档里说到"read from",可没告诉我什么时候读。好吧,吃一堑长一智,下次得记得从陷阱上跳过去了。希望Linux Manual里at这篇写于Nov 1996的文档能早日更新一下。

这个故事告诉我们,任何可能出错的事儿终将出错。这话不是我说的,墨菲法则(Murphy Low)告诉我们事实如此。

January 24th, 2007

最近QQ邮箱问题多多,虽然跟腾讯客服联系过,但我们的服务器给QQ发邮件仍是时好时坏,所以postfix里不知道什么时候就会滞留大量等待发到QQ邮箱的邮件。为了避免每天都去服务器上查看,干脆写了一个脚本,定时监测每个域名滞留的邮件数。
#!/bin/bash
# sizequeue.sh

limit=${1:-50}

/usr/sbin/postqueue -p | awk '{if (NF==1){print $p}}' | \
 sed -e 's/.*@//' -e 's/>.*//' | tr '[A-Z]' '[a-z]' | \
 sort | uniq -c | sort -n | awk '{if ($1>'"$limit"'){print $0}}'
这个脚本用来统计每个域名滞留的邮件数,并过滤显示大于50封邮件的域名。再在crontab里添加一条任务,就可以每天午夜定时检查了。
MAILTO=xieyanbo@gmail.com
0 0 * * * /root/sizequeue.sh 50
Tags: ,

December 29th, 2006

(no subject)

Add to Memories Tell a Friend
linux killbill
断网实在是难受,MSN上的联系人看不到,搜索到的资料页面也无法访问。从维基百科的邮件列表看到金色葡萄的一封邮件:
地震造成断网的紧急应对方法:
feed 阅读: 使用google reader订阅
feed 抓取:使用google reader订阅feedburner以后,标记一个tag,共享tag后,用feedsky烧制
web: 使用google translate翻译网页,访问中文的话,英文翻译成中文
写blog: 使用google docs,在setting中设置blog api,写完后publish,post blog
看起来真是充分利用Google的服务了。也许是可行的,我先用Google Docs发一篇Blog试试看,大家要是看到了那就是成功了 :)

December 23rd, 2006

i2p≈自由?

Add to Memories Tell a Friend
linux killbill
很久没用过fr33n3t了,今天又看到一个很像它、但更有前途的项目:i2p。这东西也是java写的,看起来跟fr33n3t有一拼,甚至野心更大。通过i2p,我们就可以在现在的互联网之上再建立起一个匿名的i2p专用内部网,它使每个人都可以在自己的机器上建立blog/forum等等各种各样的服务,而所有这些服都是匿名的、分布式的、动态的、加密的。作为当初设计的一个原则,i2p能提供大量数据的快速交换能力,甚至足以支持bittorrent、VIOP等P2P软件的流量需要!不得不赞一个。这年月,一提匿名、分布、共享诸如此类的字眼,注定会吸引人眼球,更别说这么先进的设计了。以前虽然一直都是看到java写就的软件就绕着走,这次还是忍不住这个软件诱人的功能,下载下来试用了一下。启动运行已经简单到十足的傻瓜化,跑一下postinstall.sh脚本,然后到浏览器打开http://localhost:7657/看状况就OK了。不过,我遗憾的发现,NAT还是会要了i2p的命;启动了半个小时,还是reseeding状态,半个peer也没有。防火墙不光对p2p态度不友好,对号称要让p2p去死的i2p也一样不太欢迎呀。还是不够人性化呀,要知道,不是每个人都有能力到NAT上打一个UDP 8887端口的洞的。不过,联想到前一阵子分析Skype如何在防火墙上打洞的文章,估计离解决这个问题的时间也不远了。可是自由还有多远呢?名字上就挂着自由的fr33n3t并没让我们进入自由时代,i2p也不可能一下就把我们带进去。但不管怎么说,多一点手段,就里实现希望多靠近了一些。fr33n3t/peekabooty/tor/i2p,重要的不是有什么软件,而是明白我们需要什么,我们想用这些软件和技术做什么。
Tags: ,

November 25th, 2006

碰巧看到一个Google Earth的开源项目gaia,它对GE做反向工程,可以在Linux和Mac里跑。我实在是不喜欢Google Earth的wine版本,于是兴冲冲的去gaia的主页,没想到迎面而来的就是一片红字。看看他们说什么:
25 November 2006, we've got the letter from Michael Jones, the Chief Technologist of Google Earth, Google Maps, and Google Local search, requesting us to cease reverse engineering and improper usage of licensed data that Google Earth use. We understand and respect Google's position on the case, so we've removed all downloads from this page and we ask everybody who have ever downloaded gaia 0.1.0 and prior versions to delete all files concerned with the project, which include source code, binary files and image cache (~/.gaia).

The project may continue it's life as opensource 3D earth viewer with GPS support, but without support Google Earth imagery. We are sorry.
完蛋,看来我刚巧晚了那么一点点,体验不成了;而且以后也大不可能有Google Earth的Linux替代品了,可惜了(此处读liao3)的。到Google网站看了看,确实提到了不许反向工程、不许反编译、不许...blabla,似乎和大多数商业公司的许可协议都差不多。有人把Google、微软、Yahoo这些巨头的软件产品许可协议做过什么比较吗?

更新:Google Earth是使用的QT,本地程序,不是用的Wine。谢谢那位不知名朋友的提醒。

November 17th, 2006

doubanclaimb5599c5e4abe0e21
:)

November 13th, 2006

2006年11月12日讯

  中文维基百科社群今天宣布:中文维基百科在11月12日创建第十万条条目“毕打街钟楼”,成为第12个拥有十万条条目的维基百科语言版本。中文版本也在众多亚洲语言版本中,条目量排第二,仅次于日语版。

  先前已达到这个目标的11个语言版本分别为英语、德语、法语、波兰语、日语、荷兰语、意大利语、瑞典语、葡萄牙语、西班牙语与俄语。维基百科创办人吉米·威尔士(Jimmy Wales)在创办维基百科之时,目标之一是每个语言版本均收录十万以上的条目。英语维基百科于2003年1月22日率先达成此目标,而中文维基百科也终于在近四年后的今天达到此目标。

  维基百科是国际非营利组织“维基媒体基金会(Wikimedia Foundation)”规模最大且最广为人知的计划,宗旨是“为地球上的每一个人提供自由的百科全书,用他们选择的语言写成全世界知识的总和”。作为全球使用人数最多的免费网上百科全书,维基百科内的所有内容均容许任何人自由修改或引用,并且能够让世界各地的网友合作,共同编写条目、提升条目品质。维基百科自2001年成立以来,目前已有250种语言版本、总计超过550万个条目。

  中文维基百科成立于2002年10月,来自中国大陆、香港、台湾以及世界各地超过12万名编辑者共同编辑及创建条目内容。中文维基百科在中文世界的知名度与使用率,虽然不及英语、德语等版本在其语系国家的高,但维基用户仍然持续不断地编写或修改条目内容。中文维基百科目前以每日约200个条目的速度在增加当中。

  中文维基百科的一项特色是内建简体·繁体中文转换显示系统。编辑者无论以哪种字体编写内容,系统皆可根据使用者所在地而自动调整显示简体或繁体,甚至是各地用词的差异。由于各地的中文使用者不必因迁就字体问题而分开编辑,中文维基百科规模得以迅速增长。但可惜的是,中文维基百科的成长并非一帆风顺,中国大陆政府多次对维基百科进行网络审查封锁,使当地使用者无法以正常途径访问维基百科,在相当程度上拖滞了用户与条目数量的成长。

  随着中文维基百科社群的发展,不少和维基百科相关的大型活动都相继举行。当中包括香港刚于本年8月举行的“第一届中文维基年会”,以及台湾台北市将于2007年8月3日至5日举办的“第三届维基媒体国际大会”,让各个语言版本的维基人齐聚台北交流。维基媒体国际大会前两届分别在德国法兰克福、以及美国波士顿举办。

  展望将来,中文维基百科仍以质量并重为目标,在增加条目数量的同时,也致力提升条目内容的质素。另一方面,中文维基百科也与时并进,在知识问答类型网站的流行下,最近开设了一个名为“询问处”的专栏,希望吸引习惯使用知识问答类型网站的人士,能够加入成为中文维基百科的一员。

October 23rd, 2006

昨天收到一封信,推广台湾的一项叫做“捐发票”的公益文化。到这位朋友的网站了解了一下,感觉是个很有意义的事情。其实大陆为了促进税收、防止商户逃税,也有发票中奖的机制来鼓励人们索要发票,不同于台湾的是大陆采取即时刮奖的方法;但从自己周围的情况看来,许多人即使刮到了奖,也会因为兑付麻烦而舍弃了--跑一趟银行可不近,要花不少时间。如果我们这里也有类似的慈善或公益组织来做这件事,每年一定也能从中得到不少资金。只不过,民间的慈善组织被管制而无法成立,政府背景的慈善机构又连连丧失诚信,我们有发票又能捐给谁呢?

October 21st, 2006

Martin Fowler's Bliki 中文版读到RubyPloticus,发现Ruby的method_missing是个很有意思的东西。试着做了一个Python的实现,Python 2.4和2.5都可以使用。
try:
    from functools import partial
except ImportError:
    partial = None

class MissingMethod:
    """if method not exists, call method_missing

    >>> class T(MissingMethod):
    ...     def method_missing(self, name, *args, **keywords):
    ...         return (name, args, keywords)
    ...
    >>> t = T()
    >>> t.a()
    ('a', (), {})
    >>> t.a(1)
    ('a', (1,), {})
    >>> t.a(2)
    ('a', (2,), {})
    >>> t.a(1, 2)
    ('a', (1, 2), {})
    >>> t.a(x=100)
    ('a', (), {'x': 100})
    >>> t.b(1, 2, x=100, y=200)
    ('b', (1, 2), {'y': 200, 'x': 100})
    """
    def method_missing(self, name, *args, **keywords):
        pass
    def __getattr__(self, name):
        if partial:
            return partial(self.method_missing, name)
        else:
            def missing_call(obj, name):
                def _(*args, **keywords):
                    return obj.method_missing(name, *args, **keywords)
                return _
            return missing_call(self, name)

def _test():
    import doctest
    doctest.testmod()

if __name__ == "__main__":
    _test()
看起来跟Ruby的感觉不太一样,也许这就是最小接口人本接口的不同设计所带来的差异吧。
Tags: ,

October 19th, 2006

便条:SQL更新数据

Add to Memories Tell a Friend
linux killbill
根据一个数据库中的记录更新另一个数据库中的统计值:
update old,
  (select id, y, n from
    (select id,
      sum(case agree when 'Y' then 1 else 0 end) as y,
      sum(case agree when 'N' then 1 else 0 end) as n
    from data_table
    group by id) v right outer join old a
    on a.id = v.id
  ) new
set old.agree_count=new.y, old.disagree_count=new.n
where old.id=new.id;
Tags:

October 18th, 2006

Launchpad 要有新动作

Add to Memories Tell a Friend
linux killbill
眼看 Launchpad 网页上停机维护的提示一分钟一分钟的倒计时,刚才终于停机了。不过看现在的提示像是会有不错的升级,拭目以待。

503 Service Unavailable

Launchpad

Sorry

Launchpad is offline at the moment for maintenance. It should be back, better than ever, soon. Thanks for your patience.
The Launchpad team
Tags:

September 29th, 2006

今天Google Reader更新,感觉操作比以前好了很多;突然就有了兴趣,看了看Google的其他服务有没有变化,然后就发现大陆地区又可以下载Google Browser Sync了,怎么回事?难道Google不怕政府跟他们索要某些人的机密数据,用来控告这些人了吗?或者是我胡思乱想,根本就会错了Google上次禁止下载的用意,根本就与政府或私人信息安全无关?
Tags:

September 28th, 2006

答案是:是的,它会。请看:
Google Arabic AD in Chinese Web Page???


这是出现在Techweb上的一篇文章中的Google广告,广告的链接指向了这里。到现在我也没搞明白这是怎么回事;要么Google ADS系统太高深莫测了,要么就是太白痴了,看起来没有中间解释...
Tags:

看网上的漫画

Add to Memories Tell a Friend
linux killbill
经常看Dilbert;最近在用的一个叫stripclub的软件,虽然有点老,但也是个很不错的阅读器,有自己的图形界面,而且能缓存住以前看过的漫画文件。如果喜欢在把图片收集下来或者输出给其他工具阅读,Dosage是个很好的工具,而且还兼容stripclub的漫画定义文件。有时间我可以自己定义几个文件,来抓取台湾一些有名的漫画系列 :)
Tags:

September 27th, 2006

web.py + nose test

Add to Memories Tell a Friend
linux killbill
最近在用web.py,找到了一个例子,介绍如何测试web.py的应用程序。不过,这个例子要稍微修改一下:
--- test_webpy-orig.py  2006-09-27 14:57:29.000000000 +0800
+++ test_webpy.py       2006-09-27 14:57:46.000000000 +0800
@@ -8,6 +8,7 @@

 class hello:
     def GET(self, name):
+        web.header('Content-Type', 'text/plain')
         i = web.input(times=1)
         if not name: name = 'world'
         for c in xrange(int(i.times)):

现在已经开始习惯用nose来测试程序了,但在跑这个测试脚本的时候,意外的遇到了错误提示,说:

AttributeError: _outputter instance has no attribute 'truncate'

简单的给_outputter增加了两个方法(基于webpy-0.138版本),并重新编写了一下测试脚本,解决了这个问题:
--- web-0.138.py        2006-05-13 12:12:19.000000000 +0800
+++ web.py      2006-09-27 14:37:11.000000000 +0800
@@ -2241,6 +2241,10 @@
         return _oldstdout.flush()
     def close(self):
         return _oldstdout.close()
+    def truncate(self, size=0):
+        pass
+    def seek(self, offset, whence=0):
+        pass

 _context = {currentThread():Storage()}
 ctx = context = threadeddict(_context)

从这里下载修改过的web.py和测试脚本test_webpy.py

Version: web.py 0.138; nose 0.9.0; paste 0.9.8.1;

September 17th, 2006

以前的很多subversion仓库没法用现在的svn读出来了,因为svn存储使用的bdb版本改变了:

libsvn._core.SubversionException: ('Berkeley DB error for filesystem my/db while opening environment:\nDB_VERSION_MISMATCH: Database environment version mismatch', 160029)


现在的svn是使用dbd4.3,我的老svn仓库则是4.2。试了试用/usr/lib/libdb-4.2.so代替libdb-4.3.so,又报告

ImportError: /usr/lib/libaprutil-0.so.0: symbol db_create, version DB4_3 not defined in file libdb-4.3.so with link time reference

崩溃。难道非去装个老版本svn试试?虽然cvs的很多特性很糟糕,svn在特性上全面超越了cvs,但在向后兼容的问题上它得跟cvs学学。cvs一直用rcs的格式,千年不变,从来没有出过这种问题呀。subversion,还我的程序来~
Tags:

September 14th, 2006

“从星期一开始,没有新闻出版管理局的批准,报纸广播电台因特网等媒体不得发表外国新闻社的消息。新华社称:这是为了‘保证信息传播健康有序地进行’”。


何勇《垃圾场》

我们生活的世界
就象一个垃圾场
人们就象虫子一样
在这里边你争我抢
吃的都是良心
拉的全是思想
你能看到你不知道
你能看到你不知道
我们生活的世界
就象一个垃圾场
只要你活着
你就不能停止幻想
有人减肥有人饿死没粮
饿死没粮饿死没粮
饿死没粮饿死没粮
有没有希望
有没有希望
有没有希望
有没有希望
Tags:

September 4th, 2006

Solidot准备关闭

Add to Memories Tell a Friend
linux killbill
由于创建者Jesse Lee没有精力打理服务,Solidot已经准备关闭了。在关闭之前,正在尝试最后的机会把站点转让,或者寻找共同管理者

在Solidot读了不少新闻,正在网站蒸蒸日上的时候宣布关闭,真是一件很可惜的事情。希望Solidot能找到新的主人,继续延续下去。

August 20th, 2006

公开回答 zhllg

Add to Memories Tell a Friend
linux killbill
我不明白一个仅靠臆测就诋毁别人的人,怎么能不自己首先道歉,反而要求别人给出证据证明自己的清白?按照zhllg的逻辑,是这样的思路:Yahoo/Google/Douban,因为这些公司从来没有来主动告诉过zhllg,他们为开源所做那些事情,所以他们肯定就是没有做过什么贡献;要打消zhllg对这些公司的恶意,那么就得主动向zhllg出示他们回馈开源社区的贡献清单。那么,是否可以这样说:zhllg骨子里是觉得所有人都是罪犯的,因为从没有任何人能向zhllg给出他们从出生以来所做过的每件事的清单,从而证明自己从没做过任何触犯刑律的事情。

立此存照:


评论

张乐
对不起,我找不到你们的工程师的联系方式。能不能告诉我从首页开始点哪几个连接可以找到呢?我们的讨论有些跑题了,我现在只是好奇想知道douban做了什么贡献。
我已经对原文做了修改。相信你现在可以理解我的意思。您太高看我了,我这就是随便写着玩的。当然以后我会留心,不给你找茬的机会。哈哈!
8月17日 15:03
(http://zhllg.spaces.live.com/)

xyb
如果只是推测,请说“可能是”,而不是“肯定”。另外,这种猜测在私下聊天说说没关系,关于这种公司的传言大家私底下都会闲聊几句;但放到网上,作为一个严肃的话题提出来,请您一定先考虑清楚。我是Douban的员工,我了解情况,所以我会回帖分辨;其他朋友既不是Yahoo/Google也不是Douban员工的,可能就从言之凿凿的话里相信了您的“合理的推测”都是可靠凭据的真事——尤其您也是开源社区里比较活跃的一份子,而这个blog也不是那种说笑娱乐八卦的地方,这都增加了别人的信任程度,请珍重别人的这份信任。

还说关于证据的问题。Douban的几个工程师的资料在网站上都有,而且基本在网上活动都是以本来的面目,不会藏着掖着。如果有搞商业情报的人留意,就能知道我们都在用什么技术和free的软件,也能在这些软件的maillist和bug tracker里看到我们的交流和回馈。对于Douban“很少”“贡献”这个命题是您先提出来的,这个命题的证明应该由您来负责;豆瓣的工程师恐怕没有义务每天提交了patch都在网上更新一个“贡献”列表,只是为了以防有人说豆瓣缺少“贡献”精神。“patch的提交”你没有看到,说明我们关心的社区不在一个交集;大家都没有碰到“完全合您意”的软件,也不是大家的错;这些理由都不能成为您把一个臆测说成是一个事实的借口。
8月17日 11:47
(http://xyb.8800.org/)

张乐
原来豆瓣的人。我并没有在指责什么,我说的是“这样做是毫无问题的”,哪怕Douban真的是没有做任何回馈。您看来不了解我,可以看看我以往的blog。我是GPL的支持者,符合GPL的事情我不认为有什么问题。有人在豆瓣问豆瓣开源么,我还说“商业模式不同,豆瓣不是软件商”。http://www.douban.com/group/topic/1159829/ 您还想我怎么着?
不过说了半天您还是没举出几个例子。这种patch的提交只要有网上总可以搜到。否则douban是怎么提交的?就像你到bugs.gentoo.org里一搜zhang le就可以搜到我提交的bug/patch。
大家都是搞开源的,谁不了解这里边怎么回事。您遇到过完全合您意的,不需要任何改进的软件么?我所做的都是合理的推测。
8月17日 11:22
(http://zhllg.spaces.live.com/)

xyb
从我知道的范围,Dbouban用到的第三方软件的GPL、BSD等协议并没有要求这种网站应用要把修改进行反馈,但Douban确实这么作了;而提交的 patch最后会不会被社区接受,这要由社区项目的管理者来决定,所以也不能保证Douban的修改一定会进入最终release的版本。从这个角度上来看,Douban似乎完全符合你所提到HPL“精神”——尽管HPL这个协议在Douban用的任何软件上都没有约束力。Yahoo/Google这些公司我不清楚,但是Douban我还是了解一些:Douban没有必要、也没有义务每提交一个patch,就向外界四处宣扬一下,这看起来会很傻。我想如果哪位朋友到Douban办公室访问,提到这个话题,工程师应该可以马上向他/她展示所做过的第三方软件的修改和反馈,这并不是什么需要隐藏的事情。我很感兴趣的是,您这么确定的指责Douban“本身使用开源软件,而且肯定做出了很多改进,但是却很少向社区回馈自己的贡献”,想必一定是去过Douban公司,或者有一些第一手资料,否则仅凭臆想是不会这么理直气壮的。那,可否告知你所了解的情况?
8月17日 10:50
(http://xyb.8800.org/)

张乐
根据http://opendotdotdot.blogspot.com/2006/08/just-what-we-dont-need-honest.html Yahoo!和google give relatively little back to the communities that write it。Douban用的是Python,但我确实没看到做过什么贡献。你要是知道,就告知一下。
8月17日 0:55
(http://zhllg.spaces.live.com/)

xyb
我很想知道你是从那里得到 Yahoo/Google/Douban 改进了开源软件却很少回馈社区的?如果有证据,请举出来,我很有兴趣了解一下。我倒是有一些相反的证据,证明这其中至少有一些公司是在积极回馈社区的。
8月16日 15:23
(http://xyb.8800.org/)


本来已经不想理这事了,明知道自己有错了,还打哈哈,为自己打圆场,再讨论下去也没什么意思。可是有人追着不放,那我就回应一下:如果是朋友,可以来公司,我们一起聊聊用到的开源技术,讨论下如何更好的应用,还有我们的改进和回馈。但对于只想举着开源的旗子、行极端共产主义的人士,对不起,没人有义务跟你谈论这些东西。
Tags: ,

August 15th, 2006

读网上水贴有感

Add to Memories Tell a Friend
linux killbill
发帖者的年龄与帖子题目后的感叹号数量成反比。
Tags:
Powered by LiveJournal.com