20110131

用键盘在双显示器间移动窗口 Ubuntu

用键盘在双显示器间移动窗口 Ubuntu

笔记本通常自己有个显示器,就在键盘上方,但是人心不足,总觉得太小,所以
通常还会外接一个。

窗口在两个显示器间移动,通常也很容易,用鼠标拖动就是,但是人心不足,总
觉得如果不用鼠标的话而使用快捷键的话,手指就可以不离开键盘。

这样的工作,早就有人做了。在win7中,它是默认支持的。在Ubuntu中,快捷键
只支持窗口在工作区间移动。

不过,这样的工作在Ubuntu下也早就有人做了, 见
[http://ubuntuforums.org/showthread.php?t=1045417]。有用wmctrl的,也有
用xdotool的。wmctrl是专门对窗口做操作的,xdotool是专门模拟鼠标键盘输入
的。

xdotool的作者是位牛人,他还有个作品,叫做keynav,能完全不用鼠标,而用
键盘移动鼠标。这样的工作看起来没啥希奇的,其牛之处在于keynav移动鼠标的
时候不是左键左移、右键右移,而是用了二分查找算法,把屏幕划成上下左右四
份,选择了鼠标的目标位置在哪个格子里,然后再把那个格式分成上下左右四分。
如是者…据说有的例子是最坏11次找到位置。考虑到精确定位的时候可能一直在
重复着向同一个方向,11次并不难做。至少在我的经验里,挺容易使用的。

于是我选择了xdotool这一方案。心理学上把这叫光环效应。比如这位牛人的名
字也叫乔丹。上了点岁数的人该知道这另一位乔丹挺牛的,为这名字倍添光彩。

可是基于xdotool的这个在屏幕间移窗口的工具有个不足之处,它默认显示器是
一左一右。而且需要用户手填显示器的分辨率地。人心不足,我把它改了。

显示器一左一右,曾导致大约一个月前,我的脊椎两侧轮着班疼。疼痛令我彻夜
难眠,轮俯卧撑都停了。直到有一天勉力恢复了一半俯卧撑,后背才不疼了。

这个切换当前焦点窗口的工具是个脚本,你得自己给它设置个快捷键。我定在
win+up 上了。这比win7那个还方便。win7下是这样的称动左边显示器要
Win+Shift+左,移到右边显示器要Win+Shift+右。移来和移去使用了不同的按键。
补充,win7这个显示器一上一下摆放也是可以的。

题外话1 我整了个显示器,22英寸,可以立起来,适合编码,可以横着,适合看
碟。特此显摆。

题外话2 发现白板上的笔道(用含酒精的白板笔写的)时间一长(24小时以上)
特别难以清除,用白猫洗洁精能去除大部分。用水彩笔(儿童用的水性笔)写
的,用水很容易就能擦掉;在干了以后,笔触略微变细和不连续,完全可以忍受。
且水性笔较细,白板上能写更多的东西了,字体也更能够容忍一些。

代码如下。这个小东西也起了个名字 swam,
Switch Window Actived between Monitors.

#!/bin/bash
#++++++++++++++++
# Monitor Switch
#
# Moves currently focused window from one monitor to the other.
# Designed for a system with two monitors.
# Script should be triggered using a keyboard shortcut.
# If the window is maximized it should remain maximized after being moved.
# If the window is not maximized it should retain its current size, unless
# height is too large for the destination monitor, when it will be trimmed.
#++++++++++++++++
# modified by Young <gift.young@gmail.com>
# based on chips617's work at
[http://ubuntuforums.org/showthread.php?t=1045417].

# bugs knonw:
# 1. If the left-top conner of the active window is out of your
monitors, we cannot determin which monitor is on, therefore we suppose
it is on monitor B.

# History:
# 2011-1-31 The monitors can be at any position, not only left and right.
# 2007-11 the original chips617's work

# resolution and position of monitors
count=0
while read line
do
keys[$((++count))]="${line}"
done <<EOF
$( xrandr -q | grep " connected" | awk '{print $3}' | awk -F'[x+]'
'{printf("%s\n%s\n%s\n%s\n",$1, $2, $3, $4)}' )
EOF
w_A_monitor=${keys[1]}
h_A_monitor=${keys[2]}
x_A_monitor=${keys[3]}
y_A_monitor=${keys[4]}
w_B_monitor=${keys[5]}
h_B_monitor=${keys[6]}
x_B_monitor=${keys[7]}
y_B_monitor=${keys[8]}

# # window title bar height (default title bar height in Gnome)
h_tbar=29
## todo

# # focus on active window
window=`xdotool getactivewindow`

# # get active window size and position
x=`xwininfo -id $window | grep "Absolute upper-left X" | awk '{print $4}'`
y=`xwininfo -id $window | grep "Absolute upper-left Y" | awk '{print $4}'`
w=`xwininfo -id $window | grep "Width" | awk '{print $2}'`
h=`xwininfo -id $window | grep "Height" | awk '{print $2}'`

# # window on A monitor
if [ "$x" -ge $x_A_monitor ] &&
[ "$x" -le $[$x_A_monitor + $w_A_monitor] ] &&
[ "$y" -ge $y_A_monitor ] &&
[ "$y" -le $[$y_A_monitor + $h_A_monitor ] ] ; then

new_x=$(($x-$x_A_monitor+$x_B_monitor))
new_y=$(($y-$y_A_monitor+$y_B_monitor-$h_tbar))
xdotool windowmove $window $new_x $new_y
# retain maximization
if [ "$w" -eq "$w_A_monitor" ]; then
xdotool windowsize $window 100% 100%
# adjust height
elif [ "$h" -gt $(($h_B_monitor-$h_tbar)) ]; then
xdotool windowsize $window $w $(($h_B_monitor-$h_tbar))
fi
# # window on B monitor
else
new_x=$(($x-$x_B_monitor+$x_A_monitor))
new_y=$(($y-$y_B_monitor+$y_A_monitor-$h_tbar))
xdotool windowmove $window $new_x $new_y
# retain maximization
if [ "$w" -eq "$w_B_monitor" ]; then
xdotool windowsize $window 100% 100%
# adjust height
elif [ "$h" -gt $(($h_A_monitor-$h_tbar)) ]; then
xdotool windowsize $window $w $(($h_A_monitor-$h_tbar))
fi

fi

20110129

为什么我喜欢麦当劳,及其他

为什么我喜欢麦当劳,及其他

大家都说汉堡是垃圾食品,还苦口婆心地劝过我。为什么我一如既往地喜欢麦当
劳呢?

最初发现了一些好处,后来又逐渐发现了新的一些。

比如说吧,在麦当里没有抽烟的。李记者,说你呢。

经常有烟民面对女性,烟盒已经拿出来了,烟卷也抽出来了,有的都放在嘴上
了,打火机火苗子腾腾的,烟民很有绅士风度地问女士,"我能抽支烟么?"

你不觉得跟啥啥很像么。让对方如何作答。

真正有风度的问,是这样的,得到否定的回答不恼怒,这才是真正地征求意见。

类似的问题,女士问你,"我美么?"兄弟,你知道应该怎么回答的。

类似的问题,女士问你,"我怎么就不温柔了?"兄弟,这根本就不是个问题。如
果你给出任何理由,就都落入了陷阱。

我更惨。烟民们在我面前,就没一个问我能不能抽的。包括出租车司机在内。

当然,也包括饭店里的其他顾客。

而在麦当劳里,大家都装得像个君子,因为里面有孩子,都不抽烟。

恩,这是一个好处。

还有,我在麦当劳吃东西,只拉肚子过一次。最近的事,麦当劳堕落以后的事。
冬天的东西,零下二三十度,大开着门,有顾客抗议,说是要进货。为啥堕落,
一会再说,先继续麦当劳的优点。

麦当劳的另一个优点是能吃饱。如教工食堂者,我吃得肚子鼓鼓的,下午1点多
也就饿了。只有麦当劳能让我撑到4点,看着牛老师他老人家神彩奕奕地,我不
知道有多么为难,好几次也只好提前告退。才深信韩师姐说的,牛老师是核能的。

麦当劳的另一个优点,他是把你当人看的。在麦当劳,我只挨过几次呵斥,还被
我厉害回去了。在别的饭店,我是万万不敢的。

所以,科幻协会同学们聚会的时候力邀我一起吃喝。我坚决不去,说,一般来说
在外面吃饭对我是一种折磨。

想饭店的服务人员多是东北人。而东北人的方言中最可恶的一点,是习惯使用反
问句,比如"你说我怎么就不温柔了?"

又与东北人对话来着。去买水果。话说水果已经降价到比蔬菜便宜了,因此服务也
不如蔬菜了。

我挑苹果,拿起一个,扒开外面的尼龙网看看有没有烂的,没烂,拿手里。如是
者三。

然后对话如下。

大妈: 都是糖心的。不让挑啊。
我: (看完就买,一个不放下,算挑么?等额选举算选举么?) 你整个牌子写
上不让挑啊,那边就写着不让尝。
大妈: 这还用说么?

点评:注意。这是东北方方言中的一个典型应用。直令人想挠墙。如同"靠"一
样,它是有全文的。全文,去掉所有反问,是:你是傻的,居然不能认识到这样
一个不证自明的常识,这是不能挑的。
点评完毕。

我: 用啊。不然我怎么知道你不让挑。我告诉你立个牌子,是好话。

点评:请注意上面我对东北方言的灵活应用,反问句。

大妈: 我这不告诉你呢嘛。

点评:请注意上面我对东北方言的灵活应用,反问句。

我: 你下次还得告诉我。

大妈无语我。而我就没再继续,下一句是,"你能记住我么?你凭什么认为我能
记住你这个摊床不能挑?"

东北方言怎么说也是我的母语。那大妈整不好年龄还没有我大,应用的时间也短。

别的方言我就不那么擅长了,在饭店这样的地方,即使擅长也不敢争锋。因此麦
当劳是个上好的选择。

而且,上菜快。

我宁可吃垃圾,也不想在垃圾的环境里吃。

说到这里,可以解答为什么麦当劳堕落了。是因为这么多年来,它和别的饭店相
比,显得便宜了。所以,你就不能享受更好的服务了。

童话里都是骗人的。人与人友善都是花钱才能买来的。我原以为,每个人微笑的
时候,自己内心深处也是快乐的呢。原来痛苦万分,所以要别人付钱才能笑给你
看的。

童话里都是骗人的。公主根本就不屑于跟王子以外的人说话的。恩,不完全是这
样,公主也会说,"那个谁,把这段代码编了,挺简单的。"

这种尊重,是老干部对老工人的尊重。是要花劳动买来的。

当然,这跟年龄无关。我亲眼见的。一小姑娘,手里拿个戳,就是印章,一下一
下扣。她每扣一下,对面一五十岁左右的教授就翻一页材料,把材料翻到应该翻
到的位置,然后递到小姑娘的印章下面。小姑娘端庄而优雅地按下去。

是不是有人要说,她一天天这样也挺累挺无聊的。你闭嘴。

后来我的材料也伸到小姑奶奶的面前了。我没去翻页。之所以死得没那么难看的
原因,是因为带我去的领导,他翻页的。

王辉老师教导我,要把众生当成父母,去尊敬,当成子女,去谅解。此时此刻,
我把把小姑奶奶当成子女,并且在中国不是美国,拉来痛打一顿;或者当成父
母,在美国而不是中国,扔到阿拉斯加,一辈子也不去探望,等她老得不行了的
时候,再去看她好看。

我不厚道。

南方(泛指东北以南,不含东北)方言,好多了。虽然听起来难受点。我唯一受
不了的是四川方言中的一个词。鉴于重庆人一再强调不是四川人,那么好吧,重
庆方言也有这么一个词。

就是"耍"。

这个字在普通话和东北方言中,和四川,啊还有重庆方言,不是一样,不是单纯
中性的"玩"的意思,而是"玩弄"的意思。

所以,我对"耍"朋友,总是介怀。

还有"耍"一阵子,总让我想起耍宝一会儿,或者戏耍某人一会儿。

母语的影响。

除此之外,南方人无论心里多个鄙视你,都会保持礼貌。有人说这是阴险。可是
我们是要求别人敬重容易,还是要求别人礼貌容易;是要求老外表现文明的尊重
容易,还是打心眼里敬爱我们天朝上国容易?

我们,即使敬重别人,也要表现得冷漠,甚至蔑视,是不是小时候受过什么刺激?

而北京方言...想起了那句"唉哟喂,您要这儿么儿说儿"...以后再给你讲。

话说,这两年门卫对我的态度越来越好了。一个很悲哀的原因,因为我很多年没
有称他们"大爷"了。

我希望能尊重你,并且不会因为尊重你而受到你的渺视。

希望你也能有此想法。

希望我能像程序像编译器一样,具有重现性,无论对什么人,对什么事,都持相
同的态度。

无论什么破烂的程序风格,只要符合规定,我就编译通过,给结果;无论谁写的
代码,语法不合格,一概给出更难以阅读的提示信息。

当年在人事处,处长问我啊,"你的人生信条是什么?"或者座右铭吧。

我说"安能摧眉折腰事权贵,使我不得开心颜。"哈哈。与你共勉,请只注意这句
中的正面意义。

20110128

煎蛋的段子 zz

煎蛋的段子 zz

☆ 我想大家在超市卖场里应该也见过这种傻逼小孩的吧——在商场里横冲直撞、跑来跑去,碰翻了别人的东西也不知道道歉,而他们的爹妈往往还护着他们!但最可恨的是那些咬人的孩子,没错,年纪小就觉得想咬人就可以随便咬的那种。

好了,正式开讲,总之有一天我买菜的时候碰上个咬人的孩子,我腿上的皮都破了,就在这时,我看着这小屁孩坏笑的嘴角还流着我的血的时候,我的大脑开始飞速运转……我睁大双眼,大声喊:"糟了!妈的,糟了!"我一哥们当时也在场,他立马就反应了过来,于是也喊道:"艹!最好他没事!艹啊!"这小孩听我们这么一吼早就吓得动都不动了,于是开始哭,而这时他妈也终于姗姗来迟地出现了,开始为我们把她小孩弄哭了而大发脾气。

于是我直直地望着她,一字一顿地说:"女士,请你赶紧带你孩子去医院做个检查。他刚刚咬了我,而我、我他妈有艾滋!"

霎时间什么声音都没有了,整个超市都安静了下来,那小孩知道自己一定是闯了什么天大的祸,所以连他妈都没帮他说话。他妈只是静静地瞪着我,什么话也说不出来。我一言不发地转身,让同样震惊的收银员帮我验好东西,任由我小腿上的血一滴滴掉落在地、慢慢地走出超市。就在我们走出大门的时候,背后传来了那傻逼妈妈抽泣的声音。

那是我一生中所听到过最令人神清气爽的哭声。
——RichTeaBiscuit

python下载

我们以这种方式推广汉语到世界。

20110127

徒步:GPS-KML-maps

徒步:GPS-KML-maps

传说人类在进化史上曾经长期迁徙,所以有徒步,尤其是露天徒步这样的需要.

依据之是人类有发达的汗腺,在马拉松的时候,人类出汗的效率比马还要高.

汉及以后的朝代,步兵协同骑兵作战的时候,行军确实主要是靠脚而不是坦克.而
且吃得比马可能还少.

另一个依据是人类没有体毛--恩,大部分人比其他哺乳动物少.这是为了提供高超
的散热效率,而不是此前传说中的进化途中曾经一度重回海洋.话说迈克哈利斯估
计从海洋进化而来.

总之,我们需要走.

而且,还需要能显摆走过.

显摆的方法还要简单而精确.

1. KML

徒步开始之前,运行手机上的RaceChrono,它需要几分钟时间找到卫星.


行走.行走,行走.

RaceChrono开始根据GPS信号划路径.但是不会显示地图,这是与google纵横不同
的.也因此不需要GPSR信号.

走完以后,导出成KML.这是GOOGLE地图和GOOGLE地球用的格式,全称是keyhole
mark language.keyhole是一家公司的名字,不知道与间谍卫星有关系没.

把kml用蓝牙传计算机上.

在goole maps中 "My Maps"中,建立新地图,然后"Import",选择计算机上的
kml文件.


2. 拼接成一副图

可以看到地图(maps.google.com卫星定位没有偏移,街道图有偏移)上出现了
路径.

手动校正一些位置.我发现GPS信号丢失时,比如在室内,这期间会出现几百米的
偏差.

可能这时你会发现,地图和路线分成了好多页,一次只能看到一部分.这样贴到
博客里,不够给力.

拼接的方法有点诡异,如下.学习自
[http://www.google.com/support/forum/p/maps/thread?tid=0e528c2fed07b88c&hl=en].

步骤1 地图右上角有个链接,"View in Google Earth ",复制这个链接(单击
鼠标右键,copy link address);

步骤2 地图之上, "Google Maps"的右边,那个最大的文本框,把步骤1中的链
接粘贴进去;

步骤3 按 "Search Maps"按钮

这样你就看到分成几段的路径统一了.
如下面的链接所示.
[http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=http:%2F%2Fmaps.google.com%2Fmaps%2Fms%3Fie%3DUTF8%26hl%3Den%26vps%3D1%26jsv%3D310c%26msa%3D0%26output%3Dnl%26msid%3D218380524136999659149.00049abfad727ff65b457&aq=&sll=43.858067,125.346772&sspn=0.012997,0.01929&ie=UTF8&t=h&z=14]

3. 修改颜色

程颖宇同学说,你咋都整成蓝色哩.

其实他指的是东北部那片蓝色区域.那是我的目标,地图上看是绿地或废墟.到了
地方一看,只看到一片蓝色彩钢的围墙.

我以为程同学指的是路线,就赶紧学习了一下,这一"那个颜色其实是Google地
图默认的颜色"是可以修改的.方法如下.

步骤1 打开"My Maps"中的某个路径;

步骤2 选中一段路径--或者说,一些点;

步骤3 左侧栏目的右上角,"Edit"按钮;

步骤4 地图上的那些点附近弹出个对话框,你会看到
"Plain text - Rich text - Edit HMTL"这样的字样,在上方有一个方框,里面
有条线的,点击它;

步骤5 对话框变了,可以改线的粗细、颜色等.

步骤6 左侧栏目的右上角,"save".

20110124

阿于,带加热的空调

如题。

人有失手,继续命令行下的电驴 pic

人有失手,继续命令行下的电驴 pic

人有失手,继续命令行下的电驴

人有失手,继续命令行下的电驴

劳动的一个含义,就是做起来令人不爽,所以才有意义,而不仅是爽。

而令人不爽的主要来源,一是重复性工作,另一个就是你的工作白做了,要修改
或者重做。

今天颠颠连到ZHUMAO的机器上,看看下载的任务们如何了。

发现好多都暂停了。再一查,原来磁盘空间不足。

不能啊,两块2T硬盘。基本没装啥呢。

再仔细一看,上次疏忽,没有设置下载的文件都存哪,在默认的路径下呢。那是
一个小硬盘。

调整开始了。

处理amule暂停临时文件都换到u1目录下

改配置文件

nohup amuled -f --config-dir=/u1/young_emule/.aMule/

logfile仍然/home/young/.aMule/logfile,未找到定制的方法。

然后发现了一个问题,在没有GUI的时候,如何开始这些已经暂停了的任务呢?

应该在amulecmd下,resume B347DDB8198069C9BBA3A768F3D9AB1A。
后面那一大段乱糟的数字(部分是十六进制,故也是数字),是HASH。可以理解
为任务的唯一标识。

可是暂停的任务N多,一个一个来可累得很。

* 导出要resume的hash

amulecmd --password="amule" --command="show dl" > go.sh

* sftp 下载go.sh到本地

要下载到本地的原因是,我本地有利器。称EMACS,而远程的机器上似乎没有。
即使有,估计反应也略慢。

* 写成这样的脚本

go.sh中有所有的HASH,还有很多别的。
我想去芜取精,去掉文件名,下载状态等,再添油加醋,变成下面这样。

: amulecmd --password="amule" --command="resume
B347DDB8198069C9BBA3A768F3D9AB1A"

很多行。其体的说,250行。我想你还记得这个吉利的数字。

这一修改工作,需要
隔一行删除一行
重复250次。

这就是令人不爽的第二种情况,重复性工作。

可喜的是,如果一个工作需要做上N多遍,估计前人就遇到过这种问题。

这就是历史的好处。也是人类要立文字的好处。不必把你带到现场去看。

总之,emacs中有一个好功能,叫做 宏。这个名字实在不怎么高雅。它深刻地表
明了计算机科学家们的人文素养。以后还会有N多事例证明这一点,在此不赘述。

宏的名字一般,功用之大却能给人留下深刻的印象。凡有这功能的,都可称一代
神器了。

比如WORD,由于有宏,所以WORD文档可以中宏病毒。宏语言能支持做出来病毒,
这告诉我们,它能够实现很多强大的功能。

比如UltraEdit,windows下的著名编辑器,能二进制能文本,可高度,支持折
叠,就差能上山下海了。当年韩老师看到UltraEdit支持宏,迅速地就学会并完
成了一个贼老大的批处理。韩老师然后对UltraEdit的宏赞叹有加。

想一代强人能赞叹并充分利用的东西,就是好东西了。你想想子龙之赞长枪,吕
布之赞画戟,韩老师之赞UltraEdit的宏,类此。

为了显示我厉害,大家一般把UltraEdit昵称为UE。与UO齐名,或更有名。

Emacs也支持宏。

* Emacs宏

C-x ( 开始录制宏

C-x ) 结束录制宏

C-x e 测试执行一次

C-u 0 C-x e 执行到文件尾

然后用块删除去头去尾,只留下一大片HASH;
然后又祭起宏这一利器,在HASH块前面加了250个
: amulecmd --password="amule" --command="resume
后面加了250个
: "
然后把go.sh上传到ZHUMAO的服务器上;
然后执行。

然后事情就成了。

20110123

命令行下的电驴

命令行下的电驴

命令行下的电驴,是正在开发的离线电驴的一部分。
我们的学生练习项目。

离线电驴是啥估计不用多解释,有腾讯离线下载在先。
其优势,考虑到东北师大内部的足够高的网络速度,
考虑到机器不用天天挂着下那些源很少的东西。

已经开始下载:IMDB TOP 250。
等我下完了,你再下就快了。
IMDB是 "目前全球互联网中最大的一个电影资料库"。
TOP250,是评分最高的250个。(这数,真吉利。)
这,完 全 是 用 来 学 习 英 语 的。

我已经下完的耶鲁的,麻省的,哈佛的若干课程。
圣经,古希腊,算法导论,欧洲文明,罗马建筑,
N多的BBC和国家地理,及乱糟的东西。

野性俄罗斯,等等。

没有唐朝豪放女这类的东西。大家好好学习吧,珍惜年轻的时光。

以下,amule安装(amulecmd & amuled)

zhumao机器, amulecmd & amuled on CentOS

* ssh root@i.dont.tell.you
* 解压amule src
: tar xjfv aMule-2.2.6.tar.bz2
* 编译 no gui
http://wiki.amule.org/index.php/HowTo_Compile_aMuled
** 上传wxAll
: sftp> put wxWingets-*bz2
** cypto++
http://sourceforge.net/projects/cryptopp/files/cryptopp/5.6.1/cryptopp561.zip/download

解压在了当前目录,一大堆。
移到crypto
make
编译加密相关的东西,还真是慢啊。
恩,再感叹一次。太慢了。

: [root@files aMule-2.2.6]# ./configure --disable-monolithic
: --with-toolkit=base --enable-amule-daemon --enable-amulecmd
: --enable-webserver --with-crypto-prefix=/u1/crypto
注: --with-crypto-prefix=/u1/crypto 必须使用绝对路径,相对路径不行;crypto只需要编译,不必安装。
杨安装了一半,没有找到so文件退出,未清理。

: WARNING! UPnP code has been disabled because libupnp >= 1.6.6 not
: found (try to use --with-libupnp-prefix=PREFIX).


** 按此文档
* run
cp lib/*so* /usr/lib/.
su young
口令 "amuleyoung"
amulecmd 口令 "amule"
* 加服务器
http://www.cublog.cn/u1/43271/showart_679546.html
: 出现了提示符aMulecmd$ ,下面添加服务器:
: aMulecmd$ add ed2k://|server|85.17.52.124|5000|
: > Operation was successful.
: aMulecmd$ add ed2k://|server|85.17.52.92|5000|
: > Operation was successful.
:
: 连接:
: aMulecmd$ connect
: > Connecting to ED2K...
: > Connecting to Kad...
:
: 查看状态:
: aMulecmd$ status
: > ED2K: Connected to 85.17.52.124 [85.17.52.124:5000] with HighID
: > Kad: Not connected
: > Download: 0 bytes/sec
: > Upload: 13 bytes/sec
: > Clients in queue: 0
: > Total sources: 0
用上述方法,估计是添加的服务器不给力,不行。
把young机器上的 /home/young/.aMule/server.met 传服务器上了, with sftp。
改配置文件。

目前是lowid,估计是141.8的端口未经路由器ACL允许。
zhumao,是否4712端口不允许外网访问?log如下。
: > 2011-01-23 02:13:48: ExternalConn.cpp(159): *** TCP socket
(ECServer) listening on 0.0.0.0:4712
: ...
: > 2011-01-23 02:13:58: ServerConnect.cpp(263): Connection
established on: BINVERSE.BIZ
: > 2011-01-23 02:13:58: Connected to BINVERSE.BIZ with LowID
: > 2011-01-23 02:13:58: ServerSocket.cpp(417): New clientid is 4064890
: > 2011-01-23 02:13:58: ServerSocket.cpp(419): WARNING: You have
received Low-ID!
: > 2011-01-23 02:13:58: ServerSocket.cpp(420): Most likely this is
because you're behind a firewall or router.
: > 2011-01-23 02:13:58: ServerSocket.cpp(421): For more information,
please refer to http://wiki.amule.org

* filename ncode,乱码。
牛同学慢慢研究吧。如果不影响离线电驴系统,就算了。
* 正常使用
: su young; nohup amule -f
* 设置KAD
上传young的nodes.dat
改配置文件
* 设置上传限制
aMulecmd$ set bwlimit up 200
> Operation was successful.
> Bandwidth limits: Up: 200 kB/s, Down: 0 kB/s.
* 下线重登录,任务还在。

* 存在的问题
lowid, zhumao?
文件名编码错误, 牛同学

20110121

寻找备份gmail的方法

寻找备份gmail的方法

没有什么能够永恒。Gmail也不例外。

很多个提到google的硬盘比我的硬盘安全多了。

问题是,从我到google的网络也像硬盘一样安全么?世界上最远的距离是什
么,dropbox告诉过我们一次了。

但是,我还没有找到好的备份方法。

本来希望直接用mutt收发邮件的,后来想想还是gmail更方便,用mutt或getmail备份吧。

遇到了下述问题。

getmail的缺点,pop3ssl每次取300多封信,imap启动非常之慢,且每次都以dump告终;
优点是易于指定目标目录或文件。

fetchmail的缺点,默认转发给本地用户,因此不易指定目标文件夹,且需要邮件服务器。

thunderbird是IDE,不易做成定期执行的任务。

www.gmail-backup.com或者http://gmailkeeper.com/, 算了。

哪位大侠有过成功经验,求分享?

20110118

为什么世界不围着你转

为什么世界不围着你转

这类的话,可能你也经常问吧。

比如我今天早晨跟人约了9点。我起床就晚,撒腿奔车站。结果20分钟的寒风中,
我放过了多辆空载的出租车,然后认识到形势的严峻--估计再过20分钟228路车
这不靠谱的也不一定能来。那样,我就铁定迟到啦。

打下一辆车,转轻轨,疾走。8点58分,到达。

9点45分,我约的人来了。

9点50分,我必须到考场,因为我是主考,而且卷子锁在我的柜里,钥匙在我身
上。

当时我也想大呼:为什么啥啥。

为是很多人经常说的一种表达模式吧。为什么228车还不来,为什么我约的人要迟
到,为什么我这么笨把约会定在考试前。还有类似的,为什么这科那么难啊,为
什么她不喜欢我啊,为什么李宇春也有人喜欢啊。

如此种种。听过N多以后,我才明白,其实,这不是个疑问句。

如果你试图回答,比如论证为什么世界没有围绕他转,那你就败了。

这句类似于孩子说"为什么天要下雨啊。"他希望的答复是"唉,我们去不了老虎
公园了",而不是雨本来是受热气流上升托起的小液滴。

不信,你试试对这么问话的女士作如上回答。

世界不围绕任何人转,是个简单的道理,所以大家只是感叹一下。可是偏偏很多
设计,工程的和组织的(泛指,不是你以为的意思),却不按这个套路出版。

比如邮件。

很久以前,在著名的QQ产生以前,有一种交流工具,叫做邮件。关于QQ和邮件的
关系,以后另文单说,这里先打住。总而言之,现在不少人还得用邮件。这种东
西有个好处,就是你不能在邮件的开头写"在么?"这样的礼貌用语,直接谈事,
省了N多时间。

你用啥收邮件呢?

有些同学用师大的信箱,就是mail.nenu.edu.cn或者首页进去的那个。那个其实
只是邮件的一种,它和163,263,gmail(google的mail)等都是同一种,叫做基
于web的邮件。

好处不提了,它最大的坏处在于,如果有一天服务端(就理解成你登录的那个页
面吧)挂了,你就颗粒无收,啥也找不回来啦。

如何证明某某天你确实给你的女友发去过祝福邮件呢?如何证明你确实没收到你
导师的重要指示呢?

所以,能把邮件整到手里攥着,非常重要。所有重要的资料,一定一定要留在自
己手里,全世界谁也不可靠,多大的公司也不可靠。如果在自己手里硬盘损坏导
致数据丢失,那就不用埋怨别人了。

那时你就不会仰大叫:为什么google mail也会被墙啊。

因为世界不是围着你转的。至于它围着谁转,我也不知道。问开普勒去。

怎么应对硬盘损坏?备份啊。备几份?那取决于你的数据到底有多么重要。

书归正传。把邮件整到本地,就是你的计算机里,的工具,是一个复杂的东西。

这种复杂的东西,通常被集成在了一起,以致于很多人认为那是一个完整的东
西,叫做邮件客户端。比如foxmail(国人产品,非常不错)或者outlook。

集成的方案有啥问题呢,这其实与 世界到底围着谁转 有关。

如果你用outlook,你就会发现,如果你想批量的处理邮件,想要某个特定的功
能,比如"先按时间,再按主题,老板写来的邮件优先级加100,女朋友发现以上
排序以后,女朋友写来的邮件优先级加1000,并每天定时给女朋友发封邮件,每
天晚上14点以后给导师发邮件,内容是9点你睡前写的",你就得等微软公司大发
善心开发这一功能。

期限,我估计是一万年。

如果你想自己实现,却发现无法下嘴。为什么你无法插手进去呢,因为这个软件
是完整的。从邮件收到处理到显示到写到发送,你都无法干涉。

因为它认为你是外人,不是内部人,不了解情况,是不明真相的,所以不希望亦
不相信幼稚如你,也能参与进来。

邮件客户端这样的程序也不是约无与其他人交互。但是要它认为你有资格。比如
操作系统,就说windows吧的进程管理工具啦,底层TCP/IP协议栈啦,GDI啦,反
正这些你可能没听说过的东西,都是有资格和它谈谈的。

至于你,得等了解啦情况。

如果你想了解情况呢,就要首先运行一些程序,成为他们中的一员,然后你就可
以听啦。甚至可以发现,其实内部挺乱的,随便谁都可以发言,你也可以,因为
没有足够的权限控制。

注:win7的权限控制已经不错了,不过,软件们还未来得及遵循这些权限规则。
在《让子弹飞》里,屁民一见清官,就习惯性地下跪;清官用强权才能制止。此
四海一也。
注完了。

万幸的是,因为这个世界不围绕着某种体系转--当然,因此很不幸,它也不围着
你转;幸的,它也不围着别人转--所以,还有别的方案。

在古代,UNIX时代,现在这种方案也在某些地方隐秘地存在。

就是以一种叫做管道的机制把各个程序连接起来。它的特点是:1.管道中流过的
东西,是纯文本的,也就是说,你拿记事本就可以看,不需要特殊的工具,只需
要读懂的知识;2.这些程序每一个只完成非常常简单的功能,比如收邮件是一个
程序,显示邮件是一个程序,过滤邮件是一个程序,排序邮件是一个程序,写邮
件是一个程序,发送邮件又是一个程序.

用这么许多程序有什么好处呢.

首先每个程序都很小,我们不会对他提出更复杂的要求,它的行为较为容易监控.就
像,我们不靠某个学生干部优秀的道德品质保证他不贪污我们的68.9的助学金,
而是因为小A只负责领钱,不能管账,小B只负责记账,不能接触一分钱,钱发给
谁,发多少,是由另一个人定的.每个人的任务都足够小,让傻瓜也能完成,免
得犯了错误.

其次,每个小程序,都靠与其他程序沟通来完成任务.即,任何一个程序都是容
易替换的.你觉得收邮件太难了是么,有人能做得很好.收邮件可选的,getmail,
fetchmail;发邮件可造的 esmtp, msmtp, sendmail; 写邮件可选的, emacs,
vim等不一而足.

最后,这些小程序是以起到粘合剂作用的程序结合在一起的.这个程序最好的一
个是mutt.如果它不好,我们也可以换掉.

当出现问题时,我们可以观察总体的行为,即mutt的行为,它表现得和一个集成
为统一的一个的邮件客户端是完全相同的;或者,我们可以观察每个小程序的行
为,因为把它们结合在一起的是类似管道的东西,我们每个人都有能力都允许去
看.

这个世界,不是以地球为中心的,也不是以太阳为中心的.当然,也不会以某种
方案为核心.

所以,北京不是全世界的首都.

想起N久以前的对话.

"国家大剧院就应该在首都啊,它不在国家的中心又该在哪里?"

"听说有个建筑叫做悉尼歌剧院,另外,悉尼不是澳大利亚的首都."

国家大剧院就必须在首都么?

操作系统就必须以这个公司开发的软件作为核心么?

世界就该围绕什么转么?

其实,在这个世界上还有一种机制,是以平等合作为基础的.

美帝说:人生而平等.有人说:人生而平等,有些人之间更加平等.我发现很多学
生不仅没有听过,而且也不能理解这到底是什么意思.

程序,生而平等.

20110117

读书笔记 西方的智慧 节选

读书笔记 西方的智慧 节选
* 西方的智慧
[2011-01-17 Mon]
罗素
亚北 译
中国妇女出版社
2004年1月

pp. 360

有一个普遍原则在哲学史上反复出现,并启发了黑格尔的哲学,这就是:世界的
任何部分都是不可能单独理解,除非把它放在整个宇宙的背景之中。因此,只有
整体才是惟一可能的实在。早在苏格拉底之前,哲学家就有了这种观点。当巴门
尼德说宇宙是一个静止的球体时,他就试图表达这个意思。当毕达哥拉斯学派的
数理哲学家们说"万物皆数"的时候,同样暗示了这个概念。较晚的斯宾诺莎则代
表性地提出了如下观点:只有整体才是最终的实在。继承了毕达哥拉斯传统的数
理物理学家们,在探询一个可以解释整个宇宙的最高公式时,也为同样的信念所
左右。牛顿物理学的惊人发展就提供了这方面的例子。虽然要推翻唯心主义宇宙
休系的概念并不难,但如果不设法理解它的意图,就简单地予以否定,是很危险
的。

有意思的是,唯心主义体系在某个方面正确地描绘了科学理论的理想。科学的主
旨确实是为我们系统地了解自然提供越来越广阔的视野,并提示出从未被怀疑过
的各种相互关系,把日益增多的自然事件纳入某种理论体系。从原则上说,这种
发展是没有止境的。而且,科学理论不容许出现例外,它必须具有普遍的控制
力,要么适用于一切,要么对一切都不适合。因此我们可以说,唯心主义体系是
一种柏拉图式的整体科学观,也是莱布尼茨所设想的那种神的科学。按照某种方
法,一切都相互联系,这是非常正确的。但如果认为事物因为与别的事物有联系
才发生变化,是错误的。正是在第二种情况下,这种科学观很糟糕地偏离了目标。
另外,由于科学探索的特征之一就是没有止境,所以,把一切事物都看成一种制
成品同样是错误的。黑格尔的立场与19世纪后斯的科学乐观主义没有联系,在19
世纪后期,所有的人都以为关于一切事物的答案就在眼前。就像早就可能预知的
一样,但后来的事实证明这只是一种幻觉。另一方面,对神的科学进行补充也是
徒劳的。不管在这方面可以说些什么,这都不是它所属的世界,我们这个世界之
外的世界不可能和我们有什么关系。因此,唯心主义体系是一个不合逻辑的谬误
概念。

我们可以用一个例子来更为直接地证明这一点。我有许多真实的信念,比如说,
我认为纳尔逊圆柱要比白金汉宫高,而黑格尔主义者却什么也不承认。他们会驳
斥说:"你并不知道自己在说什么。要了解你所谈的事实,你就必须清楚这两个
建筑用的是什么材料,是谁建造的,为什么建造,这样,你需要了解的东西多得
没有止境。在你有资格说自己知道纳尔逊圆柱比白金汉宫高是什么意思之前,你
将不得不了解整个宇宙。"但这样一来,麻烦自然就出现了:按这种说法,我在
认知任何事物之前,都将不得不先认知一切事物。因此,我甚至可能永远也无法
开始。没有人会谦虚到声称自己彻底无知的地步,何况这完全不是事实。我的确
知道纳尔逊圆柱比白金汉宫高,但不会宣称自己像神一样无所不知。事实上,你
能够认知某种事物,而不必了解与之相关的一切。你可以恰当地使用某个词语,
而不必掌握全部词汇。黑格尔坚持认为,就像拼图一样,在完成整个拼图之前,
拼板上的任何一块都是没有意义的。而经验主义者正好相反,他们承认每一块都
有自身的意义。的确如此,如果它真的没有意义,你就不可能拼它。

从伦理学意义上说,对体系逻辑学说的批判具有十分重要的意义。因为如果逻辑
理论是正确的,那么以它为基础建立起来的伦理学理论也必定是正确的。但事实
上这个问题还是没有得到解决。

黑格尔主义与洛克的自由主义是完全对立的。黑格尔认为,国家本身是善的,而
公民则并不重要,只要他们于整体有利就行了。自由主义却认为国家应该照顾到
各类成员的个人利益。唯心主义观点容易导致偏狭、残酷和暴政;而自由主义则
产生了宽容和妥协。黑格尔唯心主义是把世界当作某种体系的一个尝试。黑格尔
的目标完全不是主观主义的,尽管它强调精神。我们可以把它称为客观唯心主义。

20110116

kindle与卫斯理

kindle与卫斯理

Kindel者,亚马逊出的电子书阅读器也;卫斯理者,中国写汉字最多的人也。

为啥这两者会有联系呢?

由于世界还没有大同,各国还在使用不同的文字。更有甚者,同一个国家,可能
还在使用不同的文字。

更更有甚者,在计算机世界里,更加混乱。

即使是相同的文字,也可能用不同的方法编码--就是以数字对文字进行编号。

对英文甚至数字都有不同的编码方案,比如著名的ASCII和BCD码、克雷码等,不
一而足。

更不用说汉字了,计有GBK,GB2312,GB18060,UTF-8等诸多编码方案。

给你串数字497825832403,在不同的编码方案下,对应着不同的文字。如果不告
诉你用的是什么编码,打死你也猜不出来。或者你就挨个方案猜,结合上下文,
看哪个方案猜出来的像是人话。

计算机程序如果事先不知道编码是什么,也就只能瞎猜(比以上更有些依据,有
限)。

Kindle也需要程序解码,因此也有类似的问题。

我在把卫斯理全集整到kindle的过程中,花了40多个小时,悟出了点道理。

以下。

1. 文件名, 文件内容 都是有编码的.
在Windows下尚好,只有GB系列的编码,它还是少年,不会犯青年的错误.
而Linux对中文以各种方式支持,这就要求使用者选对.
我发现如果发到kindle的邮箱的话,编码相同为宜.
以UTF-8编码为宜.
但是,这不是最好的方法.

2. 如果在windows下,能以word发送,相当之好.
这时候排版较好.
最好别整成PDF再发.无论是全图扫描的,很多图片的,编码不是非常简单的,处
理的都不太好看.

3. 有个软件,Calibre,是专门用来转换电子书格式的,很不错.
有windows, osx, linux版本.
最大的好处是,传到kindle以前,可以先预览一下效果.
但是,当它处理大文件,即很多文字的时候,速度极其慢.
比如卫斯理全集,在我的实验中,每次都耗费几个小时之多.
然后一看,可能仍不符合要求.打击人.

4. 最后我终于发现最佳处理流程. 如下.

步骤1. 先把不管什么格式,手动整成HTML;这能节省calibre,就是上面说的那
个电子书格式转换软件,很长时间.

不知道该软件啥算法,把PDF或者大的TXT(比如能写如卫斯理这么多文字者)转
成HTML就要费掉几个小时.

手动整成HTML的意思,比如把TXT文件改名为HTML后缀.

步骤2. 手动修改HTML

如果是TXT改名成HTML, 加

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head>
<body>啥啥啥</body>
</html>

head里那段是关键.

步骤3. 用UTF-8编码保存.
如果是记事本打开,可以另存为UTF-8格式.
如果是用emacs打开,C-x RET f C-x s,编码选UTF-8

如果整不出来utf-8,那么,HTML的编码 和 内容的编码 都用gb2312吧.

步骤4. 段落

把所有的^J或^M改成<p>.

段落前的空两格,与后面要用的转换工具有关.free.kindle.com的信箱和
calibre对<p>处理不完全一样.

calibre转换html到mobi时,<p>的每个段落前不会自动加空格(所以需要手动每
个段落前全角空格,批量替换.我用的方法.);free.kindle.com的信箱转换html到
azw时,<p>的每个段落前会自动加2个全角空格那个大的空白;

步骤5. 转换

用calibre转html为mobi格式.

步骤6. 发送

发送mobi格式的文件到free.kindle.com上的你的信箱.
你的信箱的意思是,在kindle上能查到的,你的 用来转换个人文档的 信箱,
不是 yourname@free.kindle.com.
学计算机的谨记,自然语言是模糊的多义的.不咋地的.

以上.

这个故事告诉我们:无论多长的内容,采用了正确的方法,就总能成功解析;无
论多长的路,踏着正确的方向,就总能走到终点.

"正确的"关键是,始终如一,处处一致.
用GBK,那就是GBK,用UTF-8,那就是UTF-8.

只要有一处矛盾,那么就全盘皆错.这也是逻辑残忍的一面,"它会因为对所有人都
相同的态度而伤害某些人的宗教感情."

这个故事花费了我40个小时以上的时间.其实尽早地换个数据来源,可能会更容易.
40小时的时间这个故事告诉我们:如果走了很久的夜路仍然没有尽头,那么应该
换条路,或者

醒过来.

20110113

GPS,我徒步,你记录

GPS,我徒步,你记录

说起徒步,似乎是个时髦的名词,其实,古已有之。

我第一次远距离徒步,是大约四五步的时候。父母都上班了,把我和我哥留家里。
我哥逗我--当然我当时并不认为是逗我,类似于现在很多年轻人对很多事情很认
真一样--我哥逗我,敢不敢到跳窗户到后院去,这有何不敢;然后是敢不敢跳栅
栏,我们叫障子,到邻居家,这有何不敢;然后是敢不敢再跳出去,到家外面的
小路上,这有何不敢。

然后我哥怕了,叫我回来,我不回去,开始徒步。穿过了半个通化市,到了市中
心。

后来问过我哥,你咋不追我呢?答曰:我妈不让我出去啊。

当时没有GPS,我这就算是走丢了。好在知道父母的姓名、工作单位,家住南山
委二委二组。警察叔叔给我爸的单位打了电话。

故事其实比上面要复杂一些。其实我不是被警察叔叔的这个电话找到的, 而是
邻居丁大娘掐指一算,我在啥啥方位附近。该时,我正交通岗里吃萍果。

这是第一次直接的经验,寻址能力是多么地重要。不管用啥方法寻得的。

这也是另一次有意义的经验,GPS非常重要。

后来就喜欢上了徒步。当时这种行为还未见报端,我私下称之为暴走。在城市当
中穿行,几公里时速,走上几个小时。

从有了GOOGLE EARTH,我有时在地图上记录行走的轨迹,贴博客上。每次在地图
上丈量也挺费劲。

前两天,典同学问到我那地图是怎么画的。当时是ditu.google.com截图,在上面
用GIMP画的。

程同学就说:我这有更好的办法,GPS自动记录。GOOGLE纵横。

以前也用过一下,但是除了典同学,居然没啥人一起用,就放弃了。听程同学推
荐,乐颠颠上去一看,满页都是 不能显示地图。没有这个级别的。

后来程同学发来图,告诉我,这是一个叫做墙的万恶的家伙给挡住了。不能用。
翻墙即可。

想我大好公民,以下省去文字若干。

话说maps.google.comditu.google.com就有点不同。

据说,为了国家安全,我国除了特种部门是不能绘制和出版地图的,虽说美帝国
主义都已经有那么清晰的卫星图了。这是技术问题,俺们不懂,类似于云南白药
对内是保密的,对美国啥啥部门仍至于公众,就公开了。不过,这些都是合理的。
只是道理不为我等外人所知也。

由于地图要保密,GPS当然也是的。所以,凡在我国购买的GPS,上面都有一个纠
编的算法,就是说,测得的经纬度是经过修正的,这样才和地图上一致。而水货
的GPS,是没有修正的,所以测得的经纬度是准确的,但是在地图上一看,你明
明站在人民广场,地图上标的位置就可能跑到了伊通河里。

我手机手机是标准的中国货。摩托罗拉Q11,长得很像黑莓。而且不是水货,所
以GPS是准的。准的的意思就是,被修正过的。

买手机的时候,营业员特意告诉我:这手机好啊,GPS是免费的。

我非常困惑,GPS还能收费么?这东西也不走流量,单向下行数据。

这个故事告诉我们,部分事实是一种欺骗的手段。原因之一是当你知道全部事实
的时候会发现事实与他想让你知道的有所不同。而康德还是谁说了,道德,必须
考虑动机。根据以上,营业员是坏的。

不过,是时,我已经成熟到即使别人忽悠我了,我也仍然接受他的正确一面,于
是,才有机会在后来又知道,他之所以推荐这一款,是因为这一款的利润高,而
不是适合于我。

不过,以上并不改变GPS数据是经过修正这一事实。提醒你,GPS被修正过是好
事,合理的。

根据墙的存在,谷歌纵横没法用了。于是程同学又推荐了一款软件,gpscam,拍
照片的时候能把GPS信息存在里面,也能记录。

不幸,我的手机很有个性,没有找到相应的版本。

又找。RaceChrono。这是一款芬兰人出的软件,野外运动的时候记录用的。还能
结队啥的。现在安装,能用到5月份,可以下载新版本。他们还义愤地声
明,iphone上的同名软件与他们无关。

我用了它的基本功能,记录位置。

RaceChoro导出的GPS数据,在maps.google.com有效,但在ditu.google.com上有偏移。
过程是:
1.racechoro记录数据;
2.导出成kml;
3.maps.google.com, mymaps-> create new map-> import

然后就看到我的地图了。然后就可以截图上传显摆了。

以后徒步,就可以自动记录啦。恩,辅以手动。

不过,如果徒步到了外国,就不能用这种准的GPS啦。因为听说有些对安全不太
关注的国家,他们的GPS是没有经过修正的。

注:GPS经过修正一事,最初是由典同学告诉我的。他买了一个带有未经过修正
的GPS的手机。iphone。替他显摆完毕。

20110112

打印1000,用函数指针数组作为递归的跳出条件

打印1000,用函数指针数组作为递归的跳出条件

#include <stdlib.h>

#include <stdio.h>

void go(void){;}

void quit(void){exit(0);}

void (*where_to_go[2])(void)={go, quit};

void calc(int current, int end)

{

where_to_go[(current-1)/end]();

// printf("%d\t%d\t%d\n", current, end, current/end);

printf("%d\t",current);

calc(++current, end);

}

main()

{

calc(1, 1000);

printf("\n");

}

一个变态C/C++面试题的变态解法(要码农背景) zz

一个变态C/C++面试题的变态解法(要码农背景) zz

发信人: SHENOK (陷入经济危机的牙), 信区: Joke
标 题: 一个变态C/C++面试题的变态解法(要码农背景)
发信站: 水木社区 (Tue Jan 11 23:14:22 2011), 站内


题目: 屏幕上打印1-1000这1000个数, 不许使用循环语句/条件语句,不许使用?:算符。
不许在源代码中用列举输出语句的办法傻打,比如一千个printf语句不行, 一个cout后面跟上1-1000这样的也不行,
不再赘述其他傻打行为, 大家都能领会精神。

结果,出了好多千奇百怪的答案, 下面举一个例子

void myprint(int n)
{
printf("%d\n",n);
int t=1/(n-1000);
myprint(n+1);
}

void main()
{
myprint(1);
}

--
不明真相的群众的眼睛是雪亮的


※ 来源:·水木社区 newsmth.net·[FROM: 143.117.68.*]

20110107

Buffer是万恶之源

Buffer是万恶之源

断言啥玩意是万恶之源,是需要证据的,不能凭空诬陷。

甚至,我跳出来激动地说"我最近每天就睡两个小时,昼夜颠倒,白天还总被人
打电话吵醒。我这么不容易,怎么能是凭空诬陷呢。另外,我像这样的人吗。"

这也不行。需要证据。

事情是这样的。

Buffer者也,中文译名是 缓冲区,计算机术语。不过,下面要谈的,其实也不
怎么涉及计算机,看官不妨当此段作赋比兴之类。

起初,俺们是要整个程序。这程序分成两部分。一部分刘同学开发,负责从硬件
里把数据读出来,加加减减什么的,这部分不妨称 数据控;另一部分是关同学
开发,负责从 数据据 里把数据读出来,显示在人类容易看到的屏幕上面,画个
曲线啊什么的,这部分不妨称为 显摆控。

数据控是控数据的,显摆控是控显摆的,这样比较容易记了。于是事情就这样成
了。

数据控用C语言的风格写的C++,大致意思是风格古老而严谨。赞一下刘同学的程
序架构。

显摆控是用C#语言写的,大致意思是风格很in,效果很High。

这两部分如何交流呢。我们找了个特古老的技术,叫做管道。

数据据有了数据,交给管道;显摆控从管道里读了数据,即时的显摆出来。于
是,用设备的人看到了设备的数据。如果这样,事情就成了。

差啥呢?

发现1 数据不是一个一个出来的,而是一团子一团子出来的。或者如毛同学说
的,是一坨一坨出来的。本来电机走着,激光亮着,显摆的数据应该是电机走几
步,显摆一下,走几步,显摆一下,走几步,显摆一下...就像许多软件,非要
不停地告诉你"我干活呐,我正常工作呐,我可真干了不少啊。"

为了加强用户的安全感,和软件开发商的安全感,也许这是必要的。反正,俺们
准备要这个效果。

结果不是的。数据,一坨一坨出来的。

连这,也是好不容易发现的。最初看到的是,前面的一种数据,根本就不显摆,
后面的另一种数据,正常频率显摆。

明眼人一看便知:那一定是后面的数据与前面的数据是不同的技术手段。国情不
同,用同样的制度,所以结果也不一样。如同美英用资本主义就强大,日本也是
啊,而一些蕞尔小国用了,那就完犊子了。

但是! 这两部分都是刘同学一个人用同一种风格开发的,且风格严谨。严谨到啥
程度呢,关同学和俺用了两个来小时,想证明其中一行是错误的。最后,证明关
同学和俺试图证明那是错误的这一行为,是错误的。

后来! 关同学终于发现,前一种数据和后一种数据的速度不一样。再之前,关
同学还发现,前一种数据不是一点也不实时显摆,而是,一直不吭声,然后"哗
"一下,一堆数据出来了,中间过程就全没啥。

意思可能是,中间的过程你不用了解啦,反正有结果就行呗。

插话,好多同学喜欢这么干,这并非优良习惯。交互始终都是必要的。说了一百
遍了,不赘述。插话完毕。

是刘同学的程序有问题,是关同学的程序有问题?反正沟通中的问题,应该是其
中至少一方,或者双方的。

以下诊断的次序不分先后。

1 关同学换了刘同学的数据控程序,用来沟通,按相同的思路写了一个一样的,除了刘
同学的数据控读真正的设备,关同学的程序不读真正的设备,数据全是假的,但
是跟真的一样好。

观察的结果是: 用刘同学的数据控,数据就一团团;用关同学的伪数据控,数
据就很实时。

2 关同学换了关同学的程序显摆控,用来和刘同学的数据控沟通,按相同思路写
了一个一个的,除了真的显摆控逻辑更复杂一些,伪显摆控咔擦掉了一部分。

观察的结果是: 与用真显摆控没啥区别。

2.5 俺们用了一个传统的,微软公司开发的工具和刘同学的数据控沟通。换句话
说,权威出场啦。

观察结果:数据控快乐地工作着,一步一个脚印一声叫唤,实时得很。

从2和2.5分析,是不是看起来刘同学的数据控程序认人唯亲,不是领导不给好脸色啊。

可是从1分析, 是不是关同学的显摆控程序认人唯亲,不是自己家的产品就不好
好合作啊。

其实,不是的,这一切都只是假象。

因为刘的数据控和关的显摆控 根 本 从 来 就没有真正地直接地沟通过。

在两者之间,有一个叫做管道的东西存在。它声称自己接收的和发出的是完全相
同的。取之于啥用之于啥。但是,它并非如所声称的那样工作,或者说,在哪个
犄角九日日九,还有个别的文档,你也早就被表示过认同的,上面写着:

我告诉你的,才是真的;我不知道你的,就是不存在的。

不禁又冒着冷汗想起那段:

引文大意开始

问:哥是不是真实的一个人,还是只是一个虚幻的假的偶像?

答:你说的真实是啥意思?

问:就是像我这样存在的。

答:你不存在。

引文大意结束

因为刘的数据控和关的显摆控 根 本 从 来 就没有真正地直接地沟通过。

在他们之间,Buffer是万恶之源。

当刘的数据控与微软的那位领导(大名曰控制台)沟通的时候,buffer的长度是
0。即,管道知无不言,言无不尽,毫无保留,而时刻都没有保留。

当刘的数据控与关的显摆控合作的时候,buffer的长度被设置为天知道的一个长
度(注:"If the size of the internal buffer was unspecified when the
stream was constructed, its default size is 4 kilobytes (4096
bytes)."),反正不是0。那意思就是,"有数据,是啊,我有数据啦,但是我觉
得,怎么说捏,你现在还太幼稚,不适合都显摆出来。你还真的都想显摆出来
啊,那么,我只好不给你啦。这可是为了你好喔。"

我甚至不让你知道数据的存在。"真的没有数据,不信你读。GetLine(),果然啥
也没有吧。到一个阶段,我会把数据给你滴。什么,你想实时显摆,不是说了这
都是为你好么。"

Buffer对刘的数据控说,你给我的数据我接收到了,再来再来;Buffer对关的显
摆控说,还没有数据哩,你在等等。

最终,当数据大批涌向关的显摆控的时候,Buffer确实可以说,你看,我毫无保
留。

但是,你真的觉得这毫无不同么?


在工程中,我们不得不经常地 间接,而不是直接 使用材料和操作物件。

我们使用指针间接地访问变量; 我们使用文件封装了键盘和显示器; 我们使用
工具隔离高热和危险。

但是,我们从来没有说过, 当我们想利用工具的时候,工具可以剥夺我们直接触
摸世界的权利。

你可以劝我不要直视太阳,但是,请不要替我捂住眼睛。

所以,Buffer是万恶之源。

我还以为过了青春期就不用再这么叽歪了呐。

20110101

工作效率最高的地方 zz

工作效率最高的地方 zz

想像一下一个典型的办公室,在一个银晃晃的大楼里,睡眼惺松地坐电梯上某一层,刷员工卡进到宽敞但被分为很多狭小隔间的办公室,每个隔间都塞满了电脑、文件夹等办公工具,明亮的灯光倒是赶走了不少睡意。可问题是,你在那儿工作效率高吗?
  37signals的创始人之一、《工作大解放(rework)》的作者Jason
Fried在TEDxMidwest上的观点就是,办公室很不幸已成为工作禁区,很多人在办公室办公的效率极低!他调查了很多人,问他们何时效率最高。答案各式各样,有特别喜好某一特定地点的,如:自家走廊、地下室、厨房、咖啡店、飞机、出租车、图书馆;也有特别钟爱某个时间段的,如黄昏、清晨、午夜……不过,这些答案中竟然没有"办公室"!?

  为什么?Jason表示,办公室成了消磨时间的凶手,成了琐碎小事的集聚地。想想看,来办公室的路上花上1个小时;到了办公室整理文档、清理桌面、泡茶泡咖啡又可能消磨了半个小时;再吃个中饭,回来再跟同事聊聊八卦,又是一个小时;上司下午又召集大家开了个会,困得要死,不过幸好快下班了;五点了,收拾一下东西,看看今天的新闻。一天就结束了。很多时候办公室的工作只是流于形式,其中的时间折损是惊人的,1人消耗3小时,100人就变成了300个小时。时间就是金钱呀!效率就是生命呀!
  工作其实就像睡眠,它是有阶段顺序的,要进入深度睡眠状态,就得经过前面四个过程,并且中间不被打扰。所以工作,特别是那些需要思考与创意的工作,需要有一个持续漫长不被打扰的时间链。陈丹青也讲到,艺术学校不应该有"上课"与"下课",艺术是一个持续的过程,灵感来了就得全心全意地抓住它,实现从量变到质量的飞越,这时哪还顾得上什么休息?
  办公室是有各种各样的干扰因素,但公司担心员工若不在"办公室",怎么确保他们是在工作?他们上社交网站,看视频看碟怎么办?Jason说,拜托,社交网站时间就像是以前爹妈时代的咖啡时间了,总得让员工放松一下的嘛。况且这种是员工自身的因素,叫做"自愿干扰",办公室的干扰属于"强制干扰",管理层自己因为没有事情做,所以就专门组织开杀伤力特别大但一般又没有什么实际用途的会议。

  那么究竟如何改变?如何让员工被问到工作效率最高的地方时,首先想起的就是办公室?
  Jason提出了几点建议:第一,安排某一天,比如星期四的下午是安静时间,任何人都不允许说话。这时候可以看到事情解决的进度明显加快;第二,改积极交流成消极交流,比如减少当面交流,更多地使用邮件。很多事情都不是重要紧急的,可以不打扰别人,尽管别,分清轻重缓急特别重要;第三,如果你是管理层,减少无聊会议的频率,如果你是员工,勇敢聪明地敲掉烦闷的会议吧,放心,很多会议是没有太大意义的。
  迎接新的工作模式,你,准备好了吗?