2010年3月3日星期三
emacs配置系统
首先解决配置的同步问题,贝壳建立了一个svn仓库,用于存储该配置系统。然后在各个系统中co出这个仓库,当有需要调整时ci就可以保持同步了。Linux下可以使用ln连接文件,Windows下比较麻烦点,NTFS格式(大多都是NTFS格式了吧)可以去sysinternals下一个叫做junction的工具,以建立目录的工具链接,当然,.emacs文件只能手工拷贝了。
然后是配置的切分问题,如果只有一个文件,即使使用了版本控制,意义也不大。同时,将配置切割成不同的部分,控制载入过程,也可以跨平台和加速。以下是贝壳的.emacs文件。
;; .emacs profile, written by shell.xu
;; load other set
(add-to-list 'load-path "~/.emacs.d/")
(add-to-list 'load-path "~/.emacs.d/auto-complete/")
(add-to-list 'load-path "~/.emacs.d/plugins/")
(load "emacs-setup")
(load "emacs-redef")
(load "emacs-plugin")
(cond
((not (boundp 'initial-window-system)) (load "emacs-console"))
((memq initial-window-system '(x w32))
(cond
((memq system-type '(windows-nt cygwin)) (load "emacs-win"))
((memq system-type '(gnu/linux)) (load "emacs-linux"))
)
)
)
(load "emacs-keymap")
从上可以看出,我们先设定了.emacs.d作为默认加载路径——大多数文件都是放在这里。plugins是各种第三方程序的安装路径,这样这些程序就无需在各个平台上各自安装一次。而auto-complete单独拆出来纯粹是因为文件太多了。而后,我们加载了setup,这个文件内定义了emacs的基本配置,redef文件内定义了各种自定义函数和变量,plugin内控制了需要加载的各个插件和配置。
下面就有点复杂,简单来说,设定无Windows系统的时候加载emacs-console文件,有Windows的情况下,在windows下加载emacs-win,在linux下加载emacs-linux。这是实现跨平台设置的核心。
最后是keymap,经过上面复杂的设定,按键设置是统一的。
setup文件就不细说了,大家按照自己的习惯设定就好。下面我说几个redef中定义的函数。
(defun switch-windows-buffer ()
(interactive)
(let ((this-buffer (window-buffer)))
(switch-to-buffer (window-buffer (next-window (selected-window))))
(switch-to-buffer-other-window this-buffer)
(other-window 1)
)
)
这个函数的目标是用热键交换两个窗口的位置。如果你经常用C-x 3分栏,并且在两者间跳来跳去的话,有的时候往往希望两者的位置换一下。通常都是C-x b切换当前的窗口,然后C-x o切到隔壁去再换。这个太繁琐了。
(defun popup-term ()
(interactive)
(apply 'start-process "terminal" nil popup-terminal-command)
)
这个函数是用于在当前文件所在路径弹出一个term的。也许有人说了,emacs有term啊。问题是,那个term只能开一个,而且有些东西操作不了。例如你如果想在这个term里面跑aptitude...
注意这个函数里面的popup-terminal-command,这个需要跨平台的,因此在windows和linux下设定各自不同。以下是两个典型设定,至于哪个是哪个我想都看得懂。注意console下面没必要搞这个。
(setq popup-terminal-command '("xfce4-terminal"))
(setq popup-terminal-command '("cmd" "/c" "start"))
然后我们说plugin,这个文件其实很简单,加载插件,然后设定就好。下面是一部分范例。
;; load template
(require 'template)
;;here set the templates directory
(setq template-subdirectories '("./" "Templates/" "~/.emacs.d/templates/"))
(template-initialize)
(setq template-auto-insert t)
这部分范例说明了如何载入template,并且进行设定。
下面是一点细节问题,tool-bar-mode这个设定相信多数人都有做。问题是,如果你在console下用过就知道,如果你设定了(tool-bar-mode -1),立刻会报错——因为console下面根本没这个东西。所以,记得把这个设定放到各个平台上。
最后,这些设定,必须经过编译才能起效。包括所有第三方插件,都必须编译生效。而显然,每个平台编译一遍是个脑残的事情。因此,我们需要写一个Makefile。
DEPENDS=auto-complete plugins
SOURCES=emacs-console.el emacs-keymap.el emacs-linux.el emacs-redef.el emacs-setup.el emacs-win.el
build: $(SOURCES) emacs-plugin.el
for i in $(DEPENDS); do $(MAKE) -C $$i build || exit 1; done
emacs --batch -f batch-byte-compile $(SOURCES)
emacs --batch -l ~/.emacs -f batch-byte-compile emacs-plugin.el
clean:
rm -rf *.elc
for i in $(DEPENDS); do $(MAKE) -C $$i clean || exit 1; done
注意,在每个目录中也要分别写Makefile,不过内容简单多了,基本就是emacs --batch -f batch-byte-compile *.el而已。而plugin这个文件比较特殊——他必须依赖于所有插件才能工作,所以最后才进行编译。
以上工作,基本完成了一个跨平台的emacs配置系统的组建。当然,如果你高兴向其中加入更多的内容,可以遵循以上规范进行。
2010年3月2日星期二
android历史记录备份和应用三例
1.aqq
用adb shell去/data/data/com.android.aqq/databases/下面,把aqq.db复制出来,sqlite3格式,随便看吧。
2.AnFetion
用adb shell去/data/data/.....AnFetion2/databases/下面,把fetion.DB复制出来。
3.信息
这个是最麻烦的。去信息->Menu->设置->导出短信里面导出。但是别高兴的太早,贝壳发现一个bug。如果你的短信里面有西文引号,会导致xml格式错误,从而无法导入。解决方法是手工删除引号。
应用,使用xsltproc,将xml转换为html来浏览。贝壳用的xslt比较简单,抄在下面。
<?xml version='1.0' encoding="GBK"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="//smss/address">
Phone Number:<xsl:value-of select="@data"/><br/>
<table border="0" class="rev_tab" width="100%">
<xsl:for-each select="sms">
<tr>
<td class="rev_tab_rev"><xsl:value-of select="date/@data"/></td>
<td class="rev_tab_rev"><xsl:choose>
<xsl:when test="read/@data = 1">read</xsl:when>
<xsl:when test="read/@data = 0">unread</xsl:when>
</xsl:choose></td>
<td class="rev_tab_rev"><xsl:value-of select="body/@data"/></td>
</tr>
</xsl:for-each>
</table><BR/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
为了美观,你还可以修改一下xslt。xsltproc在linux下直接有包,Windows可以来信问贝壳索要移植(其实去官网上就能下到)。
2010年2月28日星期日
桌面点名
点名地址(http://shellex.info/desktop_relay/)。
1. 今日桌面
全黑
2.OS为?
哪个系统?一个Debian Testing,一个WindowsXP,一个Adnriod。
3.这张桌布是什么?你从哪 里取得的?
纯黑色...
4.更换桌布的频率高吗?
从来都是纯黑
5.桌面有几个ICON?
一个都没有
6.一堆档案和捷径放得乱七八糟的桌面,你看得下去吗?
我说了,一个都没有
7.有没有什么坚持点?
坚持纯黑一个都没有不动摇
8.有为了填这份接力, 还特地整理一下吗?
啥都没有了,整理啥?
9.请再传给8个[我想看看他/她的桌面?]的人。
@ilovezjl 小黄姐姐, @onlycup 小杯子, @OpheliaRing 某话痨, @pipitu 某SE, 就四个吧。
2010年2月25日星期四
关于无线的安全问题
首先是决策,无线路由不是随便用的。有几种情况我建议你重新考虑这个问题。有孕妇者不用,这东西的辐射虽说不大,也不是忽略不计的。万一我乌鸦嘴,你孩子出点啥问题,你触不触的慌啊。电脑全堆在一起可以拉线者不用,这种情况下再买无线纯属烧包。房间太大者不用。最后一个要用也可以,建议你买多个。无线网卡在收信差的时候速度很慢,用起来很不爽,而且辐射大,所以一定要保证你的家里能被无线信号完整覆盖。一台标准路由器能覆盖的范围大约是10-30米内的所有区域,加穿一道普通墙(非钢筋水泥承重墙)。普通人家买一个无线路由器可以覆盖全家,但是我不保证有钱人家....
其次是采购,推荐大家选择好一点的无线路由器,但是不用太贵。差的无线路由器往往不控制辐射功率,你高兴家里天天开一个大功率辐射源么?
后面跟着的是环境检测。如果你有android,有一个软件叫做wifi检测仪,可以检测周围的wifi信道和功率。挑选一个比较空的信道,否则人家的通讯就会变成你的背景噪音,从而降低网速,增加辐射。而后确定你的无线路由的最佳安装位置——通常是在网络出口处。但是如果造成信号覆盖不好,可以考虑加长网线。毕竟加长网线只是一次的事情,天天断线再连接就痛不欲生了。
然后是基础安装——这个都会,就不多罗嗦了。
最后是重头,安全设置。请先设置不广播SSID,这样别人扫描的时候,你的AP是隐藏的。当然,如果你高兴,可以在AP名字上把偷网的人骂一顿。我记得某个咖啡厅的AP名字就是“你还要不要来杯咖啡”。其次,需要选择WPA加密,WEP的破解时间太短,在你通讯频繁的情况下,最多几个小时肯定可以破解——最少只要几分钟。而且更麻烦的是,一旦WEP被破解,对方可以嗅探到你的通讯包。到时候所有的聊天记录,明文密码,全部都是敞开了让别人看的。WPA即使别人破解了AP能上网,最多也只能上网而已。除非使用主动嗅探技术,否则无法造成威胁——而主动嗅探会造成你的网络超级不稳定,马上会被发现。
以上两步保证了别人无法连接进你的网络,而下面我们还要保证网络内的安全。
请先给你的路由器和Windows账户更换一个强密码——你可以自动登录和使用浏览器记录密码来避免输入,但是一定要强。否则当有人进入你的网络的时候,如果一次就拿到了管理员权限,其他安全措施就没有意义了。然后开启路由器防火墙,禁用所有的人连接,除非特定MAC地址。这样只有指定的几个机器可以上网,一般人进入网络后的兴趣就小了很多。最后,请开启你电脑的防火墙,以免进入网络的人利用漏洞进入主机系统。
最后,如果有条件的话,可以用vmware部署一个honeypot,做一个漏洞百出的系统,引诱入侵者先进攻这里。一旦他发起进攻,那么你马上会发现他的踪迹——不过这个就不属于普通用户的范畴了。
2010年2月23日星期二
领导的艺术
帕金森定律
英国著名历史学家诺斯古德・帕金森通过长期调查研究,写出一本名叫《帕金森定律》的书。他在书中阐述了机构人员膨胀的原因 及后果:一个不称职的官员,可能有三条出路,第一是申请退职,把位子让给能干的人;第二是让一位能干的人来协助自己工作;第三是任用两个水平比自己更低的 人当助手。这第一条路是万万走不得的,因为那样会丧失许多权利;第二条路也不能走,因为那个能干的人会成为自己的对手;看来只有第三条路最适宜。于是,两 个平庸的助手分担了他的工作,他自己则高高在上发号施令,他们不会对自己的权利构成威胁。两个助手既然无能,他们就上行下效,再为自己找两个更加无能的助 手。如此类推,就形成了一个机构臃肿,人浮于事,相互扯皮,效率低下的领导体系。
曾仕强似乎说过,一个能干的干部起什么作用?一个能干的干部只能证明他的所有下属都是白痴。
所以,从上推导,我们只要找一堆傻瓜当干部,公司就能兴旺?
2010年2月21日星期日
PC使用android上网
首先是安装。检查是否满足安装条件,如果满足的话,安装apk,这个不用多说。azlink.ovpn需要复制到电脑上,并且准备好openvpn和adb。另外,推荐在手机上也保存一个azlink.ovpn和adb,openvpn,以便在多个机器上使用。
下面开始正式的连接操作,作为测试,请先关闭手机的wifi上网功能和电脑的wifi,有线,以免影响测试结果。本文中的范例系统是Debian Testing(Squeeze),网络环境是中国移动的CMNET(8元80M包月,很合算的)。如果环境有所差异,请照您的环境做相应调整。
1.使用usb线连接andriod和PC,此时android上会出现USB已连接的提示。
2.在android上执行azlink,并且勾第一个勾,Service active,保证系统运行。此时状态应当是Warting for connection。
3.在PC上执行adb forward tcp:41927 tcp:41927,此时可能出现service start。这个是首次运行的原因,不影响结果。
4.执行openvpn azlink.ovpn。此时会出现虚拟网络,并且android上的状态发生变化。
5.在android上,设置->高级属性->手机信息中,查看下面的GSM信息,一般能看到网关和DNS。请去ping一次网关,如果成功,你的事情已经成功了大半。
如果上面不成功,请联系我。如果成功,请在你的系统内重设DNS。azlink.ovpn将你的DNS指向了手机上,可手机本身无法做DNS的。因此请将你电脑的DNS重设为手机上的值。如果你高兴,也可以将azlink.ovpn中的值改掉,理论上说一个地区的移动网络中,DNS应当都是一样的。不过如果你要跨地区,这个DNS就会发生变化。因此,我无法预先给定值,也无法获得。
这是整个过程中最关键的一步。很多人说为什么无法上网,其实是可以的,只是你的DNS没有指向正确的值而已。
6.如果是CMNET,事情就到此为止了。如果是CMWAP,你还需要做一小步。找一个CMWAP能够访问的代理,设到你的浏览器里面。
作为关闭,其实拔线就可以了。不过作为程序员,我们习惯完美的析构过程。所以,下面是关闭过程。
1.恢复浏览器原先的代理设置。
2.断开openvpn,此时android上的状态会恢复Warting for connection。
3.PC上需要执行adb kill-server。这样会kill掉adb的daemon进程,否则adb会一直假转发,并且始终占用进程号。
4.在android上,关闭Service active的勾。并且,如果你喜欢,可以kill掉进程以回收内存。
5.拔USB线。
如果你曾经关闭了手机的wifi,电脑的wifi和有线,现在也可以恢复了。
2010年2月20日星期六
ext3下小文件的恢复
恢复条件:
1.文件没有被覆盖。如果被覆盖了,那就绝对没有希望了。
2.文件不大(通常建议在16K以内)。如果很大,下面一个条件就很难满足。
3.知晓文件内的特定关键字。条件是,文件每4K内,你必须知道至少一个关键字。因为ext3通常将4K内容连续存放,每知道一个关键字,可以恢复4K内容。如果缺少关键字,那就无法恢复了。
4.文件保存的版本不太多。
满足以上条件后,使用以下方法进行恢复:
# grep -abn "id_insert_stmt_param" /dev/xvda1
4799010:713068605:sql_id_insert_stmt_param = "SELECT NEXTVAL
/// 使用grep对/dev/xvda1磁盘进行搜索,需要管理员权限直接访问设备文件,搜索哪个物理磁盘可以用mount来确定。
/// 713068605是相对偏移地址,如果保存了多个版本,可能有多个偏移地址。
/// 他们的选择和确定是个非常麻烦的问题,所以文件保存的版本不能过多。
$ python
>>> (713068605/4096)*4096
713068544
>>> exit ()
/// 以上过程可以在常规权限下操作,使用python(或者其他你高兴的计算器)确定该偏移地址的块首地址。
# dd if=/dev/xvda1 bs=1 count=4k skip=713068544 > 1.tmp
/// 将这个块的内容复制出来,注意磁盘上必须有足够空间,否则搞不好会将原始内容覆盖。
/// 更严谨的方法是将内容dump到其他磁盘设备的挂载点下,做异地磁盘恢复。
以上方法可以恢复一个块的内容。手工恢复所有块后,将内容拼接,就是你要恢复的文件。
2010年2月16日星期二
李琼点名
2. 我的小名:贝壳
3. 谁传给你的:李琼
4. 生日想得到什么礼物:电脑
5. 近期压力大的事:女朋友
6. 未来想做的事:写程序
7. 有没有喜欢的人:有
8. 同学聚会要回去找老师吗:不需要
9. 跟谁出去最幸福:这个...
10.如果你的两个好友吵架了:吵吧,别打起来
11.跟情人最想去哪:宅
12.圣诞节要做啥: 宅
13.最想跟谁过圣诞节:这个...
14.有没有赖床的习惯:有
15.有几个兄弟姐妹:记不清了
16.最喜欢的一首歌:When you believe
17.喜欢什么颜色:深蓝
18.现在在做什么:点名
19.最想大声说什么:低调,低调
20.半夜敢不敢自己上厕所:去吧,又不是坟场
21.谁很欠打:我自己
22.现在很迷什么:程序
23.睡相:不打呼
24.现在的时间:Sun Feb 14 17:58:36 CST 2010
25.是否痛恨传给你点卷的人:不
26.体重多少:这个...
27.天气:冷
28.你若中乐透最想做什么:买房子
29.大学生一定要玩的活动:集体打游戏
30.引起失眠的原因:程序没写完
31.有流口水的情况吗:有
32.近期开心的事:无
33.你经常通宵不睡:偶尔
34.你会和爱自己的人还是自己爱的人结婚啊 :我自己也不知道
35.会喜欢上点你名的人么:恩,很喜欢,但和爱情无关
36.对我的印象:还成
-*被点到必填,
-*请老实回答每一问题。
-*不能擅自涂改题目。
-*写完请点9个人,不可以不点。
-*完后请通知那9个人他被点到了。
-*排名不分先后。
是谁传给你这份问卷的 :李琼
你们认识多久了:一年多吧
你觉得ta对你来说重要吗:还成
你与ta的关系是:茶油
请问ta的兴趣是:珠宝
请问ta的个性如何:很个性
ta在你心目中是几分:满分几分?
最想对ta说的一句话:我就不接着点名了,都在过年。
★起床前第一件事:找手机
★你喜欢的季节:冬季
★打工次数:0
★你讨厌什么样的人 :我不爽的
★你会喝酒吗:一点
★你常哭吗:偶尔
★你常笑吗:经常
★朋友和情人你会选:看情况
★机会和命运你会选?:这俩没区别
★你很自恋吗:很
★你有穿耳洞么:当然没
★这问卷多不多:还成
★喜欢吃冰吗:大热天偶尔吃
★最在乎哪几个朋友:李琼,小黄,etc
★房间里的摆设简单吗:简单
★女(男)朋友精神出轨要不要原谅他:要能回来商量下一步就不叫出轨了,要是不能也不用原谅了。
★如果没有朋友你会怎样:接着写程序
★如果天使可以满足你一个愿望你会要什么:这个...
★喜欢吃的水果:不喜欢水果
★经常不叠被子吗:从来不
★你喜欢雪么:不错,不过讨厌在雪天出门
★还希望被点:不希望了
★舒克和贝塔喜欢哪个:不叫贝克就行
★你最没有耐心做的一件事是什么:我都没啥耐性的
★不想看书的时候怎么办:写程序
★最想对点你的人说什么:做完了,下次被点找你。
2010年2月14日星期日
2010年2月2日星期二
CNNIC的证书
事情的起源,是有人发现CNNIC的证书被加入了Mozilla和系统的信任根证书链里。这引发了大家对早年CNNIC所做的流氓软件的回忆,因此大量技术人士强烈反对。所做的反应包括发起BUG讨论提请Mozilla删除CNNIC的证书,发起投票,写信给Entrust阐述问题等。下面会简述一下信任根证书链,还有CNNIC的背景和历史。
本段适合非专业人士阅读。我们在访问一个网页的时候,通常有两种常见的通讯方式。http和https。区别在于,https会使用网站证书加密通讯过程。证书加密包含了几重的意义,首先,证书保证了你们的通讯没有第三者能截获。其次,证书验证了你访问的网站,是否是他号称的那个网站。也许很多人无法理解,这两种攻击怎么可能发生。要理解一点,中国电信也不是铁板一块,你完全无法指望他们的员工也绝对安全。否则的话,为什么所有银行都使用https来加密访问过程呢?
本段适合专业人士阅读。那么,不使用证书会发生如何的攻击呢?一旦有某个人更改DNS(这东西让百度都吃了亏),以某个服务器替换了你的银行(或者gmail)。那么,你访问你的目标域名的时候,就会被定位到他的中间机器上,他再使用代理技术,通过ssl访问目标服务器。整个过程如同走代理一样,唯一的问题就是你的密码泄露了。那么证书是如何防御这个攻击的呢?如果你访问目标机器,目标机器会让你验证一份证书,标明他的域名(用于防止域名劫持的),签署者。一旦域名不符合,或者你不信任证书,就会报警。那么攻击者如何复制这个证书呢?首先他无法通过访问的方式获得证书原文,因为证书给你的其实只有公钥部分。其次他无法将这个过程也代理下来,因为如果这么做,下面的内容就全是不可解的了,那他就纯粹花钱把自己弄成代理服务器了。最后,他也无法生成,因为按照规定,只有域名的拥有者可以向特定的单位申请证书。于是,他无法复制证书,攻击就会失败。
本段适合非专业人士阅读。然而,你需要信任什么证书呢?如果你要一家一家的信任证书,会发生什么?你见到是否信任就会习惯的去点,这对安全于事无补。因此,这里引申出一个证书链的问题。通常系统内内置了一些证书,这些证书叫做信任根证书。这些证书的权限是,可以让你信任其他证书。而被他们授权的证书,则分为可以继续授权和不可以继续授权两种。一旦被他们签署授权的证书,最起码你访问的时候不会有警告了。现在,CNNIC加入了这个根证书链。那CNNIC是个什么公司呢?他自称是中国科学院下属的中国互联网络信息中心,服务于科学和研究的机构,但很多人指出CNNIC的直接主管是工信部。当年,CNNIC推出中文域名服务,这项服务需要在几乎所有人的电脑内安装插件。他为了提高安装率,使用了不可删除的保护技术。这导致很多人的电脑安装后,无法卸载程序。至于安装呢?也不全是自愿安装(我不排除自愿者,绿霸还有自愿的呢)。他们曾经利用系统漏洞,向大量电脑上强行安装插件。而且CNNIC还借助官方身份,大量推行中文域名——其实他们根本就不是政府机构,而是非营利机构。并且,在前两年拼命忽悠CN域名,最近又突然停止域名解析(虽然是国家规定的),道歉赔偿啥都没有。大家自己想,真的可以信任这种公司么?
本段适合所有人阅读。现在CNNIC已经进入了信任根证书链,如果配合国家级的DNS劫持技术,理论上可以构造一个假的mail.google.com,或者www.hotmail.com。走代理,自己给自己签署一个证书。从而获得你的完整会话。这里(http://autoproxy.org/zh-CN/node/66)有比较大的说明和讨论。
我对这个事情的观点是。作为Mozilla或者任何根证书的发行机构,在没有直接证据的情况下,不大可能拒绝一个国家级机构的要求。然而,无论任何原因,信任一个机构,就代表你要为他的行为负责。如果CNNIC做出任何危害用户安全的行为,Moziila,微软,Debian.org会被我作为同罪者考虑和抵制。同时,系统发行的根证书系统,是否要去信任,是我们每个人的问题。如果你觉得CNNIC根本不值得信任,那么你可以删除他的所有证书,以及签署了他的所有证书。目前而言,我删除了CNNIC和Entrust的所有证书。