2007年12月18日星期二

本博客已转移: www.iseeker.org/blog

blogger 提供了免费的二级域名 *.blogspot.com,但是由于种种原因,此域名几乎是一直被封,无法直接访问。为了能够直接访问自己的博客,还特意定了blog.iseeker.org的个人二级域名指向自己的博客。可是这并没有持续多久,很快也被封了,同样无法访问了。郁闷啊!无奈之下,只好“另立门户”,用wordpress建立了自己的博客: www.iseeker.org/blog,这样不至于“再来”吧?

声明

2007年12月10日星期一

Gmail 搜索(Search)和过滤器(Filter)的逻辑运算(Boolean operators)

为何要用逻辑运算(Boolean operators)
  • 如果想要把发往foo@bar1.com或foo@bar2.com,主题里面包含"任务"打上“task”的标签而不是foo@bar1.com或foo@bar2.com的标签,这该怎么办呢?
  • 如果想要把和同学a(a@bar.com)以及同学b(b@bar.com)讨论makefile相关问题的邮件全都找出来,那又该怎么办呢?
这时逻辑运算就有了用武之地。

Search和Filter的表达式位置
如果要制作条件比较复杂的Filter或者对邮件进行更为精确的搜索,那么就要书写复杂一点的高级逻辑表达式。表达式对Filter和Search都是通用的,只是写的位置不同:
  • Search的表达式要写在Search Mail的编辑框内
  • Filter的表达式要写在Has the words后面的编辑框内

逻辑运算符(Boolean operators)

Gmail官方有相关的帮助还有一张逻辑运算符的表格,这将是我们写运算表达式的重要依据。表格很详细的列举了所有可以使用的运算符和用法以及例子。这里只着重介绍几个重要而常用的。
  • 空格:用空格隔开表示的关系
  • OR:用OR隔开表示关系
  • - :用 - 做为前缀表示
  • is:chat:搜索范围为聊天记录
  • ():它的作用就不言而喻了
  • ......

例子(Example)

回到开头提到的问题,很容易就写下他们的答案了。对于过滤器的要求需要写三个表达式。
  • 标签task对应表达式Filter1:“(to:foo@bar1.com OR to:foo@bar2.com) subject:任务”
  • 标签foo@bar1.com对应表达式Filter2:“(to:foo@bar1.com) -subject:任务”
  • 标签foo@bar2.com对应表达式Filter3:“(to:foo@bar2.com) -subject:任务”
第二个表达式是为了避免同时打上task和foo@bar1.com的情况。
对于第二个问题,只需要使用下面的表达式
  • (from:a@bar.com OR to:a@bar.com OR cc:a@bar.com bcc:a@bar.com) (from:b@bar.com OR to:b@bar.com OR cc:b@bar.com bcc:b@bar.com) subject:makefile
为了搜索更为准确,你还可以用这些运算符组成更为复杂的表达式。

后话
Gmail 提供的逻辑运算已经很强大了,不过我觉得 Filter 有点疏漏,缺少了一般的过滤器都有的两点功能:1、能够为过滤器进行排序;2、如果以及符合一个过滤器可以选择不再继续查找其他过滤器。如果有这两点功能的话,我们的Filter2和Filter3就不用那么麻烦了。

2007年12月8日星期六

VS2005 编译环境,解决 Runtime Error(运行时错误): R6034。

问题:Runtime Error R6034
在VS2005编译环境下,用makefile编译的程序爆出了一个可恶的Runtime Error。
错误如下图:

提示信息是:
Runtime Error!
R6034
An application has made an attempt to load the C runtime library incorrectly. Please contact the application's support team for more information.
无法正常载入 C runtime library。

问题追因
程序生成之后直接执行是没有问题的,而打包后的程序却有问题,看来应该是缺少了什么文件。于是我对编译程序生成的文件一个个删除,并查看检查程序的运行情况。在$(APP).exe.manifest被文件删除之后,R6034现身了,看来罪魁祸首就是它了。
我又在MSDN上搜索R6034,得到了这个Error描述的:
C Run-Time Error R6034
Error Message

An application has made an attempt to load the C runtime library without using a manifest. This is an unsupported way to load Visual C++ DLLs. You need to modify your application to build with a manifest.

这么以来更确认了出现这个问题的原因:缺少了manifest,程序因此无法正常载入C runtime library。

解决办法
解决方法有两个:
  1. 将编译得到的 $(APP).exe.manifest 一并打包,即和应用程序放在同一个文件夹下;
  2. 将manifest文件直接嵌入到可执行文件。
嵌入到可执行文件的方法是,需要在生成exe之后在执行下面的命令:

mt.exe –manifest $(APP).exe.manifest -outputresource:$(APP).exe;1

编译DLL的话,有一点点小区别的。

mt.exe –manifest $(LIB).dll.manifest -outputresource:$(LIB).dll;2

后话
VC2005搞出个这玩意有什么好处?

2007年12月7日星期五

注册Google Apps,遇到了问题。

摘要
申请注册Google Apps,没有成功,提示Google Apps does not currently support domains in this country。即使域名是国际域名,还选择County为United States也不行。无奈之下登录远程主机,通过lynx进行访问注册,才得以成功。

什么是Google Apps
谷歌 Apps 是我们为企业、学校和其他组织设计的 可定制的应用软件套装,用于组织内部沟通和协作——Google黑板报。简而言之,你可以利用 Google Apps 定制一个以自己域名为后缀的邮箱系统,以及一些其他相关服务,当然前提是你拥有一个顶级域名。

问题
不过可惜的是目前在国内无法享受这个服务,在你提交注册信息的时候,会注册失败,并得到一个 “Google Apps does not currently support domains in this country”的错误提示。在不久以前Google还仅仅是根据域名类型和填写的Country两点来判断的。所以只要是国际域名,并且填写Country的时候选择United States就能通过注册。可是昨天我这么做却没有成功,仍然有"Google Apps does not currently support domains in this country"的提示,估计是Google“聪明”了,根据IP进行识别了。
这下怎么办呢?

解决途径
显然需要欺骗Google,让他认为你是在他支持的国家范围以内。有一点需要注意,注册是需要用SSL进行连接的。
我们就有很多方式,比如:
  • 代理(对于已经是使用代理上网的用户来说,可能需要设置二级代理了)
  • 在线代理(一般的在线代理都不支持SSL)
  • 其他一些穿墙术(哈哈,这也需要穿墙?)
  • .....................
我选择的方法——远程主机
我选择了通过位于美国的远程主机代替我的本机进行注册,这样应该没有问题了吧。通过ssh(Win下可以通过putty)进行远程登录,然后links连接Google Apps的网页,根据提示一步步进行。然而到Step.1就过不去了,明明在页面左侧填写了域名,并点击了"Use my domain",却在下个页面右侧提示"Required field must not be blank"。
怎么回事呢?这个错误很是莫名其妙。
你肯定想不到引发这个问题的元凶是:SSL!整个注册过程需要SSL进行连接,而links这个命令行程序不支持SSL,所以......于是我换了功能更为强大的lynx进行连接。
这下,一步步,非常顺利,注册成功了,下面是注册成功的页面。

至此,问题都解决啦。

2007年12月2日星期日

看我如何进行个人信息管理 (PIM)

缘起
俗话说:“好记性不如烂笔头”,这句话说的很贴切啊。可是惭愧的是,本人的记性更是比笔头烂的多哦,用妈妈的话说,就是“丢手就忘”。还好,老天爷虽然没有给我一个好记性,总算给了俺一个还不算太木的脑袋瓜和“勤学好问”的天性。平时学习、工作、生活中的点点滴滴,总会让自己有少许收获和心得。如果一时没有记录在案,那对于记性超烂的俺来说,下次一定等于重头再来。另外也经常会有一些想法会在脑瓜中跳跃,虽然称不上宝贵的“点子”,但是至少也会有点点新意。然而这些转瞬即逝的东西,如何才能留下来呢?

身边的PIM
当回首过去的时候,我经常会忘记曾经做过什么,这一天天的都是怎么就过去了呢?我觉得需要用日记来记录自己的足迹,然而,当晚上要回忆这一天的事情的时候,我甚至都很可能无法完全记住,何况也不是每天都会有时间去写日记的。我想我需要——“
身边的PIM”。
  • 手机
    • 一天,就我所遇到的问题向一个我很尊敬的老板Huang, Steven进行了请教。他问我是不是有PDA,告诉我至少需要这么一个能够与PC同步的工具,来安排和管理自己的时间。我很感谢他给我的指点,并且决定换一个具有PDA功能的手机。最终我选择了BlackBerry7100T——我的第一款智能手机。(插嘴:用就好的我,一直坚持着使用黑白屏的手机,从诺基亚8100到1100,再到1110
    • Gtalk - 不但可以即时通信,关键是还可以把我想记下的东西作为聊天记录,直接写入我的Gmail,日后再在PC上进行整理。
    • Gmail - 无论何时何地,只要有gprs,就可以收发邮件。Email是最重要的联系渠道。
    • Calendar - BlackBerry提供的PIM日历软件,可以与Outlook进行同步,据说也可以通过goosync与Google Calendar进行同步,暂时还没有用过。
    • Tasks 和 MemoPad,BlackBerry提供的PIM软件,同样可以Outlook进行同步。
  • PC
    • 没有PC的时候用手机,有PC的时候当然用PC啦。
    • 每个月把短信整理成表格放到Gmail上归档。
    • 短期要解决的问题,或者临时记录的问题写入Todo。Todo类的软件有很多种,比如:google desktop的todo,igoogle的todo以及一些专用的todo软件。
    • 网摘,有一些好的资讯当然想记录下来,可以用Firefox的google notebook插件。
    • FreeMind,这个东西很好用,只是我还不熟,用他可以随意的把你的“想法”绘制出来。
    • ......
Network
这年头我们好像都已经离不开网络了,不利用网络的强大连通性就太可惜了。即时通信,电子邮箱,在线日历等等都已经用上了,可是这还不够,还需要个人网络空间

  • 域名:iseeker.org
    • 空间可以没有,但是域名一定要有。为什么呢?因为“名正则言顺”啊。何况空间可以换,域名就不能老换,否则就找不到你啦。有了域名可以干很多事情了,比如blogger提供的域名总被屏蔽,有了自己的blog域名就可以访问了。
  • SVN:iseeker.org/garlic
    • garlic是蒜头的意思,I love garlic。
    • 作为IT行业的研发人员,代码管理是很让人头疼的一件事情。自从有了"版本控制"软件,代码管理就可以告别杂乱无章了。为了在家和公司都可以同步访问,SVN就出现在了我个人空间里面。
  • Mantis:iseeker.org/mantis
    • mantis是螳螂的意思,这是一个用PHP写的bug追踪的开源软件,类似于bugzilla,较轻量级。我第一次见到它的时候,就认定它可以作为一个辅助管理的软件——分配任务,跟踪任务,了解任务状态等,而不仅仅是一个bug追踪的软件。
    • 我建立mantis目的也不是为了bug追踪,至少现在不是,而是对自己进行个人管理。一般的PIM软件诸如Calendar, Todo等等都只是简单记录将做未做的事情,而不能对问题状态进行跟踪,也没有各种统计的功能。
    • 就我个人来说,我利用他来提交问题,修改问题,查看问题,记录问题出现、分析、解决等一系列的过程和状态,这样做的好处,我想是不言而喻的。
    • 如果作为团队的话。
      • 经理可以通过它进行分配任务,指定责任人以及问题解决的期限,而后就可以经常查看问题的解决状态,很容易就可以从整体上把握项目的进度。
      • 开发经理可以分解任务,指定子任务的责任人,对任务进度进行把控。
      • 开发人员等可以反馈问题,修改问题状态等
      • 这样协作起来要比仅仅依靠邮件通知的方式可靠很多,更加易于管理,而比口头通知的优势就更不用说了。
  • Blog:blog.iseeker.org
    • Blog 真是一项伟大的发明啊,想了解一个人,就去他的blog看看。甚至有一个经理人说,他不通过普通媒介进行招聘,而是通过个人blog。通过阅读blog,他可以知道这个blog主人在相关领域的造诣如何,是不是他想要招的人,进而确定是否需要通过面试进行进一步沟通。
    • 希望通过blog能够让关心我的朋友们很容易就了解到现在的我,而不是通过IM占用双方时间,还只是让一个朋友了解。
    • 希望通过blog能够记录我解决的一些问题,学到的一些知识和技能,能够让后来的人少走一些弯路,也让自己不重复走弯路:-)
    • 希望通过blog能够分享一切,独乐乐不如众乐乐!
结束语
用了这么多武器,恐怕也是无法完全治愈这个“丢手就忘”的病。“慢性病”不都是这德行吗?呵呵,能减轻病痛就知足了。
记住,什么样的记性都远远远远不如烂笔头啊,愿与大家共勉!

致谢
感谢smzz我的个人网络空间完全是在他的帮助下建立的。

2007年11月30日星期五

Synaptics 触摸板使用指南

触摸板虽然灵敏度和准确性远不及IBM的指点杆,但是由于它的易用性还是渐渐的成为了每一个笔记本的标配,就连IBM也都不得不在后续的产品中应用了曾经不以为然的触摸板。

触摸板能够模拟鼠标的各种操作,甚至包括滚轮特性,这使得我们在没有鼠标的时候仍然能够“指点江山”。可是恼人的是,触摸板总是傻乎乎假装很灵敏,
引起不少误操作,严重的影响打字,令人生厌。在windows下用上最新的驱动,可以轻松的通过控制板禁用触摸板,而且还可以设置当检测有USB鼠标存在的时候自动禁用,挺方便的。可是咱在linux下可没有这等便宜了,不过,咱也不是没招啊。

ubuntu的英文wiki上详细介绍了触摸板的配置和使用,而中文wiki站点进行了部分的翻译,参见文章最后面的链接。有空的时候我打算把英文的那篇文章全部翻译一遍,并且解释其中部分操作的原因。这里先简单介绍一下如何控制触摸板。

我的本子是两年前的了,所以装上debian之后出了显卡和其他如无线网卡之类的特殊硬件之外,其他硬件都已经直接被debian支持了。这当然包括了触摸板在内,对于一些硬件较新的本本,可能还需要自己驱动触摸板哦,这里先不介绍了,有机会再探讨。

有几个问题需要明确
  1. 为了方便的控制触摸板,一般需要两个程序syndaemon和synclient,一般安装基本系统就已经带上了。
  2. 为了使程序能够控制触摸板,需要 Enabling SHMConfig ,这样会失去一点安全性,不过对于laptop用户,对于多用户的情形应该会很少吧。处理方法也很简单在/etc/X11/xorg.conf中增加 Option "SHMConfig" "on",就可以了。加到哪儿?自己看着办,呵呵。加完之后需要重启X。
  3. 首先可以用syndaemon来控制,具体参数可以参见man。常用的是
    • syndaemon -d,后台运行,键盘有敲击,则禁用触摸板,直到最后一次击键后2秒钟,恢复激活触摸板。
    • syndaemon -t,触摸板只允许有移动行为,禁用点击和滚轮行为。
    • syndaemon -i n, -i后跟数字参数,指定禁用至最后一次击键后延迟时间,秒为单位。
  4. 再可以用synclient来控制,这个程序还可以有配置文件~/.qsynaptics。
    • synclient -l 列出来触摸板的参数信息(另外还有很多参数,参见man手册);
    • synclient TouchpadOff=1 禁用触摸板,synclient TouchpadOff=0 启用触摸板。
中文的wiki上就写了一个python脚本,利用synclient来通过快捷键控制触摸板的开关,这个方法我还没有好好试试,回头再续吧。另外我想,也许也可以像Win下那样,检测USB鼠标是否存在,如果存在则自动禁用触摸板,智能一点哦。

还有如果需要GUI的触摸板控制界面的话,你可以选择qsynaptics(KDE下是ksynaptics),debian的用户直接用aptitude install就可以了。

Reference
https://help.ubuntu.com/community/SynapticsTouchpad
http://wiki.ubuntu.org.cn/Synaptics%E8%A7%A6%E6%91%B8%E6%9D%BF%E6%8C%87%E5%8D%97

2007年11月29日星期四

头发长了,该修理了。



头发长了,该修理了。
胡子长了,也该刮了。
精神还好,不太憔悴。
豆豆一颗挂在脸庞,似乎不甘寂寞。

面孔还是那么黑。
门牙还是那么歪。

还是那个毛坎肩。
快要有十年的历史了吧。
.......
还是我啊。

那么,
朋友们,还记得我吗?
还是你们印象当中的我吗?

2007年11月25日星期日

让 scim 输入法平台提示框浮动跟随光标

不知道为什么,开启 scim 输入法进行汉字输入的时候,提示框总是无法跟随光标,而是固定在一个角落里,屏幕左上角,想看当前输入的字符串是什么真是够费劲的!找遍了 scim 的设置位置,试了很多可能的地方,都不行,可郁闷了。

无奈只好求助于网络,google 一下之后,看了几篇文章,终于知道怎么解决则个问题。
主要有三个步骤
  1. 编辑im-switch生成的scim配置文件 "/etc/X11/xinit/xinput.d/scim",将默认的 GTK_IM_MODULE=scim 修改为 GTK_IM_MODULE="scim-bridge"。
  2. 在scim输入法中,scim设置->全局设置->将预编辑字符串嵌入到客户端中 前的勾去掉
  3. 重启 scim ,打开终端,输入 pkill scim,然后输入 scim -d。

参考网址:http://hi.baidu.com/socies/blog/item/c5357cd93ea26aea38012fcb.html
这不是原文的网址,也是转载的,不过该网址没有给出原文的网址,我只好把这个网址给出来了。

2007年11月13日星期二

认识Linux,选择debian (3)

2007年4月18号,我像众多ubuntu的fans一样期盼着7.04的发布。不过我还没有某些人那么疯狂,彻夜不眠的等待。直到20号,我才下载到了7.04版CD,并在当天晚上抛弃了6.10,急切的装上了7.04。体验并没有想象的那么好,基本上和6.10没有什么区别。大多数东西ubuntu已经帮我作好了,这样我很省心,让我从win到linux的迁移没有那么艰难。不过在随后的使用中,还是了不少问题,比如:DHCP网络分配地址总是不成功,ubuntu提供的网络管理的程序对我们公司的网络真是不好用,经常获取失败。为了解决这些问题,google帮了我很大忙。渐渐的我发现这些解决方法在debian的参考文档上都有,而且我也发现总是让ubuntu什么事情都帮我做,会让我变得像在windows下面一样,出个问题,就想着用重装系统解决问题。而且ubuntu的启动,关机和程序运行的速度渐渐的我也受不了了。

ubuntu不符合我选择linux的初衷,我要知其然,知其所以然,而且ubuntu的开机关机速度我也受不了了。我决定重回debian。

重回debian,才发现原来ubuntu确实做了不少事情,在ubuntu上很容易解决的问题,在debian上却要进行很多配置。让我费了不少劲,不过没关系,这样才会进步嘛!

认识Linux,选择debian (2)

初识linux的我开始在 debian 的世界里游荡,而linux 强大的可配置性却令我经常无所适从。为了一点小小的问题,到处寻找答案,不停的根据老鸟的经验修改配置文件。逐渐的终于不甘于在虚拟机下玩 debian 了,我要在主机上进行实战了。这时Linux经验丰富的 smzz 建议我尝试一下 ubuntu,他告诉我对于我这种新手来说 ubuntu 是最佳的入门发行版,最为接近傻瓜式的系统(如Windows),装上就可以用,易用性相当好。听来不错,我决定尝试一下。

先用他给我的光盘在 dell 的台式机上装了6.04版,一路回车下去完成了安装,重启之后就直接进入了 X 系统。果然厉害,驱动都不用装,直接分辨率就是1280*1024了,简单!然后,根据 wiki.ubuntu.org.cn 上面的有关教程进行了配置,感觉不错,能显示中文(比debian下的好看多了),还有中文输入法。这时6.10版也出来了,我稍微犹豫了一下就选择了重装新系统,新版新气象嘛!

Linux 命令行的灵活性令我颇为惊奇,就一个 vim 编辑器就让我叹为观止。软件原来不只是 Windows 的 GUI ,原来......真是相见恨晚啊,要是早几年认识 Linux 那该.......(smzz又要嘲笑我了)。

有件事相当惭愧,那就是当时正逢我找工作。雅虎中国的面试官问我:指定一个名字,怎么找跟这个名字有关的进程。恩?我愣了,还真不知道。“知道 ps 吗?知道 grep 吗?”我那叫一个汗啊!惭愧啊,惭愧,恨不得找个地缝钻进去。那天我认识了 ps, grep, 控制参数还有超可爱的管道!

总之,Linux,恩,应该说 Unix ,那叫神奇!

2007年11月12日星期一

认识Linux,选择debian (1)

2006年的夏天,距离毕业还有半年的时候开始才开始认识Linux。慢慢开始对Linux有所了解,才知道原来Linux只是专指内核,而通常听说的debian, ubuntu, redhat(事实上之前我也就只听说过redhat :-))等只是用Linux作为内核的发行版。而且据说如果我高兴的话,也可以自己做一个发行版出来,汗,我这菜鸟可不敢想。

在沙漠之周的大肆忽悠之下,我终于打算尝试一下被他说的神乎其神的Linux了。经同学指点,首先在虚拟机上安装了一个debian,用的是netinst版的CD。根据提示几乎是一路回车的装好了系统,重新启动以后进入了命令行的界面。虽然平时控制台的程序也写过不少,可是Dos的命令我都不熟悉,更甭说初次接触的Linux。也就是当初玩mud的时候记了几个命令, ls, cd...。那管啥用啊,习惯了Win的GUI的我还是一下子被唬蒙了,手足无措。厚着脸皮叫来了同学,在他的指点下,用vi配上了学校镜像的sourcelist。装上了xwindows(有所耳闻,汗),还有xfce。只见同学一个回车,屏幕上蹦出来一只老鼠,原来是进了桌面系统了,恩,很漂亮,第一感觉比windows漂亮多了!然后给我介绍了点资源,就留下我一个人自己玩了。

就这样与debian和以小老鼠作为形象代言人的xfce相识了。

Keep thinking, seeking and practicing!

Keep thinking, seeking and practicing!
路漫漫其修远兮,吾将上下而求索!
希望自己拥有一个有意义的人生!

人,最宝贵的是生命。生命对每个人只有一次。这仅有的一次生命应当怎么度过呢?每当回忆往事的时候,能够不为虚度年华而悔恨,不因碌碌无为而羞耻;在临死的时候,他能够说:我......不......枉..................

人,要么好好活着,要么赶紧去死——《独自等待》

生命是一个过程,可悲的是它不能够重来,可喜的是它也不需要重来——《童梦奇缘》