Showing posts with label script. Show all posts
Showing posts with label script. Show all posts

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 的最近演讲视频,无需翻墙。

Thursday, March 11, 2010

自动下载 LFS 所需的文件

自从 LFS 6.6 之后,LFS CD 就不更新了,于是就得自己下载所需的文件。而我又不喜欢自动的 ahalfs ,所以从 LFS book 中直接抽取需要下载的文件,然后趁着午饭时间让 wget 干活,嘿嘿

grep '.patch' chapter03/patches.html | sed -n 's/^\s*"\(.*\)".*/\1/p' > ~/Desktop/list.tmp
grep '.patch' chapter03/patches.html | sed -n 's/^\s*"\(.*\)".*/\1/p' >> ~/Desktop/list.tmp
wget -i list.tmp

Saturday, February 20, 2010

交互式shell好工具eyeD3

事由:这两天闲着整理我电脑里的音乐库,因为 windows 7 的 windows media player 12 (以下简称 wmp )和 library 功能配合得非常完美,而且 wmp 12 的媒体管理功能也还不错,因此打算用 foobar2000 管理 APE/FLAC/TTA 等无损文件,而让 wmp 12 管理 mp3 文件。

遇到问题:管理 mp3 的内容无非就是整理 mp3 文件的 tag 信息 啦(就是我们点右键看属性时候看到的那些歌手、专辑等信息),不过 windows 7 和 wmp 12 的 tag 编辑能力都比较一般,做不了向 mp3 音乐文件嵌入专辑封面这些“高档”的事,估计是微软怕什么都做了被告垄断吧。于是只好寻找第三方工具,找来找去找到一个叫做 Mp3tag 的软件,功能很强大,可以编辑多数 mp3 的 tag 属性,也能嵌入图片(嵌入图片后文件在 windows 7 里就显示成专辑封面的图标啦,很好看的)。不过这个软件批量操作还是不够快捷,而且遇到错误的 tag 信息会无法识别 :(

后来:今天终于克服了懒惰,阅读了 mp3 tag 的技术标准,下载了一个 Python 的库和命令行程序(eyeD3)仔细研究了一下。终于对遇到的问题,和应该的解决办法有了系统的完整的了解,能够方便的不受 Mp3tag 功能限制的更改所有 tag 信息了。以后就通过 Python 交互式命令完成处理 mp3 tag 的各种工作啦,终于不用到处瞎找工具了 :)

最后:我想起昨天找到时候遇到一个软件,叫做 TidySongs ,声称 “ Only $39”,嗯,好吧,我找到了一个对我来说更趁手的工具,省下了 $39 ,是不是该买点巧克力和零食什么的庆祝一下 XD