2009年6月28日星期日
想写一个好的GUI请看看MS的软件,想写一个更好的GUI请看看游戏的界面
我已经很久没有玩PC游戏,今天回味了几个老游戏,观察了它们的界面,好的游戏的界面在简洁度,易用性和用户的交互体验上甚至连色彩的搭配都相当值得学习。哇,我才发现我设计的GUI其实还不够简洁,最大的缺点是使用者无法得到真正的交互体验,而机器人控制程序的使用的交互体验恰恰是非常重要的,使用这个程序控制真实机器人就要像玩PC游戏一样有一种操纵感,甚至要有一种临场感。
2009年5月29日星期五
脑图(Mind Map),时间管理(GTD)
几乎每天都要和导师讨论问题,通常我们会拿起笔和纸,开始关于问题的分析,试着在纸上构建一幅图景,把所有的要点都过一遍,把大的问题分成很多小的问题,对于这些小的问题常常使用各个击破的方法,先解决一些一些头绪的问题对他们进行讨论分析,对于没有头绪的问题可以找找书或google一下。对于比较复杂的问题,如果只是用纸和笔进行分析,绝对是低效的,使用一些工具画一个脑图绝对会大大提高效率。可以下载FreeMind(它是开源的),也可以使用在线工具Mindomo(它也是免费的,用flash做的,相当酷!),当然MS Visio也可以做脑图,Visio2003简单教程在这里,如果使用2007版,和2003版template 的位置有点不一样,可以通过file-->new-->business-->Brainstroming diagram找到它。
通过脑图还可以获得一个Project的全景图,这很有用,通过我的一些实践,我发现使用它可以得到很大的生产力的提高,可以进行工作的计划和对一些问题的解决方法进选择,并获得和掌握大量信息,还可以分析关于这个Project我们缺失的知识和必须要掌握的技能。
刚刚读完一本书,关于时间管理(GTD:Getting Things Done),书名是《小强升职记》,可以在这里部分章节在线阅读,这本书很值得一读,里面提到了例如“我们现在遇到最多的就是‘网络时间黑洞’... ...”,“让别人拿着时钟工作吧,你带着指南针!”等等很精妙的关于时间管理思考和方法。
2009年5月20日星期三
推荐Chrome Experiment
作为一个Chrome的忠实用户,Chrome真的非常好用,废话不多说,快去体验一下Chrome Experiment吧。你会发现用JavaScript也可以完成很多Adobe Flash的特性。感受一下Chrome对JavaScript超高的执行效率吧。
2009年5月9日星期六
SDL SGE库加入TrueType功能
关于SGE库我已经在以前的日志里介绍过了。如果我们的SGE需要有TrueType 功能,简单地说就是可以在sdl surface上写入文字,还需要加入freetype这个库进行build。
The TrueType functions uses the FreeType library (v2.x). SGE的build需要freetype-2.1.10,否则不会正确build,会有一些错误。因为SGE需要譬如头文件.../freetype/nternal/ftobjs.h,而新版的freetype则不会有这个头文件。 进入http://mirrors.zerg.biz/nongnu/freetype/ 就可以找到freetype-2.1.10 ,可参考freetype-2.1.10/docs/INSTALL.UNX的帮助。
使用msys进入freetype目录依次输入
./configure [options]
make
make install (as root)
然后就会生成正确的.a静态库文件。
使用msys需要注意一些点:
1.需要build的project的路径中不能有空格,譬如C:/Documents and Settings,否则无法识别路径。
2.cd /C/ 进入C盘,要使用反斜杠。
现在build 新的SGE库with TrueType functions。使用同样的方法,加入freetype的include路径和已经编译好的lib。
大功告成。
现在可以使用新的SGE库 with TrueType functions功能。譬如:
写一个几个字到屏幕上:
sge_TTFont *font;
/*注意要将font.ttf文件放入project的目录里*/
font=sge_TTF_OpenFont("font.ttf", 50);
/* Drawstext on screen */
sge_tt_textout(drawScreen, font, "my first SGE text", 50,100, 0,0,255, 0,0,0, 120);
还有一点要注意:因为在build SGE时要对其源文件进行一些改变。当其他project要使用已经被build的SGE的库时候不能使用SGE原始的头文件,而是要使用改变过的头文件。因为include里的.h文件,必须和参与生成dll的文件相同。不然link这个dll则会产生错误。
########
补充,如果要使用VS2005或以后的版本进行编译的话。
在以下网址可以下载到SGE的项目文档,然后建立VC项目。
http://www.digitalfanatics.org/cal/sge/index.html
Download SGE project files for MS Visual C/C++
FreeType library (v2.x).请在到以下网址下载Binaries。
http://gnuwin32.sourceforge.net/packages/freetype.htm
• Binaries
Zip
然后在将freetpye.lib加入项目的Additional Dependencies。
在sge_config.h中将注释掉这行#define _SGE_NOTTF。
这样我们的sge_config.h将如下。
/* SGE Config header (generated automatically) */
#define SGE_VER 030809
#define _SGE_C_AND_CPP
//#define _SGE_HAVE_IMG
//#define _SGE_NOTTF
接下来设定基本完成就可以进行编译了。
2009年4月2日星期四
2009年3月29日星期日
2009年3月23日星期一
编译SGE库
SGE是一个非常实用也挺不错的SDL图型外部库,在我的项目中我使用它进行一些简单的2D做图,并且使用它的Sprite classes。接下来简单地介绍如何编译它。
在WIN32环境下,使用MinGW+MSYS, 首先编译SDL,网上有很多帮助,然后见编译完成的SDL的静态库放入C:\MinGW\lib,将头文件放入C:\MinGW\include\SDL。
然后使用MSYS进入SGE目录,输入make就可以进行编译。如果输入make install,会Builds 一个 dynamic SGE library 并且 将SGE的 headers 放入例如C:\MinGW\include\SDL里。make 的时候可能会有错误,可以根据错误提示进行改正,例如:可能会遇到sge_surface.cpp:148: error: invalid initialization of non-const reference of type 'char*&' from a temporary of type 'char**'这样的错误,只需在sge_surface.cpp:148将va_start((va_list*)ap, format); 改成va_start((va_list&)ap, format); 即可。
如果以上方法有问题,或者无法编译dll库。那么可以试试以下方法 (点击下图,可看大图):
1.使用Eclipse, 然后新建一个C++项目,将SGE的源文件加入其中,如图A所示。
并新建一个sge.cpp文件,输入#include "sge.h" int main(int argc, char** argv) { return 0; }
2.在setting里进行一些编译所需的简单设定如图B, C, D所示。
3.现在还没完成,如果没有SDL_image话,那么需要对sge_config.h手动进行设定,如图E所示,加入画红线的语句,去掉其上面的语句。
4.现在编译会又会遇到,sge_surface.cpp:148: error: invalid initialization of non-const reference of type 'char*&' from a temporary of type 'char**'这样的错误,同样的,如图F 所示将va_start((va_list*)ap, format); 改成va_start((va_list&)ap, format); 即可。同一类型的错误,都可以这样改正。
好了,大功告成,现在在/yourproject/Debug里你会找到SGE.DLL。
2009年2月20日星期五
如何编译Live555库
Live555是一个用C++编写的库,它可以用于发送很接受数据流通过RTSP, RTP 和 SDP链接。大名鼎鼎的VLC就是用它来接受在线媒体流,处理RTSP SDP连接的。我现阶段项目的部分程序需要用到这个库也是用它接受实时媒体流,使用后,发现它的功能很强大。
编译它很简单(使用MinGW),进入它的目录后
输入./genMakefiles mingw
然后输入make
完成后, 在\live\testProgs你会发现很好用的openRTSP.exe!注意:在mingw: make-3.81版本编译会不通过,但是在make-3.79.1.exe则会成功。原因请看这里。
如果想要得到Live555的DLL,这比较麻烦一点,我使用的是eclipse + MinGW环境:右边是截图(点击可看大图),如果熟悉eclipse + MinGW环境,应该很容易理解以下步骤。注意图C的设定,这里设定Defined symbols很重要,在图D可以发现,这里还需要加上"ws2_32"库。
好了,大功告成,现在在/yourproject/Debug里你会找到live555.DLL。
2009年2月6日星期五
闲谈一二
哇,终于看到太阳了。这是我这两个星期来第一次看到阳光,初春的德国总是这样,很阴郁,和德国人一样不苟言笑。受这种天气的影响,我也愈来愈阴郁了,在去研究所的路上,回家路上坐在空荡荡的Uni Linie的车上,看着窗外灰蒙蒙的风景,脑子里不停地思考的各种稀奇古怪的哲学问题,这样的环境,很适合进行思考,所以有人说,德国人出了很多哲学家,思想家,可能是因为这种天气吧。
我的一个师兄刚刚从墨西哥晒了3个星期的太阳,回到德国,才工作了2个星期,又飞到法国享受阳光了。刚回来几天 ,一般来说,他会突然变成“阳光男孩”,一点也不像一般的德国人,但是接受德国的天气的折磨后,几天后又会恢复一般德国人的样子。还好师兄常常去旅游和开会,不然我真的无法有一点喘气的机会,他若在研究所,我总是有一种无形的压力,因为我的实验结果一直还有问题,呵呵,他去法国,我也在家里给自己放了两天的假,才发现我很久没有放假了,虽说2天假,但是还有很多杂事,也是挺忙的。单调简单的生活,沉浸于实验,编程和论文中,时间反而过的飞快,已经2月了,平时最大的娱乐就是用GOOGLE READER看看各种文章,呵呵想想,我最近半年的生活真的还蛮无聊的。看看窗外,才过了下午5点,又天黑了,似乎我的假期又要结束了。
前天做了硕士论文的第一次答辩,很痛苦,呵呵,发现自己突然不会说德语了,答辩时一直吃螺丝,但还是熬过了,还好教授比较给面子,希望下次更好吧。
去了一趟波恩,天气很好,随手拍了几张,附上一张阳光中的德国初春(在波恩大学)。
2009年1月22日星期四
如何提高效率:先关掉你那该死的浏览器
几天前,我的一位朋友和我讨论如何提高效率,很多人一天坐n小时在写字台前但是却做不了什么事,貌似很努力,但是都是在做无用功,效率是非常重要的,我甚至认为,一个程序员如果每天能够3个小时非常非常高效率的工作,这就够了,对,只要3小时我没有写错,已经可以完成几乎所有工作。我这里谈谈我对提高效率的看法。
对于你来说最重要的是,也很简单的是:“先关掉你该死的浏览器”,如果不是很有需要的话(譬如你要使用google docs),每天开两次浏览器就可以了,用reader看看新闻,翻翻博客,譬如说早上起床开一次,晚上睡觉前开一次,顺便回一下电邮。其实也没有必要一直开着Outlook之类的工具,你的思绪常常会被新邮件所打断,最佳的办法就是每天在固定的时间开信箱写信回信。什么msn Gtalk请关掉它们,开心网之类网站更本没有必要在工作时使用,这些东西和你的浏览器一样是你的"效率杀手"。我以前就是开着浏览器,并且登上Google Reader,过一会儿就读一下新的文章,这真的是非常浪费时间,不仅浪费时间,而且会让你的思绪飘得很远,特别是遇到很有趣的文章时,你要找回你的思绪,继续工作也要花很多时间,最重要的是你的效率已经丧失了。
“关掉浏览器”还有一个好处,可以大大的减少使用搜索引擎的次数,我以前编程的时候,当遇见问题,第一个想到的是Google,但是通过Google找到的信息往往是很零散的片段,其实这些搜索来的过渡零散的片段化的信息,更本无法掌握知识的本质,而且这常常会大大降低你的工作效率,常常反而浪费很多时间,却仍然是一无所获。完整,具体高品质的知识的来源,我认为还是书籍,学术文献,工具手册等等而不是简单的通过搜索而来。从书里掌握的知识,它的深度广度和完整程度都是通过搜索而来的知识所无法比拟的,阅读书籍同时对知识的整理和锻炼思维都是非常有帮助。
”关掉浏览器“可以使人专注于一件事,对我来说还可以让大脑以一种有益于心理健康的方式运行。当然提高效率还有很多方法,例如:我认为早睡早起也很重要,虽然我常常做不到。保持一个整洁的工作环境对我而言也很重要,至少在要保证工作台上只有现在所需要用到的东西。善于学习各种新的工具,并且善于使用各种强大的工具是非常重要的技能,很多人不喜欢使用新的工具认为会不习惯,还要学习,很麻烦等等,殊不知短短的时间的学习会使工作效率大大提高。
你关掉你那该死的浏览器了吗?
