Thursday, April 22, 2010

周末整理音乐收藏

终于把所有的无损收藏都变成flac了,ape本来没啥不好的,但是几乎所有的便携播放设备都不支持。又创新打算出支持flac的播放器了,又可能败一只,所以就折腾了一下。其实人倒是没怎么动手,不过我弱弱的旧笔记本可是忙了好半天呐……

Convert all ape files to flac

#!/bin/bash
# by huangyuanjie at gmail dot com
# convert all ape files to flac

find $PWD -iname '*.ape' -print > todo

while read p ; do
d=`dirname "$p"`
f=`basename "${p}" .ape`
pn="${d}/${f}.flac"

echo "start converting \"${p}\" to"
echo " \"${pn}\" ..."
sleep 1
mac "${p}" - -d 2>/dev/null | flac -o "${pn}" -
echo "${p}" >> finished-convert
echo "converted \"${p}\" to "
echo " \"${pn}\" ...";

find "${d}" -iname '*.cue' -print > tmp
while read f; do
echo "fixing \"${f}\" ..."
cp "${f}" "${f}.orig"
sed -i 's/ape/flac/g' "${f}"
addsig.py "${f}" # add UTF-8 BOM so that foobar2000 can read it correctly
echo "fixed \"${f}\" ."
done < tmp
echo "${p}" >> finished-fix-cuesheet

rm -v "${p}"
echo

sleep 1
done < todo

rm tmp


Python script to add UTF-8 BOM



#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# by huangyuanjie at gmail dot com
# add UTF-8 BOM so to a text file

import sys
import codecs

def main():
if len(sys.argv) < 2:
sys.stderr.write("Error: no input file!")
exit(1)
path = sys.argv[1]
try:
file = open(path, "rb")
except IOError:
sys.stderr.write("Error: no such file \"%s\" !" % (path))
exit(2)

content = file.read()
file.close()
if str(content[0:len(codecs.BOM_UTF8)]) == str(codecs.BOM_UTF8):
return
else:
file = open(path, "w")
file.write(codecs.BOM_UTF8)
file.write(content)
file.close()

if __name__ == '__main__':
main()

Monday, April 19, 2010

杂谈

今天花了点时间重新学习了一下JavaScript,就是那个有着奇怪学名 ECMAScript 的语言,那个最“民工”的语言,那个可能平均代码质量全世界最低的语言……学习一门科学需要正确的入门,学习一门语言虽然是个小事也一样需要有正确途径(其实我一向对于编写代码这种事比较轻视,因为我认为一个理工生代码写得好才是正常的……)。Stack Overflow 推荐的学习 ECMAscript 的材料是 Crockford 的讲座,于是从 Yahoo video (墙外-__-b)拖回来看了一下午。

看完以后最深的感觉就是想起最近在smth某技术版面上大家说的,“那是和计算机一起成长起来的一代人”(BTW,我们是电脑游戏/SNS一起成长起来的一代人)。他们熟知计算机如何变成今天这个样子,知道编程语言/编程模型的发展脉络,了解种种技术是如何在大公司的市场博弈中生存下来,看过纷繁的概念如潮水般涌现和消退。历史不能告诉我们明天在哪里,却记录了人们曾经走上了哪些死胡同,以及为什么那在当时走不通。在这个躁动的时代,无数人问学会了啥能找到工作,却从不问自己真的学会啥了。(某种意义上 Google 就像个不负责任的家教,“做题”时给你个答案,结果很多人永远都没学会“做题”更不要说“掌握”)

想起马哥说如果按照在实验室时间算,我是优秀研究生,如果按照网上到处晃荡看的时间算,我该被开除了。其实我不过想多了解点背景知识罢了……求精的匠人文化深厚的日本也在全球化的浪潮中逐渐迷失,更何况这个浮躁了很久的国家。想起研究生入学的时候,所长那不怎么出色的演讲中问了一个让人很不舒服的问题——“是否耐得住寂寞?”——说不怎么舒服,一是在于环境,二是为什么要耐得住这等寂寞?工业化的核心是用指定的成本指定的时间做出质量合乎要求的东西;十年铸一剑那是奢侈品市场,呵呵。连奢侈品都在我国量产的今天,这个质量的标准应该放在那里?嗯,也许这个质量应该相对环境来定义,好质量就是比平均高一些。就像韩局长成了好官员,假货都要标榜高仿。

于是矛盾,一方面对这个环境很反感,另一方面又不甘心遁去。

 

PS:今日偶然看到孙立平老师经济危机及社会溃败一文,值得一读。

PS2: developer.yahoo.com上有 Crockford 的最近演讲视频,无需翻墙。

Monday, April 12, 2010

Win 7 实在太厉害了……

居然连我这么小众的鼠标都认出来了,而且还有专门的图标~

win7knows

惊讶得一塌糊涂……

Monday, April 5, 2010

在Win 7下安全移除USB移动硬盘

微软的系统自从Vista以来(就是nt6.x)就有了一个十分让人烦恼的问题——所谓的安全移除外接硬盘的安全变成了对系统和数据而言的,至于硬盘的物理健康则被完全忘掉了。点了安全移除之后硬盘还在全速转动,这时候拔下来就必然听到咔嗒一声,让人对立面的数据十分担忧……

不过解决办法总是有的~ 来自 Linux 的 sdparm 有 windows 版,用这个东西就能安全的移除硬盘了。Linux 下着曾经是我主要的工具,不过后来有了 devicekit/udisk 之后就可以从 gnome 直接完成这个动作了。

下载 sdparm window 版,移除硬盘的时候在 有管理员权限的 cmd 里面执行:

sdparm --wscan

查看硬盘,然后执行

sdparm –C stop PDX

其中的 PDX 是 scan 告诉你的外设硬盘。这样机秒钟后就可以拔掉了。注意不要再用window自己的“安全移除”了,会反而再次激活硬盘。

Thursday, March 18, 2010

Unix Hater Handbook 是好书!

Unix Hater's Handbook 真是一本好书啊~~ 连前言都很搞笑:

As for me? I switched to the Mac. No more grep, no more piping, no more SED scripts. Just a simple, elegant life: “Your application has unexpectedly quit due to error number –1. OK?”

话说 sed script 真的不是给人写的,而我至今也搞不清楚在vim/sed/perl的正则里可以用哪些是需要escape的……btw,昨天我终于学会在sed里一次处理跨行并且使用传说中的hold space了……

btw, 昨儿 LFS-6.6 失败了,glibc 编译不能,重大悲剧…… 哥不干了,装个ArchLinux算了…… 昨天搜索的时候遇到一个ArchMobile,囧,我们Arch这么小众的都在进军mobile领域……要是足够闲就自己造手机了,EE/CS俺都会点的呢……

Sunday, March 14, 2010

人·机

■ 引

这两天了解了一下 Pylons 这个 Python web framework,对它第一印象还算可以,不过按照 Tutorial 写的程序居然不能运行……原因是去年发布以后所依赖的库发生了巨大的变化.-__-b

这种依赖剧烈升级似乎是一个惯常的严重问题了。想想 Linux 每次升级库的时候的提心吊胆就知道了。依赖库能够最大程度的提高开发效率,减少自己制造轮子的问题,可是用别人造的轮子就有需要匹配轮子的问题。比如这个 Pylons , 从 0.9.7 到 1.0rc 似乎没什么新鲜功能,可是开发者还是叫苦说自己可没闲着,都在忙着和依赖库的变化作斗争。

这也难怪 Intel 和 Microsoft 这样的企业能在多年的不思进取的指责中屹立不倒,他们靠的就是在开发新功能时候维持一个尽量稳定的产品接口( X86指令集,Windows API )。


■ 问

《人月神话》告诉我们一件工作一个人十天能做完,可是找十个人却不见得能够一天做完。而如果这些人还不是受雇同一个主顾,没有统一的交流平台的话,情况只会更糟糕。e-mail/mailing list/ICR/twitter 交流手段不断变化,效率提升却不明显。

可是人不可能有足够的预见,以至于我们只需要一起维护一个不会失败的方案。于是我们就需要尝试不同的方案,而从提高效率考虑,又需要人们分散去尝试不同的方案。


■ 玄

沟通问题很像是并行计算里数据/控制传输成本,每个人就像集群中的一台机器。处理更大规模的计算,要么有更好的算法,要么有更强大的节点。可是无论我们怎么优化节点(提高每个人自身的能力),似乎都已接近上限了;那么只能改进算法(改进合作模式)。

想起 Yale Patt 的一个比喻,我们需要一个智商 350 的聪明人,可是只找到 10 个智商 35 的,那么是不可能解决问题的。那么一个直接的推论就是只要这类问题存在,那么人类能成果的发展最后就会止于再也找不到更聪明的人。(当然节点数目——环境可承载人类总数——也可能成为约束,可是我们已经有很多人了不是?)

那么,我们有多接近这个极限?


■ 空

我们需要接近这个极限么?更多的产品,更好的服务,更快的速度,更低的价格……我们一直追寻,想得到什么?

Thursday, March 11, 2010

blogger 还真是死不开窍

居然这么长时间了还是会在切换 HTML 和 WYSIWYG 编辑的时候自动去掉<p>标签,替换以换行符<br />,真是不知道说什么好,也不看看人家 wordpress 的进步,唉,被 google 收购了就这么不思进取。