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日星期四

头发长了,该修理了。



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

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

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

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