20110331

宽容那些与我们不同的人

宽容那些与我们不同的人

git on linux encoding with utf-8 vs. gbk

灰太狼的愿望是让老婆孩子喝上羊肉汤,喜洋洋的愿望是活着。所以喜洋洋可以
说,你强迫我被吃掉,灰太狼也可以说,你强迫我过不上正常狼的生活。

我们受到的教育是:不打扰别人的自由,那你的追求就没有问题。然而这个世界
居然不是彼此割裂而是一个整体,也就是说,那有个苹果,我吃了,就没有你的
份。

git是个好东西,Linux也是。但是如果在项目中,大多数人都在用着windows,
你用着linux,然后出现了问题,文件名有乱码。如果没有足够的理由--更高的
生产率之类--你就不能要求大家都切换到先进的linux上。

所以,有的时候,先进与否对于是否成为候选方案,完全没用。

就像我刚刚跟瀚哥谈,某个女生不选某个男生,这是基于她 个人的 此刻的 价值
判断,与这个男生优秀与否没啥关系。事实上,人的"优秀性"是不能排序的。

有些人不明白这个道理。我明白了。我在linux下用git进行版本管理,不幸的
是,项目组的其他成员都用windows,那落后的东西。

然后,我提交一个版本以后,git把凡是中文的文件和目录全都复制了一
遍,ubuntu默认的utf-8编码。

我在网上找啊找方案。其中最完整的是这个:

git乱码解决方案汇总 [http://zengrong.net/post/1249.htm]


大家都建议:把windows换成linux,保持linux系工具的纯正蓝血。

可是我的组员们不会答理我的。连我要求他们装接utf-8改造过的git客户端,他
们都不理我。
[http://www.cnblogs.com/tinyfish/archive/2010/12/17/1909463.html]

失道寡助,就是这个意思。

古兰经故事教育我们,如果命令山朝你走,如果它答理你,你就朝它走吧。

于是,我在给出另一个"终极"的git乱码解决方案。而且非常简单。

*在操作git时,把区域设置修改为 中文GBK。*

用linux的,当你与windows对话的时候,改变你自己。

* 在终端中

** 跟windows保持一致

export LC_ALL=zh_CN.GBK; export LANG=zh_CN.GBK

terminal -> set charactor encoding -> gbk


这之后就可以进行git相关操作了。

** 切换回linux默认

export LC_ALL=en_US.utf8; export LANG=en_US.utf8

terminal -> set charactor encoding -> unicode(utf-8)

这之后你又回到了人间,温暖的安全的伟大的linux怀抱。其实,你一直也没有
离开。

* 在emacs中

** 跟windows保持一致

: M-x prefer-coding-system gbk

** 切换回linux默认

: M-x prefer-coding-system utf-8

* 改变文件名的编码

如果已经造成乱码的恶果,还可以在utf8和gbk之间切换文件名。真的修改,而
不是像上面那样修改显示的(解码的)效果。
convmv <filename> -f utf8 -t gbk

例外。convmv在fat32的U盘上运行无效,估计是fat32不允许非法编码。

我们生活在这个世界上。

为了与他人交流,我们不得不使用他们的语言。除了作为病人孩子老人,除了作
为弱者,没有权利要求别人采用我们的语言。

我们采用他人的,大家认可的语言。这并非意味着我们改变了内心的规则。所
以,在听完传教以后,我们可以用你的词汇你的知识框架来讨论你的经典教材,
但是,我不能说阿门。因为那词的意思是"我同意。"

从utf-8转到gbk,不过是用狼的声音,用羊的声音,用英语的声音,把本来我们
心中所想的,以这样的声音说出来而已。

其实可怕的并不是使用别人的语言,而是使用别人的思想,尤其是自己也并不清
楚那些思想的原则是什么,尤其是自己也并不清楚自己希望的是什么。

20110324

历史 河山

.

升级ubuntu,给整挂了

升级ubuntu,给整挂了

打游戏的时候,大家都有过那样的经历吧?

你只能一心一意地应付如潮般涌来的各级敌人,丝毫没有时间去想下一刻的计划。

至于下一刻会发生什么,每一个人都清楚,只是勉力支撑而已。传说,伊丽莎白.泰
勒说"那么多事情要做、那么多事情没有做成。这就是人生啊。"我听说这句话的
时候,她已经停止支撑了。

后来就有人开始吹捧"活在当下"。"当下",就变成了一个令我深恶痛绝的词,连
带着"活在"都令我厌恶。

苏格拉底说,"未经省察/审验/检视/思考的生活,是不值得过的。"只感受现在,
那是动物。人类之区别于动物,就是回顾过去,计划未来。

这一段时间,我就处于动物状态。每天疲于应付这个事那个事,计划的事情,都
推到不知道什么时候的以后。

然后,我的操作系统Ubuntu被我整挂了。

世界瞬间安静了。啥也不用整了。

想想你正在游戏之中,敌人蜂拥而至,你手忙脚乱,大声呼喝。然后,停电了。

就是这样的感觉。

然后才知道,无论多么重要的事情,居然都能停下来--因为你不再呼吸了,就像
操作系统突然挂了,你也就只能开始修操作系统,停下手中的一切。

既然修操作系统能停下手中的一切,未来的计划,对过去的回顾,为什么不能令
我们停下来呢?

我们生存在"当下",而我们的生活,在过去,在未来。

20日.

当初boot空间只给了100M,满了,升级的时候要求再多8M。

我非常困,直接把boot下的一些看着似乎过去版本的东西移走了。

没有更困,所以移到了/home/young/boot下暂存。

机器升级时窗口系统响应不正常,左键没反应,重启机器。无法进入系统,找不
到内核,按任意键继续。

用以前做的引导盘启动,进入系统。sudo cp,把刚刚暂存的东西放回/boot下,/dev/sda1。

重启,硬盘引导,grub要求选择了(平时不用选),进入系统。

再升级,又说root空间不足。这次仔细读了一下,可以清回收站,然后sudo apt-get clean。

空间还是不足。umount /dev/sda1。这下空间够了。打算升级完再mount回来。

升完级,boot空间不够,不能合并新旧文件,以后用/boot,不mount了。改/etc/fstab。

重启。引导成功,把boot分配删了,全另一个数据分区全并。那个数据分区是当
初为了装windows留着的,没用了。

21日,调整分区。用partman(livecd中的)调整,把root放在了primary分区中,bootable。

然后grub menu能显示,但是进入后 file not find, error 15.

此处,表现了网络是解决不了问题的.绝大部分贴子,中文的,英文的,都说
vmlinuz 或者 initrd.img损坏. 个别贴子提到,grub不支持ext4文件系统,又有
更少的贴子提到ubuntu的grub支持ext4.

22日。

N多测试.

update-grub,memtest可以启动了。

把原来的 vmlinuz & initrd.img & boot 复制到新 boot 中; 改 menu.lst。

: title Ubuntu
: root (hd0,0)
: kernel /vmlinuz root=/dev/sda1 ro quiet splash
: initrd /initrd.img

没有使用uuid,没整明白。似乎每个分区都有个UUID。

中间经历过:

1. grub不能启动.

原因:删除boot分区中的东西.
解决:用livecd改grub设置,使得与硬盘及分区一致.


2. grub能启动,有菜单,进入后找不到文件.

原因:全并分区,使得分区与grub中记录的不一样了.
解决:grub命令行重新设置 kernel 的 root参数.

3. grub能启动,能进入某个菜单项,启动超时,找不到root device。 用
update-grub 然后改menu.lst解决,原因不明,可能是kernel的root参数错
了.恢复出原来的错误非常费时间,就是重新破坏一次,放弃了.

: grub-pc: /usr/sbin/update-grub

运行 /usr/sbin/update-grub 的时候,把grub更新到了 /boot 下,这是在
livecd的根下.手动移动了/dev/sda1,我的分区里.

4. 然后,需要恢复安装一些程序.输入法设置等.

原因: 中间安装Ubuntu覆盖过.

Ubuntu比windows强的地方,我的个人设置都还在.

其他收获:

: $ sudo blkid
: [sudo] password for young:
: /dev/sda1: LABEL="linux" UUID="1e2067cb-66ea-4dcc-ac12-f7086f0bd13c"
TYPE="ext4"
: /dev/sda5: UUID="34d4d8c9-dc19-4d59-9d80-33a4107a362c" TYPE="swap"

: $ df -lh
: Filesystem Size Used Avail Use% Mounted on
: /dev/sda1 226G 64G 151G 30% /
: none 951M 320K 951M 1% /dev
: none 955M 100K 955M 1% /dev/shm
: none 955M 84K 955M 1% /var/run
: none 955M 0 955M 0% /var/lock
: none 955M 0 955M 0% /lib/init/rw

: /etc/fstab部分
: /dev/sda1 on / type ext4 (rw,errors=remount-ro)

20110320

三答

三答

1. "杨老师 您有即时聊天工具吗?不然太难联系到您了"

学院对指导教师没有实时指导的要求。

另外,请及时注意学院的通知,不要等到临期末了还有几个小时的时候提问。

2. 所有题目都太宽泛,你拟的题目都太大。你要做的内容不是编译器。请明确编译器的概念,注意它和你的论文内容的区别。

题目要反应内容。


此外,从你的信箱里看不出姓名。所以,请每封信署名。

四答 知道什么是礼貌么?

四答 知道什么是礼貌么?


1.我说:此外,从你的信箱里看不出姓名。所以,请每封信署名。


备注:
同学,你的姓名是 "●缘来·ぁい",我不认识的文字。
你的邮件是 <57574啥啥@qq.com>。
我不知道你是谁.


2.同学回复:我每封信都有署名,请仔细查看


备注:我仔细看了.我没有义务对陌生人的来信更仔细看.


3. 我说:请指给我看。
并且,告诉我 署名 是什么?


备注:
我鄙陋,
1.认为 署名是在信件的末尾,找了,没找到;
2.以为 指导论文只是学术和技术上的交流和知识传递,
不需要学习新新新人类的新的署名方法和位置,
而是只需要了解通用的中国人传统在小学学习的信件格式.


3. 同学说: 我想我们不是在讨论署名吧。


4.我的答复: 非常简单的答案,我不知道你是谁。


备注:


我不觉得有义务回答每个陌生人的邮件.


我不觉得世界围绕你转,不觉得每个人都必须根据你指定的方法知道你是
谁,想你之所想,急你之所急.


有些事情,是我的工作,因此我服从学院指派.但是,希望您保持基本的礼
貌和中国人类公知的礼仪.我不愿意以任何方式教你这些.希望你能明白.


从此绝不回复你的邮件.非常简单,我不知道你是谁,不想在你身上浪费一
秒时间.

抄代码,可以抄到什么程度

抄代码,可以抄到什么程度

最近,老是有同学跟我提到 "不会写代码,只会从网上抄",在加上前两天提到

的本科毕业论文同学"做"过的微博系统,觉得有必要说一下

1. 什么是可以从网上抄的.最粗暴简单的回答是:一个字母也不能复制粘贴.

2. 抄到什么程度你仍然可以说那是你的程序.这是个老大的哲学问题了,不过咱

们不讨论那么深.

故事开始.

前一段时间写的程序--把窗口由一个显示器切到另一个显示器的工具--有个缺

点,如果窗口已经在大显示器上最大化了,或者很长,怎么也不移动了小显示器

上。

虽然我可以快捷键先把它整小,然后再移。终究不爽得很。

忍了很久,而且前一段时间已经找到问题的症结。今天改了下程序。

因为我的程序信赖的一个工具 xdotool,不能移动最大化的窗口。而且,如果窗

口比目标显示器还大,也不能移动。

首先想到的是可以先把窗口缩小,然后移走,再恢复原来的大小。奈何,我没有

找到 xdotool 改变最大化窗口大小的方法。所以,此路不通。

想起来另一个工具可以信赖,wmctrl,倒是可以操作。不过,它不能找到当前的

激活窗口。而这,正是我们要移动的东西,得知道。

在网上找到一德国兄弟的作品

[http://my.opera.com/raphman/blog/show.dml/302528?cid=56972962#comment56972962]

我改吧改吧抄吧抄吧,把关于xprop得到当前激活窗口的那段放我的代码里了。

顺手,把用同一工具判定当前窗口是不是最大化啥的一段代码抄过来。因为窗口

系统不太一样,他用KDE,我用GNOME,又改了一下。

终于,我的程序能够工作了。放在

[https://github.com/younggift/argus/blob/master/monitor_switch.sh]里了

现在,我们可以回过头来回答先前的问题了.

1. 什么是可以从网上抄的.

事实上,我们通常会抄一下 某种实现机制(比如怎么调用printf,它的参数)

的代码示例, 从MSDN或者 code project 这样的站点中.

当然,应该通读一下文档,而不是简单的抄代码.没有看懂的情况下就抄代码,

实践证明,后患无穷.

不读说明书就使用工具或者设备,是极其危险的.API也是一样.

不过,如果已经了解原理,抄一段别人的实现,改吧改吧...似乎可以容忍.

2. 抄到什么程度你仍然可以说那是你的程序.

业务逻辑必须是你手写的,因为那是你的工作唯一区别于别人的东西.让你的需

求适应用户的要求,而不是服从你能找到的资源的下限,即不能因为你手儿不行

就降低要求,除非你明确知道你不行,别人也不能实现.

如果我抄了德国哥们的整休代码,把其中KDE那部分换成了GNOME的,那就是大

抄.我原来的代码是把适用于 左右显示器布局 的代码改成了 适用于 任何布局

的双显示器, 这是加入了一部分功能, 有贡献,不过,整体的代码仍然是人家

的.现在,我改成了用wmctrl,改动就又多了一些.

郭小四同学抄了整体的人物设定和故事情节,那就是抄.如果只是引用一两句主

席语录,那叫时尚.或者叫致敬.

=======================

#!/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.

#---------------------------------------------

# dependence on xrandr, wmctrl, xprop, xwininfo, awk

#

# modified by Young <gift.young@gmail.com>

# based on chips617's work at
[http://ubuntuforums.org/showthread.php?t=1045417].

# based on Raphael Wimmer's work at
[http://my.opera.com/raphman/blog/show.dml/302528]

# History:

# 2011-3-19 bug fixed: we don't depend on xdotool any more, because we
can't find the function by it to manipulate the maximized window.

# 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.

# 2. if one of the monitor is rotated left, the shortcut will be disabled.

# 2011-1-31 The monitors can be at any position, not only left and right.

# 2007-11 the original chips617's work

# bugs knonw:

# empty now.

# 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]}

# get active window

# window=`xdotool getactivewindow`

activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")

window="${activeWinLine:40}"

# window title bar height

# h_tbar=29

xWinDecorLine=$(xprop -id $window | grep "_NET_FRAME_EXTENTS(CARDINAL)")

h_tbar=${xWinDecorLine:37 :2}

# 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}'`

# calculate the new position of the window ...

## if the window was 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

x_target_monitor=$x_B_monitor

y_target_monitor=$y_B_monitor

w_target_monitor=$w_B_monitor

h_target_monitor=$h_B_monitor

x_source_monitor=$x_A_monitor

y_source_monitor=$y_A_monitor

## if the window was on B monitor

else

x_target_monitor=$x_A_monitor

y_target_monitor=$y_A_monitor

w_target_monitor=$w_A_monitor

h_target_monitor=$h_A_monitor

x_source_monitor=$x_B_monitor

y_source_monitor=$y_B_monitor

fi

new_x=$(($x-$x_source_monitor+$x_target_monitor))

new_y=$(($y-$y_source_monitor+$y_target_monitor-$h_tbar))

# ... and the width or the height up to the edge of the target monitor

if (($w > $w_target_monitor))

then

w=$w_target_monitor

fi

if (($h > $h_target_monitor))

then

h=$h_target_monitor

fi

# move the window to another monitor

# if maximized store info and de-maximize

winState=$(xprop -id $window | grep "_NET_WM_STATE(ATOM)" )

if [[ `echo ${winState} | grep "_NET_WM_STATE_MAXIMIZED_HORZ"` != "" ]]

then

maxH=1

wmctrl -i -r $window -b remove,maximized_horz

fi

if [[ `echo ${winState} | grep "_NET_WM_STATE_MAXIMIZED_VERT"` != "" ]]

then

maxV=1

wmctrl -i -r $window -b remove,maximized_vert

fi

# do move

wmctrl -i -r $window -e 0,$new_x,$new_y,$w,$h

# the following lines are for debug.

# echo x x_source_monitor x_target_monitor

# echo $x $x_source_monitor $x_target_monitor

# echo y y_source_monitor y_target_monitor

# echo $y $y_source_monitor $y_target_monitor

# echo h $h w $w

# echo new_x $new_x

# echo new_y $new_y

# restore maximization

((${maxV})) && wmctrl -i -r $window -b add,maximized_vert

((${maxH})) && wmctrl -i -r $window -b add,maximized_horz

# raise window (seems to be necessary sometimes)

#wmctrl -i -a $window

# and bye

exit 0

20110316

稍纵即逝

稍纵即逝


晚上第九节的课。兴奋了一整堂课,跑到班车的时候,已经一身的汗了。衣服粘
在后背上,冷。


车慢慢地赌,蹭过一个路口又一个路口。我低着头跟着车晃。


再抬头的时候,惊叹了一下。


太阳遮在轻轨高架桥的后边,淡红色的阳光从桥的上下溢出,衬出高架桥深黑的
轮廓。傍晚的光,分散在灰尘里,像水彩在灰色的纸上渐渐地洇开。近处的下
方,成排轿车停在我们前面等红灯,深红晶亮的车顶棱线排列齐刷刷地伸向远方。


我缓过神来,看前面仍然是三个红灯亮着,急忙掏相机。


不在这个袋子里,也不在那个袋子里。终于找到的时候,绿灯亮了,我们随车队
鱼贯而行。高架桥移动,后面耀眼的太阳露出,直射我的眼睛。


再也不会有这样的机会,拍下那一瞬间。


那一瞬间,太阳隐在高架桥的影子里,恰恰位于左上,列队的轿车在右下闪闪发
光。我坐在如此高大的校车的前排,风挡玻璃外的世界一览无余。


这样的组合这样的机会,再难见到了。


这样稍纵即逝的机会,却是很多。


比如刚刚,楼下一个人包着头巾,穿得肥肥大大,一条倔犟的小狗在前面拖着他
走。雪地上只有他们两个,在一大片脚印里穿过。


我静静站在那看,甚至没有想去拿相机。我知道,来不及。


所有的机会,当它们到来时,我们都扮演了降落伞的角色。如果在那一刻,我们
没有准备好,那么,以后永远都不必了。


即然不能拍照,我只有讲给你听。


我听到函数被调用,参数传递,模块间窃窃私语; 我看到递归层层翻卷,闪着金
光,退出条件在下面的某一层世界里跃跃欲试; 我触摸到指令移动堆栈,总线
脉动。


这个世界里,日影移动。白天之后又是黑夜。


以后,我慢慢讲给你听吧。

不行了,学习周老师,必须发牢骚

不行了,学习周老师,必须发牢骚

一般给知心姐姐动脑筋爷爷小虎子写信,都作如下开头,今天咱们也模仿一个。

我有个朋友啊,他带本科毕业论文。

学生们来了,先进行思想政治教育,纪律要求,怎么做会有啥后果,莫谓言之不

预也啥的。

然后了解学生们做过的小项目,以便定个合适的题目,量体裁衣,免得做不出来。

然后就有了戏剧性的一些场面。

先说短的,再说长的,如果还有戏有掌,以后连载。

1. 时光机

某同学是实现个 画图 那样的工具.简单一点,不需要多种颜色方案,32位真彩

一种就行了.

同学当时就问: 32位真彩是吧.

俺朋友: 是.

同学记在笔记本上了.

需求全说完了,同学又问: 32位真彩?

俺朋友: 是.

同学记在笔记本上了.

你没眼花,以上不是复制的文字,是发生了两次.

隔几天邮件来了: 是真彩32色么?

回信:真彩32位,不是32色.

不明白了.是时光倒流么,这一切从来没有发生过?

强烈怀疑当时的提问和记在纸上,只是一种表演,行为艺术.不然,真是难以再找

到其他解释了.

2. 另外某位同学

做过啥东西啊?

跟朱老师做过一个微博.我们几个人合作的.

课程设计?

是,课程设计.

有啥功能?你负责哪部分?

我负责blabla部分.

这个blabla记不太清了,大致是 查找好友,查找微博内容,收藏啥的.别人的工

作是 登录时的身份验证,还有后台.

我那朋友嘴欠呐,就追问了一句,后台都是啥?

同学犹豫了一下,然后说 表,禁言(这个又追问了一下,类似于禁止发言),

敏感词啥的.

恩,还挺上路的.

出了两个候选题目,都用php,一个是Latex一个小子集,把公式变成图片,另一

个是做C的语法加亮.同学的反应,让我感觉她似乎听不太懂.尤其是,她似乎没有

听说,也没有见过语法加亮.我提示你们学的VC++里就有语法加亮,就是不同的词

颜色不一样,比如for这样的保留字,就是关键词,颜色和变量不一样.

然后,教师突然想起问个问题. php输出用什么语句?

啊?

你看,C语言输出的时候用printf,p-r-i-n-t-f,php用什么函数?

……

你们的博客是抄的吧?你们用的什么工具修改的?

DreamWeaver.

也就是说,你们改的是只是外观.

但是,你们为啥说你们*做*了个微博?

上面这些有些兄弟可能理解起来有困难.大致类似于下面的对话.

你写过啥作品啊?

一些诗.

哪些方面的呢?

人生啊啥的.

那你接下来的任务是写一首,押不押韵都行.

啥?

知道啥是韵不?就是,blabla.

啊?

把你以前写的诗读一首我听吧.

两个黄鹂鸣翠柳,一行白露上青天.大概就是这些.

网上抄的吧?

改了一些.

以上.

3. 想起个别的事.

当年在SMTH,有位兄弟说过两天要去面试,怎么才能显得精通Linux.

大家出谋划策.我跳出来说,你这不对啊,不会就是不会呗.

她非常愤怒,在版上否定了我的浅见.并给我邮箱里发了封邮件,说:你太过份了.

可是,你仍然是不对啊.你可能占了某位码农的岗位.那位兄弟天天啃Linux的时

候你玩来着.你玩也就玩了,你看不起码农也就看不起了,你就别抢可怜的码农

的岗位了好不好?

唉.

20110306

镜像

.

argus.py 可以仍是昔日素心悠游的少年

argus.py 可以仍是昔日素心悠游的少年

有的时候, 会扫一眼来信的签名。

有的是纯工作单位和联系电话, 如偶像的; 有的啥也没有, 连"这个人很懒,
什么也没有留下"也没有; 有的是莫名其妙的名字, 也不知道啥意思, 如果来
信是讨教问题的, 就感觉像是蒙个猪头的家伙闯入你家门, 问"你说我这病咋治
", 你说我要把下脉, 对面的先生大摇其头, 说可不能让你见了我的真面目。

签名各种各样, 没创意的居多。而建一每次的签名总能让我目光停留。 所以,
私底下以为, 这个工程师的心底里是个文学青年。

建一的某个签名是: 我已不是昔日素心悠游的少年。

其实, 你可以是的, 永远都可以。

We carry our laptop computer to different places, such as workshop,
office, home, etc., where we connect it with different monitors. We
click the mouse to setup the resolution, position, ratation for every
monitor repeatly.

With Arugus, the untility for saving your current setting of
display/monitor, you can collect automaticlly for all the
display/monitor connected to your computer into a shell code, which
later you can run to restore the setting.

What you need is just remember the name of the shell code, which
brings you all the information of your favorate working environment as
soon as you run it.

An simple example is as the follow.

I have a Dell display in 23 inch, which can rotate vertically for
programmer easilly browsing a large scale of code with out pagedown
or pageup, as well as rotate horizantally for watching movie without
black edge.

I turn the monitor left, before setting up the layout (position and
mode and rotation) for it with System->Monitors in Ubuntu. Then, I run

: ~ $ arugus.py -s programming.sh

to cteate a file named programming.sh excutable.

: ~ $ cat programming.sh
: #!/bin/bash
: xrandr --output VGA1 --pos 0x0 --mode 1920x1080 --rotate left
: xrandr --output LVDS1 --pos 0x1920 --mode 1280x800 --rotate normal

I turn the monitor horizatally, then also set up the current layout
manually with GUI System->Monitors. I save the current setting as movie.sh.


: ~ $ arugus.py -s movie.sh
: ~ $ cat movie.sh
: #!/bin/bash
: xrandr --output VGA1 --pos 0x0 --mode 1920x1080 --rotate normal
: xrandr --output LVDS1 --pos 248x1080 --mode 1280x800 --rotate normal

Once completed the steps above, we can switch the working condition
with running the corresponding shell code.

When I watch movie,

: ~$ ./movie.sh

when I input code,

: ~$ ./programming.sh

In my office, in my classroom with projector, or in my workshop, I can
switch my laptop to the suitable state.

We can return whatever we have been, if we remember. Yesterday once
more.

Dependency:

xrandr, you usually have.

python, you usually have.

bash, you usually have.

20110302

有事要吱声

有事要吱声

计算机输入输出的时候,传统上有三种方法。

一种是轮询,类似于每隔一会就上人人上瞧一眼,哪个好友又抽疯更新状态了;

一种是中断,类似于有同学在人人网给你留言,你不用总花CPU时间去看,而是人
人网主动的发封邮件给你,而你有邮件通知工具,一收到邮件你机器就叫唤。于
是你脱离工作状态,上人人。

另一种是DMA通道,类似于你后台下载一大推VERYCD的东西,前台不耽误看碟。

如果不是批量的话,很多场合,我们希望是中断方式,不幸的是,很多时间恰恰
要轮询。

是不是有人强迫症到半夜起来上厕所还要收下邮件看看QQ的?

工程上也一样。

俺们使用git做版本控制,长时间以来,我每天pull一次。然后看看同学们有啥
进度。

SVN很久以前就提供一个好功能,有人更新代码的话,会给大家发封邮件。为啥
不是QQ消息呢?因为电子邮件是因特网中三个核心技术之一,QQ不是的。

其实git也可以提供类似的功能。一年左右以前,我试把了一次,失败了。

前一段时间跟李记者和典典烤肉,又提起这个。话说,我们仨谈不完的话题恰恰
是技术本身。本次会面,就先友好地把ipad和kindel等东西拿出来,大家显摆一
翻。还有口头上提到的8G内存啥的。

典典说,他们公司也用git管理版本,有邮件通知功能。我又活了心,回家歇了
几天,整些俗务,然后又回过头投入到美好的git geek生活中。

其实邮件通知说起来也容易调。

有个hooks目录,往里面拷一个post-receive-email,然后配置一下。事情就成
了。

不过这只是说起来。我发现一个规律,越是简单的,越是有N多人写了或抄了相同
的教程的,我调起来总是失败的次数越多。直接读文档,反倒好一些。

其实上面的描述里,有好几个陷阱, 或者太过简单, 写教程的人不太提。

1. 那个hooks目录是服务端(比如安装gitosis的那个)的,不是客户端的.更严格的说,是大家一起向它
push的那个git,而且大家相互之间不会push.这是手册上说的.

2. post-receive-email一般已经跟git一起安装了,不用到处找,在你硬盘上.通
常在
: /var/git/repositories/gittest.git/hooks/post-receive
或者这样查到
: ~/git/gittest $ dpkg -L git | grep post-receive-email
: /usr/share/doc/git/contrib/hooks/post-receive-email

3. post-receive必须是可执行

4. sendmail 必须启动

我上次可能就栽在这上面了.

不清楚为什么在我的Ubuntu下,不启动sendmail,也能发出邮件。

: sendmail -t < mailbody.txt

服务端CentOS,需要启动sendmail

: /etc/rc.d/init.d/sendmail start


以上.

此外,push的时候发现,使用git也有文件系统编码的问题.

原来的git都是gbk的,而今我投奔了utf8.于是,git自动把N多文件名都复制一
份,改成了UTF8的.唉,跟SVN的做法没啥区别.

网上大家都建议所有成员一起用linux.暂时估计还不行.刘同学正试windows下的
utf8 git,等消息中.

一个收获.

sendmail -v
查看详细信息, 包括发送邮件的过程, 用于确定问题的原因.

要想知道问题的原因,当然,不仅要知道如何看,如上,还要知道那些信息到底
是什么意思.

这就得看理论书了.


配完了以上这些东西,git终于能在有事的时候就发邮件了.有事吱声,不用成天去看了.

尤其是成天看,却不见更新.

顺便说一嘴,春晚的"喜欢你就抱抱我亲亲我爱爱我",把我恶心够呛.你事怎么就
这么多呢.

知道为什么把WINDOWS下的杀毒软件一个个都杀了么?因为它们太事多,打扰人工
作.干点活就成天叫唤"我又给你杀了个病毒".杀了就杀了,你以为我留着你干嘛
的,打呼噜翻跟斗的?"你的计算机打败了全国XX台计算机",我同意你测了么?
测量是占用启用时间的,显示这条没用的消息是占用我的显示器的.

有事你就吱声.但是,前提是有事.如果你成天让我轮询,我就让你闭嘴.