宽容那些与我们不同的人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.GBKterminal -> set charactor encoding -> gbk
这之后就可以进行git相关操作了。** 切换回linux默认export LC_ALL=en_US.utf8; export LANG=en_US.utf8terminal -> 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,不过是用狼的声音,用羊的声音,用英语的声音,把本来我们
心中所想的,以这样的声音说出来而已。其实可怕的并不是使用别人的语言,而是使用别人的思想,尤其是自己也并不清
楚那些思想的原则是什么,尤其是自己也并不清楚自己希望的是什么。
Month: March 2011
历史 河山
升级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)
四答 知道什么是礼貌么?
四答 知道什么是礼貌么?
1.我说:此外,从你的信箱里看不出姓名。所以,请每封信署名。
备注:
同学,你的姓名是 "●缘来·ぁい",我不认识的文字。
你的邮件是 <57574啥啥@qq.com>。
我不知道你是谁.
2.同学回复:我每封信都有署名,请仔细查看
备注:我仔细看了.我没有义务对陌生人的来信更仔细看.
3. 我说:请指给我看。
并且,告诉我 署名 是什么?
备注:
我鄙陋,
1.认为 署名是在信件的末尾,找了,没找到;
2.以为 指导论文只是学术和技术上的交流和知识传递,
不需要学习新新新人类的新的署名方法和位置,
而是只需要了解通用的中国人传统在小学学习的信件格式.
3. 同学说: 我想我们不是在讨论署名吧。
4.我的答复: 非常简单的答案,我不知道你是谁。
备注:
我不觉得有义务回答每个陌生人的邮件.
我不觉得世界围绕你转,不觉得每个人都必须根据你指定的方法知道你是
谁,想你之所想,急你之所急.
有些事情,是我的工作,因此我服从学院指派.但是,希望您保持基本的礼
貌和中国人类公知的礼仪.我不愿意以任何方式教你这些.希望你能明白.
从此绝不回复你的邮件.非常简单,我不知道你是谁,不想在你身上浪费一
秒时间.
三答
三答1. "杨老师 您有即时聊天工具吗?不然太难联系到您了"学院对指导教师没有实时指导的要求。另外,请及时注意学院的通知,不要等到临期末了还有几个小时的时候提问。2. 所有题目都太宽泛,你拟的题目都太大。你要做的内容不是编译器。请明确编译器的概念,注意它和你的论文内容的区别。题目要反应内容。
此外,从你的信箱里看不出姓名。所以,请每封信署名。
抄代码,可以抄到什么程度
抄代码,可以抄到什么程度最近,老是有同学跟我提到 "不会写代码,只会从网上抄",在加上前两天提到的本科毕业论文同学"做"过的微博系统,觉得有必要说一下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 <[email protected]># 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 monitorscount=0while read linedo keys[$((++count))]="${line}"done <<EOF$( xrandr -q | grep " connected" | awk '{print $3}' | awk -F'[x+]'
'{printf("%sn%sn%sn%sn",$1, $2, $3, $4)}' )EOFw_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=29xWinDecorLine=$(xprop -id $window | grep "_NET_FRAME_EXTENTS(CARDINAL)")h_tbar=${xWinDecorLine:37 :2}# get active window size and positionx=`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 monitorif [ "$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 monitorelse 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_monitorfinew_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 monitorif (($w > $w_target_monitor))then w=$w_target_monitorfiif (($h > $h_target_monitor))then h=$h_target_monitorfi# move the window to another monitor# if maximized store info and de-maximizewinState=$(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_horzfiif [[ `echo ${winState} | grep "_NET_WM_STATE_MAXIMIZED_VERT"` != "" ]]then maxV=1 wmctrl -i -r $window -b remove,maximized_vertfi# do movewmctrl -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 byeexit 0
稍纵即逝
稍纵即逝
晚上第九节的课。兴奋了一整堂课,跑到班车的时候,已经一身的汗了。衣服粘
在后背上,冷。
车慢慢地赌,蹭过一个路口又一个路口。我低着头跟着车晃。
再抬头的时候,惊叹了一下。
太阳遮在轻轨高架桥的后边,淡红色的阳光从桥的上下溢出,衬出高架桥深黑的
轮廓。傍晚的光,分散在灰尘里,像水彩在灰色的纸上渐渐地洇开。近处的下
方,成排轿车停在我们前面等红灯,深红晶亮的车顶棱线排列齐刷刷地伸向远方。
我缓过神来,看前面仍然是三个红灯亮着,急忙掏相机。
不在这个袋子里,也不在那个袋子里。终于找到的时候,绿灯亮了,我们随车队
鱼贯而行。高架桥移动,后面耀眼的太阳露出,直射我的眼睛。
再也不会有这样的机会,拍下那一瞬间。
那一瞬间,太阳隐在高架桥的影子里,恰恰位于左上,列队的轿车在右下闪闪发
光。我坐在如此高大的校车的前排,风挡玻璃外的世界一览无余。
这样的组合这样的机会,再难见到了。
这样稍纵即逝的机会,却是很多。
比如刚刚,楼下一个人包着头巾,穿得肥肥大大,一条倔犟的小狗在前面拖着他
走。雪地上只有他们两个,在一大片脚印里穿过。
我静静站在那看,甚至没有想去拿相机。我知道,来不及。
所有的机会,当它们到来时,我们都扮演了降落伞的角色。如果在那一刻,我们
没有准备好,那么,以后永远都不必了。
即然不能拍照,我只有讲给你听。
我听到函数被调用,参数传递,模块间窃窃私语; 我看到递归层层翻卷,闪着金
光,退出条件在下面的某一层世界里跃跃欲试; 我触摸到指令移动堆栈,总线
脉动。
这个世界里,日影移动。白天之后又是黑夜。
以后,我慢慢讲给你听吧。
不行了,学习周老师,必须发牢骚
不行了,学习周老师,必须发牢骚一般给知心姐姐动脑筋爷爷小虎子写信,都作如下开头,今天咱们也模仿一个。我有个朋友啊,他带本科毕业论文。学生们来了,先进行思想政治教育,纪律要求,怎么做会有啥后果,莫谓言之不预也啥的。然后了解学生们做过的小项目,以便定个合适的题目,量体裁衣,免得做不出来。然后就有了戏剧性的一些场面。先说短的,再说长的,如果还有戏有掌,以后连载。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的时候你玩来着.你玩也就玩了,你看不起码农也就看不起了,你就别抢可怜的码农的岗位了好不好?唉.