May 7, 2010

彻底废掉Dell笔记本的MediaDirect

话说, 我现在用的笔记本是Dell Vostro 1400, 虽然预装了Vista, 却是一次也没启动, 当时直接进LiveCD清掉了硬盘. 众Linuxer也可以这么干, 只不过要注意一个问题, 今天一个朋友问到我, 顺便在这儿记录一下.

Dell的本子只要不是很低端的都带一个MediaDirect, 基于Win, 可以用它看个图片电影什么的, 可能对某些人来说比较方便, 但在我看来就是废品, 更不必说它的启动过程会进行很危险的操作了, 所以, 杀无赦…

要知道怎么废掉它, 首先得明白它的原理, 它是基于Win的, 而Win的启动必须是可引导的主分区, 那么你又装了一个Win怎么办? Win的引导程序只能启动第一个可引导的主分区, 更别说Dell希望这个MediaDirect的分区平日是隐藏的了. 所以, Dell想到了一个很危险的解决方案—一个如果你操作不当,  会清掉你的分区表, 不修复就会丢掉所有硬盘数据的方案. 简单说, Dell用MediaDirect键, 也就是那个房子键启动MediaDirect的时候, 会改硬盘的分区表, 调整MediaDirect分区从隐藏变成主分区, 并设置为可引导, 关掉MediaDirect的时候再改回去, 很危险吧, 尤其是当你删除了MediaDirect分区的时候.

当然, 长按MediaDirect键可以恢复, 但是这换来换去的, 又是很重要并且很脆弱的数据, 我放心不过. 而且我希望免掉这个麻烦, 万一我不小心碰到房子键呢? 能不能废掉这个按键, 让它也变成正常的开机按钮呢?

当然可以, 说了这么多废话, 来看操作. 注意这个操作会废掉你的分区表, 事先备份!

1, 短按电源键开机进入Live系统

2, #dd if=/dev/zero of=/dev/sda count=1

3, 短按MediaDirect键开机进入Live系统

4, #dd if=/dev/zero of=/dev/sda count=1

5, 长按MediaDirect键开机

现在好了, 不管你按哪个键都能正常开机而且不会搞乱你的分区表.

这中间还涉及到一些MediaDirect键的技术细节, 有校验, 存储的也不是普通的MBR, 而且Dell的工程师工具可以改. 但是过了很长时间了, 已经记不大清了, 不敢胡说, 有兴趣的朋友可以给我发邮件.

好了, 该睡了. 晚安.


May 5, 2010

利用mutt的filter实现新邮件提醒

“All mail clients suck. This one just sucks less.”

mutt实在是强大, 千奇百怪的功能, 只有你想不到的, 没有不能实现的.

mutt擅长和其它软件配合, 比如抓取邮件部分有人用fetchmail, 有人用getmail, 有人用内置pop3, 也有人像我一样用内置imap. 但都会遇到一个问题, 新邮件提醒, 这个问题上更是各显神通, inotify监视本地mailbox的, 安装各种notify软件的, 嵌在conky里的, 脚本抓取atom订阅配合cron的.

第一种也可以, 就是有点麻烦, 有点小题大做. 而后面的几种解决方法我觉得都不太好, 因为如果是gmail, 就隔几分钟就登录gmail; 如果不是gmail, 基本上都不太容易实现. 我理想的新邮件通知是这样的: 只依靠mutt来检测, 能够改掉screen里mutt的title, 能跳出notify提示你有新邮件, 能配合声音, 能…

解决问题的过程无非就是RTFM, 很好, mutt提供了一个filter的功能, http://www.mutt.org/doc/devel/manual.html#formatstrings-filters, 简单说就是将status通过管道pipe到一个脚本, 这下好了, 你的status里设置上新邮件相关字符串, 脚本里一检测, 其它的问题就全都解决了.

下面是我mutt中status_format的设置, manual中说了, 最后加上(“ ”), 就将status字符串传递给第一个词, 也就是我指定的mutt-filter脚本. 顺便说一句, mutt没那么蠢, 当然是只有这个字符串变化了才会触发pipe的动作.
set status_format="mutt-filter '-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]----%>-(%P)---'|"

下面是我的mutt-filter脚本, 我只改了screen的window title, 发了个notify, 想要声音的自己加上就是. 最后那行的echo “$1”是将字符串还给status, 要不只是pipe到脚本, status空了的.

#!/bin/sh

if [[ "$1" =~ "All Mail" && "$1" =~ "New:" ]];then
	notify-send "Get new mails"
	printf "\ekmutt: new\e\\" > /dev/tty
else
	printf "\ekmutt\e\\" > /dev/tty
fi

echo "$1"

May 3, 2010

关于SVN的外部diff工具

公司的项目用的SVN, 也还好, 虽然慢点. 但是它的diff和merge实在是human-unreadable.

还好, SVN可以使用外部的diff工具, 例如vimdiff, 只要写个下面那样的脚本, 然后将svn的config中diff-cmd指向它就好.

另外关于diff3, 我的理解刚开始和svn的merge不同, svn实际上是将两个版本的差异变化实施到当前版本. 我想用vimdiff来实现, 最后cat合并后的本地版本以满足svn的要求, 但是一直有问题, 还差点在生产中出状况, 而且这个用的也不多, 所以暂时放下. 有那位大侠实现了vimdiff作为svn的diff3-cmd, 请一定告诉我, 联系方式见About.

#!/bin/sh

# Configure your favorite diff program here.
DIFF="vimdiff"

if [ -z $2 ]
then
	echo ERROR: This script expects to be called by subversion
	exit 1
fi

# Subversion provides the paths we need as the sixth and seventh
# parameters.
LEFT=${6}
RIGHT=${7}

# Call the diff command (change the following line to make sense for
# your merge program).
#$DIFF --left $LEFT --right $RIGHT
$DIFF $LEFT $RIGHT

# Return an errorcode of 0 if no differences were detected, 1 if some were.
# Any other errorcode will be treated as fatal.
exit 0

May 3, 2010

我的配置文件和脚本

放在了Github上. 真的是超喜欢Git, 又快又方便, 和Vim整合的又好.

最近有时间会详细解释下各个配置文件, 例如bash, screen, vim, mutt等, 敬请期待.

网页浏览:

http://github.com/adam8157/

Git clone:

git clone git://github.com/adam8157/dotfiles.git
git clone git://github.com/adam8157/scripts.git

May 2, 2010

Vim配合xsel访问剪贴板

话说我一直在虚拟终端下用vim的, 但是有个问题, 普通版本的vim无法访问中键和系统剪贴板, 这也不是大问题, 鼠标选就是了, 但是有时候需要和虚拟机交互, 要知道我这连leafpad都没装, 所有的编辑工作全是vim, 为了这么点事把vim的图形库装上实在是让我不爽.

好在, 有xsel, 用它配合vim就能访问中键和系统剪贴板, 洁癖狂和折腾狂再一次胜利了.

代码放在后面, 可以看到, 我把它们伪装成了*和+寄存器, 但是功能和原版的有差别, 只能先yank在再复制到剪贴板, paste没问题. 至于为什么不用xclip, xclip会因为detach在关闭vim后失效, xsel却能避免, 虽然会产生一个错误log, 但是把这个log指向/dev/null就好.

PS: 哪位大仙如果知道如何简单将区块传给命令而不是叹号filter这种形式, 一定告诉我.

" Use xsel to access the x clipboard
if $DISPLAY != '' && executable('xsel')
	nnoremap <silent> "*y :'[,']!xsel -i -p -l /dev/null<CR>u
	nnoremap <silent> "*p :r!xsel -p<CR>
	nnoremap <silent> "+y :'[,']!xsel -i -b -l /dev/null<CR>u
	nnoremap <silent> "+p :r!xsel -b<CR>
endif

——–Better Way——–

" Use xsel to access the X clipboard
if $DISPLAY != '' && executable('xsel')
	nnoremap <silent> "*y :'[,']w !xsel -i -p -l /dev/null<CR>
	nnoremap <silent> "*p :r!xsel -p<CR>
	nnoremap <silent> "+y :'[,']w !xsel -i -b -l /dev/null<CR>
	nnoremap <silent> "+p :r!xsel -b<CR>
endif

May 2, 2010

Genesis - Let there be a blog

开博的想法由来已久.

为什么开? 这是个好问题.

1, 大家都有, 作为一个不甘人后的无畏青年, 我, 必须有一个.

2, 自己需要一个记录计算机学习, 工作琐事, 感情生活的自留地.

Adam Lee said, Let there be a blog: and there was a blog.