俺们原来都是当贵族培养的

俺们原来都是当贵族培养的吃着火锅,听着歌,有了以下对话。李记者:你们当年学过三防么?我:当然。核化生。核武器爆炸的时候要躲到矮墙下。李:要一直跑到有蝴蝶什么有昆虫活动的地方。我:才说明脱离了辐射区。李:你们学过种菜么?我:没有。我们当初都是当贵族培养的,根本不学那个。李:那你们学什么?我:多了。我说:为了以后能像第谷 (著名的贵族,自己个儿有个岛,鼻子决斗的时候没
了,安了个黄金的),学天文啊,用天文望远镜;为了像贝多芬,学音乐,打大
鼓;为了以后给企业提字,我们学习书法;朗诵啊,什么的,为了以后在议会演
讲。李:我们也朗诵,为了以后在敌后宣传。你们学足球篮球什么的不?杨:不的,我们根本不学那个。李:那你们学什么?杨:垒球。很多年以后我才知道,那玩意跟棒球似乎是一回事。有什么甲子园中华职棒温宝
宝之类的,都用这个来证明自己牛得很。垒球有贵族血统,似乎是高尔夫的弟弟。
其实我没学过足球或篮球的真正原因,是因为那东西挺贵的。我记得,足球四五
十块一个,篮球更贵,所以记得更清楚,70块一个。太贵了,班里买了以后,我
都舍不得用。不消说,球鞋得自己买。我长期一个季节只有一双鞋,你很难想像它能走路还能
弹跳还能奔跑。更小的时候,我特别沉迷于美术。学校组织画展 (不是画家的那种,是哄小学生
玩的),我画了好几幅,颠颠地跑去给美术老师看。老师送我去少年之家学了一个
假期。后来我在少年之家近距离看到了画夹子,外面包着绿色帆布,画东西的时
候有种特别的纹理。少年的虚荣和占有好东西的渴望真是难以抑制。后来听说素
描是要用面包作橡皮擦的,我对画夹子的奢望就破灭了。此前,我的人生理想是
做个画家,知道面包是基本要求以后,我的理想就变成以后当作家了。当作家得
学文,而我学了理……人生际遇诚不可预期,当然,这是后话了。又,从小是按贵族培养的我,以上当然没有对李记者讲。于是李说:哇,垒球,我信了,你们真是当贵族养的。我们扔的是手榴弹,扔完
还要卧倒。家长们希望自己的孩子锻炼身体,所以学习乒乓球游泳跆拳道篮球。我问过,为
什么不练长跑?家长们希望自己的孩子学习钢琴吹拉弹唱主持人。我私下里问
过,孩子们长大真的能用上这些?其实,我的问题多么不合时宜。家长们当然希望自己的孩子以后"能够"用上这些。
那就意味着,这些孩子长大以后,成为了他们希望成为的那种人--高雅的运动及
运动中的社交 ,各种交际所需要的技能 (是的,技能,不是别的),他们的孩子
将成为贵族。就是我小的时候,学校希望我们将来成为的那种人。既不会种菜,
也不会嫁接,当然也不会糊纸盒。非洲有一个部落,劳动人民携带东西的时候用头顶着。家长们在孩子很小的时候
用木板从两边夹孩子的头,让头顶变尖。他们希望表达这样的愿望:我的孩子长
大了才不会成为需要用脑袋顶东西的人呢。初中,以贵族为目标的培养结束了。我们的劳动技术课开始学习酿葡萄酒,如果
说这还有点小资格调的话,后来,我们学习种草莓,为校办工厂刷洗人参。并非
认为这些劳动是低贱的,我只是特别希望知道根据什么在那个时候能够确定--跟
我们同龄的另一些人,他们不必学习这些,或者,根据什么判定他们成年以后没
有可能从事这些工作。其实小学的时候,除了天文、航模、乐队、书法,我们还有别的兴趣小组。有一
次天文班满了的时候,大队辅导员老师问过我"理发班还有名额,你去不去,也挺
有意思的。"我没去,当时怎么想的忘了。似乎剩下名额的只有参加智力竞赛和小
发明小制作了。所以,后来我成为了工程师,而不是贵族,用带模具的电动推子给自己理发。天文小组没名额的时候,我失望得快哭了。当时特别想问老师一句话,"如果你
面前的是你的子女,你也会对他说理发小组挺有意思么。"很多年以后,当我面对学生下属以及合作者的时候,我经常先问自己这一句,然
后再说话。就这样,很多年过去了。我写下以上的日志,希望剩下的很多年,也
能时时以此提醒,不要忘记自己。

PPR热熔接水龙头,与程序员的未来

PPR热熔接水龙头,与程序员的未来
1.前传
如果你家的自来水或者热水器的管子或管件需要维修,这贴子对你可能会有所帮助。灰白色的自来水管热水管,就是PPR材料,一种聚丙烯,可以用加热的方法粘接。
半年多以前,找了位老大爷级别的水暖师傅帮我修理水龙头。忘了具体什么原因要修,似乎是自来水管道改造的时候,两位大哥级别的水暖师傅把哪个地方整得有点漏水了。拖了一段时间,虽然漏水的时候水表不走,但是从小受到的不许浪费教育还是促使我决定还是堵上。
附近有一个卖装修材料的小商店,出售包括板材、水暖配件、电线、工具等一应俱全的东西,以山寨的山寨货居多,但是可用。老大爷师傅和很多别的师傅就在店里趴活。冬天在屋里,夏天在室外,我不记得他们是不是一边趴活一边打扑克了。
我去的时候天有点晚了,只有店老板在,百无聊赖的样子,说师傅们都下班回家了。鉴于我如此诚心,老板替我打了电话联系到刚刚提到的老大爷师傅。
老大爷师傅帮我选了配件,"就用这些,要这个这个还有这个,再帮我拿点生料带。管子……你是哪幢的……他们那幢是4分管,来一段。"
我问:"不用那个啥件么,我打算……"答:"啊呀,不用啊。几点几点,我去给你整上。"
几点几点,老大爷师傅就来了。还没从爬楼梯的喘息里缓过来,他手法娴熟迅速管子锯断了,然后发现少买一个配件,而此时店老板早回家了。"那你看这样行不行,"老大爷师傅比划一下,"把龙头放在这个位置。"
"行吧。"龙头比的位置是水池的角落而不是正中,但是我也只好同意,要不然就得明天修,而且,这位老大爷师傅喘得厉害,我听着心里直难受。是小孩拉风匣那种喘法,不只呼吸的时候,说话的时候每一个字显示出透不出来的艰难,我觉得自己胸腔似乎也气闷得很。
然后就那么粘上了。所谓一失足酿成千古恨,大半年来,由于水龙头非常靠边,所以无论接水还是洗东西,都经常喷溅出来。买来工具也两三个月了,终于遇到一个周末,决定自己动手,在中间位置再粘一个龙头。
2.DIY
自己动手有两个好处。一,可以完全按自己想要的方式来施工,如果错了,就重整,再重整,再重整,直到彻底满意或者彻底绝望;二,即使整坏了,也没有人可以抱怨。
我从老外那学来了周末工程这个词。周末工程,指的是利用周末这么一两天的时间,干点有意思的小话,兼陶冶情操。一般的,他们的周末工程跟我这个有点差异。比如,有位兄弟因为圣诞节无聊,做了个编程语言玩,后来起名叫做python;有个大叔因为教操作系统课的时候,觉得学生学起来啥地方有点费劲,决定用业余时间做个例子演示一下,最后的结果就是minix,著名的Linux操作系统的前身。有个家因为水龙头位置不太对,用半个多下午的时间改造一下管道,大家看出来差距了吧。
我这种级别的DIY最大的好处是:有成就感。因为相对来说,管道改造还是容易一些,挫折感少多了。广大loser如果想找成就感,这是个非常好的路子。你可以买个电锤之类的,刷上一块板子,上写水电装修,然后蹲马路边上。如果不怕挨揍,还可以把价格压得够低,这样活儿能更多一些。装修完了还可以问业主,"你要不要装操作系统或者杀毒软件?做个网站啥的呢?"
3.工具
工欲善其事,必先利其器。先是用PPR专用的剪子,在准备接另一个水龙头的地方切开。这里插一句,PPR剪子下刀的时候,手感老好了,远胜过挤包装袋的泡泡的感觉,强烈建议广大宅们尝试。
其实这里不止一步。应该先断入口的水闸,然后剪,然后还要把凡是能回流到切口的水都排光,最后用纸擦干切口。
此时,该启用更强力的工具--PPR热熔器。通电,等到热熔器卡搭一声,绿灯亮了,进入保温状态,把配件三通和管子同时加热
(你一看到这些东西的实物,就会明白加热何以能同时进行了)。
接着,粘接进入到了艺术的阶段。没有什么指标能告诉你加热是否完成,适量的时间,适量。适合的时机一到,撤下加热器,把刚刚同时加热的两端套在一起,用力挤,我看到里面半液态的多余的PPR都挤出来了。
4.检测
接着,进入到一个非常重要的阶段,此重要对于人生、工程,很多东西都适用的,那就是"等待"。
等待是件极其困难的事情。小学一年级还是二年级,学到"筛子"这个词的时候,我聪明地根据粗糙的插图完整还原了整套捕鸟系统。具体的说,就是用根短棍把像筛子这样的东西支起来,我当时用的是脸盆作为替代品。短棍的另一端系有长线,线一直延伸到躲在一边的我。筛子下面放些吃的,等麻雀进入筛子下面,扯长线让短棍脱出,筛子落下罩住鸟。按理说,"然后事情就成了"。但是,三十多年来,我从未成功过。从未。因为我等不及麻雀足够地进入筛子下面,总是过早就扯长线,甚至直接跑过去,希望把鸟用手塞进筛子里。
等待对那种年龄的我,非常困难,后来,我的进步也不大。一个非常典型的案例如下。跟小袁同学一起做项目的时候,牛老师借我的那台破东芝笔记本因为散热不好,经常需要像一本书一样立起来工作。尽管如此,有的时候还是死机,然后就得重启,需要按电源键。很多资料说,按电源键4秒,然后就铁定能关机,但是我从不成功。有一天,我跟袁同学说起来,结论是资料也不都准确,还演示了一遍。
袁同学说,"你查这4秒的时候,不能是1234,应该是1…2…3…4…这样。"
然后我就成功了,第一次。此后,一个人操作的时候,还是失败过几次。然后耐下性子查1…2…3…4,又成功了。
所以,这个时间需要工程上的重要技术手段:检测。
粘水管,应该是等到水管凉了以后,加压试水。所以,我很多次去摸水管粘结的部分,并与其他的部分对比。终于,温度差不多了。
5.失败了两次
加压试水,一共失败了两次。第一次,我粘的部分嘭地弹开了,水花四射。第二次,上一次的地方没弹开,但是另一个接头用手能摸到明显漏水。
断水,擦干,加热,粘结,等待……,等待……,加压试水。终于成了。
此前没粘好的原因,是由于操作现场的限制,加热很难做到同时。而事后证明,"同时"在操作工艺中非常重要。如果不同时操作,先后加热,粘结的时候,先加热的部分就已经开始固化了。
这是学理工的同学与人文类同学的重要差别。学理工的同学往往在失败的实验中了解到,自然的法则不关心你的感受,不行的就是不行;而很多人文
(艺术?)类的同学误以为,更诚心更热爱更咋地就能解决问题。
这也是为什么理工科的课听起来那么累,因为一句话中有好几条信息,而且一个也不能错。比如,油画刷子能用于清理笔记本里的灰尘,油画刷子就不能是毛笔。虽然二者看起来如此相似,但是毛笔的硬度远远不够。
倒不是说干啥都要精确--事实上,哪里必须精确,哪里可以对付,是一门艺术。
上述失败两次,丝毫没有降低本次周末工程的兴致。因为,对比程序设计什么的,这点失败不算什么,或者说这门手艺相对还是好学。
6.未来的程序员
以前听说芬兰什么的欧美国家的男人能修车、能砍树、能野外生火做饭、还能车床加工点啥,羡慕得不行。后来再渐渐明白,他们那里力工很贵,如果不自己整,大有活不下去揭不开锅之虞。
据说,由于人力日益昂贵,咱们国家也大有DIY越来越烈之势。想将来的中国,应该是人手一大堆工具,男人们上能能房顶揭瓦,下能马葫芦清渣。进化也,不得已也,没钱雇人也。
所以,富二代由于年轻时没有训练而开始走向没落,因为得特别有钱才能雇得起人修马桶,而工科男到那时会开始抢手,建议广大姐妹及早储备。
另一种可以及早储备的是程序员。缘何?因为未来的世界,不只中国,整个世界都会是这样的:在网站上订购一些传感器、电机之类的东西,再用家里库存的单片机,编个下位机程序,执行些小任务,这会变成过日子的主要方式。因为家电功能的定制
(从防盗到看孩子) 会成为主流--而定制的人工如此昂贵,所以最好自己来。那个时候,人人都是程序员。这不希奇,就像古罗马的人看来,你我人人都是数学家,至少是计算能力特别强的人。据说,他们那个时候,能算个三位数乘除法的,就算数学家了。
未来的世界是这样的:我们用自己的双手装点自己的身边,人人都掌握着这样的生活技能;我们也用这样的方式享受生活,而不是相反地通过麻将吃喝或者呼喝别人来享受生活。
未来的世界是这样的,我们会比以往更像我们的祖先。我们的祖先是这样的:缺少餐具么?不是到超市是买,而是亲自动手从旁边那座山上砍来竹子削成筷子。他们的后代是这样的:缺少餐具么?编个程序,然后用三维打印机打印出你想要的筷子,也许上面还定制一段浪漫的话。--
Sincerely,
YANG Guifu
School of Computer Science and Information Technology
Northeast Normal University
Changchun, P.R.China
----
杨贵福
无不大工。

台湾掠影

台湾掠影我们都读过不少对台湾版的资料,对岸很文艺把网上邻居译成了网上芳邻,把鼠
标称为滑鼠,把软件称为软体。我们早已熟知。不过,我真正新眼看到出售"软
体",第一反应仍然是蜗牛贝壳之类的"软体"动物。前几天,单位组织台湾游,分成两组,我在前一半,另一半现在还没回来。很多
体会,很多也与计算机没啥关系,絮絮叨叨回顾一下吧。与前十几年或更早的旅游已经不同,大家现在不再捎带大宗的电器了,购买的多
是土特产,当地的小吃什么的。如果不提台湾二字,可能想不到目的地是个发达
地区,更像是农村风俗游。有位上点岁数的同事说,以前捎菲利蒲的随身听的很
多。他不经意地把菲利蒲称为菲利蒲斯,是不是像有些老一辈的官宦子弟把味素
称为味之素?回程的时候,行李箱里最多的,是绿豆皇、凤犁酥什么的,烟和酒
也不多,说是台湾的烟抽不惯,酒也不太对路。所以整个行程,基本是在观景和民风,购物不怎么受欢迎,尤其是不受男士欢迎。这可能反映了在经济上,我们确实越来越有底气了。评论修某段路桥的时候,当
地导游提到,由于没有钱,新的工程停停修修,旧的用了很多年,说如果在大陆
就不会有这个问题。言下之意,你们真的很有钱呐。风景,像高楼、温泉、大山,都太小家子气了,也没啥,不提出罢。连当地导游
自己都说,与咱们的名山大川比起来,不值一提。岛内的高山也有3000多米,似乎还有近4000米的,都在东部,在太平洋旁边很短
的距离迅速拔起,真正爬起来,应该相当峻峭。不过此次没有机会亲身实践。徒
步了一段蒋经国当年带老兵们修的栈道一般的公路,周围全是坚硬的大理石,立
陡石崖,很险。阿里山也3000以上,步行了一路公路,张老师和封老师认为有高山反应。我认为
他们是累的。日月潭海拔也不低,远处的山上也有浮云。不过,甚为遗憾的是,日月潭完全没
有一点雄伟,与当年课本上留下的印象根本不符。潭水一倾,看着也就净月潭那
么大吧。这还是水面上升以后的,先前中间有座山,现在是几间房子大小的岛礁。
怪不得净月潭和日月潭能结成姐妹湖,发起人看来两湖都见过了,差别不大。在阿里山坐了小火车,还从一片森林中穿过,鬼子当年砍树的痕迹尤在。一片片
大树盘根错节,合抱以上的大树,当以千计,这些是没砍光的。据说,鬼子砍了
很多树以后,出现了一些灵异事件,他们特意建了一座塔,叫树灵塔,不知道是
想镇一下,还是祈福。资源,数不清的矿藏和森林。遥想当年鬼子占据的时候,一定眼睛都蓝了。阿里山地区,据说有不少民族,是高山族又细分的结果。其中有一个民族,就是
新电影 赛德克・巴莱 那个抗日的民族。此区域的民族似乎尽皆好武,风不调雨
不顺的时候要祭天的时候,就杀个敌人或外乡人。有个民族就被周围打得不行,
狩猎的时候跟着一头白鹿跑到了日月潭。这就是现在的邵族。邵族一共五六百
人,其中纯血的,二百多人,正广招男女,愿意去的从速,生一个孩子当地政府
给发似乎好几万元。几百人的民族,一方面让人觉得像是在作假,另一方面,也似乎说明了当地对不
同文化的包容和认同--不是强调求同,而是强调存异。在芬兰的时候,几个人谈
起新疆的文化建设。有人提到:中国人怎么能不认识汉字呢。提到这观点的这
位,是久在芬兰的汉人。而另一个背景是,芬兰有两种官方文字,一种是芬兰
语,如果我没记错,97%的人口讲芬兰语,而其他仅3%的人口,为了他们,官方
语言还有一种是瑞典语。所谓包容,不是要求另一批人跟我们一定相同,甚至不是允许他们与我们的差
异,而是,尊重甚至刻意保护这种差异。唐某位太子,最喜欢玩的,是自己装死,让跟班大臣们模仿突厥人的葬礼礼仪,
把自己的脸用刀划上口子。这是大唐。只有足够的自信,我们才会不怕嘲笑,不
怕去接纳异文化,而不担心淹灭了自己。扯远了。阿里山和日月潭,负了盛名。在我看来,不过如此。但是台湾东部的太平洋和高
山,真是让人看不过瘾。我以前看过几次大海,都是风平浪静的。在大连附近,
有一次大雨里看涨潮,以为已经算是状观,觉得更雄奇的都是诗人作家们夸张扯
淡的。此去台湾,远远几百米看到了,高于一人的浪不断拍向岸边,然后摔得粉
碎;风声呼啸,让人不能站直腰行走;往远处看,太平洋分成很多层次,各种深
沉的颜色勾勒出海底迅速深陷的地貌;看看身后近在眼前的高山隐在云雾里,可
以知道海下会是如何陡峭。有一处景点是珊瑚形成的很多小丘,当地导游说:这里原来是海下,地壳变迁逐
渐抬升成这样。他说,我们可以想像自己是鱼,正在水里珊瑚之间游着。抬头看
蓝天的些许碎片在亚热带繁茂的植物遮挡所剩无几,我们弓腰走过的小径两侧满
眼深绿,脚下不经常踩踏处全是苔鲜。我不禁想起Nimo生活的场景,水下也就是
这样吧。说到这里,感受尤其是当地导游在内的台湾人民,人文素养可能确实普遍高于我
们。当地导游在解说和聊天时,常出口成章,成语和典故的引用,信手拈来,我
们所不及也。说起来,这位导游姓岳,是岳飞的第33(?)代子孙,回来认过家
谱的。也曾经身为武将,当过团长。整个导游其间,没有信口开合介绍些道听途
说扯谈的传闻,也没有问"你们看这块石头像不像个七仙女或猪八戒"这样的傻问
题。在高雄的一家书店,百货商场里的,想来不是特别大不是特别综合的书店里,尚
且有一列专柜,是留给自然科学和科普的。从书店里的计算机书看来,很多ASP之
类的,应该不是特别大的书店,而自然科学类书籍之多,恐怕还远在我们很多省
会城市的书店之上吧。我想起有些人提到中国足球为什么臭的时候,论据之一是我们有多么少的足球场
和基础群众。我想,计算机的发达,也是同样,文化素养的提高、基础群众的培
养,还需要时间吧。好在,经济的发达,同时也在 (即使缓慢地)带来文化的提
高。很久以前,我们就知道台湾的那些城镇的名字,从大富翁游戏里,从那些小
说里,比如淡水,比如太鲁阁。而这些年,台湾随经济的衰退,文化输出似乎也
在衰退。我们每天埋汰大陆的本土电影,但是并不伴随对港台电影的推崇了。前
几天我看了个香港的片子,唉,仍然是80年代末录相厅里的感觉,而且还不是你
能记住名字和演员的那种。书店跟我们差不多,读书的人都不是很多。所不同者,我见到有人坐在地上看
书,长春未见过,可以地上太凉,北京西单图书大厦里倒是有不少坐地上的。中文书都是繁体,这个早有心理准备,没有想到的有两件事。一是营业员居然不
知道大陆人民大多能读繁体,而仅仅不会写而已,她为我们认识"两种"文字而表
示很惊讶。二是居然很多书不仅繁体,而且竖版。繁体读起来略有不适而已,竖
版现在可能很多人不容易消受了吧。从书目看来,尤其人文类的显得有些文化气
息的,似乎更喜欢做成竖版的,可能是竖版暗示着更有文化?核算成人民币,书略贵,但也不算贵得离谱。买了几本留作纪念。在南部,绿党老家,我以为人民会比较排外,结果也没有遇到。跟出租车司机聊
天,他问我们,"是从对岸来的吧",我们没听清,他又问,"同胞吧"。沟通完全
没有问题,令人感叹,几十年间语言的变化其实比想像中要小很多。台湾旅行仍未对所有大陆城市开放自由行,许多城市的人只能跟团从这里跑到那
里,购物观光,没有机会停下来细致地感受。期待,有一天能自由地在台湾地土
地上徒步,任我行止;期待,有一天能自由地在所有的土地上徒步,任我行止。

整理书架子

整理书架子
从除夕那天,我开始整理书架子。有两年没整了,自从上次挪书架子,把书都卸下来,突然有什么任务,没有时间按类别放回去,后来的书有很多就直接堆起来。
混乱一旦开始,就会愈演愈烈,直到,最近决定全都重新整理一遍。
整理书架是个体力活,同时也是梳理知识结构和学习过程的思考。
这几年,似乎一共整理了四五次吧,一般是搬家以后,或者乱得自己受不了。最初的一批书,是大学毕业的时候幸存的几本,教材加上特别钟爱的,没有卖掉。由于我彼此那么痛恨自己的专业,以致于把绝大部分教材都扔掉了。过了很多年,或者说,越是到了后来,我越发现,本科的学习所形成的世界观和方法论,深入到了骨髓,深入到你自己都不知道它们在那里。一个不太好的比喻,就像有些小资口声声谈西方思想什么的,但是骨子里,如果你深挖,却发现他们比上位的那些人更加东方。这里的东方,丝毫不含神秘哲学或者我们的文化的褒义。
这第一批书,几乎都是理工类的。
再后来的一批书,是从旧书市场上买到的,有各种品相。大多暗黄了,书页卷曲。这些书,好多在购买前就已经看过了,有些知识甚至都已过时,尤其是小时候就特别想拥有的那种,虽然借着看过几遍,仍然买了珍藏。这第二批书,大部分是人文类的,持续了好多年,有一些和第三批书的购买时间重叠,甚至延续到那以后。
第三批书,是读研究生期间,到了期末,突然说是有一笔经费,可以买U盘,或者买书。我全都用来买书了。这一批书中最重要的是计算机网络方面的几本专著。当时,我仍然未能清楚地知道,网络和系统管理
(现在流行叫做系维)的知识结构和职业前途与程序员是完全不同的。最终,计算机网络与通信,130厘米左右;操作系统45厘米左右。
第三批书当中,包括我最初读的英文原著,Douglas E. Comer的 计算机网络与因特网,和 Andrew S.
Tanenbaum的现代操作系统,封皮上有马戏团的那个。如果不算文档和电子版,这两本是最初读物。
很多人读书需要心态,或者心情,或者油墨的清香,或者纸张的声音。那纯粹是家里有钱惯出的...特质。读书所需要的,不过是一个能站立或坐下的地方,然后,就是书本身。至于它的材质,是纸的,电子的,印刷质量如何,在能找到书就高呼万岁的时候,这些统统不必考虑。
那两本书,是在不上课的时候,一页一页慢慢看完的。我的英语那个时候极差,不是说现在有多么好,那时我差到除了英文文档,基本看不懂别的什么。英语老师建议的小说啦电影啦新闻啦,没一样能流畅看明白的。不能看懂四级阅读,但是能阅读英文文献,其实也没啥奇怪的,因为二者所需要的词汇量的范围大不相同。后来单词量增长的时候,我注意到,很多单词,我都是首先知道它在计算机领域的含义。
读书,我们所需要的,只是几个小时的时间。
以后的书,基本不是成批购买了,需要哪方面的,就添置点啥,逐渐多起来。软件工程的,175厘米左右;文学类的,大约两个175厘米。
就阅读的时间分配,我在软件工程方面分配的时间远多于文学类的,尽管文学类的量大约是软件工程的二倍。这也是个有意思的事情,为什么理工学生的工资要比文学类的高,因为第一理工类学生花费了更多的时间来学习。第二,如果仅仅是浏览观赏性地阅读的话,读文学类的书是一种休息,没有人应该为你休息付钱的。而即使是观赏地阅读理工类书籍,即使那最终确实是一种愉悦的话,也是一种劳累的愉悦--这跟在健身房的努力差不多。
我曾经计划读某小说好几年,后来几天就看完了。那是我第一次发现,啊,以完全没有注意到,原来这两种不同的作品的阅读速度差别如此之大。
上述关于文学类学生工资的讨论,不包括那种牛到可以指导别人观赏,或者创造出作品来供别人观赏的同学。不幸的是,从现在的影视作品或者评论来看,文学类同学应该可以达到更高的水平,而不仅是自己没事欣赏一下自己的快乐。
是的,我们的理工很糟烂,可能除了这个词,不足以形容我们目前的水平在世界的地位;文学类,如果用糟烂这个词来形容,是对糟烂这个词的侮辱。
整理书架子,也回顾了一些知识学习的艰辛。有90厘米纯粹各种计算机语言的书,还有同等长度的书,是用这些语言调用网络、API、MFC什么的。后者不包括数据库调用之类的,这些基本上只有电子文档,而没有书籍。当年为了学习网络编程
(不是指 web programming,是指socket)
,MFC和API,也着实花了不少工夫,但是俱往矣。这些知识一旦获取了,如果不需要进一步深入研究的话,它就只是知识,而不是方法。
一大悲哀。我们要花很多时间,才能知道,有一些东西,恰恰不是你想要的;而如果你不花上这么多时间,你根本无法知道那是什么,更不必说了解那是不是你的目标。
而那个时间,你往往找不到一个人能够和愿意告诉你。即使有那样一个人在你的身份,年少轻狂,你也不一定就会相信。
然后,很多个小时,很多年,就这样流逝。再也不会重来。
要整理书架子的一个原因,我发现如果书堆在那,根本就想不起来看它,甚至忘了它的存在,或者记得有这本书,但是却找不到它。很多年过去以后,我发现,很多书需要重读,一遍一遍重读,每一次,你可能会有新的收获。那些需要重读的书,恰恰与前面提到的api,mfc的使用那种书不同,它们是历久弥新的。每一次读,你都有不同的动机,又深入地了解了作者这么写这么说的原因。
就像锻炼身体,只有你亲自流汗,然后才能了解,为什么教练或书里说,要这样动作,要避免那样,为什么呼吸而不是别的,才是最重要的。
就像大三和弦是明亮的,小三和弦是暗淡的,甚至是蓝色的绿色的。你不亲自去听,跟你说了也是白扯。有很多书,很多特别好的话,在我这里,就这么白扯过去了。时常感叹,如果当年就能明白那些,该有多好啊。
同学们现在都喜欢看视频了,喜欢在网上找个贴子。但是,真正的知识,尤其是深刻的那些,且不说需要训练才能掌握的,往往不可能容纳在一个贴子的长度之中。这就是几十年来,也许更久
(?),学者们提到的浮噪。我们浮噪到马上就要看到结果,马上就要得益,马上就要看到作用。
我们在网络里跑来跑去,不断去点击5分钟以下的小视频。我们看各种大片的特效。我们不断地转移注意力。我们从成年人,退化为三五岁的孩子,注意力只能保持三五分钟,甚至更短。又或者,我们中的一些希望得到成年人权利的人,从来也没有成年过,无所谓退化。
迅速反应,而不沉思,这正是动物而非人类的特性。
我把那些读过的书,收在书架上。开始制定漫长的计划,很多,都要重读一遍。
我抚摸那些书页,回想我曾经阅读它们的时光。
有一本,C++ Primer。那一年除夕的晚上,我坐火车返回通化。整个车厢里只有三两个人,还包括列车员。我一直低头读这本平时没有时间看的大部头。从上次读到的地方开始,几个小时,我读了平时几天几个月的页数。
不能做实验,也不能上网。我只能用纸记下所有的疑问,记下所有的收获。
晚上十点左右,外面漆黑的天空开始亮起焰火,在车轮的隆隆声里,那些光亮此起彼伏。C++ Primer,就是在这时读完了最主要的部分。
有一本,ZigBee技术实践教程,包师弟借给我的。前两天的某夜,我独坐在桌旁,喝光了咖啡,次序翻过那些书页。不能做实验,也不能上网,猜测作者的意思,用纸记下疑问和收获。凌晨五点的时候,天边开始有了亮光,书还剩下一章。
这个时候,我们才知道,那些短暂就能获得的快乐,并非我们真正想要的,它们也会瞬间就消失。

音程示范歌曲,lilypond example

音程示范歌曲,lilypond example
下面的文件是音程示范歌曲,lilypond源代码,可以生成pdf文件,五线谱带歌词的。
音程,比如,用简谱表示1=C时,1和2的距离与5和6的距离是相等的,3和4的距离与7和1的距离是相等的。
lilypond [http://lilypond.org/]
是著名的音乐engraving程序。有人把engraving翻译成雕版,这也正是这个词的本意。在这里,并不特别强调采用这种工艺,而是表达一般地指美丽漂亮的印刷乐谱的工具。
希望对其他也跑调的同学有所帮助,也可以作为lilypond的示例文件,语法忘了的时候参考一段。
又想起了刘俐俐和张绍刚的事件。
有同学评论,大致意思是这样的:当Boss问到问题的时候,都是有动机的,你应该小心作答。比如,领导问,你爱好些什么啊。你千万别说什么英雄双行体,那表明你不合群。你应该说,我喜欢二人传,这表明你尊重民间艺术,或者品味低下;你应该说,我喜欢歌剧,这表明你品味高雅,或者崇洋媚外。
一个人喜欢什么,怎么可能会因为问的人不同而有所变化?唯一的可能就是假装,或者你无法判定他是不是假装[参见《士兵突击》中的成才同志。同志,呵呵。]。
的确,有些人喜欢下属 (如果有这么个阶级,并且因为经济基础而能决定上层建筑甚至人格的话)迎和--即,你说的内容并不重要,但是要对上级的胃口。很多对白都有背后的意思[参见《红楼梦》],虽然很累,但是揣摩有时必不可少。不过,这并非意味着你揣摩完了就一定要赞一个,即使从功利的角度看,也并非每个领导都好这一口。你注意到网上那些对张的反对的声音了么,并非每个看起来像愤怒青年的都是loser,很有一些是winner,这从行文风格和内容可以看出。你可以选择和这样的人合作。
所谓"求职",并不像这两个字求暗示的,是"求"什么人"求"什么东西,无论市场供需如何,那也只是"找"一份工作,而不是"乞求"。有些女士的态度在这时非常正确,她们说,"就是世界上只剩你一个男人了,也绝不嫁你。"
求职确实是有底线的,那就是尊严。如果现在我低头从你胯下钻过,那么,今后呢?我们可以表达对领导的尊重,毕竟工作中的事务的决定权需要尊重地执行,但是并非一定要向他们展示假的自己。有时,所要做的是,告诉他们,我的这些爱好,与工作无关。我只是来工作,又不是卖身为奴;我热爱我工作的内容,但是不必也同时热爱领导你。
说到这里想起博士面试的时候,主任问的一句话,"听说你们搞计算机的都喜欢玩游戏,你玩不?"
我心想,玩啊,很爱玩,不爱玩游戏的,而爱计算机的没几个啊。
我的答复是非常缓慢地说:偶尔。
我庆幸这个世界上有程序设计和自然科学,它们的评判者高于人类和权力。我庆幸这世界上有音乐这样的东西,它的美丑虽然可能大家各执一词,却都是纯净的。
关于程序设计,补充解释一句。人类思考的规则,是人类发现的,却并非由人类所规定。对不,偶像?
"安能摧眉折腰事权贵,使我不得开心颜。"这句话我以前引用过一次,当时在人事处工作,处长问,"杨啊,你有没有座佑铭",然后我傻了吧唧地答了这么一句。所以,对读这贴子里知道典故的老家伙们来说,现在再引用容易笑场。
我补充一句吧,那些用来威胁我的,我愿意全部放弃。而剩下的,编程序,就像自己写作,在心里唱歌,谁又能禁止得了。
让我们歌唱,由关注音律、法则、美,不要关心那些狗P"柯老师"们的看法。
version "2.12.3"
header{  title = "音程示范歌曲"}
% 鲜花曾告诉(3 4)我你怎样(1 2 1)走过 小二度 大二度 《同一首歌》
markup {  上行}
markup {  大二度 同一首歌}
{time 4/4 huge set fontSize = #3 g2 c'4 d'4 | e'4. f'8 e'4
c'4_thumb | d'2_thumb c'4_thumb a4 | c'1 |}addlyrics { 鲜 花 曾 | 告 诉
我 你  | 怎 样 走 | 过 }
markup {  小二度 同一首歌}
{time 4/4 huge set fontSize = #3 g2 c'4 d'4 | e'4._thumb
f'8_thumb e'4 c'4 | d'2 c'4 a4 | c'1 |}addlyrics { 鲜 花 曾 | 告 诉 我 你
| 怎 样 走 | 过 }% 不要(5 6)问,不要说            大二度     《祝福》
markup {  大二度 祝福}
{time 4/4 huge set fontSize = #3 c'2.  g8_thumb a8_thumb | c'4
d'8 e'8 d'4 e'8 g'8}addlyrics {你。 不 要 | 问 不 要 说 一 切 }
% 大风从坡上刮过(5 6)            大二度      《黄土高坡》
markup {  大二度上行 黄土高坡}
{time  4/4 huge set fontSize = #3 f'4 f'8. e'8 d'8 d'8  c'8_thumb
d'8_thumb}addlyrics { 大 风 从 坡 上 刮 过 }
% 我们(3 5)坐在高高的谷堆旁边 小三度 《听妈妈讲那过去的事情》markup {小三度上行 听妈妈讲那过去的事情}{time
2/4 huge set fontSize = #3 e'8_thumb g'8_thumb a'8 g'8 c''4 b'8.
a'16 g'8 a'8 g'8 e'8 ~ e'1
}addlyrics { 我 们 坐 在 高 高 的 谷 堆 旁 边 }% 长亭外,古道(6 1[高])边        小三度     《送别》
markup {小三度上行 送别}
{time  4/4 huge set fontSize = #3 g'4 e'8 g'8 c''2 a'4 c''4_thumb
g'2_thumb}addlyrics { 长 亭 - 外 古 道 边 }
% 明天你是否会想起(5 7)          大三度     《同桌的你》
markup {大三度上行 同桌的你}
{time  6/8 huge set fontSize = #3 g'8 g'8 g'8 g'8 e'8 f'8
g'4._thumb b''4._thumb}addlyrics { 明 天 你 是 否 会 想 起 }
% 月亮在白(2 5)莲花般的云朵里    纯四度    《听妈妈讲那过去的事情》
markup {纯四度上行 听妈妈讲那过去的事情}
{time  2/4 huge set fontSize = #3 s4 a'4 | g'4. e'8 | d'8._thumb
g'16_thumb e'8 g'8 | d'8 c'8 a8 c'8|}addlyrics { 月 亮 在 白 - 莲 花 般 的 云
朵 }
% 风中(3 6)有朵雨做的云 纯四度 《风中有朵雨做的云》
markup {纯四度上行 风中有朵雨做的云}
{time  4/4 huge set fontSize = #3 g'4_thumb a'4_thumb a'4 e'4 |
g'4 b'8 g'8 b'2 | }addlyrics { 风 中 有 朵 雨 做 的 云 }
% 也温暖不了你的视线(6 2[高])   纯四度    《吻别》
markup {纯四度上行 吻别}
{time  3/4 huge set fontSize = #3 d' d'16 d'16 e'8 a16_thumb
d'16_thumb ~ d'4 r4 }addlyrics { 不 了 你 的 视 线 }
% 天上的星星(3 6)               纯四度        《鲁冰花》
markup {纯四度上行 鲁冰花}
{time  4/4 huge set fontSize = #3 a'8 a'4 a'8 e'4_thumb
a'4_thumb}addlyrics { 天 上 的 星 星 }
% 分给我快乐的往昔(6[低] 3)     纯五度       《睡在我上铺的兄弟》
markup {纯五度 睡在我上铺的兄弟}
{time  6/8 huge set fontSize = #3 b8 b8 b8 b8 b8 g8 | g4._thumb
e'4._thumb |}addlyrics { 分 给 我 快 乐 的 往 昔 }
markup {————————}
% ————————% 下行% 夜(1 7)色茫茫            小二度     《明月千里寄相思》
markup {小二度下行 明月千里寄相思}
{time  4/4 huge set fontSize = #3 s4 s4 s4 c''8_thumb b'8_thumb |
a'4. g'8 e'8 d'8 e'4 |}addlyrics { 夜 - 色 - 茫 - 茫  }% 难解百般愁相知爱意浓(1 7 6)    小二度     《相思风雨中》
markup {小二度下行 大二度下行 相思风雨中}
{time  4/4 huge set fontSize = #3 a4 e'8 b'8 e'4 a4 | b'8. b'16 a'8
c'8_thumb b8_thumb a2_thumb}addlyrics { 难 解 百 般 愁 相 知 爱 意 浓 }% 月亮(6 5)在白莲花般的云朵里    大二度    《听妈妈讲那过去的事情》
markup {大二度下行 听妈妈讲那过去的事情}
{time  2/4 huge set fontSize = #3 s4 a'4_thumb | g'4._thumb e'8 |
d'8. g'16 e'8 g'8 | d'8 c'8 a8 c'8|}addlyrics { 月 亮 在 白 - 莲 花 般 的 云 朵
}
% 愿心中永远留着我的笑容(1[高]6) 小三度    《祝福》
markup {小三度下行 祝福}
{time  4/4 huge set fontSize = #3 s2 s4 d'8 d'8 | c'4 d'8 e'8 g'8
a'8 g'8 a'8 | c''8._thumb a'16_thumb ~ a'2}addlyrics { 愿 心 中 永 远 留
着 我 的 笑 容 }
% 高高的谷堆旁边(5 3)            小三度    《听妈妈讲那过去的事情》markup {小三度下行
听妈妈讲那过去的事情}{time  2/4 huge set fontSize = #3 e'8 g'8 a'8 g'8 c''4
b'8. a'16 g'8 a'8 g'8_thumb e'8_thumb ~ e'1}addlyrics { 我 们 坐 在 高 高
的 谷 堆 旁 边 }
% 空独(7 5)眠的日子              大三度     《追梦人》markup {大三度下行 追梦人}{time  4/4
huge set fontSize = #3 b'8_thumb g'8_thumb g'16 a'16 b'8
a'4}addlyrics { 空 独 眠 的 日 子 }% 风中有朵(6 3)雨做的云          纯四度     《风中有朵雨做的云》
markup {纯四度下行 风中有朵雨做的云}
{time  4/4 huge set fontSize = #3 g'4 a'4 a'4_thumb e'4_thumb |
g'4 b'8 g'8 b'2 | }addlyrics { 风 中 有 朵 雨 做 的 云 }
% 狼山起,江山北望(3 6[低])      纯五度          《精忠报国》
markup {纯五度下行 精忠报国}
{time  4/4 huge set fontSize = #3 a'4. g'8 e'4. b'8 | c'8 c'8 d'8
e'8_thumb a2_thumb | }addlyrics { 狼 烟 起 - 江 山 北 - 望 }
% 上行% 鲜花曾告诉(3 4)我你怎样(1 2 1)走过 小二度 大二度 《同一首歌》% 不要(5 6)问,不要说
大二度     《祝福》 % 大风从坡上刮过(5 6)            大二度      《黄土高坡》% 我们(3
5)坐在高高的谷堆旁边 小三度 《听妈妈讲那过去的事情》% 长亭外,古道(6 1[高])边        小三度     《送别》%
明天你是否会想起(5 7)          大三度     《同桌的你》% 月亮在白(2 5)莲花般的云朵里    纯四度
《听妈妈讲那过去的事情》% 风中(3 6)有朵雨做的云 纯四度 《风中有朵雨做的云》% 也温暖不了你的视线(6 2[高])   纯四度
《吻别》% 天上的星星(3 6)               纯四度        《鲁冰花》% 分给我快乐的往昔(6[低] 3)
纯五度       《睡在我上铺的兄弟》
% ————————% 下行% 夜(1 7)色茫茫照四周            小二度     《明月千里寄相思》%
难解百般秋相知爱意浓(1 7 6)    小二度     《相思风雨中》% 月亮(6 5)在白莲花般的云朵里    大二度
《听妈妈讲那过去的事情》% 愿心中永远留着我的笑容(1[高]6) 小三度    《祝福》% 高高的谷堆旁边(5 3)
小三度    《听妈妈讲那过去的事情》% 空独(7 5)眠的日子              大三度     《追梦人》% 风中有朵(6
3)雨做的云          纯四度     《风中有朵雨做的云》% 狼山起,江山北望(3 6[低])      纯五度
《精忠报国》% Local Variables:% coding: utf-8% End:% EOF

上位机与下位机的交流:编码与字节序的实验

上位机与下位机的交流:编码与字节序的实验
下午在南区的讨论班居然提前结束了,而且,到预定吃晚饭的时候还剩两个半小时,按包师弟的说法,真是个尴尬的时间啊。干做两个半小时,太无聊,如果赶回所编程序,似乎时间又不太够的样子。我甚至想提议去暴走吧,但是想到冷得冻肺子的天气,想到包师弟和我都正感冒,也就只是想想。
包师弟说:要编这程序的想法,真是搅得人...
我忘了他原来的措词,为避免他跑上来纠正,只好留了空白。大意是,热血沸腾啊,夜不能寐啊之类的。现场表现是坐立不安。
好吧。
我们迅速用了十来分钟重新回顾了一下以前做过的计划,然后跑出来打车去所里。
1. 实验计划及基本原理
我们要做的是一个原型实验,确定STM32某芯片 (意法半导体)
的浮点型变量的编码方案与PC[http://en.wikipedia.org/wiki/IEEE_754-2008]是相同的,且大小头
(Endianness) 也是一样的。
几天来,包师弟已经把下位机的板子都整完了,昨天半夜的时候邮件说USB芯片及驱动都整完了。
我们计划的技术路线是:由上位机通过USB向下位机发送一个浮点数的二进制形式,下位机接收到以后,写到串口,然后用PC从串口读了显示出来。
如果PC下发的和最后显示的如果不一致,即可判定STM32与PC使用了不同的浮点变量编码。我们希望一致。
为初学者同学们解释一下,这并非是为了验证PC-STM32-串口的链路是正常的,而是为了验证上位机与下位机使用相同的方式表示一个浮点。
上位机就是PC,下位机是单片机或者ARM芯片的机器。
有的同学可能会问:难道上位机和下位机表示同一个数,会使用不同的方式,不都是"3.14"这样的形式么?
可能不相同,一定不是"3.14"这样的形式。因为我们知道,计算机只接受二进制,而"3.14"显示不是二进制。所以"3.14"是以一种有点诡异的方式表示的。
(1) 编码
在上位机中,一个浮点数,比如3.14,需要经过归一化、求符号、求指数、求有效数字、求尾数……一系列的步骤,终于变成了下面的形式。
如果是32位系统,用十六进制表示就是: 4048F5C3
具体的步骤和4048F5C3中每个二进制位的含义略过,感兴趣的同学请去文后的两个地址自行观赏。
我和包师弟打算用实验确认,上位机与下位机使用了相同的计算方法,或者说,相同的编码方法。即,当上位机发送3.14的时候,它发送4048F5C3这四个字节;当下位机接收4048F5C3这四个字节的时候,它认为这是3.14。
上位机与下位机使用相同的语言,才能通信。如果一方对另一方一无所知,还要指导,情况就可能比较糟糕了。
比如下面的对话。
上位机:你最喜欢莎士比亚的什么作品。
请注意上位机知道莎士比亚是一个人,而是有作品的人,不是意法半导体生产的某个芯片型号。
下位机:英雄双行体。
上位机:……
如果上位机在日本动画里,估计会说"那呢?"。我文学基本白痴,以前从来只知道莎士比亚还写十四行诗,从来没听说过英雄双行体这种东西,不过上位机似乎更白痴一些,他似乎认定莎士比亚就只写过戏剧。
恩,我比较喜欢李清照的词。
上位机:你读过莎士比亚的哪部作品?
下位机:我演过麦克白中的巫婆。
上位机:你是演员?
上位机显然不知道,而不是在调笑,他不知道英文专业学习英文的重要方法之一,从高中的时候就是这样,就是表演英文经典名著或者非名著。每个学英语的好像还都有剧照什么的。
不幸的是,下位机也不知道上位机如此无知。
上位机:你英语这么好,为什么要学英语呢?
下位机:我们为什么要学汉语呢?
我补充一下:因为英语系根本不是学英语的,就像下位机的回答所暗示的,中文系不是学中文的,历史系不是学历史演义的,而计算机系也不是学计算机的。很多英语系还有个全称,叫英语言文学,中文系一般还有个名字,叫汉语言文学,历史系……历史系好像叫历史文化学院,计算机系则根本不学怎么修理计算机拆壳子什么的。
深入地研究一个东西,跟简单的使用,根本就是天壤之别。
有人可能误认为:上位机误会了自己的身份,那些指责只有BOSS们才有资格做。
不,不是这样。没有人有资格指责别人,尤其,尤其,尤其是你身居高位的时候。身为BOSS,被安排居高临下,你对看不惯的人唯一能说的话也就是:我们不适合你。被你指责的那个人,没有花钱请你做他的顾问。
上位机下位机,不过是为了称呼方便给的一个名字,你真以为自己就高人一等了,你当小资的时候口口声声赞扬的独立宣言里有一句"人生而平等"不知道是不是忘光了。你花钱买到的不过是劳动时间,并不包括人的尊严。
所以,如果编码不同,还是承认不同罢了,少扯别人低级自己高级什么的。
又,故做平易近人和蔼可亲低下头来和你说话这样的姿态的,也不是什么好鸟,因为他们假设自己高人一等。
(2)大小头
目前有两种Endianness在计算机中普遍存在,一种是,在内存里,4048F5C3就表示为4048F5C3,这个叫做 big endian,大头儿。
有同学说,还能有啥表示方法?
还有一种叫 little endian,小头儿,4048F5C3会表示成C3F54840,正好按逆序排列每个字节。
有同学可能说,居然还有小头儿这么诡异的表示方法。是啊,事实上,我们一般用的PC,x86体系的,都是小头儿,是诡异的那一方。而ARM,是大头那一方。
大头小头,这个名字来自格列弗游记,两个小人国战争的原因是,到底吃鸡蛋应该从大头还是小头先打碎。这个问题也困扰计算机网络,发送数据前,也可能需要重排一下字节的顺序。
说到这里插一句,有意思的是,在小头的x86体系中,浮点数恰恰很诡异地使用了大头方案。这是由于历史的原因,你看,我们已经是一门有历史的学科了。
以上,我和包师经要验证的是上位机 (并非多么尊贵) 与下位机 (并非理应谦卑)使用了相同的 (1)编码、 (2)大小头。
可能有的同学会说:查下手册不就完了么。大多数时候我乐意相信手册,不过昨天马利同学刚刚抱怨了Thinkphp手册之不咋地,还是小心为妙。
2. 实验环境
上位机一台,跑windows7,64位CPU。杨注:可能运行在32位模式,或者应用程序工作在32位模式。
上位机的应用程序包括:
* labview
* symbolink 可能是这个名字,不能确认了。windows驱动开发工具之一,用来显  示驱动提供用来读写的文件名的。
* 虚机里跑了个windows xp,里面有个visual studio.
* 下位机的交叉编译和烧写软件
* 串口通信工具,用来看下位机发到串口的东西
* bushond
下位机:
* 意法办导体STM32某芯片,USB驱动已完成,串口驱动已完成
其他的硬件环境包括:我和包师弟各据一个显示器,连接在同一台上位机上,两套鼠标两套键盘。
两套鼠标两套键盘的结对编程方式,是ZHUMAO同学最先采用的,我们两个似乎当时调的是个JAVA程序。两套输入设备,结对时就不必抢键盘了,只要说一句"放着我来",就行了。论起争执和争夺,嘴还是比手快。
其他的硬件环境,我在实验其间还征用了关同学的座机一会,用来拷出symbolink,包师弟其间用过他的笔记本一阵,查资料。
还用了一个不知道什么软件,为了计时工作,西红柿时间管理。一共两次迭代,第二次严重超时,刚好在最后一分钟结束所有工作。
2. 实验过程
* 下位机输出到串口,浮点变量
改下位机程序,把浮点数,比如3.14,忘记当时用的是什么了,输出到串口。用上位机的串口通信软件读,符合3.14。
这步是为了确认串口通信及下位机的浮点数格式化输出正确。
float a = 3.14;printf("%f", a);
我们观察到了单精度浮点数精度不够的情况,略。
* labview,不知道如何把浮点写下去
用labview,打算把浮点数对应的二进制四个字节写到USB口。遇到个问题,不知道应该怎么取得浮点数对应的二进制那四个字节。
这时,我们转到了另一个技术路线。
请某些同学注意,这里的另一个技术路线,原本就是我们计划的技术路线之一,而不是因为前一路线"可能"不通,而临时想到的。同时,我们非常确认另一条技术路线可能,而且我和包师弟各喜欢一条路线,所以才会转向。这与某些同学"一遇困难就转向,再遇困难再转回来,始终也不知道毛病在哪里,这个方法到底行不行"是完全不同的。事实上,我们基本确认labview有这样的能力,只是不打算再花时间。前面提过,我们原计划加交通也只有两个半小时。
* C,不知道symbolic link name
然后,开始用C写USB口,但是CreateFile的时候不知道驱动给提供的文件名(symbolic
link)是什么,因为正使用labview的驱动,不是我们自己写的那个版本。
自己马上写个驱动,也是方法,但是我们需要马上架起驱动开发的环境。原来有个驱动,但当前的这块板子vid,pid,endpoint设置全不一样。时间关系,也放到一边。请还是那部分同学注意,我们仍随时可以开始这一路线。
* 用symbolink (?) ,不能确定文件名是正确的,CreateFile没有发出数据
开关同学的机器,找到了能查驱动提供的文件名的工具。
这里有个插曲,我们拥有N多个虚拟机,以致于找到需要的那个,花了不少时间。后来全盘搜索才找到。
当时我想起了之前某次"结对"编程,我的身后有四位同学,包独坐一边,还是上面的硬件环境,我们把众多文件在真实的和虚拟的共达七台计算机间来回挪腾,最终一切都跑了起来。大家说,这很盗梦空间。
不过,这一次比较不幸,我按symbolikn查到的文件名发数据,下位机没有接收到。
* 包接受用C写用文件,然后用labview读
这时包提到一个之间的方案:我用C语言把float变量的二进制写到一个文件中,然后包用labview读进来,按字节读。
我说:咱们还是直接用手写吧。
* 用C输出float的4个字节
我们用C程序,把float变量对应的十六进制,显示在控制台上。这样:
#include <stdio.h>main(){    float a = 3.14;    printf("%x", *
(unsigned char*) &a);    printf("%x", * ((unsigned char*) &a + 1) );
printf("%x", * ((unsigned char*) &a + 2) );    printf("%x", *
((unsigned char*) &a + 3) );}
* 用bushound,而不是labview写到下位机
然后,我们没有用labview,而是用另一个更轻量级的工具,bushound,直接向usb的endpoint中写入了十六进制。
* 下位机,强制转换指针类型
在下位机中,我们按收到数据以后,把这四个字节十六进制转换成了浮点型变量,然后printf到串口。大致这样:
printf("%f", * (float*) buf);
* 上位机显示下位机串口
上位机显示,下位机的串口输出了 3.14。
我们又改了几个浮点数,由上位机把C算出来的十六进制通过USB口写给下位机,下位机又通过串口把这四个字节当成浮点型变量格式化输出。上位机显示下位机的串口输出,与我们预期的值是相同的。
* 然后,我们去东方肉馆吃肉去了。
虽然我的挂钩还疼着,尤其嚼脆骨的时候,不过心情不错。当你知道这个世界上有一些人与你用相同的语言交流,有些相同的习惯,比如大半夜的上网发贴子看贴子,怎么能心情不好。
就让那些 听不懂别人说话,还命令别人按自己的方式说话的 上位机孤独去吧。
3. 结论
浮点型单精度变量,PC与ARM使用了相同的编码和字节序。
参考文献:
[http://en.wikipedia.org/wiki/IEEE_754-2008][http://babbage.cs.qc.cuny.edu/IEEE-754/]

面试,为什么总问些没用的,及emacs支持正则表达式替换

面试,为什么总问些没用的,及emacs支持正则表达式替换* 题外话李记者辞职了,纪念一下。李记者不是记者,这是他的绰号。李记者辞职前是某二三线城市IT公司的技术负
责人。李记者和我相识,是一起参加一个吃不好睡不好啥也不好的比赛,我们都
获了吉林省的奖,所以,都是取得了高级技工资格。想李记者也面试人无数,肯定背地里被人骂过"面试,为什么总问些没用的"。今
天我试着解答一下。对了,李记者,高级技工证,我有两个。你有两个么?* 先说一个例子,emacs支持正则表达式替换Emacs,如同李记者这个名字,众所周知,是伪装成编辑器的操作系统,能完成
基本的编辑器功能,比如文本替换。替换这个功能没啥稀奇的,连WORD都有。如果你确信匹配条件是对的,那么尽可
能大胆地不搜索不一个个确认,直接替换全部。但有时候,世界不那么美妙简单,或者简单的事情都被别人做完了。比如,你想
进行下面这样的替换。有一段文字,其中的一段如下:
----引文开始----
14. 'This is a private conversation!'课文2 早餐还是午餐?
15. It was Sunday.
----引文结束----明眼人一看便知,这是我们背诵了无数遍,如此熟悉的《新概念2》的...第一课
结尾和第二课的开头。也许整本书,你就只熟悉这两课,不过并不影响我们的讨
论。现在的要求是,把整个文件中的每一课的标题,如"课文2 早餐还是午餐?"这样
的文字,后面都加个回车。面试提出这样的问题,有的同学可能会说:哈,不过就是90几课么,我一个个回
车下去。面试官就会问:如果文件非常非常长呢?当然,找很多人,把文件切割了,每人分一小块,处理完再合并,也算是个办法。
不过,也许你去应聘管理岗位的时候这么答效果更好。我们技术人员是这样解决的:找到那一行的特征,然后替换那一行,替换的方法
是原来的内容不变,在最后加个回车。1. 特征凡东西,你不先指出特征,就找不到它。马丁叔叔说:"如何藏起一棵树呢?把它
放在森林里。"这就是用大量的共性掩盖特性。这一行的特征是,开头有"课文"二字。还有别的特征,但是这个特征足够我们完
成任务了。齐同学请注意。为什么考试的时候要考概念,因为按我上面的这种描述特征的方
法,是不专业的,不方便技术人员之间沟通,也不方便与机器沟通。我们这样描述:课文.*这就是大名鼎鼎的正则表达式。学过编译原理的同学都如遇故人,因为这是我们
熟悉的领域,终于又回到我们的知识结构之中。数学家的方法是值得赞扬的,他们把未解决的问题转化为已解决的问题。典型的
例子是消防员的那个故事。队长问:如果你看到胡同口着火了怎么办?答:用灭
火器。再问:如果你看到胡同口没着火怎么办。答:点着它,接下来就是我们熟
悉的问题了。正则表达式 课文.* 的意思是,前面是"课文"二字,然后是任意个 (*的含义)任
意字符 (.的含义)。凡符合这样的特征的行,都会被搜索出来,准备被替换。2. 替换替换成什么呢?替换成 (1) 还是这样一行, (2)后面接一个回车。写作:&^J其中,"&"的意思是,匹配的文本的全部,上例中,即"课文2 早餐还是午餐?"
这一行;"^J"是这么键入的"C-q C-j",其中C-q相当于转义,C-j就是回车。你
可以试一下,在windows下,C-j就是ctrl-j也是回车。3. 命令在emacs下,M-x执行下面的命令:replace-regex RET 课文.* RET &^J然后,任务完成了。凡是符合特征"开头是课文二字的行",找到它们,在每一行
后面加个回车。4. 补充[http://www.emacswiki.org/emacs/ReplaceRegexp]提到
M-x replace-regexp
Replace regexp: (w+)
Replace regexp with: ,(capitalize 1)这里, 1 代表的是第一个括号分组里的部分,, 代表后面跟的不是要用来替
换的东西,而是一段lisp程序。上例执行的结果,会把一个或多个单词,替换为
把 它们中的第1部分 (刚好就是全部) 大写开头字母的结果。这个故事告诉我们,emacs很强大。马利同学,及其他尊敬的vim使用者们,我猜
vim一定也有这样的功能 :)这个故事还告诉我们,无论emacs还是vim,还是类似强大的编辑器,必然会以某
种方式支持 正则表达式 这种强大工具。(1) 因为正则表达式是计算机学科的基本概念,所以,很多方法 (包括gaga新的
.net)都建立在它的基础之上。它已经诞生很久了,我刚刚查了下,1950年代,相
信咱们没几个人比它的年龄还大的。许多人抱怨计算机学科学习的东西太古老,
答案在于,这些东西从来都没有过时,而且所有的新东西,都建立在它们的基础
之上。《故事 : 材质、结构、风格和银幕剧作的原理》告诉我们,叛逆是可以的,前
提是你已经充分了解和纯熟运用你准备叛逆的东西。(2) 对正则表达式支持得好的,必然会提供某种方式,允许你深入到其中,操控
所有的一切,只要你愿意。对.net的诟病之一,正是因为它走向了这一原则的反面。有位老外牛人,一时忘
了是谁,他说:如果.net是一个烤炉的话,它是这样的,特别容易就能做出比如
6.5英寸的汉堡,按标着6.5的那个钮就行 (请准备面试的同学考虑,公司为啥要
为一个只能按某个钮的员工付很多钱呢) 。但是,如果你想做,比如7.4英寸的汉
堡,对不起,不行。原因非常简单,没有那个按钮。它引导你规范你,按它的要求去操作,去完成它特别擅长完成的工作。这一部分
非常友好。但是,如果你打算做点特别的格路的,对不起,壳子拆不开,汉堡供
料仓与烘焙的部分是焊死的,汉堡来的时候是一箱一箱的,把箱子放在供料仓里
就行,不过你想放点别的,不行。用崭新的包装把一切遮盖起来,仿佛一切就真的简单的。如果理论上没有突破,
仅靠小技巧,这只是梦想。有的同学可能会说,.net具有重要的意义,它降低了编程的门槛。当然,是的,
完全正确。那么,我们是否能够重新思考一下这一段话呢?它降低了编程的门
槛, (1) 它会让一些某些工作变得简单--因此更不值钱, (2)那些不容易解决
的工作,仍然不容易解决,因此仍然值钱。这就是面试的时候,很多打算长久使用你的公司并不太关心你对新技术了解程度
的原因。因为,那一点也不重要。* 面试1前几天看到有同学问,为什么面试的时候,我明明应聘前端,却要问我些乱七八
糟的东西,而jquery啊html5啊,这些新的非常有前途的技术,这些我非常熟悉
和感兴趣的技术,他们完全不问。因为,那些东西对于理论基础正常的同学,学起来非常之快,可能两周之后就开
始使用,虽然深入某种技术,往往需要N年的时间,而如此精确有时并无必要。他
们学起来如此迅速的原因非常简单,因为手册、书籍 (我 没有、没有、没有 提
到网上短文中的示例)都使用了相同的术语和基本技术,这些术语和基本技术正是
计算机专业学习的内容。是的,计算机专业学习的内容是术语和基本技术,而不是什么新鲜的热气腾腾的
东西。关于计算机专业课程设置,很多年前偶像曾经开过一个玩笑,他说:现在oracle
dba这么值钱 (当时是4万?2万?) ,咱们还教什么专业课,专门培养他们得了。我说:那四年以后,oracle黄了怎么办?oracle没有黄,似乎日益飞黄腾达了。不过,谁知道呢。我们希望培养的是这样
的同学,他们在毕业以后可以在短时间内学会任何一种新的技术,而所有的新技
术对他来说,区别都不大。另一个关于计算机专业课程设置的讨论。姜同学是北京某大公司的头头,手下二
三百人。他希望高校毕业的学生能够熟练,j2ee hibernate struts spring,当
年的对话,大致相当于现在的这些技术吧。一个优秀的毕业生,当在一个月内了解所有这些的使用。当然,我们的培养很多
都失败了,那是另一回事,且不能作为把高校改为技工学校的理由。为什么面试的时候问你那些特别基础的问题,而不涉及新技术?因为新技术会过
时,而拥有基础的同学,能够学习所有的新技术。新技术,不是建立在旧一点的新技术基础之上,而是建立在理论和非常旧的技术
基础之上。* 面试2可能有同学还会质疑,只问理论,会不会让那些实践强的同学失去机会呢?以前CCNA考试流行的时候,对通过考试的同学有个分类方法。一种叫paper过去
的,他们只读了书,没有做过实验;一种叫bible过去的,他们背了题,甚至书也
没看懂;还有一种,真正有实践的--不过,你相信一个有实践经验的同学,他从
来没看过书么?微软和思科,和所有网络考试中最基础的部分,关于osi七层模型,关于tcp/ip
协议,都是完全相同的。这就是基础。对于了解基础理论的同学,如果,如果他拥有实践的精神,那么,一旦他解决过
一次这样的问题,相同原因的问题,无论故障现象看起来多么不一样,他都可能
解决。而对于只有实践,见过这个故障,见过如何解决的同学,再次见到另一个
故障,他一定无法解决,因为即使原理相同,那也是一个完全不同的故障。我们所要注视的,根本不是故障现象本身,而是导致它的原因。只有理论基础,
才能给予解释。我们把理论基础较好的那些,称为学院派。这很多时候是个贬义词,尤其在工业
应用中。但是,我看到很多学院派后来接触实践以后成长起来,我还看到很多野
路子的同学后来开始钻研理论。* 面试3还有同学提到,为什么我有这么好的想法公司却不用我,或者不用我的想法。你的确很有想法,可能非常杰出,但是企业招的却是员工,不是老板。我们都有
把别人当工具的倾向,不过如果想实施 (且不论是否正确),得先有自己身为工具
的觉悟。好想法,应该讲给风险投资商听,或者你自己有钱的话,讲给自己听。* 考试齐同学动手能力挺强的,他抱怨,为什么考试的时候要考概念。因为,我们将使用这些概念进行交流。比如,正则表达式,这是个严格清晰的概
念,一点也不像文科同学说的什么...那些乱用词。我们不能使用诸如"开头两个字是课文",这样的说法只能在跟人类跟用户这样有
限的交流范围使用。之所有要考概念的另一个原因,你真的以为自己清楚地掌握了它么?的确,这样,有的同学靠背诵就能得到很高的分数。这是考试技术低下造成的,
我们却不能因此放弃对概念的掌握。从难度上看,背诵 < 举例 < 使用 < 复述。有的时候,即使你偶而能正确使用 (在有限的场合下,有时还受到技术主管的辅
导或限制,因此不易失控),也不见得总能正确使用。而复述,可以考察出你是
否了解其中所有的要点。齐同学还提到,背概念真没意思。大意如此。概念从来就不是背的。不要使用别人的词汇,而应该使用自己的。如果你对要
点有所遗漏,当你应用它的时候,你如何确保充分注意到这一技术的优点、缺点、
使用的限制?使用的时候再查书?这确实是个答案,而且是个不错的答案。不过有些东西,我们要求的是 熟练,而不仅仅是掌握和理解。在水里理解自由泳
的精要,而不会熟练地扑腾 (还需要足够的心肺功能和肌肉耐力吧) ,也是白扯。要求"熟练"的一个结果,就是那些你最经常用到的知识,绝不会不理解,虽然不
能确保你的理解没有编差。谁说的来着:不了解自己的文章中的词意的作者应该枪决。同样,只会抄网上示
例,甚至不知道调的那个函数原型,没有读过手册的程序员,也...* 李记者你辞职,我对你还是挺有信心的。相同的技术和理论,总可以应用于不止一家公
司和不止一个领域。这个故事告诉我们,新技术等等,都是浮云。我们内心深处的,能长久停留的,
才可能成为我们自己的一部分,永不失去。祝你顺利。