紧凑型卧室媒体中心remake — 复刻篇

前一天下了单买Raspberry PI,第二天傍晚就到货了。魔都的快递还是很快的。当然我也很快,拿出在前一天已经准备好系统的SD卡,插进树莓派的SD卡槽。接上键盘,网线,电源。五分钟不到已经进入archlinux系统那熟悉的界面了。

体积比安卓电视棒略大,整个系统全部在SD卡上。对我来说方便了不少。为了刷安卓电视棒的系统,装驱动找adb连接接口花了我两天的业余时间。给这个树莓派装系统,连下载系统映像大约总共花了一小时的时间。

我选择了Arch Linux ARM版。这个发布用了很久已经很熟了。

花时间配置了一下sshd,接下来就可以拔掉HDMI线进入headless mode了。我并不需要这块板的视频输出,至少现在不需要。通过ssh连接系统进行配置也方便查资料。

网上有不少用raspberry pi搭建音乐媒体中心的文章,不过这些文章我都不想参考。Linux的音乐媒体中心方案基本都差不多,核心都是music player daemon,外围加上一些手机控制什么的。我的第一阶段目标是复刻原来卧室音乐媒体中心的功能。所以只需要把原本的系统配置都拿过来用就行了。

软件方面,第一步是配置声音,安装MPD。第二步是安装一些声音播放小工具,配合我自己写的脚本实现语音报时,天气预报等功能。

等音乐文件都复制过来以后,就可以通过mpd播放,音乐播放器的核心基本就成型了。

接下来是配置samba,共享一个音乐文件目录出来,方便往里面加音乐。

然后是复刻原本的红外遥控器,把红外遥控器从原来的媒体播放器上拔下来接上。配置好驱动以后把原本的控制脚本拷贝过来就能通过遥控器操作了。这个媒体中心设计为通过遥控器进行操作,毕竟软件方案修改设计要方便得多。

然后是无线网卡,树莓派本身是有一个有线网口的。但是要插网线的话就限制了系统的移动,所以无线网络功能在复刻阶段就准备加进去。

安装无线网卡遇到了一点小问题,linux现在还没有这个网卡的驱动。我只好把网卡外壳拆开(买来还没几个小时啊),直接看网卡的芯片。发觉是RTL8188cus的。但是vendorID和productID没有被辨认出来。上Realtek网站下载了驱动源码,找到vendorID相关部分,把这块网卡加进去。重新编译驱动并安装,无线网卡很快被认出来了。

配置wireless连接和红外遥控器花了我更多时间。虽然Archlinux跟我是老朋友了。可是Arch认识了systemd这个新朋友。说实话systemd比起rc.*来说真心难配置,特别对需要自己写启动脚本的人来说。搞了整整两晚上终于弄好了。

配好这两样以后复刻媒体播放器的软硬件配置就完成了。拔掉已经没有用的HDMI和网线,插上耳机线,一个可用的系统就成型了。以下是成品,当然还需要找一个壳子装起来。但是现在还不着急,因为复刻的目的是为了对现有的功能进行扩展。请期待下篇《扩展篇》

PS: 一不小心插错根线,意外的发现树莓派可以通过USB口直接供电,这样就多一种方法突破200ma电流限制了。不过现在还不着急弄,因为下一步的重点是GPIO…

 

BOM小记:

Raspberry Pi: 350

无线网卡:69

TF卡:30

遥控器:99

USB电源线:8

———

复刻成本:RMB556

紧凑型卧室媒体中心remake — 谋划篇2(一个意外)

项目刚开始就遇到了一些小小的挫折,安卓电视棒买回来了。但是买之前没有好好做调查,买了RK3066的系统。买回来之后才发现Linux对这个硬件平台的支持才刚刚开始出到pre-alpha版。而且只有一位热心的开发者在维护。到现在连板载wifi还没有完全搞定。进入Linux也需要先进Android再通过adb命令进入Linux。按照这位好心人的指引安装了Ubuntu Linux, 确实还不太稳定。在我的系统(MK806)上连桌面都进不了。对于希望能够让这个系统稳定的跑在Linux上的我来说,这样的社区支持是远远不够的。本想回头看看Allwinner 10的系统,可是转念一想,也许raspberry pi平台更符合我的需求:

优点

1. 社区很成熟,现在已经有debian和archlinux版本。社区讨论以linux平台为基础,比较容易获得帮助

2. 单一硬件标准,反过来电视棒市面上不同品牌五花八门,硬件也有微小的不同。我试过刷MK808的固件就会出现wifi认不出的问题。说明硬件是有一些区别的。

3. 平台不自带flash,完全通过SD card扩充。也不预装系统。本来这应该算缺点,但是对于需要频繁刷机的人来说,整个系统可以拔下来插PC上备份是相当的具有诱惑力,试验不同系统也十分的方便,多准备几块SD card就行了。更换SD卡也比重刷系统要方便得多。

4. 平台自带GPIO,所以简单的电子扩充可以不通过arduino。(我希望能够通过GPIO控制媒体中心的一些外设,比如按钮,led,液晶屏,音箱电源等)

缺点

1. 不自带wifi,所以如果需要wifi需要自己买usb wifi来扩展。而RK3066的系统本身就是带wifi的,这也是我一开始选择RK3066的原因。

2. 缺省频率为700MHz单核,性能略差一些。这对我来说不是太大问题。对于音乐相关的应用来说这个频率远远够了。原本的媒体中心是400MHz的MIPS,连浮点硬件都没有,也够用了。

3. 体积跟信用卡一样大小,比RK3066电视棒大一点。这不算是太大的问题,如果能够省下arduino,系统能做得更加紧凑。

这里有个链接比较了Raspberry PI和MK802,可以作为参考。当然RK3066的性能比MK802更高一些,如果对性能有需求也许会有不同的想法。

Raspberry Pi and the MK802 a Side-by-Side Comparison

下单买了raspberry pi,等到手以后再继续这个项目了。

RASPBERRY PI的部件图。

 

买回来的MK806电视棒。插在电视HDMI口上可以当一台小电脑用。

接上去就是一个android系统,用来当电视媒体播放器是一个不错的选择,但是得选择HD类的应用。

紧凑型卧室媒体中心remake — 谋划篇

原本卧室有一个linkstation NAS改的卧室媒体中心,实现音乐播放,闹钟,语音报时,天气预报,网络收音机的功能。这个媒体中心已经用了六年多的时间了,六年来伴随着我每一天的入睡和起来。但是随着时间的流逝,这个系统的缺点也悄悄显露出来:

1. 内核版本老化,能烧的kernel最高到2.6版,严重影响扩展能力。很多新的硬件需要高版本的内核,比如想自己扩展个无线网卡或者收音机模块什么的就不太方便。

2. 扩展能力有限,这个主要受限于内核版本。想要使用网络功能必须接网线。所以只能放在网线铺设到的地方而不能灵活的移动。

3. 依赖于pata硬盘,后来被我换成了笔记本硬盘,消除了噪音,但是机械硬盘噪音仍旧无法消除。

4. 没有显示屏,配置等等都要通过网络。

5. 整个系统为内置3.5“硬盘设计,不够紧凑。

当然这些缺点不是完全无法克服的,比如显示模块可以自己加,硬盘可以换成ssd的等等。这套系统继续使用下去没有任何问题。但是复刻一个新版本的硬件可能是更好的选择,并且带来更多的可能性。

原来的系统,红外遥控接收器在linkstation NAS的上面,后面还有一块USB声卡接着旁边的喇叭。所有外设功能都是通过usb线扩展出来的,所以系统外观显得比较臃肿,只能塞到角落里默默的服务默默的落灰。

 

复刻版的硬件需要有如下功能:

1. 系统紧凑,所有外设能够塞在一个外壳内。理想状况应该连音箱一起塞在外壳内。

2. 复刻原本的所有功能,包括音乐播放,闹钟,语音报时,天气预报,网络收音机等功能。

3. 不需要下载和网络存储功能。

4. 能够增加显示功能,能够在本机进行一些简单的设置。

5. 更多的可能性。

 

对于硬件的核心平台,考虑采用mk802方案。考虑这个方案因为以下几点:

1. 这个平台基于ARM,有更新的内核版本可以选用。

2. 系统高度集成,包括声卡,视频,无线网卡,存储等等,所以需要通过USB扩展的模块就少。

3. 硬件可扩展性相对比较强,有朋友自己增加摄像头或者连接arduino控制舵机等。

4. 性能高,功耗更小。毕竟差了六年,性能高了很多,功耗也一点都不差。

考虑分以下几个步骤:

1. 复刻 — 复刻原本系统的所有功能,实现基础软件平台

2. 扩展 — 扩展出显示,收音机等功能。外壳制作。

3. 可能 — 对一些可能性进行研究。

兼做NAS的离子平台媒体中心

这台媒体中心兼NAS是大约两年半前配的,到现在为止一直工作得很好。随着NUC 4×4平台即将上市,有点考虑要进行硬件平台的升级了,所以写篇文章纪念一下。

硬件篇

如下就是媒体中心电脑的样子了,电视柜左下角放置的是电脑主体。右边那格上边角落塞的是usb红外线接收器和无线键鼠接收器。另外有一个红外线发射器接在电视机上。

机箱内部配置

离子平台主板一块

内存两条4G,其中一部分分配给显存。

西数绿盘两块2T+1T

光驱无,有一个usb光驱需要时接上

 

机箱外部配置:

usb红外线接收器一个

无线键鼠

usb FM接收器

红外线发射器

喇叭一对,电视机一台

 

机箱用的是Shuttle K45准系统的机箱。话说这机箱并非刻意淘来,只是买回后用了不到两年主板就挂了,只得购买一套离子平台主板替换原有硬件。

下面就是系统的核心,离子平台主板。无风扇散热设计,通过一块DC稳压电源供电。有不少人关心离子平台性能如何。我用下来的感觉是除了flash卡以外别的都ok。只是我不看高码率原盘影片,所以这方面的性能不太清楚。

用了两年不到就挂掉的原主板(24×7开启),电容都鼓包了。原有的电源也吵死人。最夸张是机箱风扇,拆的时候发觉机箱风扇早就不转了。只得全都换掉,只留下原装硬盘一块。

USB红外线接收器是和这个遥控器配对的,就是普通的山寨媒体遥控器。

‘’

自制的红外线发射头粘在电视红外接收窗上,方便通过电脑遥控电视(主要是开关)。值得一提的是这根线的另外一端是连接在主板的PC Speaker针脚上,通过对PC Speaker编程完成红外线发射。

USB FM接收器,可以让媒体中心兼具播放广播的功能。左边这根线就是红外发射器的连接线了。

FM天线,为了更好的收音效果不得不连了根很长的天线。

功能篇

要配置一台满足需求的媒体中心,首先就需要考虑需要让它完成什么功能。我这台电脑有些辅助功能是慢慢建立起来的(比如FM广播),但是主要功能必须在搭建系统之前就确定:

1. 文件共享

2. 下载机

3. 电影播放

4. 音乐播放

5. 重要文件定时备份

6. 红外遥控

7. 调频广播

8. 网络视频观看

9. 日间整点半点三五座钟报时

在搭建htpc前,最大的考量,就是要不要让媒体中心机的功能和文件服务器+下载机分开来。这回决定你是配一台电脑还是两台电脑,也会决定你配电脑的思路。因为NAS需要24×7开启才方便不同家庭成员随时随地访问,所以能耗和静音成为第一考虑因素。相反媒体中心则要求性能足够播放主流媒体文件,性能不能太低。所以把两部分的功能做在一台机器里也是需要仔细进行平衡的。我曾经也是文件服务器与媒体中心分开,用一台单独的嵌入式NAS来存放文件和下载,但是最后还是选择了两者合一的方案,主要考虑有以下几点:

1. 两套系统维护起来要比一套系统需要更多的时间和精力。

2. 嵌入式NAS作为文件分享没有任何问题,但是当用来做下载机时偶尔还是有吃力的问题。

3. 媒体中心访问NAS的文件需要通过局域网,又多了一个不稳定的因素。

一旦决定了合二为一的配机思路,那么主要的考虑就是能耗和性能间的平衡了。我原本用浩鑫的准系统,结果并不理想。机箱虽小但是很吵。后来主板挂了后换成离子平台,总算在性能,能耗,静音等方面都满意了。

电影播放不用说,有很多现成的解决方案可以用。但是到音乐播放,就关系到需不需要每次都开电视或者开远程桌面了。这两个都是很麻烦的,所以我选择的是不需要开电视或者远程桌面的musicpd 解决方案,只要按下遥控器的播放钮就能播放音乐。为了能随时听音乐,我选了有源音箱并且24×7开启。虽然牺牲了一些音质,可是也免去了维护一套功放的麻烦。

调频广播也是很有用的一个功能,如果有自己喜欢听的音乐台,就可以直接通过媒体中心收听,不需要再搞一台收音机了,音质也还说得过去。另外我也希望广播内容可以转化成局域网里的流媒体,方便在其它房间通过其它设备(如手机等)收听。

网络视频观看就更有用了。原本这个系统是没装浏览器的,后来家人说想看综艺节目,就装上浏览器可以随时看网络视频。没想到这个功能成为了热门功能。毕竟媒体中心只用来看电影有点浪费,常常看综艺或者电视剧后,使用率就相当高了。

日间整点半点三五座钟报时是属于比较怀旧的功能,小时候家里有台三五座钟,每过半个小时都会报一次时。装了媒体中心后就设定让它整点半点敲一下。有时白天在家枯坐的时候也有种时间流淌的感觉。当然这个功能夜间是自动关闭的,免得打搅美梦。

重要文件定时备份这个功能实在太重要了,我曾经一块硬盘做文件服务器裸奔了很长时间。后来又买了一块2T硬盘后,原本的1T就拿来备份系统分区和重要资料比如照片什么的。有几次操作系统升挂掉或者误删照片什么的,就是通过备份找回来的。

实现篇

确定好需要的功能后,接下来就是寻找适当的软件来完成这些功能,首先要决定的是用什么操作系统。

操作系统:Archlinux

选择操作系统有很多讲究。我选择Linux系统的原因最主要是它是免费的;其次Linux上面免费软件特别好找,不像Windows,得靠订阅各种博客,看各种论坛,日常积累各种信息才能了解主要软件的免费替代品;再其次Linux上大多数软件都是开源的,有时候某个功能实在没有也能把代码改改搞出来。

Linux的可配置性也相当高,当然我相信这方面Windows应该也不差。Windows的高手自然会选择Windows作为基础平台。

值得自夸一下的是,虽然换过一次硬件,甚至连硬盘都换过,但是我的操作系统整个四年没有重装过。Archlinux在升级方面表现极佳,只需要一个命令就能随时升级到最新版的内核和软件版本,使用最新的软件功能。四年始终使用最新的操作系统并且不用重装,这点Windows是很难做到的。这点对于一个高度定制的媒体中心来说是很重要的,谁愿意没事重新配置一大堆功能呢?

媒体中心软件:XBMC

媒体中心软件毫无疑问的选择了XBMC。流畅的菜单体验,强大的插件功能,开放的控制接口,多平台支持,加上针对Nvidia的图形加速支持,XBMC是媒体中心软件的首选之一。我原本用Freevo,试用了XBMC后立马就转换到XBMC上了。关于XBMC有多好就不多谈了,网上资源到处都有。需要提一下的是我把XBMC直接配置成桌面,所以系统启动后直接全屏进入XBMC,不使用任何窗口管理器。

文件共享:Samba

文件共享则使用了Linux的标配Samba。配置好后Windows机可以通过网络邻居直接看到文件服务器的目录。如果是windows机的话,直接分享目录即可。

下载机:MLDonkey和Transmission

下载方面我以前一直使用MLDonkey下载VeryCD上的文件。这个软件可以下载多种协议,支持后台执行,支持web管理,同时也方便通过脚本交互。我曾经写过个脚本订阅VeryCD上某些专题页面,一有新链接放出就立马自动下载。可惜后来VeryCD大多数资源就不再提供了,这个软件也就偶尔应急用了。

后来开始用BT,就选择了Transmission,这个软件同样支持后台执行,也支持文件管理。更加方便的是可以配置一个文件夹,种子丢进去就自动开始下载。我把这个文件夹共享出来,这样就方便在Windows下面下载种子了,只需要保存到这个共享的文件夹里就可以。

文件定时备份:rsync

关于文件备份不同人有不同的策略,有人用raid热备份,有人用定时备份。我选择定时备份到专用的备份盘中。

这样选择,主要原因是raid需要两块一模一样的硬盘。这样如果需要升级磁盘容量,就需要购入两块一样的硬盘,开销无形中增加了。

另一个原因是raid没有历史记录,如果误删文件或者文件系统是无法回滚回去的。定时备份在时间上的延后性却解决了这个问题。我把备份时间设定在凌晨四点,只要不是在这个时刻误删文件,只要及时发现,还是能救回来的。我有一次升级的时候不慎把系统分区升挂了,还有几次不小心删了照片,就是通过备份文件系统找回了文件。在这里给大家提个醒,NAS一定要每天备份,免得到时后悔。

下面是备份用的两个脚本,第一个脚本将系统分区每周打一次包存到数据分区中,可以保存最近四周的四个系统分区备份。第二个脚本每天一次将数据分区备份到备份盘中。将这两个命令加入到crontab就可以每天定时执行了。如果有多个备份盘,也可以考虑将数据分区双备份或者分别备份一天前和一周前的数据。

rsync的使用非常容易,支持增量备份,所以不需要担心每次备份都要花很久。

音乐播放:musicpd

XBMC自身也带音乐播放功能,但是我使用的是musicpd软件,这个软件的特点是全后台运行,通过客户端进行控制。所以可以不用开电视就能操作。我一般是把播放功能映射到遥控器的几个按键上,通过遥控器就能控制播放,所以是完全不需要图形界面的。如果真的需要图形界面,也可以在Windows上安装gmplayer远程操作,界面如下。手机客户端可以配置后通过web操作。

红外遥控:自己写驱动(或者直接使用系统设置)

现在linux对usb遥控器都有很好的支持,比如我用的这款支持mceusb IR标准的遥控器,插上就能认出来,并且可以直接控制XBMC。不过我刚开始搭系统的时候,linux对usb红外遥控器的支持并没有这么完美。所以我自己写了个用户态小驱动,读取usb状态并且完成相应动作,同时操作对象也不止XBMC一项,可以操作的对象有:

1. XBMC界面

2. 收音机开始/停止/换台

3. musicpd播放/停止/换专辑

4. 开/关电视机

代码太长,而且对系统环境的针对性太强不具有通用性,就不贴出来了。现在linux对红外支持已经好了很多,这些功能应该都能通过lirc配置出来。

关于红外遥控还有一个需要达到的功能,通过红外线发射器控制电视机开关或者切换信号源。如果你使用的是学习型的遥控器,那么这一步可以略去。但是我的遥控器不是学习型的,所以我自己买了红外线led,DIY了一个红外线发射器。

接在pcspeaker上也是忽发奇想,pc speaker就是PC机开机时会“滴”一下的那个小喇叭。这个喇叭接在主板上的pcspkr引脚上。在这个引脚上输出的是0~5伏的一个方波。方波的频率由寄存器控制,正好满足红外遥控38kHz的发射要求。同时对外围电路要求很低(一个电阻搞定),正好适合我这样电子线路不行的人。

程序如果有人有兴趣的话再贴出,同样需要针对家里的电视机型号进行修改。如果嫌麻烦还是学习型遥控比较方便。

调频广播(自己写程序)

调频广播我用的是市售的pcear usb调频收音机,就是在硬件篇中的那个usb棒。这是我用到现在以来最稳定的方案。在这以前也试过两种方案:

1. 通过调频收音机连接音频线输出至媒体中心,再由媒体中心播放。但这样就多一个设备多一个插座,换台也不方便。

2. 网络上有很多调频电台流媒体,但是受网络影响很大。因为不是正式的服务,所以有时候就突然没有了。

最终选择的方案直接接收电台信号,转换成数字声音流通过usb传入,这样信号比较稳定,数字信号处理起来也方便。

PCear在linux上是通过v4l2驱动。我在网上下了个fm广播程序,根据自己的需求改了下,可以完成播放和换台。收音机被驱动模拟成一块声卡,读取声卡的输入就可以得到广播内容。

读取到广播的声音流以后,还需要转化成网络媒体流,方便在局域网中点播。我使用的是icecast,下面这条命令就是通过arecord读取声音流,通过sox进行润色后,再传给icecast转化成网络流。

sox是一个声音流处理软件,我主要用来进行音量动态平衡。因为电台节目的音量会时大时小,通过音量动态平衡就能让音量始终保持在一个水平。如果家里收讯质量不好,也可以通过这个软件截去高频沙沙声,或者做噪声消除。

通过这样处理后,在家里的其它房间也能通过浏览器播放高音质调频流。我在卧室放了个小型流媒体播放器,这样临睡前起床时可以听一会广播。

网络视频观看(任何浏览器)

网络视频观看有两种方法,一是使用xbmc内置的插件。但是xbmc的网络视频插件并不太稳定,常常有某些热播剧集无法播放的情况,所以更多时候还是通过浏览器播放。

说到浏览器播放网络视频,这可能是离子平台的短板。现在大多数视频网站都是通过flash播放,可是flash在离子平台下就是慢慢慢。也许是Linux下flash对GPU加速支持不好的原因,CPU始终在200%以上。如果不介意看低清码流或者是幻灯片,浏览器播放还是不错的选择。否则也许插件播放更合适。这也是我打算升级硬件平台到NUC的原因。

日间整点半点三五座钟报时

这也算是媒体中心的趣味应用了。如果各位年龄足够大的话,小时家里总有一台钟每过段时间“当当当”的敲那么几下。现在的钟倒是完全寂静无声了。我曾经去店里面看过,复古式的落地钟怎么也要几千元才能扛回家。比较起来自己做一个整点报时也算是给家里增添了一些复古气氛。

你需要搞得就是自己中意的座钟声音档,再加上一些脚本编程就能搞定。这里需要考虑的是要根据系统音量来决定用什么音量播放。这样无论系统音量当时是大是小,座钟报时总是保持一个音量,不至于音量忽大忽小。

将来计划

将来计划是能升级到core i3级别的平台上,这样浏览器播放网络视频速度能得到保证。初步锁定NUC平台,无论从体积还是功耗上都比较合意。作为Linux系统,硬件的升级是比较容易的。不需要重装系统和配置。只需要拆下原来的硬盘插到新平台,再针对平台的差异配置下驱动就可以了。当然,事先做好备份很重要。

反思篇

最后说说我对软硬件DIY的一些反思。
以上这个平台是几年前搭的,受限于当时的限制,在一些地方使用了自己编写的程序。比如mceusb的红外遥控器在2005年时内核没有支持,所以就自己写了个用户态驱动,随后就一直沿用到现在了。红外线发射在软硬件上就更加独特了。

但是这些自己编程的部分也是后来投入维护精力最多的时候。因为希望能常常尝试一下最新软件(比如xbmc升级了),所以我的系统隔一阵子就会升级一下。有时候就会发觉升级以后程序就不好用了。有时候是系统接口发生了变化,这时候就得自己改下程序重新编译。这些工作都是很占用时间精力的,特别是有时本只是打算花十几分钟升级一下软件包,之后却发现因为需要维护自己写的程序,不得不熬夜到半夜。这些DIY的硬件也为未来升级平台造成障碍,比如新的主板都没有pcspkr接口了,那么通过pcspkr接口实现的红外发射怎么办?

我们在年纪尚轻的时候,往往有大把时间可以花在这些事情上。但是随着年龄的增长,许多时间由不得自己支配。所以DIY时要考虑到未来如果没很多时间维护的话怎么办。如果有天HTPC忽然挂了,你又有一个紧急的任务需要全身心投入怎么办?如果家人这时在追看某个剧集的话就只能干等着了。

我自诩配置一下系统应该不成问题,不过现在也尽量避免通过写程序或者定制硬件来满足自己的需求,尽量使用市售的标准化的软硬件解决方案。现有的写过程序的部件,也会逐渐通过空闲时间改成系统提供的方案。毕竟市售的方案都有一堆专门人员在那里维护可用性和互操作性,我自己却只是一个人,没法一直跟着维护自己写的程序。

我一直赞同通过DIY来满足自己对环境的需求,Geek们正是通过对环境的不断改造和完善把自己和常人区别开来。但是我也赞同如果有现成方案可以满足这些需求的话,应该使用这些现成的解决方案。DIY只是在现成的方案解决不了自身需求时所采取的替代办法。毕竟DIY是让自己生活变得更好的手段,这个手段是要耗费自己的时间的。自己的时间=生命。如果用钱能换生命的话,你愿意花多少?

珍惜生命,尽量远离DIY。

我只能说尽量了。

世界上理论性最强的炸弹

“邪恶的数学家‘QED’在2013年蜘蛛人抓住他之前启动了世界上理论性最强的炸弹:拥有可以炸掉一座小岛的当量;通过一个小型原子能反应堆供电,所以炸弹永不失效;炸弹安装着物理上无法破解的反拆除装置;炸弹连接着一台超级计算机,上面运行着一个程序寻找黎曼猜想的一个反例,如果反例找到,那么炸弹就会被引爆。”
“真有趣,可是黎曼猜想后来不是被那个谁证明了嘛?”
“要不怎么说是颗‘理论上可能会炸’的炸弹呢。证明发表以后QED成为全世界人民的笑柄,放置那颗炸弹的小岛也渐渐被人遗忘。可是后来某天那颗炸弹忽然爆炸了,你猜怎么着?”
“怎么说?”
“QED忘了做validation。”

打造客厅“角落”PC续

前次说到打造了一台可以放在客厅塞在角落的PC(链接),这次是后面的花絮。

上次装完机后使用一直挺正常,直到后来忍不住跑了次prime95,core温度彪到了95度。虽然知道现在的CPU瓷实,不怕这个温度,可是这个温度时的CPU风扇温度稍微有点响。在咨询了team里面的装机达人以后,决定还是上第三方散热器。因为希望有比较好的散热效果,所以选择了热管散热器。

期间也考虑过水冷,现在水冷的部件都是一体化设计,而且体积小不占地方。不过最便宜的水冷一套也要400元,我不玩超频还是省下银子买套大菠萝吧。

由于是紧凑型卧室机箱对风扇高度的要求不能超过120米,所以塔式散热器一律都不能选了,比较了半天选择了Coolmaster的下压式散热器V400,整体高度不高但是配120mm风扇,很合我的心意。

热管式风扇将热量通过热管从底座带到散热片上,再通过风扇将热量吹走。

安装散热器却是十分麻烦。这个散热器需要将整个主板从机箱中卸下然后安装。为了避免以后加内存时麻烦,安装时选择了不挡住内存条的方向。据说热管最好不要被风扇直接吹到(风扇装在机箱前部),不过为了安装方便上的考虑,还是这样安装了。12寸散热器果然十分威猛。

装进机箱后接好所有电线(又看了遍说明书),上电后开机,似乎转得挺顺畅的。重开prime95,半小时后hwinfo 测得85度,比原来低了10度。效果比较满意。

最后顺便把连接显示器的线也整理了一下,主要是将线全部从架子的背面走线,并用理线带扎好,同时用HDMI线替换了原来的DVI线和音频线,这样理了一下以后架子显得整洁多了。上一张前后对比图。

Ivy bridge 装机记录(客厅角落空间PC)

家里原来的PC已经有六年了,正好这次Ivy Bridge上市,就打算装一台新机器。之前也为家里还需不需要台式机纠结过,不过为了处理照片和玩游戏还是果断装了。这次的目标是装一台能放在客厅角落不占地方的PC,同时在性能和静音间取得平衡,主要用途是处理照片和玩山口山和D3。

为什么要把PC放在客厅呢?因为之前在书房打游戏时太太意见很大,所以把PC放在客厅多少也方便用PC时说话。但是怎样把PC放在客厅又不占地方就变成伤脑筋的问题,因为客厅比较小,加一张电脑桌,哪怕是再小的也不现实,只有从客厅现有的格局入手,将角落空间变成PC使用空间。不用时又能很方便的收起将空间挪出。

首先是电脑的配置:

CPU: Core i7 3770

主板: Intel DH77EB MATX

硬盘: Intel SSD 520 240G

显卡: 待定

内存: 芝奇 1600 8Gx2 (F3-12800CL10S-8GBXL)

机箱: 银欣 GD05 (SST-GD05-A)

OS: 微软 Windows 7 家高版 (Home Advanced)

电源: 振华 金山冰蝶 550W (SF-550P 14XE(GX))

显示器(已有): EW2420+艾格升显示器支架

这套配置基本上还是兼顾了性能和能耗以及静音的,在机箱和显示器的选择上也考虑到了对空间的要求。显卡和散热器暂时没配。一来是Kepler的中低端显卡还未上市,用CPU自带的HD4000显示核心也能撑一段时间;二来对Stock散热器的性能到底怎样也不清楚,打算等熟悉了系统的发热情况再做打算。

上配件图

Intel Core i7 3770

虽然不是最高端的家用版CPU(Sandybridge-E六核),但是从主板大小和散热综合考虑,这颗4核Ivybridge已经很不错了。和3770K相比主频低了100MHz,但是多了VT-d技术。虽然说VT-d技术对家庭用户来说没用,不过对工程师而言还是有折腾的价值的。当然比3770K价钱也便宜一些,对不超频的用户来说是很合适的。

顺便要批评一下DHL,周末不送货害我没法周末装机,送货也不及时


Intel DH77EB MATX

本来打算买mini-itx的主板装迷你机箱的,研究了半天后发现迷你机箱的散热普遍都很难弄,电源也很难选。所以索性选了m-atx板配小型卧式机箱,散热和电源相对都比较好搞。

Intel 520系列SSD 240G

240G空间一半给windows一半给linux。从散热和噪音的角度暂时就不装机械硬盘了。家里有NAS作大容量存储,所以平时不用的数据可以倒到NAS上存放。据说下半年SSD价格要跳水,如果感觉不够用那就等以后再买一块了。

GSkill 8Gx2 1600,京东易迅看了半天这是最便宜的,以前三星海盗船金士顿的普条都用过,貌似没遇到过不稳定的情况,既然不超频就买根便宜点的吧,话说现在内存条外观越来越威武了,不知质量有没有变好。

振华金牌电源550W,泡易迅的时候发现了电源还有白牌铜牌银牌金牌白金牌之分,金牌的能量转换效率在90%以上。这个台湾电源品牌在玩家中口碑十分不错,我也就进一个试试。

银欣GD05机箱,说到角落空间,我是希望将机箱摆放在客厅杂物架的最下面的一格,所以必须是卧式机箱,而且对进深有异乎寻常的需求(30厘米)。但是mini itx机箱的散热太差撑不了3770和独立显卡,所以选了这款m-atx机箱,进深只有325mm,虽然比理想情况还多出25mm,不过也凑合了。

Windows 7 家庭高级版。为了16G内存不得不买家高版,普通版只支持到8G。本来打算688买的,京东正好在做活动,499就买到了。这个就是微软极其不厚道的一点了,H77芯片组最高支持到32G内存,但是想用到就必须买专业版。一来是我的硬件我做主,买个软件为什么还要限制我能用什么硬件;二来和Linux比起来,我付较多的钱还用到了较少的功能,这点让人感到极不爽。考虑到将来可能会升级到32G内存,应该Linux会是主要的折腾(照片处理+开发)用平台了。Windows只会用来娱乐+网银。

下面这个是去年买的,明基EW2420加艾格升支架。当时为了能把台式机放在客厅里动了不少心思,起初考虑买张迷你电脑桌,后来发现还是用支架装在杂物架上省地方。支架的灵活性很高,坐在两边的沙发上都能用,也方便以各种姿势用电脑(包括躺着)。架子的最下层是原来的PC,稍微大了些。

显示器的选择也是考虑到会另配支架,所以选择了没有升降底座的显示器笨球EW2420(相当于没有为高级底座花钱),出于重量考虑选择了LED背光的显示器,重四公斤。这款显示器虽然样子并不出众,但确是真8-bit广视角面板,相比许多伪专业显示器用6-bit面板抖动到8-bit来说,要厚道许多。显示器自带一个usb HUB,加小喇叭一对,适合对空间狭小的应用。

需要说的是最然显示器重量只有4kg,可是加上支架以后由于力矩的关系所以对接触杂物架的扭力还是挺大的,所有的重量都在杂物架上巴掌大的一点,支架展开后力矩也十分大,所以这样用了几个月后搁板的塑料扣具可耻的断了,最后搞了块铁片替换,貌似变牢了一些。如果有人想仿效的话一定要考虑到支撑强度。

艾格升支架特写,厂家后来还专门电话回访,问有什么可以改进的地方,可以说服务态度不错。

 

配件全家福:

装机费老鼻子劲了,毕竟上次装机还是五年半之前,还是去电脑城请人装的。在反复翻看说明书加趟汗之后,总算将所有元件都装到位,加电启动后没有任何火花出现。

开始装系统,这活我熟。

安装完毕,机箱的进深短了许多,虽然还有十公分左右凸出在外面,不过和架子的环境比起来已经很和谐了。基本上贴着架子坐没有问题。声音方面,待机时尚可,不知拷机时如何,到时候注意观察了。

Ok,本次角落空间大作战到此结束,下次装机可能又是六年后了。byebye

软件DIY的悲喜经历

我是一个软件DIY爱好者。软件DIY,指的是自行编写软件完成供个人使用的功能。和普通DIY一样,DIY的软件是给自己使用的,所以无论是时间成本还是经济成本都不太重要,同时在功能上也是以够用就好为准。如果你平时喜欢写个把脚本来完成生活中的需要,那么你也算是一个软件DIYer。

一点背景介绍,软件DIY一般使用脚本语言例如python, php, awk作为开发工具。开发过程大可不必像在公司里写代码那么严肃,或坐或躺皆可,写代码时喝咖啡提神也可,适量饮酒也可,完全没有在项目组里写代码那些顾忌。一个编辑器写代码,一个浏览器看手册是常见的开发模式。常常前一分钟在手册里看见一个用法,下一分钟就写进代码里了,边学边写,写完就忘是常见现象。当然软件可读性可维护性在DIY里也是不需要太多考虑的,很多“只写代码”(write only code)都是在DIY项目中出现的。可以想像,软件DIY是一种很好的头脑放松活动,特别适合那些被需求分析,架构设计,代码重构,安全分析,最终期限压得喘不过气的软件工程师们。

当然,任何自由都是有代价的。和其它DIY项目相比,软件DIY有一个很不同的地方。其它DIY产品所存在的环境—-我们所身处的这个宇宙以及其中的物理规律,是几乎保持不变的。如果你DIY了一只怀表,你可以很放心的使用它几十年,中途所需要的只是定期上油和替换磨损部件,仅此而已。而软件所存在的环境—-操作系统,运行环境,系统库,软件依赖,底层硬件……等等,无时无刻不在发生变化。也许在某次升级系统后,你的某个软件就没法使用了。如果你使用的是某个商业软件或者维护良好的社区软件,那么很简单,升级到最新版就行了。可是你猜怎么着?没人维护你写的软件。所以你只能掏钱雇一个程序员来维护这个软件—-而且还是你自己写的!—-或者自己拿起键盘来重新维护它。这当然也不容易,可能最近你工作很忙又没空;也可能你最近不那么在状态;或者你转职后写不了程序了。这时你就会开始后悔为何当初不写注释了。

讲讲我经历的DIY软件的悲惨经历:

1. 花了一周时间写了红外线USB遥控器的用户级驱动,两年后系统升级时系统库接口变更,不得不在看电影前花两个小时按照新接口把程序重写了一遍。

2. 捣腾USB收音机,网上找到的程序都是v4l的—-我的系统是v4l2的,在看了两天v4l和v4l2接口区别后改写编译了程序,之后每次升级系统时都要神经质的检查下v4l2有没有升级。

3. 写了从verycd上自动查指定剧集更新并自动添加到emule下载的脚本,结果verycd洗手不干了,辛辛苦苦写好的脚本也就此废掉。

4. 为7寸安卓平板专门做了一个百度输入法皮肤,横屏输入时流畅无比。结果百度输入法升级后原本的皮肤不能用了!别人下载的皮肤都高高兴兴的升级了!没人帮我升级皮肤!现在安卓平板上输入就变成了个悲剧。只有等待下一个长假了。

5. 为XBMC写了插件,结果Python升级后不能用了,只好自己一行行改缩进。

当然,成功的经历也有:

1. 为《骑马与砍杀》开发汉化框架并做了第一版汉化。成功的找到了愿意维护框架和字体文件的爱好者。现在这个社区很好的运作着,还成为游戏在国内的销售代理,从此买来游戏就有汉化用了。

2. 在rawtherapee中做了一个auto distortion correction的插件,成功提交补丁,从此这个功能从bug到图标都有人帮忙维护。

3. 根据NAS自己改的一个卧室小音响兼闹钟兼收音机,用了五六年了,因为不升级系统,所以几乎不需要维护。

所以对于一个软件DIY爱好者来说,要想免除未来维护的烦恼,出路无非是三条:

1. 找到愿意维护的下家,将软件开源,这样自然会有人免费进行维护。

2. 将代码反馈回mainstream,成功提交补丁是针对开源软件DIY的唯一出路。否则就自己一版一版的改下去吧。

3. 永不升级系统,只要你能忍住不用系统其它cutting edge的功能,不升级系统也就降低了需要维护的概率。

软件DIY是一种不错的业余消遣,可是如果控制不好也容易变成时间上的无底洞,希望此文可以对各位有所借鉴,节省各位的时间。

闲话宽带上行

512Kbps的上行速率是一个什么样的概念呢?如果拍一张数码相片上载,平均8MB的照片上传到网络相册大约需要120秒,约等于两分钟。如果拍了相当于一个胶卷量(36张)的照片,全部上传到相册需要一个小时十二分钟。

如果用微单相机GF3拍摄一段3分钟的高清视频,文件大小大约为382兆。通过512Kbps的上行上传到视频分享网站需要1小时39分钟。

上行带宽和上传速度是两个不同的概念。上行带宽是通讯概念,以比特为单位;上传速度是文件传输单位,以字节为单位。512Kbps的上行速率等于64K字节每秒。最早出现的mp3播放器,容量只有64M,只能放十六首歌,它的容量是64K字节的一千倍。

如果需要进行高清视频聊天的话,为了达到良好的视频效果,大约需要4Mbps(h264编码),所需要的上行带宽是512Kbps的8倍。 也就是说,如果没有足够上行带宽的支持,现有的光纤宽带即使下行达到20Mbps,视频聊天的体验也达不到宽带的水准。http://blog.radvision.com/videooverenterprise/2008/06/24/high-definition-is-next-do-you-know-how-much-bandwidth-you-have/

光纤和ADSL的原理不同。ADSL是上下行不对称设计,8M的下行一般上行只有896Kbps. http://zh.wikipedia.org/wiki/ADSL 光纤到户(FTTH)则是对称设计,下行能达到多少,上行也能达到多少。http://en.wikipedia.org/wiki/Ftth 所谓下行”20Mbps,上行512Kbps”,只是利用了人们的思维惯性。

把下行速度称为宽带速度,应该是沿用了ADSL接入的旧例。但是这种说法是不准确的。把下行速度代表宽带速度,而故意不提上行速度,就好比一家相亲网站有一百万男性客户,一名女性客户,却宣称自己有一百万客户一样。

宽带上行速度的概念,被接入商有意无意的淡化了。但是对用户而言,如果想在视频照片分享,云存储,视频通话这些服务上获得良好体验,一个真正符合宽带标准(4M)的上行速度是必不可少的。

接入商是否不知道上行速率的重要性呢?不是的。对于同样收费的E9套餐。#中国电信# 给新客户的上行速率是1Mbps,而老客户的上行速率则只得512kbps。”上行速率”和”送手机”, “减免费率”一样,被用来作为发展新客户的筹码。

无论是20M下行1M上行,还是20M下行512Kbps上行,都是远远称不上“宽带”的。如果你的笔记本启动飞快,存个word文档却像龟爬一样,这种体验是远远称不上“快”的。FTTH的光纤“宽”带却正是如此。要说“假宽带”,上行带宽是其中最“假”的一部分。

如果你关心自己的上网体验,希望能用到上行带宽与下行带宽匹配的宽带网络,希望大家不要把精力纠结在下行带宽到底是标称值的80%还是90%上,请把#闲话宽带上行#系列科普小文章推荐给你的朋友们,谢谢!

想知道自己宽带的上行速度是多少?许多测速网站只测下行速度,不测上行速度。我一般使用http://speedtest.net来测试上行速度。

豪斯医生的除虫之道

豪斯医生的除虫之道
电视剧《豪斯医生》终于要告一段落了。从第一季一直看到第八季,这可能是我除了《成长的烦恼》以及《神探亨特》以外又一部看全了的美剧。(当然像《英雄》《终结者编年史》这样半途而废的不算)
豪斯医生对我的吸引力,是在于其推理的内核。剧中豪斯所破解的种种病因,对我来说可以说是半点不懂。解释病因时如果没有那些动画,翻成中文我也不懂他在说什么。而那些医学名词,除了记住几个LP, CPR, Steoroid, kee-mo之类的词供以后装逼时用以外,也没剩下什么。但是电视剧本身推理的脉络,还是很清晰的:病人得了怪病,医生提出种种假设并去现场一一求证。医生钻进各种死胡同,最后灵光乍现破解案件。由于我对医术不懂,所以不好妄言这是不是本格推理,不过如果是找日本编剧写剧本的话,豪斯高太郎恐怕要在恍然大悟后在聚光灯下转向观众说:病人得的是xx病无疑了,那么我是怎样知道病人得的是xx病呢?电视机前的观众朋友们,我们一会见~~
撇开此剧的本格内核不说,豪斯医生诊断病情的方法竟也暗合我等软件工程师炼化代码中性命交关之头等大事–debugging.
Debugging相信当过软件工程师的朋友们都不陌生,那真是程序员的噩梦。记得我刚学写程序的时候,第一个稍有规模的程序(走迷宫),写好后调了一个礼拜才调通。相信各位的办公室中也常常流传着“某某bug过了半年才调出来”这样的传说。debugging是项目计划中最容易忽略的一部分,也是最不好估计的一部分。有多少程序员为了程序中的一个错茶不思,饭不想。也有的朋友因为承受不了半年调不出一个bug的压力,放弃了程序员这份职业。
豪斯医生的诊断思想却可以给debugging一个方法上的指导。豪斯的differential diagnosis,是一种系统的诊断病人病情的方法。他的方法有以下几个特点:
1. 根据症状列出可能的病因,并一一排除之。
豪斯医生诊断的阵势一向是把症状一一列在白板上,然后由众小强逐一提出能解释这些症状的病因,然后再逐一排除不能完美解释症状的病因。如果遇到不能确定的情况,则由众小强去做各种测试来验证。所以第一次会议后众小强验血的验血,拍片子的拍片子—-我多么希望我debug的时候也能有这么大阵势啊。
debugging也是这样,程序员首先要尽可能的收集和程序有关的信息,比如断点状态,程序log,错误表现等等。根据收集到的结果来对错误的原因做出各种猜测。如果不能够确定的,则会对代码进行单步或者插入更多调试信息等方法来排除错误猜想。
注意这一步的关键是排除,而不是证明。我们做的各种试验,目的是为了能够排除我们的某个猜想。关于一个错可以有各种猜测,但是只有一个是正确的(也可能一个都没有),这个阶段我们不是要选定一个方向深研进去,而是设计一个试验能够验证这些方法是否正确。所以要首先动手去排除那些容易排除的原因。我常常看到一些程序员盯着某个最可能的原因研究了很久,其实在第一阶段排除干扰,确定不是各种简单错误才是重要的。
2. 调查病人的居住环境
这也是豪斯医生的老套路了,每集都会派两个小强到病人的住所去收集各种病人用过的东西来确定病人有没有可能接触了某些有害物质。程序员在debug之前也应该确定一下程序的执行环境有没有奇怪之处。很多时候程序的错误是因为没有考虑到某种特殊的外部条件,如果程序员可以在不同环境下跑一跑程序,也许很快就能发现错误的根源。
3. 发现病因,再治疗症状
记得豪斯医生中有一段戏,13怀疑病人得的是A或B病,这两种病都能用某药治疗,于是建议用该药。但是豪斯不同意,因为这样虽然治好了病人,但是“我们还是不知道她得了什么病”。
好吧,作为一个医生这样想真的很变态,但这是一个很好的debugging思想。debug的时候要找到的是 root cause,而不是仅仅把出错的症状绕过就了事了。一个程序员应该像推理小说中的名侦探一样,犯人,手法,证据,一样都不能少,否则是不能把众人召集起来做出破案宣言的。
4. 争分夺秒
豪斯面对的是一个随时都会咽气的病人,程序员面对的是一个随时可能推迟发布的产品。从这点来讲,程序员的压力并不比医生小。每个花了半年才调出的错误可能都伴随着一颗已经逐渐变得冰凉的客户的心。一个优秀的除错大师,不仅仅在于能调出多古怪刁钻的bug,也在于能多快的调出一个bug。对于小bug要秒杀,对于困难的bug则要有系统性的方法来应付。
5. 寻求灵感
Debug这件事,程序员的阅历越丰富,越容易想到错误的原因。平时应该多参加各种闲聊,也许某人对中东局势无意中的一句评论就能瞬间点醒梦中人。豪斯医生虽然有前面这些强大的工具,可是真正解谜那一瞬间都是在干别的事中得到的。所以平时多积攒些人品,关键时刻才有可能瞬间爆发。