行者无疆 始于足下 - 行走,思考,在路上

实验室几日

3月底接到学长的电话,说有一个紧急项目需要赶工,大概是需要二十天奋斗。我犹豫再三——编译原理还没有看(到现在也没有看……),很多课也需要补补了,计算机组成和计算机体系结构两门大头更是头疼。岂料第二天导师又给我来了电话。那时候早晨九点,我还在床上睡觉,看到导师的电话,立马醒了过来,连声“是、我去、一定”。就这样,还引来室友一片羡慕——“你们导师还给你电话啊,我导师就没理过我……”。于是周日去实验室开会,导师布置任务。会上导师间接批评了我。想想也是,导师说的也有道理,自己乱搞,到头来还是花拳绣腿。应用才是检验你水平最重要的标准。自己进实验室也大半年了,却始终没有做什么东西出来。一来自己水平不济;二来很多东西尚待熟悉;三来自己课业也不轻松。不过这样下去也不是个事情,人家没有实验室的想办法挤进实验室,自己身在福中不知福,倒真是有点不应该了。

项目大概是这样,在自己开发的一套gui engine的基础上,重新写一套模仿iphone的控件,并写成一套业务逻辑,交给客户。开发环境是VS2008,嵌入式系统用的是基于WINCE的Windows Mobile 6.0。整套老的基础代码大概写了好几年了,有5万多行,实现了一个基本的WINCE应用程序的GUI。以后的发展方向可能是平台的移植,布局管理器的加入和bug的修复。我们这个项目就是在这个代码的基础上临阵磨枪,20天仿出一套iPhone的东西。

所谓“会者不难,难者不会”,对于熟悉这个体系的人来说,改造美工都比较容易;对于新手,初来乍到,恐怕光是熟悉Windows消息循环都要花一定的时间。好在我看过200页的《Windows核心编程》,对于基本原理还是略知一二,加上前人写好的程序框架,在这方面也不用操太多的心。

整个项目组六个人,一个毕业的学长,一个公司的员工,两个大四的刚考上zju研究生的学长,一个大三软工的同学,还有我。不过令我感到十分震惊的是,两位大四的和大三软工的学习,竟然连基本的c++语法、输入输出都有不小的问题。可见,当我们抱怨工作难找的时候,又是否考虑过,自己就竟能为你的雇主带来些什么呢?

自己主要负责文本类型控件的编写。差不多快十天了。其中一天泡了图书馆看《C++标准程序库》,两三天陪陪mm,两三天搞搞课业,剩下几天都在实验室了。最终还算有些成果——虽然以学长的标准,这不算什么。

目前的控件支持Alpha透明、圆角效果、字体颜色、字体背景色、部分支持字体大小、字体排列方式、字体的下划线粗体等效果、位图和png图片的载入。存在的问题主要是字体换行和光标定位。当然,我一个人是做不来这么多工作的。我的工作只是参照原来的老的控件代码,整合一些新的函数接口,提供一个统一易用的控件使用接口而已。不过,说起来容易做起来麻烦。许多参数,字体大小,颜色,alpha值需要自己慢慢调。也曾考虑过设计模式的问题,想设计一个IStyle类,统一管理控件外观,不过这超出了我的能力和职责。Anyway,这个过程还是收获了很多。更加深刻的体会到,把你自己的想法转换成可运行的代码,让你的代码编程漂亮的GUI界面,这样的转换需要多大的能力和精力。否则,MINIGUI也不会耗时十年,才写出3.0。

此时我又想到了Open Source。我相信Open Source never die。我也相信终有一天,所有的软件代码会向数学公式一样,成为程序员通用的语言,而不是藏着掖着。我初步体会到了交流的重要性。事实上,软件开发过程中,闭门造车是一件非常可怕的事情——浪费时间、浪费金钱、浪费生命。Reinvent the wheel,这也是我对这个项目始终提不起兴趣放不开手脚的最大阻碍吧。我还想着,什么时候Qt也能运行在windows mobile平台上,这样我们就不用天天面对着这坨猪肉一般的代码发呆了。

另:可能你会问“为什么你的vs是黑色的?”。其实,google下filetype:vssettings就可以了。设置黑底白字,可以有效的保护眼睛,延长屏幕的使用寿命。另外,visual assist,非常好用的vs插件;viEmu,让vs的编辑器拥有简单的vim的快捷编辑功能,提高工作效率。俗话说,磨刀不误砍柴功,简单的配置,换来的是日后的方便。

Anyway,该做的还是要做。完成这几个控件,写几个页面。然后好好补补课程,一个短学期又要过去了。好快。

“每当一个人走在月亮下的时候,就会想起你的手”。

zoj 1089

依然是很菜很菜。开始的时候有些迷惑,后来想了想原来就是给你N个整数取6个有多少种组合。然后在做一定的输出处理的题目。想到的有递归和初步的DFS,可是都不太会写。就写了一个很土的程序。土的掉渣。输入输出还是不熟练,提交了三次才AC。没脸见人了。加油加油!

#include <iostream>
using namespace std;

int main()
{
	const int max_number = 15;
	int numbers;
	
	int set[max_number];
	int cases = 0;
	
	while (1)
	{
		cin >> numbers;
		
		if (numbers == 0)
		{
			break;
		}
		
		cases++;

		if ( cases >= 2 )
		{
			cout << endl;
		}
		
		for (int i = 0; i < numbers; i++)
			cin >> set[i];
			
		int i0, i1, i2, i3, i4, i5;
		
		for (i0 = 0; i0 <= numbers - 6; i0++)
			for (i1 = i0 + 1; i1 <= numbers - 5; i1++)
				for (i2 = i1 + 1; i2 <= numbers - 4; i2++)
					for (i3 = i2 + 1; i3 <= numbers - 3; i3++)
						for (i4 = i3 + 1; i4 <= numbers - 2; i4++)
							for (i5 = i4 + 1; i5 <= numbers - 1; i5++)
								cout << set[i0] << " " << set[i1] << " " << set[i2] << " " << set[i3] << " "
									 << set[i4] << " " << set[i5] << endl;
	}
		
	return 0;
}

顺便,昨天搞了个行者无疆单车知识入门讲座,比较轰动,草坪上搭起了大大的本营帐篷,七八辆车,二十多个人,我使出浑身解数,定车、俯卧撑、拆车修车、旅行经历等等。整个讲座还算比较精彩,从7点一直唠叨到10点20左右。已经有些冷了。于是借了辆车回到yq。拉力听讲座的有大二的,也有博二的。讲完了一个小dd跑过来跟我说“谢谢你,学长”,好可爱;有个博二的说我“非常成熟”,有几个mm被我讲的羞答答的,大概是受不了行者的ws之风了;还有几个wsn,中途跑到校友林里面小便,我甚至都能听到嘘嘘声音,何况mm会羞了。后来我也去尿了一泡……

实验室又来了项目。所以今天告别了亲爱的gentoo先生,回到了VS2008的怀抱。大体来说是做一个嵌入式平台上模仿iphone界面的东西。引擎什么的基于已有的几万行代码。其实去年已经初步接触这个项目,只是课程太忙,时间上安排不过来。这次老师也实在是缺人了,把我这么菜的也拉了过来。一个毕业的研究僧学长领头,还有两个研究僧是主力。两个刚考完研的大四同学每天从下沙赶来,怪辛苦的,不过他们水平实在太菜,连c++都不会,还得我教……看来我菜,有人比我还菜……

主要战略就是在实验室泡二十天,争取能搞出点成果来。将来简历上也好有点东西。否则一片花拳绣腿,怕是饭都吃不饱了。

不过头疼的还是课程。算了,赶时间补吧。还有289道zoj题目。还有lpi。顺便有空再去刷一次我那可怜的六级成绩。

over。再来一道zoj。

纠结的Mac安装

导师让我研究iphone下的程序开发。迫于经济窘迫,手头没有mac,四处查资料,终于搞出来了一个跨平台的解决方案,写了20多页的英文文档,美其名曰《The Cross-Platform Developing Skills for Mac Applications》,认真进行了排版,给导师发了过去。可是导师太忙了没有时间看呃。于是我一股脑的跟导师倾诉了一番mac, objective-c, gnustep等等之类的东西,虽然我也不太懂。导师看我做的十分认真,比较满意,中午一起吃了饭,下午来了个学长,一起坐下交流一番。我刚想倾诉我伟大的跨平台解决方案,学长说,"现在mac os可以装载pc上了“。于是我就悲剧了。

周五下午去公司跟学长借了盘,插进光驱,改下bios从cd启动,哇,竟然能启动,而且见到了安装界面。窃以为到这步,我的pc装苹果之路已经走完了一半。哪知这仅仅是噩梦的开始。整个下午就在网上乱逛,了解下pc安装苹果的知识,了解下多系统的安装与启动。晚上回到寝室,真刀真枪,开始干了。

首先是硬盘的问题。由于我的头脑发热,整个硬盘250G,就一个archlinux,这么一来要想安装苹果先得给苹果腾点地方啊。于是找到了传说中的Gparted,但是系统正在运行,/分区和/home分区无法umount,因此更无法resize,于是就找到了Gparted Live CD。wget拖了半个小时,用brasero刻盘,第一次可能用了全速刻盘,最后出现了莫名其妙的错误,刻录失败,废了一张cd。于是又想到了伟大的ultraiso 9.3版。咱不是有virtualbox嘛。马上去神网下了ultraiso,装上,插上u盘,打算搞鸽GParted Live USB出来。依然宣告失败。还剩一张cd,又用brasero刻录了下,这下降低了刻录速度,终于成功。reboot。

加载了3、4分钟的样子,Gparted终于出来了。桌面环境采用的是fluxbox,虽然没用过。先把/home分区resize一下,成功。重启,进入archlinux,df -h看看文件系统,成功!!很是兴奋的样子。reboot again,又进入了GParted Live CD,打算给mac腾30g的空间。不知怎么的,我试探性的用了一个貌似叫new partition table的功能,谈出个窗口,我点了个确定,又一个窗口,我又点了确定,这下糟了!整个硬盘被重新格式化了,整个过程不超过1s中的时间,我想这GParted也太nb了。250g的硬盘,1s中不到就全部搞定格式化了。

呜呜,我的archlinux,我的心血啊。索性,一不做,二不休,先装苹果吧。苹果的盘是ideneb的leopard 10.5.7的版本。从晚上7点到午夜12点,总共装了不下6次。终于还是没装上。症状是安装完所有软件重启后风火轮转几圈后就黑屏无反应。可能是各种驱动的问题,但是我用手机上网,反复设置,反复选择,还是没有成功,这使我彻底失望。mac的安装确实是一个关乎rp的问题。怎么办?

思前想后,还是决定装windows 7,再重新装个linux吧。于是找室友帮忙,下载了windows msdn英文原版,还是用伟大的ultraiso,刻成了live usb,启动,开始安装。半个小时,一个华丽的启动界面出现在我的眼前——果然很绚丽。简单使用了一下,相比vista,对windows 7确实做的非常非常不错。尤其是独具匠心的UI设计。超级任务栏,aero peak,动态的主题效果,重新设计的media center,便捷的网络vpn链接,还有许多我觉得不错但是叫不出名字的功能,真的很强大。而且运行起来比vista要轻快多了。看来MS这次是下了血本了。

盗版,这个字眼对于中国的it人来说是一种挥之不去的痛。虽然我也不想用盗版,虽然我可以用linux满足自己开发、办公、学习方方面面的需要,但是某些时候环境是不一样的。譬如实验室的同组同学都在用visual studio 2008做开发,这种情况下想不用盗版的MS产品恐怕都很难。据说即将面试的Visual Studio 2010正版要11100+美刀。简直是不可想向了。算了。这是在中国。cc98上有几个msdn的key,也许这次rp不错,竟然能电话激活了。此时已经半夜两点多了,撑不住了,睡了。

第二天早晨10点才爬起来。继续搞电脑。得装个linux。装哪个版本好呢?arch,自己配置还是蛮麻烦的。说实话现在对系统安装已经没有多大的兴趣了。每次重装系统都是把自己的精心调制的作品一点一点碾碎,然后再一点一点搭建起来。我是需要xetex最新版本的,自从用了latex后,已经完全不能习惯word。google了下,ubuntu 9.10中的texlive貌似还停留在2007版本。算了,还是arch吧。

有了上次的安装经验,这次的安装也算是轻车熟路了。但是自己又没有十全的把握与信心,于是在win7下把archlinux官网wiki上的Beginner's Guide打印了下来,七十多页。具体的安装过程不讲了,大体上都一样的,真想自己装的话看Beginner's Guide。只是记录一下安装过程中遇到的几个小问题。

1、grub的引导问题。很幸运的是archlinux自动识别了win7,只需要在grub的menu.lst文件中去掉几行注释就行。这是我的menu.lst文件: 

# general configuration:
timeout   5
default   0
color light-blue/black light-cyan/blue

# boot sections follow
# each is implicitly numbered from 0 in the order of appearance below
#
# TIP: If you want a 1024x768 framebuffer, add "vga=773" to your kernel line.
#
#-*

# (0) Arch Linux
title  Arch Linux
root   (hd0,8)
kernel /vmlinuz26 root=/dev/disk/by-uuid/06ec3189-80fa-471d-b8be-20de1d458f63 ro nomodeset vga=773
initrd /kernel26.img

# (1) Arch Linux
title  Arch Linux Fallback
root   (hd0,8)
kernel /vmlinuz26 root=/dev/disk/by-uuid/06ec3189-80fa-471d-b8be-20de1d458f63 ro
initrd /kernel26-fallback.img

# (2) Windows
title Windows
rootnoverify (hd0,0)
#makeactive
chainloader +1

2、rc.conf的问题,最重要的是要安装hal,并把它防盗rc.conf的daemons里面,否则进入gui后无法识别键盘鼠标。这是我的daemons设置:

DAEMONS=(@syslog-ng @network @netfs @crond @hal @kdm @alsa)

3、语言选择问题,在rc.conf会有一个LOCALE的设置问题,建议不要更改成中文,保持默认就好。我就是看了某个教程的知道改成了zh_CN.utf8,结果进入kde时,界面字体非常难看。也可能是我的字体还没有配置好的原因。

4、localtime和UTC的选择。wiki上说如果是windows和linux双系统,还是选择localtime比较好。

LOCALE="en_US.utf8"
HARDWARECLOCK="localtime"
USEDIRECTISA="no"
TIMEZONE="Asia/Shanghai"

5、字体配置我选择的是WenQuanYi Micro Hei系列,效果还算不错的。仿雅黑字体的。

6、触摸板的增强可以用gsynaptics驱动,其中有个circular scrolling的功能,非常的有趣。实现了mac触摸板的某些功能。自己google一下就知道了。在触摸板上画圈circular,就可以实现srolling的功能。呵呵。注意,gsynaptics的设置默认每次是不能保存的。把下面语句:

gsynaptics-init &

加入到你自己主目录下的.xprofile文件中即可。

7、显卡驱动的问题。我的是ati x1450卡。采用xf86-video-ati的开源驱动即可。但是最新的内核(2.6.31以上版本)开发了一个叫做kernal mode-setting的功能,会引起一些冲突,导致桌面效果无法启用。具体可以参考archlinux wiki上的这篇文章。解决方法是禁用kernal mode-setting功能。在grub menu.lst中实现。也就是下面这句:

kernel /vmlinuz26 root=/dev/disk/by-uuid/06ec3189-80fa-471d-b8be-20de1d458f63 ro nomodeset vga=773

nomodeset表示禁用kernal mode-setting,vga=773表示启用控制台的framebuffer。至于framebuffer是什么,自己百度吧。

8、xetex的字体问题。直接将下载的字体cp到/usr/share/fonts里面,最好建一个目录来存放自己的字体,然后最好

fc-cache -f -v

一下。

9、okular, evince不能显示中文问题。据说二者都是基于poppler的,安装poppler-data即可完美解决这个问题:

sudo pacman -S poppler-data

10、从普通用户到root用户gui程序无法启动的问题:

[lox@freelox ~]$ su root
Password:
[root@freelox lox]# firefox
No protocol specified
No protocol specified
Error: cannot open display: :0.0
[root@freelox lox]#
 

解决办法是在转到root之前输入xhost +命令:

[lox@freelox ~]$ xhost +
access control disabled, clients can connect from any host
[lox@freelox ~]$ su root
Password:
[root@freelox lox]# firefox
[root@freelox lox]#
 

 应该是与X11协议的实现有关。我没大看明白。自己百度吧。

能想起来的问题大体就这么多,放上一张archlinux+kde的图片的,是我现在的桌面:

后来的后来,在win7里面装上了Visual Studio 2008, Visual Assist和Viemu以及Vmware 6.5,当然,全部都是中国特色的db,呃,很矛盾。

周日看了一天的计算理论,教材是《Elements of the Theory of Computation: Second Edition》的中文版,张立昂、刘田译。不过质量实在不怎么样。看了三十页,就发现了至少三处错误。边看教材边做习题,打算把习题全部做完,统一给老师交上去好了。中途要画几个finite automata,于是又头脑发热翻了翻pgf/tikz manual,还算有点小成果。

又是繁忙的一周,汇编语言要补,计算机组成的实验更要补,计算几何的期中考试,数值分析新的内容,操作系统两份报告,还有很多很多。呃。加油吧。从来没感到学业如此繁重过。




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee