mysql/5.0.45 …
August 12, 2009 2:09 pm UTC | In Tech | 6 Comments | hideI recently did some performance testing with a few big tables on mysql/5.0.45 under CentOS and noticed a sharp drop in query speed a few minutes after restarting mysql. More tests showed mysql/5.0.51a or newer don’t have this problem. OK, I guess a picture is worth a thousand words… (SELECT queries only, and also mysql buffer size is huge, so disk I/O is minimal during test.)

It’s most likely due to mysql bug 21075 (fixed in mysql/5.0.50). Unfortunately mysql/5.0.45 is the version that ships with CentOS 5.3 and some other Redhat-derived Linux distro. Consider upgrading if you are using mysql/5.0.45 and your mysql server appears to be heavily CPU-bound.
sort…
August 9, 2009 9:35 pm UTC | In Tech | 1 Comment | hideI recently noticed CentOS 5.3’s sort is way slower than Ubuntu 9.04’s. Apparently the i18n patch used in coreutils-5.97 CentOS rpm is a performance killer:
$ LANG=C time -p sort --buffer-size=128M -n -k1 -k2 test.info > /dev/null real 92.58 user 86.04 sys 6.52 $ time -p sort --buffer-size=128M -n -k1 -k2 test.info > /dev/null real 463.04 user 456.01 sys 6.64
P.S. grep and other locale sensitive utilities have similar issue.
BTW, if your disk is slow, --buffer-size is a parameter you might want to play with to optimize performance. By default sort uses very conservative buffer size while your seemingly used memory is actually just used for cache. [ref]
纪念一个 Bug
March 29, 2009 1:13 am UTC | In Tech | 11 Comments | hide长期上水木的人可能知道一个 bug,有些 id 如果打完整可以 u 到,但是却不能空格补全。这个 bug 在 2001 年前就存在(之前没有 cvs 可查),2004 年末就被发现而且有了补丁,补丁注释写道:“这个bug导致的问题是使用smthbbs的站上有大概1/374的id是不可以通过id补全看到的”。2005 年又有人深入的研究了这个问题并且独立给出了一模一样的补丁(dvlt @ newsmth)。但是出于种种原因,这个补丁直到最近才递交进 svn。Bug 存在近 10 年之久,修正耗时 5 年,而补丁实际上只是增加 2 个字符,真是叹为观止。
类似的事情其实也不少,比如,libid3tag 不支持重写改变了长度的 id3v2 [1];又比如,断词换行大战。
[1] libid3tag-0.15-1b (2004), file.c:594:
/* hard general case: rewrite entire file */
/* … */
画外音:点点点……(实际上修正这个问题的补丁早已在网络上流传四年之久)
MP3 和 ID3
February 24, 2009 3:35 pm UTC | In Tech | 4 Comments | hide这是一个纯技术笔记贴,只供我自己和某些人参考,不解决任何实际问题。
1. MP3 数据量
MPEG audio frame header 可参考比如这里。MP3 最常见的的格式是:MPEG version 1, Layer 3, 44.1 kHz,所以 frame header 的前两个字节一般是 0xFF 0xFB。
音频数据一般用 CD 音质:立体声,44.1 kHz 采样,16 bits ADC,数据量 1411 kbps。MP3 有损压缩到 192 kbps 一般足够普通音响使用,最高可以支持 320 kbps。
无损音频压缩一般可以压缩到一半(700 kbps 左右),常见格式 APE, Apple Lossless, FLAC。
2. MP3 的元数据 ID3 Tag
有两种常见的 MP3 Tag 用来存储歌曲信息:id3v1(文件末尾 128 个字节,以“TAG”开头)和 id3v2(一般在文件头,长度不定,以“ID3”开头)。id3v2 有过至少三个版本,最流行的是 id3v2.3(1999 年发布),最新的是 id3v2.4(2000 年发布)。id3 读写库:id3lib(比较老),libid3tag(from MAD)等。这些库一般优先使用 id3v2 的数据,如果某些域没有数据,再从 id3v1 里取。
id3v2 的 frame 数据长度要求至少一个字节。如果没有歌名信息,那么歌名这个 frame 应该去掉而不是留下 0 字节的歌名域(有些 mp3 管理器有这个问题)。有些 id3 读取库严格执行标准,碰到 id3v2 中出现 0 字节的 frame 不容错而是直接忽略掉整个 id3v2,造成无法读取部分 mp3 歌名(比如 libid3tag 以及基于它的 EasyTAG)。
3. ID3 Tag 的编码问题
id3v1 采用 ISO-8859-1 编码,在理论上,它是无法正确存储中文歌名的。id3v2.3 除了可以使用 ISO-8859-1 编码外,也可以使用带 BOM 的 UTF-16(原规定是 UCS-2,编码信息存储在文本 frame 数据第一个字节,id3v2.3 3.3 节)。尽管如此,很多中文 mp3 还是用 GBK 编码(并号称自己是 ISO-8859-1 编码)写入 id3v2.3,所以会和 id3v1 一样有编码问题(mojibake)。对于这类 mp3 文件,大多数 Windows 的播放器在中文区域下都可以正确显示中文歌名;但是 Mac 和 Linux 下一般要进行 mp3 tag 编码转换,比如:EasyTAG,ID3Mod,nLyrics。有些 tag 编码转换程序只能写入 id3v2.4,这个并不是最理想的,后面会解释。另外,针对 ISO-8859-1 编码的 tag,某些播放器会猜编码。歌名越长,猜中几率越高,但是一个字的歌名常常猜不对。
id3v2.4 除了可以用 UTF-16 外,也可以使用了 UTF-8 编码(id3v2.4 第 4 章)。电脑上的播放器现在应该都支持 id3v2.4,但是某些播放器(特别是便携设备上的)由于 codebase 的关系,可能还在使用只支持到 id3v2.3 的 id3 库。这些播放器一般不会直接忽略掉 id3v2.4 的 tag,但是不能读取 UTF-8 编码的歌名。这样看来,为避免编码问题,最好的做法是:用 UTF-16 编码写入 id3v2.3,并且删掉 id3v1;假如 tag 转换程序只能写入 id3v2.4,应该使用带 BOM 的 UTF-16 编码(id3v2.4 第 4 章:text encoding description byte = 0x01)。
补:Windows 资源管理器和 Windows Media Player 对 id3v2 的 Unicode 编码支持很差,上述做法不适用(谢谢 neturalyu 留言提醒)。
我们为什么要用 Linux ?
February 12, 2009 11:17 am UTC | In Life, Tech | 28 Comments | hide在多年以后,我仍旧记得在上个世纪末北大老 37 楼三楼东头每天晚上都会出现的那个情景:一个瘦瘦高高的身影,手握一张 Redhat 6 的光盘,游走于各个宿舍之间,看到电脑就会凑上前去说一句:“装个 Linux 吧!”——这就是我的 Linux 启蒙老师 elephant 先生 [1]。那是一个什么样的年代?那是一个我用 56 kbps 电话线下了一通宵 XFree86,又编译了一个白天最后发现显卡还是驱动不了的年代……
Trueice 说,工作机学习康神,不用 Linux,并号召我紧跟康神步伐。回头一看,这么多年我确实从未放弃过使用 Windows。Hutuworm 个人简介写道:“沉浸于 Linux 系统管理十余年,以此为业逾五载”。我虽功力远不及小糊涂虫,但用 Linux 也有些年头了,见过无数 Linux 初学者,却几乎从未见过有人完全抛弃 Windows,唯一一个在我影响下成功脱离 Windows 的某人,还是用的 Mac!下面我就来罗列一下各种学习 Linux 的(不靠谱的)理由……
- Linux 很酷。有句话是这么说的:“帅有什么用?还不是被卒吃掉!”基于耍酷玩 Linux 注定是不能长久的……没事儿买辆保时捷,半道儿没油了才想起来问:这马子咋这么废油呢?电脑首先是一个拿来用的工具,Windows 用的好好的,你干嘛非要换个系统呢?是,现在 Linux 的桌面是很炫,特别是 3D 效果之类的,但我看来看去也就半透明窗口这一条能提高点工作效率,就连多桌面这个功能,也被我实验室同事说成是“poor man’s solution to multi-monitor”。而且很多程序在 3D 桌面下工作有问题,
动不动就 crash。我看我周围的 Linux 用户,还开着 3D 桌面的不是极高的高手就是极新的新手。 - Linux 本身和大部分软件是开源的,或者至少是免费的。这个理由看起来很诱人,其实也不靠谱。Windows 下好的免费软件也很多,关键在于发现。还是那句话,Windows 下用的好好的,为什么要投资这样的迁移成本?换软件环境的适应期是很长的。Windows 下很多优秀的收费软件,在 Linux 下都很难找到同样质量的替代品。开源这个理由对于新手就更牵强,有多少人会自己去修改代码?然后这些软件将来出新版本你如何跟进?另外,免费这个理由,也要考虑到学习和维护的人力成本。
- Linux 系统稳定,不会有木马和病毒。这理由更不靠谱,说到底只不过是个使用习惯的问题,如果你是一个连 Windows 都用不好的人,那么到了 Linux 下面照样能把系统搞崩了。我的 Windows 系统用了五年还是很稳定,实在没必要对 Linux 盲目崇拜。
- Linux 效率高,适合破机器。这么说,如果有好机器,你就肯定抛弃 Linux 了?裁剪过的 Linux 确实挺适合嵌入式系统,不过一般的普通桌面用机,XP 并不比 Linux 慢(Vista 我们就不说它了)。
- 会 Linux 的话简历上写着好看。功利主义是注定要失败的。
说了一堆新手学习 Linux 不靠谱的理由,那么有没有什么靠谱的理由呢?列几个:
- Linux 做服务器很稳定。前提是不要搭配什么乱七八糟的硬件。破硬件让 Windows 蓝屏,同样也能让 Linux kernel panic。
- Linux 核心命令集经过几十年的发展和验证,不但参数丰富而且性能可靠。这个同时使得远程操作极其方便,强化了 Linux 作为服务器操作系统的优势。
- Linux 下系统包管理能自动可靠的安装大部分通用软件,特别是装开发环境很快速,用来开发调试小软件很方便。(如果开发大软件呢?当然是你同事用什么你也用什么,如果你是项目经理,那就去问你老板。)
大部分优势都和 Linux 桌面没什么关系,实际上,Linux 桌面也没什么优势,Linux 的优势不是新手立刻就能体会到的。所以,说说我对 Linux 新手的建议:
- 忘掉 Windows 的工作模式,Linux 是一个全新的环境,做事的时候想我希望做什么,而不是首先去想我在 Windows 下做这件事的具体步骤。
- 碰到问题多搜索多求助。搜索尽量用英文。求助尽量把问题表述完整,不要加入自己三脚猫的判断和推理试图简化问题。碰到傲慢的老手尽量容忍,有的时候只是因为你的 Windows 思维无法和他们有效的沟通导致他们不屑和你沟通。
- 如果周围有人在用 Linux,一定要经常骚扰他们。学习 Linux 初期有人指导和没人指导的差别是巨大的,有的时候前人的一句话甚至一个词都能让你少走很多弯路。
- 当 Linux 和 Windows 交换数据出现问题的时候,不要怪罪任何一个操作系统,把精力集中在解决兼容性问题上。Linux 下编辑的文件到了 Windows 记事本里看没有回车,这应该怪谁呢?
- 不要排斥命令行操作。Linux 不是古老的 DOS,命令行很强大也很必要。图形界面不是万能的。Linux 的命令行就像 Windows 的注册表,用久了肯定要接触到。
- Linux 是人,不是神,请允许 Linux 犯错误。Linux 也会死机,程序也会 crash,硬件也有驱动不了的,不要失去信念。
Blog 是干嘛用的呢?写给未来的自己(取自 Forcey 博客名)。今天把我对 Linux 的愚见写下来,等十年后回过头来笑一笑。
Live.com
December 19, 2008 11:29 am UTC | In Tech | 13 Comments | hide曾几何时,bbs 文章里加了附件就去不掉了,只能把文章删掉。实际上,系统管理员还是看得到删掉的文章的,所以一般推荐的毁尸灭迹的方法是(假设这个论坛系统是由心理健康的团队制作的),删除附件(如果可能)、删除文字、最后再删除文章,这样基本可以保证只有闲得蛋疼且拥有服务器直接操作权限的家伙才有可能恢复那个帖子。KBS 系统里面,后来是 etnlegend 写了增删附件的核心和 term 部分的界面(我只是顺手写了个 web 部分的接口),bbs 才慢慢滑入了 21 世纪的轨道,美女 show 完照片可以及时删掉以防 wsn 骚扰。
就在最土鳖的 bbs 也慢慢披上了 Web 2.0 的衣裳的时候,Live.com 却悄悄的把它们的时钟拨回了 20 世纪。在 Live space 里面删除了的博客文章,仍旧会显示在它自己的 what’s new 里面(包括内容提要,但是可以手动删掉)。好吧,我承认,在如此“庞大”的一个系统里面,要保证 consistency 确实不是一件太简单的事情;但是删掉的博客文章不再让别的用户看到,却理应是最基本的隐私规则,对于 Live 这个 bug 我能说什么呢?要么,是 PM prioritize tasks 策略有问题;要么,是 engineer 缺乏 common sense;要么,这难道是一个 feature??
Live.com 最近一次改版,不但 bug 层出不穷,还搞得很八卦。现在 MSN 昵称变化都有记录了。康神是一个好人,每次上 WC 都要改一下昵称以免误事。结果我等教众只要去康神的 profile 看,就可以知道康神如厕时间表……善哉善哉。Live.com 你向人家 SNS 取经,也要动动脑子,不要什么东西都拿来随便一抄,搞得人不像人鬼不像鬼。再比如说,页面上方大大的一个“People you might know”,我琢磨着 Live.com 的六度理论练得是不是纯熟,顺手点进去一看,蹦出一提示“We don’t have any suggestions for you now.”,你这不耍我么?没货早说啊!
还不止这点破事儿。Live space mover 的作者 broom 怒道:
Stupid Live Space!!!
我就不明白了,评论的时间只显示月日不显示时分秒是啥意思……
而月份的表示,七月份是四个字母“July”,十一月就变成了三个字母的缩写加一个点儿“Nov.”,发指的是九月份居然是四个字母加一个点——“Sept.”…… 这真是癞蛤蟆跳脚背——不咬人恶心人……
管Live Space的同学你们有那么闲吗??有吗???!
broom 说,这一次的升级已经把他击溃了。还有,Photo permalink 换了,导致 rss reader 里面像洪水一样刷出几十屏的老照片。Alpha 对此评论说:“Live space 隔个一年半载就来这么一遭”,看来大家对这个问题也见多不怪了。我以前还提到过另一个问题:
……微软的 Live Spaces 里面的 Blog Entry 发布时间默认是不显示年份的,有时候搜索到一篇文章却死活找不到哪年发表的,告诉我几月几号有个屁用啊……那帮写程序的家伙也许从来没想到过 Live Spaces 能活过一年,所以“前瞻”到年份信息是没有意义的……
博客说到底不就是一个内容发布和留言板系统吗,如果放学校里做顶多算个 network 101 的小作业,final project 都算不上。Live.com 却整得巨复杂,还特慢,稍微差点的机器开个 Live space 就跟死机了似的。随便抓个开源的框架都比 Live 的轻量、简洁、漂亮、全能。Live.com 的 infrastructure 听说也是相当牛逼的,怎么前端会搞成这么个样子呢?
Mac 打呼噜
December 11, 2008 3:21 pm UTC | In Tech | 6 Comments | hide昨天晚上睡不着觉转眼珠玩儿,发现 Mac 那个呼噜灯在视野里是间断的,不连成一条线,于是想到那个呼噜灯应该是脉冲发光的,通过不断调节占空比来调节(视)亮度模拟呼噜。其实早就应该想到的,对于 LED 发光来说,调节占空比显然比调节亮度本身要容易得多,而视觉暂留效果不用白不用。今天到实验室拿仪器测了一下果然如此,脉冲频率 153 Hz 左右。查了一下,苹果有一个相关的专利 US 6658577。

Tags: apple
This weblog is licensed under a Creative Commons License.
Powered by WordPress. Theme based on Pool by Borja Fernandez.








