愉悦与平和,久违了

其实本来我今晚(应该说是昨晚)的任务是为了一场小讲课,要搜寻一些好的文献,以及去回顾一下近期的病例。然而自己拖拉的老毛病再次发作,不自觉地溜到了油管,无意间看到了《圆桌派》第二季中对尹烨(华大集团CEO,华大基因副董事长)的访谈。嘉宾和几位主持的发挥都非常好,从病毒、基因开始,聊到生命,继而聊到物理、人性、教育,甚至宇宙、宗教和哲学。其中提到了许多我所了解的、不了解的科学家和思想家,讨论了许多见解和观点。最后落脚于自由,落脚于多样性的可贵。虽然个中确有一些错误,但整体瑕不掩瑜。看罢心情既激动,又似乎有一种坦然的平静,这样的感觉我似乎曾经拥有,但已经睽违太久,今日终于再次寻得。

自离开大学、来到医院之后,年纪渐长,而所关注的内容却趋于单一,兴趣逐渐消退,只在病房、门诊、手术、考试之类的任务中疲于奔命,在上级、同僚的训诫和品评中丧失自我,逐渐沦为一个失去灵魂、俗不可耐之人。今日看到这些访谈,仿佛自己暂时摆脱了种种世俗困扰,回到了仰望星空的中学时代。或许自己的科研烂到一塌糊涂,那又如何呢?那些坐拥多少文章、专利,掌握多少课题,获得多少荣誉的“大牛”们,和这些真正的思想者相比,又算得了什么?人与人的智识、成就、名望固然有高低之别,但天地之间,本无上下。众生平等,死亡是最公平的程序。至于我自己,或许永远无法取得什么世俗上的成就,但能和这些伟大的思想者神交,聆听他们的见解,这样似乎也就足够了。想到这里,再面对平日他人对自己的评价、要求,以及繁冗的日常工作,似乎真的变得坦然了不少。

写到这里,我突然明白了白居易写“如听仙乐耳暂明”时的感受。日常生活的痛苦之源实在太多,无尽的工作,上级的责难,还有政治环境的压迫,无一不在打击、扰乱自己的心神。沉溺于社交网站可以获得暂时的逃避,却难以得到长久的平和。恐怕总是需要找些东西,这样将自己的思维解脱出来,仰观宇宙,才能真正得到一些释放。是时候抽些时间,拿起放置已久“闲书”,找回曾经的自己了。

又及:尹烨是一个饱受争议的人,遭到饶毅“炮轰”我也有所了解。我觉得相比之下,饶毅是个更纯粹的科学家,或者说科研工作者,对商业运作,以及科普一类“动嘴皮子赚吆喝”的行为嗤之以鼻,也是可以理解。但从《圆桌派》这两期所聊到的内容看,尹烨绝不只是个哗众取宠的商人,他涉猎广泛,对很多问题有自己的简介,对社会、生命和自然有着自己的情怀,从这些方面来看,他是很值得敬佩的。

“智商不够为何还要学数学”

今天看到网友Enigma Huang网志中的《智商不够为何还要学数学》这篇文章,原文如下:

晚上看到华工基友的消息,他的两门数学课都拿了满绩(95及以上)。虽然我这个学期的专业课成绩还没出来,但是知道大抵也就是7字头的了,不可能再高。感觉自己这个学期在数学上似乎并没有给足够的重视,只有在期末考试前一个月才开始努力,但是最后还是考得一塌糊涂。这让我不得不怀疑自己是否适合学数学。但是自己又不想转专业,还是希望能读下去,起码老老实实熬过大二,大三分专业应该好些了吧。

想起一段在《罗马人的故事》中看到的话,摘抄下来权作自勉:

我不会说,这是由于我们的天分,因为这样说显得过于傲慢。我只想说,这是源于我们的勤勉,源于我们的热忱,源于我们对名誉的尊重。

人生就是怀着这样的理想不断努力。但是,只有少数人可以得到显赫的声誉。除此之外的绝大多数人,我想至少还值得从默默无闻和被忘却中得到拯救。

——小普林尼写给塔西佗的信

我想Enigma兄的智商还是在多数人之上的。只是在数学面前,大概没有什么人觉得自己的智商——或者更准确的说,智慧——是真正够用的。这种有心无力之感,想必善思之人都能够体会。

那么,对于智商更加不够的我而言,这个问题的答案是什么呢?

我的回答是:

这是源于我们的热忱,源于我们对数学、对自然哲学、乃至对宇宙本身的敬畏,源于我们对耀眼的智慧之光的崇敬与欣赏,源于我们对突破思维疆界、发现新天地的渴望。

即使只是苇草,亦欲判天地之美,析万物之理。

——这样的回答,够中二嘛?

Qt编程新手躬行经验记(持续更新?)

Qt是我唯一使用过/使用的编写图形程序的库。虽然我编写的图形程序很少且都很简单,不过由于实在没什么经验,一来二去也碰壁数次。在这里将自己吃过的亏总结一下,既供备忘,又可为后来者提供一些经验。

元件的尺寸与布局管理

布局管理是个好东西,不过有些问题要注意。首先,如果没有人为干预的话,布局管理是在这个窗口真正显示出来的时候才生效的,也就是说如果是用自定义类来继承QWidget/QMainWindow的方法做窗口,在类的初始化阶段它还没有生效,此时取到的元件长宽等属性和窗口真正显示的时候是不一样的。必要时考虑使用QLayout::update()和QLayout::activate()来强制更新布局。

QString与编码

编码是个讨厌的问题……然而作为中国人,在UTF统一世界之前是没有可能回避得过去的。

QString内部采用UTF-8编码,那么源码一律使用UTF-8就没问题了吧?很遗憾,如果在源代码用C风格字符串来初始化的话,不论源码本身的编码是什么,Qt默认都会调用QString::fromAscii(),把字符串当成ASCII来处理。所以无论使用GBK、BIG5还是UTF-8,最后中文存进去全都是错的。正确的办法是手动调用fromUtf8()、fromLocal8Bit()等等,在建立之初就转换好。也可以在全局使用
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(“GB2312”));
或者
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(“UTF-8”));

来为整个程序一劳永逸地设计编码。

拿什么显示图片?

如果我有一张图片需要显示在窗口中,应该拿什么元件来装?直观地想应该是QWidget,然而实际使用的时候却发现QWidget居然没有setPixmap(),虽说用setPalette或者setStyleSheet之类的方法也能实现,不过太不优雅。其实正确的做法是使用QLabel。QLabel的方法是明确写在文档里的,不过为啥会是用QLabel我一直搞不太懂……而且,似乎同一个QLabel不能同时既显示图片又显示字。

QPixmap的使用

首先,QPixmap必须在QApplication的实例创建之后才能使用。这个问题会有明确的错误提示,不过最好还是早发现造解决,不要到后来数据结构都设计好了最后还要重构……

还有一个问题需要注意……QPixmap在主线程以外使用是不安全的。这一点我一直没想明白,不过既然Qt这么说了,若非不得已,就这么用吧……

用vga_switcheroo在Linux下(开启KMS)彻底关闭某一可切换显卡的简单教程

我在早先时记载过自己一直为一个问题所扰,就是我配备双显卡的Ideapad Y460在BIOS中仅支持“可切换”(switchable)和“独立”(原文为discrete graphic)两种模式。而当使用可切换模式进入Linux后,虽然只有集成显卡在使用,但两个显卡都会同时耗电,导致温度很高。虽然用独立显卡+催化剂(Ati的商业驱动)可以获得不错的效果,但会有诸多麻烦事情,更何况这样一来集显的节能优势就消失了。

我曾在谷歌上粗略查找过很多彻底关闭独立显卡的方案,然而就目前我看到的中文解答来说,基本都是不靠谱的答案。直到我最近从Arch的Wiki辗转到了ubuntu documentation才找到一个使用内核自带的vga_switcheroo关闭显卡的方案。在此记述一下。
声明:本文只是记述了最主要的内容,详细内容可以从这个页面中找到。

//

下面进入正题:

首先,vga_switcheroo是内核提供的组件,但有这一组件(或者说有下文提到的文件)并不代表其在您的机器上能够正常使用。此外根据某些用户提供的信息,vga_switcheroo仅当KMS开启状态下才可用,所以请首先装好显卡的开源驱动并保持KMS开启。

一、查看当前双显卡使用状态:

终端中输入:

cat /sys/kernel/debug/vgaswitcheroo/switch

这步是要读出/sys/kernel/debug/vgaswitcheroo/switch这一文件的信息。不出意外您可能会看到类似下面(但不完全相同)的内容:

0:IGD:+:Pwr:0000:00:02.0
1:DIS: :Off:0000:01:00.0

其中“IGD”表示集成显卡,“DIS”表示独立显卡;加号(“+”)表示当前用作输出(或称“连接上”(connected))的显卡;“Pwr”代表正在供电,“Off”代表已关闭。如果看到两个显卡都显示“Pwr”,则说明都在消耗着电能。

二、暂时性的关闭某一显卡

注意:下面和内核的交互操作是通过操作/sys/kernel/debug/vgaswitcheroo/switch这个“虚拟文件”实现的,而这一文件每次开机会重新创建,所以您对其所做的修改都是暂时的,重启后会失效。

首先切换到root用户:

su

这步通常是必要的,不可用sudo取代(似乎是因为sudo如果不经设置,是没有“>”操作符权限的)。

打开所有的显卡:

echo ON > /sys/kernel/debug/vgaswitcheroo/switch

这步是给所有显卡加电,使其运行,但不改变当前输出的状态。

切换到集成显卡:

echo IGD > /sys/kernel/debug/vgaswitcheroo/switch

这步表示使用集成显卡作为输出(即“连接上”集成显卡)。同理,将其中的“IGD”换成“DIS”可使用独立显卡。

关闭未使用的显卡:

echo OFF > /sys/kernel/debug/vgaswitcheroo/switch

最后可以再运行一下cat /sys/kernel/debug/vgaswitcheroo/switch,看一看自己的显卡状态。

三、永久性的关闭某一显卡

解决重启后失效的办法就是每次开机时都执行一遍需要的命令,而且越早执行越好。对于这个问题,不同的发行版有不同的解决方案。例如在我所用的Arch Linux中有一个/etc/rc.local文件,把需要开机执行的命令写进去即可。对于ubuntu,可以参考ubuntu documentation上的一个启动脚本。我没有尝试过加环境变量是否有用,但似乎也应该是可以的。

//

后记:3月14日帝都(室温约20度),开启acpi节能的情况下,我的Ideapad Y460使用集显,打字、浏览网页等操作,CPU温度不到37度,电池续航4小时以上,真是太舒爽了……

回味FAD 2011

题目中的这个FAD不是黄素腺嘌呤二核苷酸,而是Fedora Activaty Day。LinuxToy上呼吁参与者稍微写一些感想,我也觉得确有写一些东西的必要了,于是就把这篇短文写了出来。

老实说,作为一个学医的,平时就不算太闲,最近更是相当繁忙的一段时期,本不应该抽空去FAD这样的“没用”的东西。然而我实在是很想找一段小小的空闲,暂时忘却一下现实的重压,寻找一点或许是虚假的、稍纵即逝的快慰。因而虽然里面的多数东西我都听得半懂不懂,却仍旧挺高兴,挺感动。见到了 @CSSlayer 仁兄以及在各种虚拟空间神交已久的诸君,觉得难得有一天如此开心。

 

可惜的是我的抒情功底实在太差,所以无论我如何安排,下面的记叙总还是免不了流水帐:

上午的内容我不想再赘述了,就在我写这篇网志的时候,我看到CSSlayer仁兄的FAD回忆网志写好了,可以点击这里去参考他的。对我等来说,下午的内容才是重点,也是真正的FAD内容。

本次FAD 11是和开源软件周合办的,所以下午的小会同时有多个内容并行。按照CSSlayer仁兄的说法,我所在的那个屋子是个Geek聚集地。是不是Geek我不清楚,不过大家基本上都是开源软件的爱好者。虽然专攻不同的领域,但也算是志同道合,相当愉快。不过就内容而言我只记了个大概,具体内容则是忘得差不多了。 @Tiansworld 和 @黑日白月 (Tommy He)兄讲翻译的时候提到了Qt Linguist,是我刚好想学一学的;CSSlayer仁兄讲的是plasmoid开发,这东西讲不了啥实质性内容,只是介绍了一些概况和参考,不过让我印象深刻的是貌似每次不论讲了啥,都能吸引点人去玩玩KDE,看来广告/代言真的是很重要的; @jcome 仁兄讲的是一个2D动画制作软件,大概是想找Flash替代品的人的福音,但说实在我已经多年不玩动画制作了;最后 @alick 仁兄关于TeX Live的演讲我也听了一些,因为我一直想研究下TeX但一直没有时间。另外还见到了Calligra的开发者之一—— @yue ,他居然平时用Qt Creator(据本人说是因为KDevelop打开大工程太慢,跑不动),虽然没聊几句话,但都很愉快。

结束的时候发纪念品。对于纪念品这东西,其实我还是蛮在意的,倒不是贪那点小便宜,只是为留个念想。最后拿到了一张fedora15 64bit的光盘,心想以后大概还能恢复系统用。

也许是因为来得相对早,我很幸运地拿到了中午的饭票,吃了顿比格批萨。虽然没有像有一次同校聚会那样暴饮暴食,不过也算是吃得相当满意了。晚上去了个小地方,虽然作为一个学医的,我对那些触目惊心的卫生细节表示有些难以接受,然而最后还是吃了不少东西。另外晚上去吃饭的时候跟若干同道边走边聊,了解到大家都有尝试各发行版的辛酸史。吃饭的时候也跟他们聊了聊闲话,还是蛮轻松的。

另外还有个小插曲,CSSlayer仁兄把耳机落在了会场,结果他手机恰好没电,于是乎他本来都回到学校了,又折返回来拿了耳机,后来我跟他一起离开了吃饭的地点。

 

基本就是这样了吧……引用某人的一句话:“如果我有什么忘了说的,就当我没说好了。”……

这个假期

假期将尽,接下来是繁忙的基础课年,之后又有更多的实验、实习,恐怕连假期都很难过上,因而这个假期大概是私最自在的一个。然而回顾这个假期,很多既定的目标终究没有实现,不能不说还是有所遗憾。

这个假期究竟做了什么有意义的事呢?继续学习了C语言,也学了点C++的基础思想,这是不假。然而生产力显然还没有真正构成。一门语言也不是用假期里的一点点空闲时间就能熟练掌握的,更莫提数据结构与算法了。本想在学过C++基本思想后再学一些Qt,然后给fcitx写个皮肤浏览器,算是为开源界做些贡献,然而最终却连fcitx读取皮肤配置文件的API都没有搞懂,到现在整个程序仍旧基本是与csslayer大神会面时由他所写的半成品。大概唯一能用的成果就是用C重写的会员卡管理程序,当然黑乎乎的文本界面加麻烦的操作方式,大概也没多少人愿意用。

根据某资料,我等来年需要学习的必修课程有:解剖、组胚、人体生理、生化、免疫、细胞生物、医学遗传、微生物、寄生虫、预防医学、神经生物、病理、药理。在这种状况下似乎也很难再继续研究编程了。然而csslayer大神也提到过,人的精力是有限的,很多时候能做成一两件想做的事就很幸福了。那么私根据自己的愿望选择了学医,大概也会是幸福的吧……

其实私本来还想多写些东西,然而有时又觉得这种想法实在是种完美主义,更何况长篇大论没有人愿意看,那么就这样结束吧……

用C语言重写的会员卡管理程序,欢迎Linux众测试

终于重写完毕了,不过Bug肯定很多,欢迎诸君测试。由于未在Windows下调试,且有磁盘读写的相关代码,若有热心的Windows用户想通过源代码编译还请自行删除可能产生的垃圾文件。

Linux用户可用的二进制程序:

https://skydrive.live.com/?cid=D40A6A1CE1A272AC&id=D40A6A1CE1A272AC%21507&sc=documents

源代码在此,欢迎给出指导:

http://github.com/ukyoi/cardmanage

我不太会用github,所以有些混乱,还请原谅。

最近的动作

好久没码字了。主要原因仍旧是太懒,觉得码字太耽误时间,但其实在互联网上闲逛也很耗时间,每天似乎没做什么事就流逝掉了。

当然,也不是什么事都没做。最近在把私曾经那个用Python写的代码再用C重写一遍……私承认这个想法有点蛋疼,但是这么做还是有一定原因的。首要原因是私的目标是未来使用Qt图形库,写这个文本的会员卡程序只是练练手。PyQt虽然有文档,但私找到的教程都不是很系统也不很容易理解。原生Qt是使用C++的,有详细的官方文档,所以私打算先涉及C/C++,然后把原生Qt学会,再学PyQt这样的语言绑定。所以私并非放弃Python,而是暂时先搁置一下而已。

然而直到开始写,才直到用C写程序是有多么困难。私会员卡管理程序的第一版只有180行python代码。而现在写了200+行C代码,只实现了不到一半的功能。当然也有其他的原因,第一版的程序流程控制有很大问题,误操作之后要从主菜单重新选过,非常麻烦,而现在私在写的时候会尽量考虑到误操作之后怎么处理的问题。然而总体来说,C语言的头文件、声明以及表示代码段的括号等等都是很占地方的。

而且……啃C语言的教材也是相当困难的事情……大概我在这方面没什么天赋吧……

Ubuntu 11.04 Release Party

由于谷歌地图给的车站位置不是很准,所以迟到了若干分钟。具体的困难就不说了……

算了还是说一说吧……首先我参考了两条路线,但是谷歌地图给的位置不准,于是乎只找到了一条线的站牌。由于和同学一道吃饭,吃完饭就点晚了,本来就很着急,结果等车时我眼睁睁地看着三辆我没找到站牌的那路车先后驶过,自己要等的不见一辆。我寻思这样不行,得找到那一路公交车的站牌。就在我走了一站地之后,我刚才一直在等的车出现了……

不过到得还不算太晚,看到了计算机科学屠戮者大神。让人觉得幸运又诡异的是第一排居然还有座,于是我当仁不让……

下面开始记录内容:

第一位基本没听到,听到的主要是他没少黑Unity——其实不算黑,因为本来Unity问题就很多——此外貌似他也不咋喜欢Gnome3,至少不喜欢现在的Gnome3。并且一定不认为“用户的言论毫不足虑”。大概是因为讲得不是很有趣,底下非常非常乱……但其实我觉得内容倒还有点意思。

第二位是苏大神的“一个菜鸟的爬行轨迹”,从他的演讲内容来看显然不是个菜鸟,因为他居然曾经直接把OpenFetion的代码翻出来然后“翻译”了。讲的内容主要是跟他相关的翻译问题。吐槽点甚多,而且居然好多我都知道……另外貌似这是“山东口音”?

第三位……嗯……首先更正一下上文的一处。事实是除了苏神那个充满山东腔的演讲不是很混乱以外,后面的演讲都很混乱,甚至包括人都走了一大半的下半场报告。第三位是叫做Levin的研究生(大神?),OpenFetion的发起人,很让人无语的是演示居然是全英文的(当然是用汉语讲的),而更让人无语的是苏神吐槽的时候就提到OpenFetion把汉字直接写进代码以至于给本地化带来了大量问题……
主要讲了他自己开发OpenFetion的过程,以及OpenFetion的一些技术细节。OpenFetion居然是用反编译得到的飞信协议的代码,不知道中国移动会不会告他……

第四位……计算机科学屠戮者大神……KDE4.6终于上场了……一开始居然让我们看到了启动列表……乃居然没在本地装kubuntu……
演示居然也用的英文(难道这是当今的趋势?)……不过显然要好看得多,因为图多,当然更重要因为KDE4漂亮……也许更重要的是有魔法少女小圆的壁纸?让我很搞不懂的是大家为啥对ACG如此敏感……当然也有人对屏幕右下角的照片很敏感。
首先浏览了KDE的历史……我是从4.2开始用的,看着很有一种熟悉的感觉啊……从休息时候的聊天来说貌似还算卖成功了。不过我个人认为从讲解的过程来说基本还是幻灯较多,实际演示较少……并且最后把KDE弄成类Unity界面的时候因为屏幕显示的原因,左面一列没有显示出来。其实KDE的效果应该用更多动态的效果来展示……当然还有krunner这样低调绽放(quietly brilliant)的组件……
当然我个人觉得最后这演讲是整个release party里面最好玩的。和第一个讲Unity的对比来看算是丰富得多了。因为Unity本身也没什么可讲的。而KDE众多的功能、软件绝对不是一时半刻能说完的。

课间休息……

下半场……貌似主题是Bug回报。一个是讲了一些中文ubuntu的问题,一个是怂恿人们积极、高水平地回报Bug,甚至还给我们演示了一下如何用调试代码来查kernel的Bug,不过我怀疑此人逻辑有点问题,前面说报Bug态度不能太差,后面又说在邮件列表舌战很有趣……

//

最后……其实我的化学书还没啃完,英语网测还有好多没做,英语单词还没背。不过有这样一个参加的机会实在是很难得啊,于是乎还是来了。怎么说呢……算是不虚此行吧,至少还索取了个10.04(居然不是11.04)的光盘呢……

Arch恢复

首先感谢计算机科学屠戮者大神,在私的PC上大大地展现了一番bash功力。当然他自己未必觉得如此,但私看得却是眼花缭乱得很……

其实不能挂载的症结就是私grub配置不知怎地(反正绝不是私搞的),挂载root分区那行里的“ro”莫名其妙地变成了“rw”,以至于root被挂载为读写模式,而Arch自检的时候要求挂载为只读模式,于是就出现问题了。

而这个问题说到根上,都是源于私换驱动的时候用了“pacman -Rns catalyst”的命令,以至于pacman把其依赖——xserver卸掉了,于是乎装了啥驱动也不管用了。

另外其实原先私fstab还有个问题,就是swap挂载写了两遍,所以每次启动会提示swap挂载有误,这次也一并解决了。另外还对系统进行不少小调整,在此不一一赘述。

总之很感谢计算机科学屠戮者大神,不过私想到以后如果再有这样的问题,凭自己这样的能力,大概是解决不了的吧。还是得再研究再学习啊。