Wednesday, November 29, 2006

媒体的力量

媒体的力量真的太强大了
特别是权威媒体
在Linux和自由软件领域里,lwn.net无疑是这样的一个权威媒体
有些事,经它一报道,可能就会使整个舆论转向
比如最近的gaia事件
gaia是个开源的google earth,可是却被google叫停了
一看到这种事情,很多人都是膝跳反射式的数落google的不是
其实这件事上google有自己的苦衷

http://lwn.net/Articles/211153/

Monday, November 27, 2006

用链表申请专利被批准!

其实这篇文章是想谈谈软件专利。
首先声明我不是一个律师。这是一个很常见的声明,英文里常用这个缩写IANAL。
先来看一个软件专利具体例子。链表,一个最最基础的数据结构,2006年4月11日在美国被批准为专利。http://www.patentstorm.us/patents/7028023-fulltext.html 知道什么是链表的人看到这里恐怕会禁不住笑起来。但是担忧是不必的。
就这个例子,我们来看看软件专利的一些基本特性。首先,专利意味着什么?如果我申请到了一个专利,如果你实现了这个专利,那么你就要付给我专利费。这是一种很高明竞争方式,兵不血刃。中国的整个DVD产业就是毁灭于国外相关组织的专利武器之下。我们花费血本搞TD-SCDMA也是不希望3G的舞台被外国人所独占。怎么对抗专利?一个是找到prior art。他不是说是他发明的么?我们就找证据证明在他之前就有人这么用。所以链表的专利是可以无视的。或者,我们也搞专利,让他避不过,你要告我,我也告你。具体到软件专利,值得注意的一点是不是所有的国家都承认软件专利。美国承认软件专利。但是在欧盟,软件专利是不存在的。中国跟随美国。所以才有联想把从/proc获取机器硬件信息来做为专利来申请。很多方面技术上的差距是天壤之别,但是在专利的sb程度上却是半斤八两。有人会想链表这样已经被人用了几十年的数据结构,怎么还可能被批准为专利呢?这就是另一个问题了,就是据说专利局的人批的专利数量和自己获益多少是正相关的,他们才不会去查prior art。美国几乎每个软件公司都有他们自己的patent portfolio,否则就无法生存。因为很多专利是很难避过的,为了不让别人告自己,自己也需要掌握别人无法避过的专利。有一些公司什么都不生产,唯一的产品就是专利,坐收专利费,这种公司被称为patent trolls。他们有一个优点,就是他们自己没有产品,所以没有可能侵犯任何人的专利,不怕别人来告,但他们可以随便告别人,只要对方用了他们的专利而未交专利费。微软就建立过至少一个这样的patent troll。Linux是否使用了别人的专利?是可能的。有人研究过,提出了很多,而且分属于不同的公司。但是到现在没有人追究,因为Linux如果没有了,对任何人,除了微软,恐怕都没有好处。事实上,如果每一个软件专利都严格的追究下去的话,整个软件产业就马上玩完了。
好,再来看一个例子。http://jmri.sourceforge.net/k/index.html 这个例子说明软件专利对于开源软件的影响。jmri是个开源软件。这里我们不讨论软件本身。只要知道,在这个软件发布之后,有人申请了一个专利并获得批准,这个专利范围覆盖了这个软件。然后就要求对jmri收取专利费。何其之无耻!可是官司到现在没有打赢。这个页面上有目前官司的状况 http://jmri.sourceforge.net/k/updates.html 可见,即使是在prior art存在的情况下,开源软件能否打赢这样的官司也不是那么容易。主要还是因为开源软件发布的方式不是每个人都理解,或者故意被人所曲解。开源软件要发展下去,软件专利时刻是个威胁。面对这个威胁,开源软件的参与者应该团结,面对软件专利应该共同进退。某公司在金钱(one third billion dollar)诱惑下妄图在软件专利之上建立竞争优势的举动,必然会被视为对开源软件社区的背叛。这家公司的前景堪忧。这件事上交易的另一方无疑成了赢家。
附上几个连接,业界的最新反应:
Greg KH的文章,虽然身为那家公司的员工,他还算是说了点良心话
http://www.kroah.com/log/2006/11/24/#community
Busybox创建者的公开信
http://techp.org/petition/show/1
Ubuntu似乎不太"厚道",嘿嘿,落井下石,趁火打劫
http://www.markshuttleworth.com/archives/81

Wednesday, November 22, 2006

Microsoft/Novell deal: something happened on a Chinese Linux forum

I write this in English so that all people around the world could get a chance to know what's going on in one of the biggest Chinese Linux forum linuxsir.org.
On SUSE Linux sub-forum of linuxsir.org, there were some threads talking about MS and Novell's deal recently. But unfortunately, someone with high privilege in the forum combined these threads and moved them to a place that few people visit. So people won't see it in its original place. Moreover, people can't found it through the link provided in the reply-notification email linuxsir.org mailed to them. The pictures below illustrate this:
Unless you are familiar with the operation of vBulletin or use search function of the forum you won't see it again. So the discussion discontinued, or rather _stopped_ by external and yet irresistible force.
Then someone expressed angriness about this in SUSE sub-forum, and more people followed him. The discussion went on. However, this thread again is "combined" now.
Apparently they are fearing about something.
I am so disappointed.

Novell: We disagree

http://www.novell.com/linux/microsoft/community_open_letter.html
Highlights:
We disagree with the recent statements made by Microsoft on the topic of Linux and patents. Importantly, our agreement with Microsoft is in no way an acknowledgment that Linux infringes upon any Microsoft intellectual property. When we entered the patent cooperation agreement with Microsoft, Novell did not agree or admit that Linux or any other Novell offering violates Microsoft patents.

Backgrouds:
Ballmer on Novell, Linux and patents http://blog.seattlepi.nwsource.com/microsoft/archives/108806.asp?source=rss

Tuesday, November 21, 2006

惊悉开发SimSun的中易公司原来是半官方机构

未读 06-11-20, 15:30 第 143 帖
 
 
 
注册会员  
  注册日期: Oct 2003
  帖子: 190
  精华: 0
 

引用:
作者: james_su
有没有调查过 Novell 在这方面的情况?把你这段话里面的 redhat 全部都换成 novell,照样完全正确。另外,你是否知道:
1. 在 openSUSE 社区版本里面不包含任何非 OSS 的软件(不敢说是 patent free的)。但为了让用户能够合法的使用 MP3 等有专利保护的媒体格式,novell 和 real networks 合作取得相关的合法授权,给用户免费提供合法的 RealPlayer。很快还会免费提供支持 Windows Media 格式的 RealPlayer 升级版。你觉得这方面 novell 做得有问题么?
2. Novell 从来都没有认可"微软对linux侵犯微软知识产权的专利主张"。但不等于用户没有这样的担心。为用户提供知识产权保障计划是对用户的负责,而不是承认侵犯别人的专利。难道你不知道 RedHat 也同样给用户提供这样的保障吗?
3. Novell 当然在"积极推动软件专利共用来保护开源软件的整体利益"。你难道不知道 Novell 是 OIN 的正式成员,而且 OIN Patent Pool 里面的很大一部分专利都是 Novell 贡献的么?有很多还是 Novell 花钱买过来然后免费贡献的。





关于字体的问题,我不在这里做过多阐述。只是做一个小小的广告,你可以看一下最近一期的《软件世界》,里面有一篇专访。我在里面专门阐述了字体相关的问题。

简单的说:字体和别的软件不一样,它是一定要严格符合国家标准的。在自己的产品里面使用不符合国家标准的字体,对用户来说是一种完全不负责任的行为。

novell 一贯倡导,中文字体不应该由企业、团体或者个人来制作发行。承担中文字体制作任务的应当是国家相关权威机构,比如国家语言文字标准化委员会,或者是信息标准化研究所等。并由国家统一发布给公众和企业免费强制使用。具体理由请参见《软件世界》的专访。


比如说用户可以免费下载suse10.1的eval版,里面包含商业软件,这些软件只许可給了novell公司。如果用户把这个带商业软件的版本散布出 去,就已经违法了。而novell和微软协议里面免责的用户只包括那些花钱购买了novell产品并且只给自己使用的用户。混源的结果就是开源软件被绑定 到了商业软件上,并且法律问题比单单使用商业软件还要复杂。如同我上面说的redhat曾经使用过中易字体,为什么后来不用了,就是因为考虑到会给客户带 来很多潜在的法律问题,并且有违gpl精神的初衷。

承担中文字体制作任务的应当是国家相关权威机构,比如国家语言文字标准化委员会,或者是信息标准化研究所等。
这又是一句冠冕堂皇的说词。中易公司就是一家得到国家语言文字工作委员会,国家新闻出版署和全国印刷字体工作委员会授权的半官方机构。你也和他们打过交道,你认为他们会把用国家资源开发出的标准字体,免费授权给养活他们的纳税人使用么?
  jblbose 当前离线 向版主反映此帖   回复时引用此帖

Monday, November 20, 2006

Fedora Linux on PlayStation3

http://www.youtube.com/watch?v=_ZXcuhJkwx4
我身上至少有近4千块钱,此刻起,已经不再属于我了。而是我代Sony暂时保管。

audacious-plugins的补丁已经被收入upstream

5天前
http://bugs-meta.atheme.org/view.php?id=632

Saturday, November 18, 2006

记一下我的mp3转码的步骤

我几乎所有的mp3的album都是gbk,title和artist是utf8(不标准的)
所以我的步骤如下
1. 我用的脚本配合我的tagreader和tagwriter把所有mp3的album转为标准utf8 id3v2 tag储存方式
2. 利用python版的id3iconv,给已经是utf8的title和artist加上encoding标示字节。命令这么写find -name "*.mp3" -exec id3iconv -e UTF-8 {} \;

参考:
http://zhllg.blogspot.com/2006/11/audaciousid3tag_12.html

Tuesday, November 14, 2006

中国:政府中心主义发展战略的沉重代价

http://guancha.gmw.cn/show.aspx?id=1231
这是光明网(光明日报的网站)上的一篇文章。文章深刻揭示了中国当前的发展模式的严重弊端。
文中主要观点如下:

中国成功地避开了舒尔茨陷阱,

中国的发展是一种不提折旧费用式的发展模式

低工资是国内分配严重不均衡的结果,

这个体制的独特优势在于:它可以未经国民允许就慷慨地牺牲本国国民的福利

竞次战略不走到不能承受的地步很难回头

劳动力无限供给的说法是有人故意强加给大众的一种学术蒙昧

跨国公司对中国政府的俘获能力要远大于本土企业

东方功夫最大的破绽:落后的政治体制,


Monday, November 13, 2006

I have reported the audacious-plugins' problem to upstream

http://bugs-meta.atheme.org/view.php?id=632

Here is the problem's description:
In audacious-plugins' current implementation, when saving MP3's tags, unicode is enabled unconditionally. In save_cb() function in http://svn.atheme.org/audacious-plugins/trunk/src/mpg123/fileinfo.c, [ ^] there are two function calls:
taglib_set_strings_unicode(1);
and
taglib_set_id3v2_default_text_encoding();
However, when reading MP3's tags, if chardet is enabled, unicode will be disabled. In fill_entries() function in the same file, there is a conditional compilation:
#ifdef USE_CHARDET
taglib_set_strings_unicode(FALSE);
#endif

This may not affect English only users. But for CJK users, this discrepancy
of dealing with chardet will lead to MP3's title and artist being rendered
as garbled characters.

Labels: , , , ,

Sunday, November 12, 2006

PS3 Japan launch's Dark Side

http://www.kotaku.com/gaming/top/foreigners-and-fights-ps3-jpn-launchs-dark-side-214130.php

Labels: ,

解决audacious写入id3tag乱码问题的补丁

首先说一说我对chardet的理解:
如果启用chardet,那么让taglib把所有tag的encoding当做Latin1,然后audacious自己来进行编码侦测。
如果不启用chardet,让taglib把所有tag当UTF8。

相比较amarok,audacious确实给用户多了一种选择。用户可以不转码。转的不"规范"的UTF8编码(也就是只转码,没加encoding byte)的tag也可以显示。
可惜我之前不知道,我用id3v2转了很多mp3,都属于此类情况。
现在我准备向"标准"靠拢。我准备不再用audacious的chardet功能。
我改写了taglib里的例子,用它配合我的id3转码脚本,在结合下面这个网页上的脚本,来把我所有的mp3都转"正确"的编码。
http://paste.ubuntu.org.cn/1090
这样一来amarok里也可以正常显示。否则像现在这样amarok里所有的歌都是乱码,除非不含tag的,可以正确显示文件名。

虽然我不用chardet,不过这个补丁还是要贡献出来。它应该有理由被upstream收录。gentoo-china overlay用户可以直接layman -S后,emerge audacious-plugins
http://gentoo-china-overlay.googlecode.com/svn/trunk/media-plugins/audacious-plugins/files/audacious-plugins-1.2.2-mp3-id3tag-edit.patch

Labels: , , , , ,

我错怪taglib了

在id3v2 tag的问题上。
StringList::toString()里虽然没有利用到encoding
但是在建立TexIdentifationFrame对象的时候,是用到了encoding的。

至于id3v1,那个问题我认为确实是个问题。虽然taglib说它只把id3v1的encoding当Latin1。

不是taglib的问题,那自然就是audacious的问题。确实如此。

在目前的audacious里,在写入时都当做是utf8。但是读取时,如果启用了chardet,那么就当成是latin1,这样读取出来的就是乱码。

Saturday, November 11, 2006

audacious写入id3tag乱码问题


我的audacious和audacious-plugins的版本及USE flag如下:
[I] media-sound/audacious Installed: 1.2.1(chardet -gnome nls)
[I] media-plugins/audacious-plugins Installed: 1.2.2-r1(aac alsa arts chardet -esd flac -jack -lirc -modplug mp3 -musepack nls -oss -pulseaudio -sid -sndfile timidity vorbis wma)
值得注意的一点是,我都加上了chardet USE flag,这样在UTF-8环境下就不必为本来encoding为GB码的mp3文件里的id3tag转码了。
只需要稍微设置一下:
Preference->Playlit->Metadata:
auto character encoding detector for: Chinese
fallback character encoding: gbk
还有一点是,如果主窗口显示不出汉字。看看你是否选择了这个选项:
Preference->Appearance->Fonts->Use bitmap fonts if available
请不要选中这一项试试。如果使用微软雅黑,同时选中这个选项,主窗口的歌曲名如果是汉字就会乱码。而不选则不乱码。
这两个地方设置过后,audacious已经几近完美了。不过还有一个问题,就是修改id3tag保存后,再打开该文件会发现id3tag乱码。
经过我的分析,原因大概是这样:
1. id3v2.4.0标准里定义了tag可以有4种encoding,可以在tag里标明,占用一个字节,其中UTF8的值为3。
2. 如果指定encoding为utf8,taglib在写入时会遵循标准的约定,在tag里用一个字节表示encoding,就是3。
TextIdentificationFrame::renderFields()
3. 但是在读取tag的时候,我发现似乎taglib根本没有考虑这里还有个字节表示encoding。而是把3看作字符串的一部分。
StringList::toString()仅仅是把list里的String相加。
这样当然就会乱码了。
这恐怕应该算是taglib的一个flaw吧,暂时的解决办法,我想可以不指定以utf8为encoding写入。那样的话,就是Latin1,而它的值是0,这样有也就相当于没有。

此外,在保存id3v1 tag的时候,还有另外一个问题。就是如果指定了encoding为utf8,保存时就已经乱码了。
TagPrivate::stringHandler->render(d->title)
d->title这个时候已经是以utf16(这是taglib内部保存字符串的形式,参见prepare())保存的了。我们看StringHandler::render的实现
ByteVector ID3v1::StringHandler::render(const String &s) const
{
return s.data(String::Latin1);
}
实际上这个时候只有以String::UTF8调用data才能把utf16转回utf8,可惜的是这里居然是不分青红皂白的就用了String::Latin1。

Install Gentoo by coping LiveCD to harddisk

http://groups-beta.google.com/group/gentoo-china/browse_thread/thread/b059f759094c82d4/e1384ded3366dce7?hl=en
http://groups-beta.google.com/group/gentoo-china/browse_thread/thread/f1e44fda204bffde/781b86d88c804514?hl=en

Thursday, November 09, 2006

The prison in Prison Break

Wednesday, November 08, 2006

Conditional breakpoint in gdb

First you have to setup a break point.
(gdb) b 'server::Checks::chkCleardigits(ost::Script::Line*, ost::ScriptImage*)'
don't forget the leading ' before server, so that gdb can complete the whole function prototype for you.

Check breakpoint info
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x080565f4 in server::Checks::chkCleardigits(ost::Script::Line*, ost::ScriptImage*)
at checks.cpp:624
breakpoint already hit 1 time

Run the program, and then you find that there are so many calls to this function. However, you are only interested in one particular call. And most importantly, you know a condition which is unique to this call, line->argc>1

Set condition:
(gdb) condition 1 line->argc>1
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x080565f4 in server::Checks::chkCleardigits(ost::Script::Line*, ost::ScriptImage*)
at checks.cpp:624
stop only if line->argc > 1
breakpoint already hit 1 time

Run, break and check
(gdb) r
Breakpoint 1, server::Checks::chkCleardigits (this=0x8063640, line=0x807cec1, img=0x806e748) at checks.cpp:624
624 if(getMember(line))
(gdb) p line->argc
$17 = 2
(gdb) p line->args[0]
$18 = 0x807ceb5 "=timeout"
(gdb) p line->args[1]
$19 = 0x807cebe "10"
(gdb) p line->args[2]
$20 = 0x0

To remove the condition on this breakpoint, just run
(gdb) condition 1

Updates: fixed a typo

Monday, November 06, 2006

select.span

I was asked to analyze the usage of this "select.span" command.
However, I've no idea wtf the so-called span is.
What's worse, it seems that nobody else here could explain to me what it is.
I am a totally newbie in this area(I mean IVR), and I think it is known to everyone.
However, I did find some clue. I found normally those span should be initialized in the driver. Take capi20's driver as an example, BayonneSpan object is newed in Driver::startDriver(). But unfortunately, the synway's bayonne driver is not complete at this moment. The driver is in bayonne-nonfree package. In my opinion, the biggest problem now is this incomplete synway bayonne driver. If it is finished, many problems will not exist any longer.

PS: This "select" thing is discovered by me, when I analyzing "connect". In startDialing() which is called by scrConnect(), there is a call to getPointer() with a single parameter in the form "select.%s". Then I found the corresponding setPointer() should be in chkSelect().

Labels: , ,

Sunday, November 05, 2006

PS3 is coming

According to e-zone, a Hong Kong magazine, PS3 60GB version will be sold at HK$ 3780 in Hong Kong starting from Nov 17. This price is equal to 56,810 Yen according to the exchange rate on Nov 1, while the expected price of Japan version is 60,000 Yen. This price is also lower than that of US version.
The 20GB version will be available in December in Hong Kong. The price will be HK$ 3180.

The price is lower than I expected. However, I won't act before Winning Eleven PS3 version is out. :)

Labels: , ,

Thursday, November 02, 2006

我的emacs

This is my /usr/bin/emacs
#!/bin/sh
emacs.emacs-23.0.0 --enable-font-backend -fn "Consolas-12" "$@"

Labels: , ,

今天又搞了搞字体

最终的选择是下面这些。近期应该不会再有大变化了
简体中文:微软雅黑
繁体中文:微软正黑
英文:Verdana

搞的过程几经周折,这里记录一下:
1. Vista里的英文字体
Vista里带了好几个新英文字体,都是C字辈的。包括几个serif, san serif和一个monospace。这几个字体是很好看,不过有一个通病,就是指定同等大小的情况下,比中文字体(比如雅黑)要小,比原来的Verdana那几个也要小。我的显示器是1680x1050的,字体小了看着很费力。(下次说什么也不买大个儿的笔记本了。)我尝试了一个方法,是把小于18 pixelsize的Candara的大小均强制改为18 pixelsize。不过感觉还是不太爽,感觉笔画比较细,看着费力,而且强制拉大的显得不太协调,粗体显的太粗。
<match target="font" >
<test compare="eq" name="family" >
<string>Candara</string>
</test>
<test compare="less_eq" name="pixelsize" >

<double>18</double>

</test>
<edit name="pixelsize" >

<double>18</double>

</edit>
</match>

2. Emacs字体设置和Vista新日文字体
今天发觉emacs里有些中文字显示不出来了。后来发现emacs是找meiryo,也就是Vista里的新日文字体来显示的。日文字体里的汉字自然是不全的。按理说Emacs应该从~/.fonts.conf的字体列表里找,看来现在还不是。不知道怎么设置,只好删掉meiryo不用,反正不懂日文。

3. Firefox的字体设置
个人觉得总体上说有3种选择:
  • 一是让网页选择字体
  • 二是不让网页选择但只指定serif/sans serif/monospace
  • 三是不让网页选择而指定具体字体
让网页选的时候,效果就全看网页设计者了。有些站点的设计让我很无奈,所以放弃。比如某著名bbs的web版,非常固执的一定要把Simsun放在最前面。从保存下来的www2-default.css里可以看到"font-family: 宋体;"的字样。宋体(Simsun)里的英文在我看来是何其丑陋。我试了替换,不过没有成功。不知道是不是fonts.conf的语法有变化。
<match target="pattern" >
<test name="family" >
<string>SimSun</string>
<string>PMingLiU</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>Verdana</string>
</edit>
</match>
<match target="pattern" >
<test name="family" >
<string>NSimSun</string>
<string>MingLiU</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>Consolas</string>
</edit>
</match>
如果只指定serif/sans serif/monospace的话,在firefox 2里有个非常诡异的问题,就是同一个网页里serif字体会找不止一个字体来显示,不统一,看不出是什么规律。看这个
Updates: 右边的1其实是sans-serif,不过当时我的sans-serif是指定Verdana的,而图中显然不是。总之,是有问题啦。

最后还是自己指定算了。指定Verdana。

Labels: , , ,