夏令时开始
March 8, 2009 11:27 am GMT-0700 | In Misc | 5 Comments | hide按照惯例,每年夏令时开始和结束我都要在这里向大家汇报一下……
WordPress 现在貌似还要手动调夏令时。
现在美西(UTC -7)和北京(UTC +8)时差 15 个小时。
一篇有意思的文章:电脑时区选择中没有北京的问题。
Tags: dst
MP3 和 ID3
February 24, 2009 3:35 pm GMT-0700 | 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 GMT-0700 | In Life, Tech | 29 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 的愚见写下来,等十年后回过头来笑一笑。
八卦胜地——论文致谢辞
February 8, 2009 11:51 am GMT-0700 | In Study | 14 Comments | hide很早就和人提起过,毕业论文的致谢辞(thesis acknowledgment)简直是一个八卦胜地。有在里面大肆调侃合作者的,有在里面写感谢当年女朋友结果毕业没多久就分手的(这个其实不少见而且没什么问题,但是有些人提到这个会尴尬),有在里面没提老婆事后我才得知其实写论文的时候就已经在闹离婚的,也有在致谢辞里面求婚的,总之千奇百怪无奇不有。我的老板也提到,浏览以前学生的致谢辞,就仿佛能看见眼前晃过十几年的时光。
这里做的一个小工作是通过论文致谢辞来制作感谢网图。大家知道,很多大规模的实验室,里面的合作关系往往错综复杂,这一点可以通过论文致谢辞来分析和量化。定义感谢度:
A 对 B 的感谢度 = 100 * A 在博士论文致谢辞里提到 B 的词数 / A 的致谢辞总词数。
这里的一个假设是,每个博士所得到的帮助总量是差不多的,但是有些人写致谢辞比较唐僧,所以需要 normalize 一下。被感谢度则定义为:
B 的被感谢度 = 所有博士生对 B 的感谢度总和。
我自动统计了我老板和我老板的老板在本领域带过的 22 个博士生的致谢辞,以下是画出来的感谢网一角(点进去可看完整的图)。每个节点代表一个人,节点大小由被感谢度决定;节点中间所标年份为博士毕业年份(2009 那个就是我啦),红背景的小数字为被感谢度。最大那个 237 就是我老板啦,次大那个 155 就是我老板当年的老板(他的被感谢度应该比 155 大很多,不过他 1997 年之后就基本不搞这个领域了,所以我没有统计进去)。节点之间连线表示感谢,粗细由感谢度决定(连线上的小数字所注)。TouchGraph 还自动进行了 cluster 计算,以不同颜色标注了小圈子。这里面有很多可以分析东西:比如那个 1997 年毕业的家伙身处中央,和各个集团都联系紧密,事实上我们都知道他确实是交际花;还有比如可以看出各个实验项目更新换代的线索。更多的也只有身在其中才能体会到,所以我就不多写了。
P.S. 这个问题事实上一般化了以后是一个 citation network 的问题。有关 large network 的研究最近十几年很热门,比如可以看 Jure Leskovec 的博士论文答辩 Dynamics of large networks。
Tags: acknowledgment, thesis, touchgraph
你快乐吗?
February 4, 2009 9:57 pm GMT-0700 | In Misc | 10 Comments | hide这世界上有四种人:
A. 没能力没远大理想的人
B. 没能力有远大理想的人
C. 有能力没远大理想的人
D. 有能力有远大理想的人
人生平均快乐程度:
A > D > C > B
看到排在最后的那个字母,想起康神经常教育我的一句话:People who are zhuangbility want to show their niubility but only reflect their shability.
P.S. 当然,单纯的快乐并不是我们追求的唯一目标……
多问一个为什么
January 7, 2009 10:08 pm GMT-0700 | In Life | 5 Comments | hide先从一个故事讲起:(来源:菠菜豆腐与食物搭配禁忌)
先讲个故事吧:一个男人娶了一个能干贤惠的老婆,过着和睦幸福的生活。男人很懂得家庭和睦的真谛,从不挑剔老婆的行为。但是有一天,他还是忍不住问:“为什么你每次煮肉都要砍下一截骨头呢?”老婆想了想,说:“不知道。我妈一直就是这么做的,没准你可以问问她。”过了几天,见到了丈母娘,这个男人就问:“我想不明白,为什么你们煮肉的时候要砍下一截骨头呢?”丈母娘回答:“我也不知道,我妈就是这么做的。你可以问问她。”过了一段时间,他们见到了老婆的姥姥。男人就问:“为什么你们煮肉的时候要砍掉一截骨头呢?”姥姥想了想,说:“那个时候,家里的锅有点小,不砍掉一截放不进去。”
类似的,也有人对煮饺子要加三次冷水提出了不同意见:(来源:可笑的煮饺子文化)
于是,我看到了无数可笑的重复的场景:一个个拥有自然科学最高学位的中华儿女,在现代厨房电器的一堆旋钮按钮中,往沸腾的饺子锅里一次次地续着凉水,没想到只是将控制热量的旋钮稍稍向左扭扭,就可以达到同样的效果,也没有想到,完全可以把水温控制在沸点下一点,不用再去劳心。
我不评论关于饺子这个问题他说得对不对,再举个例子,飞机起降为什么要收起小桌板、调直靠背、拉开遮阳板?这个规定司空见怪却很少有人知道为什么。事实上,这个倒是有正经理由的,是为了安全考虑,发生意外时可以减少碰撞、尽快适应室外光线等(比如参考 乘坐飞机时为什么要这样做)。
What A New Dentist Taught Me About Explanation 说到一个问题,Lee LeFever 从来只是听说要特别注意清洁门牙背面却不知道为什么,直到最近换的新牙医只用了半分钟解释这个问题他才豁然开朗(门牙附近的唾液腺会持续不断的腐蚀门牙)。Lee LeFever 评论说:“The dentist didn’t just give me some abstract command to be a better tooth-brusher, he made sense of it – he gave me a way to see why.”
类似的情形是,我们经常看到有告示说不要带食物和饮料进图书馆,但是很少提及为什么。我曾见到一个图书馆在告示牌下面用小字写道:食物和饮料会吸引虫子,虫子会破坏书籍。明白了为什么才更愿意遵守规则。(有些人认为图书馆是怕饮料不慎洒到书上,所以自习而不借书看的情况下带饮料进去其实没啥。)
仔细想一想,我们日常生活中有多少小事和规则,是我们直接接受却从来没有想过为什么的?
单位是什么(续)
January 4, 2009 7:21 pm GMT-0700 | In Study | 12 Comments | hide续上一篇 单位是什么。接着说单位就是比较这个问题。设想一下这样的对话:
– 这件衣服好贵啊,可以买两个 LV 的麻袋了。
– 是啊,可以看一百场脱衣舞秀了。
– 你看隔壁张三,一个月就赚十个麻袋,你连十分之一个张三都赚不到!
这个,就是拿自己熟悉的事物(麻袋、脱衣舞秀门票、张三月收入)作为钱的单位来衡量价值,类似的比较方法很常见,比如“这种恐龙体重在 40 吨 ~ 48 吨之间——大概相当于 7 头大象的重量。”,“这棵大树树干直径有六米,需要十个人手拉手才能环抱。”一般人对这种“40 吨”或者“六米”都是不太有概念的,拿相对熟悉的东西来比较就容易有感觉。物理学里的基本单位制,比较的就是有共识而且容易测量的事物,和上面说的比较本质上是一样的。古代的话,一般找易于得到或者权威的东西,比如据传英寸最早就是从拇指的尺寸规定的(有争议);现代的话,基本是找自然的物理量来规定,所以一般来说一个基本物理单位的规定,等价于规定一个物理常数,比如米的定义──“光在 1/299,792,458 秒内在真空中传播的距离”,等于是规定了光速就是 299,792,458 米/秒。
这引出一个在物理实验课上同学们经常会问的问题:“既然光速都已经是规定的了,老师为什么还让我们测呢?”实际上,单位规定了物理常数,这并不意味着这个常数不需要再测;相反,还需要不断的提高它的测量精度,并且选择单位标准的时候,人们往往是规定最容易测准的物理常数。比如,时间单位“秒”是规定了銫原子两个能级之间的跃迁频率,自然,这个跃迁频率本身到底是多少就不需要再测了,但是测量这个跃迁频率的设备(銫原子钟),则恰恰是测量别的时间量或者频率量的基准,别的测量都要(直接或间接的)去和这个銫原子钟比较才能得到具体数值结果。銫原子钟目前误差大概是 10-15 左右,而现在已经有别的原子频率测量比銫测得更准确了(铝钟:相对误差 10-17),但是由于銫原子钟的测量误差太大,所以不同实验室无法在小数点后第 17 位比较铝钟的绝对频率测量精度。出现这么个情况怎么办?如果銫原子钟的测量精度确实难以再提高了,那么可以预见在不久的将来,科学家就会抛弃銫原子用别的原子来规定时间单位了。
国际单位制里面,时间和长度单位都是用自然现象来规定的,但是质量单位“千克”却至今仍旧使用一个所谓“千克原器”的人工物体来定义。陈秉乾老师说:“千克就是巴黎国际测量局里一个……(比划半天)秤砣的质量。”(出自 Fang 中华第一系物理讲义页边集)为什么不用自然物理常数?因为那些测量都还不如测那个秤砣的仪器精密,于是这个秤砣的规定沿用了一百多年(物理学的耻辱啊)。2005 年的时候科学家们终于开始正式推进用自然物理常数来重新定义质量了,比如,有化学家建议规定阿伏伽德罗常数,有物理学家建议规定普朗克常数。各地科学家都在努力提高相关的测量精度,希望自己的建议最终成为新千克的标准。我想,在十年之内应该可以抛弃那个秤砣的定义了。
有一个有趣的问题是,外星人用什么样的单位系统?按照我们现在对物理学的理解,我相信外星智慧生命的单位制基础也是时间和长度,他们的时间单位应该是用一个超级精确的原子跃迁频率,长度定义则应该也是规定了光速(我信仰光速不变原理)。不过按照目前广义相对论和量子理论不可调和的矛盾来看,我不知道外星人的单位系统里是不是也有“质量”这么个东西。另外,外星人的时间单位有多长?我们知道,单位定义从本质上说是很随意的,基本上是由文化和科学发展水平决定的,地球人的秒之所以在这个数量级,可能是因为人的脉搏和反应时间也在这个数量级;米则可能是和人的大小有关;千克呢,基本上是婴儿体重那个数量级。如果人用蚂蚁来定义长度和质量单位,那就很不方便。所以有关外星人的时间单位有多长这个问题,我相信应该是由他们的生理基础来决定的。中子星上基于核反应的生命,他们的时间单位估计比我们小百万倍。这个越说越民科了,就说到这儿吧。
This weblog is licensed under a Creative Commons License.
Powered by WordPress. Theme based on Pool by Borja Fernandez.