2014新年好

2013年,我做了这些事:

– (只)写了8篇博客

博客空间总访问量85588 PageView(Google Analytics数据),比前一年上涨94%。首页、Kindle Paperwhite使用报告calibre常见问题这几个页面的PV占总PV的50%。2013年新写的文章虽然PV数其实也还行,但是由于排前面这几个实在是占比太高了,所以前50%中就没有它们了。饭否发消息269条,包括照片54张。

– 有关2013年的计划

跟前一年一样,又都没完成,以后再也不在新年Blog上立志了,通过接受群众监督来立志对我已经失效了。

– 自由软件相关

除了参加了几次GDG Hangzhou的活动和在浙大电脑节时在BA5AG老师的实验课上 瞎掰了一些Raspberry Pi的入门知识以外,就没啥了。当然,我还在努力完成自由软件运动领袖Richard Stallman的传记的翻译工作,这本书预计会在2014年内出版。

– 几个IT产品

Raspberry Pi:树莓派占据了2013年上半年的大部分业余时间,除了写了几篇相关的Blog,更重要的当然是翻译出版了《爱上Raspberry Pi》一书,这是我头一回正式出版图书。

Arduino:曾经我认定Arduino是一个不适合我的玩具,不过玩过Raspberry Pi以后,Arduino看上去也变得不是那么复杂了。

二手的Nikkor AF 24-85/2.8-4D镜头:代替了18-135的套头成了现在的挂机头,虽然损失了一些焦段,不过成像质量还是上了一个档次。虽然狗头变成小牛头,不过相机背后那个猪头依然如故。

Yamaha CLP-430电钢琴:虽然拥有一台键盘乐器(也就是说电子琴也行)是我十多年来的梦想,但是我深知自己无法坚持练习,所以一直就没有买。今年买回来以后发现,坚持练习确实是一件非常困难的事情。半年来的成果(其实主要就是半年内前半个月的成果)是能把巴赫的G大调小步舞曲完整流畅的弹下来了。但是,因为没有扎实的基本功训练,所以手型、力度、和弦整齐度和节奏稳定度都是惨不忍睹的。

– 旅游

英国十二日游济南两日游奉化两日游、武夷山三日游、厦门三日游、南京三次共五点五日游。

国内铁路运转里程约5818公里,英国铁路运转里程不详。自驾车行程约7000公里。体验了伦敦地铁,参观了位于英国约克郡的英国国家铁路博物馆。体验了宁杭高铁首发列车。

展望2014年:

上文说了,在这里立志无效了,所以,2014年就这样过着吧。

关注2014维也纳新年音乐会

继续维持传统,第十次写名为关注xxxx维也纳新年音乐会的Blog。前几篇在:2005 2006 2007 2008 2009 2010 2011 2012 2013

2014维也纳新年音乐会CD封面

2014维也纳新年音乐会CD封面

01 Eduard Strauss – Die Schöne Helena-Quadrille; op. 14 – 美丽的海伦四对舞 (2010)

02 Josef Strauss – Friedenspalmen, Walzer; op. 207 – 和平棕榈圆舞曲 作品 *

03 Johann Strauss I – Carolinen-Galopp; op. 21a – 卡罗琳娜加洛普 *

04 Johann Strauss II – Ägyptischer Marsch; op. 335 – 埃及进行曲 (1993)

05 Johann Strauss II – Seid umschlungen, Millionen; Walzer; op. 443 – 百万拥抱圆舞曲 (1988,2001)

06 Johann Strauss II – Stürmisch in Lieb und Tanz; Polka-schnell; op. 393 – 激烈的爱情与舞蹈快速波尔卡 (1991,2010)

07 Johann Strauss II – Waldmeister; Ouverture – 香车叶草序曲 (1983,1991,1996,2007)

08 Johann Strauss II – Klipp-Klapp-Galopp; op. 466 – 噼噼啪啪加洛普 (1993,2005)

09 Johann Strauss II – G’schichten aus dem Wienerwald; Walzer; op. 325 – 维也纳森林的故事圆舞曲 (1974,1983,1990,1994,1999,2005)

10 Joseph Hellmesberger – Vielliebchen; Polka-francaise – 心爱的法兰西波尔卡 *

11 Josef Strauss – Bouquet-Polka; op. 188 – 花束波尔卡 作品第188号 *

12 Richard Strauss – Capriccio: Mondscheinmusik – 月光场景(选自《随想曲》) *

13 Joseph Lanner – Die Romantiker; Walzer; op. 167 – 浪漫者圆舞曲 (1977)

14 Josef Strauss – Neckerei; Polka-Mazurka; op. 262 – 插科打诨玛祖卡波尔卡 作品第262号 *

15 Josef Strauss – Schabernack-Polka; op. 98 – 恶作剧快速波尔卡 *

16 Leo Delibes – Sylvia: Pizzicato  克莱芒·莱奥·德里布 拨弦曲(选自《西尔维亚》) *

17 Josef Strauss – Dynamiden; Walzer; op. 173 – 神秘引力圆舞曲 (1987,2007)

18 Josef Strauss – Ohne Sorgen; Polka-schnell; op. 271 – 无忧无虑快速波尔卡 (1974,1981,1987,1994,2001,2006)

19 Josef Strauss – Carriere-Polka; op. 200 – 驰骋快速波尔卡 (1997)

20 Johann Strauss II – An der schönen blauen Donau; Walzer; op. 314 – 蓝色多瑙河圆舞曲

21 Johann Strauss I – Radetzky-Marsch; op. 228 – 拉德茨基进行曲

2014年的维也纳新年音乐会将由丹尼尔·巴伦博伊姆执棒,这是他继2009年以后第二次亮相维也纳新年音乐会的指挥台。在2009年的新年音乐会上,巴伦博伊姆和维也纳爱乐乐团给乐迷们带来了6首第一次在新年音乐会上演出的乐曲,2014年则有7首全新的乐曲。其中,还包括了理查德·施特劳斯和克莱芒·莱奥·德里布两位作曲家的作品,这是他们的作品首次出现在新年音乐会的舞台上。

理查德·施特劳斯虽然也姓“施特劳斯”,但他可不是圆舞曲世家施特劳斯家族的一员,他是德国著名的作曲家、指挥家。写作了很多有名的交响诗和歌剧作品,比如《查拉图斯特拉如是说》就是其中很有名的一个作品。这次音乐会上选取的《随想曲》选段创作于1942年,是他的最后一部歌剧作品。

2014年是老约翰·施特劳斯诞辰210周年,不过音乐会上包括压轴的op. 228内也只有了两首老约翰的作品,有点小遗憾。在穆蒂指挥的2004年新年音乐会上,选取了6首老约翰的作品,很给人耳目一新的感觉。

自从巴伦博伊姆在2009年打破了以进行曲开场的惯例以后,今年的开场曲更是史无前例的选择了一首四对舞曲,而且是约瑟夫的作品,创新也是维也纳新年音乐会这个传统节目的每年不变的追求。

维也维的森林圆舞曲是一首旋律优美的圆舞曲作品,指挥大师洛林·马泽尔的最爱,在他执棒的1983、1994、1999和2005年的新年音乐会上都选用了这个曲目,并且马泽尔自己也拿起了小提琴,参与到了乐曲的演奏中。2014年,不知道巴伦博伊姆会给大家带来如何一种全新的演绎。

传统与创新并存,维也纳新年音乐会在每个新年的第一天,带来对新的一年最美好的祝愿。

解密GW-BASIC的加密文件

终于解密了一份1993年左右的BASIC代码,这么多年一直想看这份代码的内容,现在终于看到了,颇有一些唏嘘之感。

目前网上似乎搜不到中文资料介绍如何解密加密过的BASIC代码,我总结一下放在这里。聪明人可以直接跳到“解密方法二”阅读。

背景:

DOS下的GW-BASIC在保存代码时,可以存成tokenized、纯文本和加密三种格式,分别对应SAVE命令的默认参数、“,a”和“,p”参数。

对于用了,p参数保存的源代码,以后就只能LOAD到内存中执行,而不允许再LIST查看源代码了。本文介绍的就是用于解密查看,p参数保存的源代码的方法。

解密方法一:

参考GW-BASIC tokenised program format

原理是找到GW-BASIC中标记代码是否是加密的那个内存地址,然后用VAL命令的一个溢出Bug,修改这个内存地址的值。

第一步,运行一下如下的程序,找到加密标记的地址:

FOR I=1000 TO 16000:PRINT I: J=PEEK(I): POKE I,((J=0)AND 255) OR J: POKE I,J:NEXT I

这个程序会导致Illegal function call错误,记下出错前程序打印出来的数字。

第二步,正常用LOAD命令加载要加密的.BAS文件。

第三步,输入下面的程序,并把其中的a%[9]的值”1450″改为第一步中记录下来的数字。

dim a%[14]
a%[0]=0:a%[1]=&h2020:a%[2]=&h2020:a%[3]=&h2097
a%[4]=&h4553:a%[5]=&h2047:a%[6]=&H203A:a%[7]=&H2098
a%[8]=&H1C20:a%[9]=1450:a%[10]=&h112C
a%[11]=&h903A:a%[12]=0
b$=""
b$="123"+chr$(28)+":::"+chr$(137)+chr$(13)+mki$(varptr(a%[0]))+":"
print val(b$) 456

完成,现在已经可以用LIST命令正常列出解密后的代码了。

解密方法二:

当我还沉浸在成功解密了BAS文件的喜悦中时,无心的一次搜索让我又找到了更简单的解密方法

创建一个只有两个字节的UNPROT.BAS文件,这两个字节是0xFF 0x0A。

先LOAD要解密的.BAS,然后再LOAD一下这个UNPROT.BAS,然后就解密成功了。

如果是在DOS下要创建这么个文件还真有点麻烦,比较简单的做法是用DEBUG:

C:\>debug
-e 0100 ff 1a
-rcx
CX 0000
:0002
-n unprot.bas
-w
Writing 00002 bytes
-q

在Linux下使用“360随身WiFi 2”

某人说“360随身WiFi”价格还算良心,我也认同。昨天无意中看到2代开售,就随手撸了一个。当然,为了免邮费,不得不买了点别的东西凑单,于是还买了本价格是这个“360随身WiFi 2”近两倍《C语言点滴》回来看看。

到货,插到电脑上,Linux下没反应。Ralink的无线网卡系统不自带驱动我不惊呆,于是lsusb看了下。

Bus 001 Device 006: ID 148f:760b Ralink Technology, Corp.

好嘛,二代换芯片了,原来是RT5370的,现在换成不认识的了。不怕,把148f:760b放狗搜一下。不过搜完了就怕了,因为结果是0个。

打算先用Windows确认一下设备是好的,结果装了360官网的驱动后发现设备完全识别不出来……这可真是个大乌龙。到360官网的歪粉交流论坛上看看,有类似问题的看来不是个案。换了论坛上公布的新版本的驱动后Windows下工作正常。(截止我写这篇文章的时候,官网上的驱动已经更新成新的了,文件大小为10797000字节,论坛上讨论说设备识别不出来的那些贴子貌似也都直接消失了。)

继续回到Linux下折腾,可是不知道芯片是什么还是为难。从Ralink网站(现在叫Mediatek)上瞎找了几个Linux驱动,里面也没有符合760b这个idProduct的,抓瞎。

用百度搜了一下148f:760b,结果找到了360论坛上一篇新觧出炉的贴子,确认了芯片是MT7601。

剩下的事就简单了,在Ralink网站下载MT7601的Linux驱动,修改common/rtusb_dev_id.c文件,在

{USB_DEVICE(0x148f,0x7601)}, /* MT 6370 */

下面加一行

{USB_DEVICE(0x148f,0x760b)}, /* 360 Wifi */

按照README_STA_usb中的说明make和make install。然后modprobe一下mt7601Usta.ko这个内核模块,后面的事就妥妥的了。

还有个遗留问题,连不上WPA2 Enterprise的无线网络,暂时不管了,我对这个需求不强烈。

啥?这文章只说了怎么驱动这个网卡没说怎么在Linux实现AP的功能?哦,我本来也没打算用它在Linux下做AP来着。有兴趣的话可以试试hostapd/dnsmasq/iptables这老三样吧,我不知道能不能行,如果哪位朋友弄成了麻烦汇报一下,我很想学习学习,多谢了~

2013-10-12更新:MT7601的Linux驱动中似乎没有实现nl80211的接口,所以hostapd没法直接用。不知道还有什么办法能实现AP的功能,如有朋友知道,希望能不吝指教。

2014-08-12更新:留言区中的轩辕志瑜同学找到了一个支持AP模式的驱动,详细的信息请查看相关的文章:http://blog.csdn.net/sumang_87/article/details/38168877,github上的源代码:https://github.com/eywalink/mt7601u。感谢他的分享。

2015-03-12更新:如果是在Raspberry Pi上尝试编译驱动并且遇到困难,请参考《为Raspberry Pi 2编译内核模块

《爱上Raspberry Pi》诞生记

我的第一本译著《爱上Raspberry Pi》上个月底终于正式出版销售了。从开始有译书的想法到拿到成品书,正好5个月时间。我的Blog也正好长了这5个月的草,不过这之间没有因果关系。

《爱上Raspberry Pi》封面

《爱上Raspberry Pi》封面

今年上半年,闲暇的时间比较多,就玩了玩Raspberry Pi和Arduino,兴趣正浓时,看到论坛上有出版社的编辑在征集Raspberry Pi相关图书的译者,于是就与编辑联系了一下。那时正好看了几本Pi的英文书,第一次感觉到原来老外们也出了很多烂书,在看过的几本书中,Getting Started with Raspberry Pi这本书是那个时候内容相对说得过去的一本。由于编辑手头有几本书都已经找到译者,我就随口问了问这一本,没想到这位编辑正好在跟O’Reilly谈这本书的引进合同,真可谓无巧不成书了。

为了争取到翻译这本书的资格,我主动根据手头的电子书(盗版的,惭愧)先试译了一章,发给了编辑。于是,很顺利的,3月20日,我就与出版社签定了“委托翻译合同”。

“委托翻译合同”从名字就可以看出,译者的事就是翻译,翻完了就没你什么事了。稿费按不含空格的字数计算,每千字稿费低到难以想象。译稿的版权出版社以稿费的形式直接买断,译者只有属名权,出版后的书卖多卖少跟译者都无关了。出版社违约的话,只需部分支付稿费。现在大环境就是这个样子,也没啥办法。

4月15日,通过电子邮件联系了原书作者Matt Richardson,请他给写了个中文版序。后来才知道,出版社好像比较忌讳译者与作者直接联系,不过那时无知者无畏,反正中文版序是到手了。

合同交稿时间是4月20日,不过由于出版社到4月19日才拿到O’Reilly给的英文样书,而我又想根据英文纸书对译稿进行正式的审校,所以虽然那时翻译已经完成了,实际交稿的时间还是协商延迟到了5月15日,期间我自己把译稿通读了七八次,并请好友帮忙审阅了几轮。幸亏书不厚,才有机会这么细致的审核,不过看到最后,真是想吐了。

6月5日,出版社提供了打印出来的初校样,由译者进行审阅。实话说,这个初校样让我大跌眼镜,上面有各种排版错误,甚至还会出现原译稿中没有的错别字。校了3天,200多页的书中找出了100多处错误,其中属于原译稿错误的不到10处。

6月22日,我在家里的Raspberry Pi上用gor这个用Golang写的Blog系统搭建了一个小网站,用作本书的支持网站,提供勘误表和电路图,域名是http://rpi.freemindworld.com。不过后来为了保证网站稳定性,迁移到我的Linode上去了。Raspberry Pi上的那个Web服务换了个了域名,同步运行,域名改为http://rpirpi.freemindworld.com

7月中旬,进入三校阶段,遗憾的是三校的版本中依然是错误多多。咬着牙把三校版又仔细看了几遍,改了六七十处错误。8月上旬,核红稿校对中又发现了少量问题,不过总算错误数开始收敛了。

7月18日,出版社领到了书号:ISBN 978-7-03-038196-5。有了书号,我就在豆瓣上创建了相关的图书页面。

8月8日,又仔细把最后一个版本的核红稿给看了一遍,这次问题终于比较少了,修改了几个不痛不痒的小问题后,终于在8月8日下午进厂印刷。

8月19日,出版社拿到了印刷厂的校正本样书。8月25日,我拿到了第一本校正本样书,劳动终于结成了果实。

销售方面,各主要B2C电商中,8月23日,当当网第一个上架了此书,不过一直处于缺货状态,直到9月5日。其次是亚马逊中国,但很长一段时间上面只有第三方卖家出售,也是到9月初才开始有自营的。最早有现货可以正常发货的是北发图书网,而且还是所有B2C电商中售价最便宜的。

中文版图书的封面,最终是由O’Reilly来设计的,显然采用了与原书和这一系列书中文版一样的公版设计。7月底给了第一稿,按我的要求微调了一下以后,8月5日定稿。

总结一下出版过程,作为译者来说:与出版社编辑联系,确定翻译意向,试译,签定翻译合同,翻译,交稿,审校样,拿样书。

身边也有不少朋友表示对出书有兴趣,其实现在作译者与编辑那里存在一个信息不对称的问题。编辑们手上有很多书或选题找不到人来翻译或原创,而有心出书的人则不知道应该怎么去跟编辑联系。所以与编辑联系是整件事情的第一步,其实借助搜索引擎或微博,这件事情并不难完成。同时,与编辑之间建立友好、信任、合作的关系,会对整本书的出版过程起到重要推动作用。

最后帮我的编辑做个广告,目前还有几本有关Raspberry Pi的书在寻找合适的译者。书都不厚,如果想体验一下出书的乐趣和痛苦的朋友,可以通过我与编辑取得联系。 这几本书主要是Step-by-step的教一些Raspberry Pi的入门操作知识,技术含金量不高,但翻译起来会比较轻松。