2007年12月的存档

  • 31
  • 12月

再有没几分钟就要告别2007年了。按照“传统”总结一下我的2007年吧。

可以很自豪地说2007年是我收获的一年。在这一年,我开始写自己的博客,记录自己的收获。

由C#入门了面向对象程序设计,写了一个简单的“连连看”游戏玩了一下MVC模式,用php+mysql开发了一个较为复杂的人事管理系统,由webwork开始结识Java的开发框架。总之在编程方面由原来一个只会用面向过程的方法写点简单的小程序的状态进化到基本会用面向对象的思想编写一个小型数据库系统的状态。开始觉得自己有点像一个“程序员”了。

学习上很幸运的拿到了一次一等、一次特等奖学金。捡了个大学生英语竞赛一等奖。成功扭转了大一时逢考皆为三等的状态。

这一年继续做《希望泉杂志》,受到了开复学生网“社区之星”的表彰。去北京见过两次我们的主编MJ。参加了开复学生网的更名仪式,见到了李开复、徐小平、陈朝益等开复学生网的老师。被MJ灌过很多东西。

加入了“好运北京国际女足邀请赛”的志愿者队伍。做了一把“正式”的志愿者。明年可能还要为08北京奥运会服务。

去过一次IBM中国研究院,见识了一下大公司的样子。突然感觉自己该考虑就业的问题了。

收获么,暂时就想起来这么多。遗憾也还是有的。有几本原打算看完的书始终没能看完。几个原打算编写的项目最终也没能做成。做《希望泉》技术部负责人时没能让这个团队交流更活跃。

还是那句老话,希望明年更好吧;)

  • 31
  • 12月

用Ubuntu听歌时一件事情非常不爽:除audacious外,其他的播放器都不能正确识别歌曲的中文信息。歌曲信息一片乱码。

在看过这篇文章的分析之后,总算明白为什么会乱码了。但作者给的解决方法用起来实在不是很方便。在经过自己一番摸索之后发现其实EasyTAG这个软件可以方便的解决这个问题。

首先从添加/删除程序里找到EasyTAG并安装。选择“设置”-“首选项”,在“浏览”页下将“Default directory”选为你放MP3的那个文件夹,然后在“ID3 Tag Settings”中将“写入ID3 v1.x标签”的Charset设置为“简体中文(gb2312)”;在“Charactor set for reading ID3 tags”中选中“None standard“,并同样设置为“简体中文(gb2312)”。

这样每次打开EasyTag它就会自动扫描默认目录下的所有mp3,退出时只要选择全部保存。再更新一下mp3播放器的播放列表就ok了。

不过在我这里EasyTag有个很奇怪的问题:只要EasyTAG的窗口处在最大化状态,在它的界面里点一下鼠标窗口的标题栏、菜单栏和状态栏就会消失,再点一下就会恢复。不在最大化时就没问题……

  • 29
  • 12月

早就在Ubuntu坛子里看见有人的签名是“珍爱生命,请用N卡”。今天算是彻底领教了这句话的含义。

作为一个用A卡的倒霉蛋,在Ubuntu6.06时我就没能装上正常的驱动,根本跑不起3D。Ubuntu7.04则LiveCD都无法进入桌面。到了7.10终于能进入桌面,使用Ubuntu官方源里提供的ATI algix驱动总算是可以跑起3D桌面来了。但这驱动居然与linux核心冲突,造成系统无法正常挂起。

今天在坛子里见ATI官方最新驱动解决了系统挂起的问题,兴冲冲地去AMD的官方网站下载了最新版的驱动,按照网上的教程进行安装。结果第一遍提示安装成功,但重启X环境发现根本没有任何3D加速,连窗口拖动都卡得要死,还不如没装驱动呢。报着试试看了心理,又安装了第二遍,不过这次居然3D桌面加速可以用了,但感觉2D加速不行了。而且最搞的是,只要进入任何一个3D游戏X环境就会自动重启。改xorg.conf、再次重装都没解决问题。

没办法,删!到驱动的安装目录中找到卸载脚本,运行之后把刚刚装的驱动给卸了。之后重启,麻烦来了,没有驱动支持,进入不了X环境(原来的驱动貌似在安新驱动时被删了)。

用网上给的办法在恢复模式下使用dpkg-reconfig xserver-xorg,选择vesa这个兼容驱动也没办法进入X(这就是A卡……)。这里突然发现在恢复模式下我的无线网卡状态居然是已连接(pcmica外插的,上面有两个状态灯)——可以上网,于是

sudo apt-get install xorg-driver-fglrx

自动从官方源中下载驱动安装完毕。用vi照坛子里安装显示驱动的帖子改了一下/etc/X11/xorg.conf中显卡的设置。重启,终于看到熟悉的登录画面了!

不知道坛子里的那些伙计们是怎么装上这个驱动的,难道又是人品问题?

只能等Ubuntu官方源了。

A卡的驱动怎么就这么麻烦呢?

  • 26
  • 12月

一学期的课程结束了,这周我们开始了本学期的第三个实验性课程——计算机组成原理实验。

实验课这种东西只要认真去做,确实能学到相当多的东西。EDA让我理解了电路的设计、系统软件分析与设计让我大概看明白了一个操作系统的内核是怎么写的,这一次的软件分析与设计则真的让我明白了计算机到底是怎么工作的。

自打接触计算机那时起,接受的教育都是:计算机是由程序控制执行的。程序是用编程语言写出来的。编程语言分为高级语言、汇编语言、机器语言。机器语言是2进制写的,在计算机底层直接控制计算机的执行——得出的结论是计算机完全是由机器语言控制运行的。

但是机器语言为什么能控制计算机运行呢?在本周以前,这对我就是一个黑盒问题。经过这两天的实验,这个黑盒被打开了。原来盒子里还有一个更底层的东西在控制着计算机,那就是微控制器中的微指令(计组课上老师讲过,但直到现在才搞明白-_-b)。计算机也无非就是一个大的EDA电路。运算器、内存、寄存器、输入设备、输出设备等无非都是连在系统总线上的一个个模块,每个模块都有使能端、总线开关等开关控制着它们的工作。

真正控制计算机工作是微控制器中的微代码,计算机的执行最根本上执行的是微代码,由微代码控制各个门的开关,决定数据从哪个模板流到哪个模块,各个模块应该做什么工作。而机器语言不过是微代码执行时查看的参数,微代码读取内存中的机器语言,根据机器语言决定下一步该执行什么,执行完毕后再读取下一条机器语言。

之所以一直说机器语言是控制计算机的执行,是因为在绝大多数计算机中,微代码是固定不变且不可改写的。一旦CPU的设计确定了,这台计算机的所有微代码就完全确定了(微代码存储在CPU的控制器中,固化在CPU的内部)。我们就只能在机器语言的层面上控制计算机了。

不过高校的实验就是高校的实验,我们的实验室中给的实验箱是一台自己连接各个模块,自己编写微代码的计算机。

实验指导书上给了一套可以实现加减法和基本逻辑运算的机器码及对应的微代码实验。不过我和我的搭挡晓亮决定做一个直接支持乘法指令的计算机。从今天下午开始到晚上十点多终于把所有的微代码设计出来了(直接写2进制控制各个模块的使能端确实不是件容易的事……)。明天去调试,期待能够成功。:)

  • 20
  • 12月

说实话,因为要制作《希望泉》,现在还不得不继续使用DreamWeaver。再有也确实在linux下还没找到能替代DreamWeaver的软件。

不过最终还是找到了不进Windows的解决方案--我们无所不能的Wine!

参考这篇文章完成ie4linux的安装

http://www.linuxidc.com/Linux/2007-12/9451.htm

然后打开主文件夹,将Desktop的两个快捷方式复制到“桌面”上。这样双击“Internet Explorer 6.0”就可以打开久违了的IE。

直接双击DreamWeaver的安装程序即可完成DreamWeaver的安装。而且安装完在Wine下就有快捷方式。

这样安装完成后DreamWeaver和IE就都可以直接在Ubuntu下运行了。不过还有一个小小的问题--DreamWeaver下的预览还是不能正常工作的。解决方法很简单,点击“编辑浏览器列表”,将“应用程序”一栏中改为:

z:home你的用户名.ies4linuxbinie6

通过类似的方法我已经成功的在我的Ubuntu7.10上安装了GigaGet(迅雷国际版)、ComicsViewer(看漫画的工具),而且linux版的picassa貌似也是用wine的技术实现的。

好变态的wine,好变态的linux

  • 19
  • 12月

《鸟哥的Linux私房菜》

源帖发布地址:http://www.linuxeden.com/forum/t151721.html 

确实是本非常好的linux入门书籍。一些基础的知识讲得非常明白。玩了一个周的Ubuntu后看了一晚上,有很多恍然大悟的感觉。呵呵。

  • 18
  • 12月

花了一周的时间折腾Ubuntu玩,觉得该干点正事了。于是决定在上面搭建linux0.11的编译实验环境,把上次改内核时没搞定的问题搞定。做一个真正的最小化内核。

首先想到的就是《分享我的0.11实验环境》这个帖子,课上老师给的windows下的实验环境就是这里下载的:
http://oldlinux.org/oldlinux/viewthread.php?tid=3850&extra=page%3D1
于是下载它的linux实验环境。

不过由于作者使用的是Debian Sid,而且时间过去实在也很久了。在最新的Ubuntu7.10上使用会遇到很多问题。经过一番google之后终于将其搞定。总结过程如下:

1.下载linux-0.11-lab_060618_041042.tar.bz2并将其内容解压到用户主文件夹,如:/home/riqe/linux-0.11-lab

2.安装必须的软件build-essential(编译环境)、bin86(编译bootsect和setup)、mtools(处理软盘镜像)、bochs(虚拟机)

sudo apt-get install build-essential bin86 mtools bochs bochs-x

3.修改Makefile。GCC4.1 默认检查stack安全,会导致出现__stack_chk_fail错误。分别打开source/linux/kernel/Makefile、source/linux/kernel/chr_dev/Makefile、source/linux/fs/Makefile三个文件,在CFLAGS参数中加入-fno-stack-protector,变为:

CFLAGS	=-Wall -fstrength-reduce -fomit-frame-pointer -fno-stack-protector
	 -nostdinc -I../include

这样就已经可以按照说明执行make了。make过程中会产生一大把警告,但只要没有错误就不影响最后的结果。

4.修改mcopy_kernel、edit_menu.lst、linux-0.11文件,将它们第一行的

#!/bin/sh

改为:

#!/bin/bash

这样执行的时候就不会报错了。

5.修改conf/0.11.bxrc找到以下内容:

#ata0-master: type=disk, path="images/hdimage", mode=flat, cylinders=121, heads=16, spt=63

在下面添加一句:

ata0-slave:type=disk, path="images/c.img", cylinders=410, heads=16, spt=38

然后复制一份images下的hdimage-devel.img,重命名为c.img,再放回到images下。以解决0.11内核在bochs2.3下启动时的“HD controller not ready”问题。(原文及另一个解决方法

经过这么一番修改,已经完全可以在Ubuntu下的gcc4.12和bochs2.3下编译及运行linux0.11。截图如下:

直接在系统下编译的速度果然比在bochs下不知快了多少,而且还可以用安装了taglist等插件的gVim方便地进行代码查看和修改,爽!

PS:偶然遇上了在Windows下编译内核的帖子,怎么当初在交实验报告前没看见呢?唉……

  • 18
  • 12月

昨晚为了一个在产产Ubuntu下的APE播放搞了一整个晚上。事实证明本来很简单的事被我弄复杂了。本来只要从官方源中安装1.32版的audacious再手动安装下面两个插件就OK了。

mac_399-u4-b5-1_i386

audacious-mac_020-1_i386

我却看了论坛里的帖子,自己从第三方源里安了个1.44版的。结果怎么也搞不定CUE播放问题。结果又费了好大力气从新力得之中把高版本卸载掉,又装回官方的1.32版的audacious。但又遇到了一放CUE就死那里的问题。

最终自己想到了解决方案:到/home/我的用户名/.config/下把audacious文件夹删除。再打开audacious播放就没问题了。

其实又是个老问题:卸载软件时有配置信息残留,这个在windows下也是个问题。

  • 15
  • 12月

自打上周收到Ubuntu7.10的安装光盘来,已经安装了两次系统了。第一次确实糊里糊涂的弄乱了许多东西。最终还给搞得启动不起来了。第二次总算弄明白了很多东西。

首先说一下我的硬件环境:Acer Aspire 3045本本,15寸普屏,AMD Mobile Sempron CPU,ATI mobility radeon x1300显卡,外插一块TP-Link 54M无线网卡Wifi上网,无线不加密,但启用了MAC过滤、禁用了SSID广播。总之硬件基本算作A系列(是个比较令人头痛的配置,上次Ubuntu 7.04就因为是A卡所以没安装上)。

1。安装到一半卡死

由于Ubuntu的安装环境本身就是个完整的桌面系统。第一次安装是兴奋了,配置好了网卡一边上网一边安装,结果安装过程中有一个在线升级的步骤,卡在那里过不去了。无奈只好重新开始安装。安装时老老实实玩扫雷……

2。开机黑屏
安装完成后第一次启动完全黑屏,而且老长时间没有反应。还以为是挂掉了。结果多等一会就好了。这应该是Ubuntu的一个bug:启动屏幕默认分辨率为1280*1024。在我1024*768的屏上就会出问题。用一个startupmanager很容易搞定,在终端里把下面一串代码粘进去回车就可以安装并打开startupmanager(需网络连接),选择一下合适的分辨率就OK了(参考原文):

cp -p /boot/grub/menu.lst ~/menu.lst-bak && cp -p /etc/usplash.conf ~/usplash.conf-bak && sudo aptitude install startupmanager && gksudo startupmanager && echo '-- Please reboot your computer!'

3。无线网络。
由于我的无线没有SSID广播,系统不能自动找到无线网络。需要手动在网络管理器中输入SSID。不过貌似设置完成后不重启很难找到网络,只好再享受一次启动黑屏了。(没网络,开机黑屏还没搞定呢……)

4。 设置软件源
打开“系统”-“系统管理”-“软件源”(刚安装完应该是英文吧,记不太清了,反正就是这个地方),把前四个都勾选上。服务器选择main server(主服务器,我是网通的宽带,经测试官方源的速度比那些专门for China的源快得多)。

5。显卡驱动
早就看到那个“受限驱动管理器”在提示显卡驱动的问题了。不过如果没设置好软件源的话是很搞不定的(一定要把软件源中前四项都选上)。设置好源之后就可以直接选择启用了。缺少的东西Ubuntu会自动到源中去下载的。

7。汉化
看了老半天不中不英的环境,现在把它们都变成中文吧。到“系统”-“系统管理”-“语言支持”在上面的框中找到中文,选中它。点击“应用”。会有一个“漫长”的中文包下载过程。安装完成之后就可以使用中文了。

8。3D桌面
早就听说Ubuntu7中自带华丽的3D桌面,在“系统”-“首选项”-“视觉效果”也找到了相关选项。但我却启动不了。搜索到的结果如下(原文

联网,在“系统-系统管理-新立得软件包管理器”中以“compiz”,“xgl”为关键词搜索,分别安装下面两个软件包:

compizconfig-settings-manager

xserver-xgl

9。在文件管理器右键中添加“以管理员打开”
出了问题很多时候要修改配置文件,而默认对于与系统相关的文件夹我们是没有写权限的。在右键中添加一个“以管理员打开”是相当方便的:

sudo apt-get install nautilus-gksu

10。开启3D效果后或Opera、Eva等QT应用程序SCIM不能输入汉字的解决(08年1月26日修改)

在scim输入法中进行如下设定:
scim设置->全局设置->将预编辑字符串嵌入到客户端中 前的勾去掉
scim设置->;gtk->嵌入式候选词标的勾去掉

安装scim的QT支持:

sudo apt-get install scim-qtimm

修改/etc/X11/xinit/xinput.d/zh_CN:

sudo gedit /etc/X11/xinit/xinput.d/zh_CN

GTK_IM_MODULE=xim

QT_IM_MODULE=xim

改为

GTK_IM_MODULE=scim

QT_IM_MODULE=scim

DEPENDS="scim,scim-anthy|scim-canna|scim-chewing|scim-pinyin|scim-hangle|scim-prime|scim-skk|scim-tables-additional|scim-m17n|scim-uim|scim-tables-ja|scim-tables-ko|scim-tables-zh"

最后引号前加入

|scim-qtimm

注销或重启后生效。

11。修改过头了,黑屏无法进入登录界面处理方法
开机时在grub选修复模式,进入命令行后输入:

sudo dpkg-recofigure xserver-xorg

选择默认显卡V,一路确定。重启。

13。Firefox的书签同步工具-Foxmarks
在linux下搞了半天,肯定会遇到不少问题,查过许多网站,firefox里一定会收藏一些解决方案的书签。但一旦不小心把linux给整挂了东西可就没了。所以能上网时先把Foxmarks给装上。再也不怕书签丢了!

  • 13
  • 12月

上次说到一个普通的接收用户输入的操作,居然成了整个课设的难点。确实是相当让人头痛。

不过顺藤摸瓜,亦步亦趋的方法在最坏的情况下总是能解决问题的。

用户输入用的是键盘,内核肯定要处理键盘操作的。那就从键盘操作的最底层找起。于是找到了键盘中断的底层处理代码keyboard.s,根据调用关系找到调用它的tty_read函数。继续向调用关系树的上方找的时候发现内核中没有函数调用tty_read。那好,就分析tty_read吧。

仔细分析了一下这个函数,其实功能很简单,其实不过是把read_q里的东西倒腾到secondary里,顺便做了一些必要的转换工作罢了。而read_q中的字符就是由键盘中断读取到的键盘输入。在没有输入函数的时候,最简单的方法就是循环检测这个队列,看看有没有输入回车。

理论分析很快就搞定了,但在实际修改的时候又遇到了很多麻烦。

最开始犯了一个错误是把读取输入队列的函数放到了处于用户态的进程1之中,弄出了一个困扰了我好几天的奇怪问题:可以正常读取队列头指针处的键盘输入,但只要读完之后increase一下头指针,下一次读取就再也得不到新的键盘输入了。最后发现只要把这些代码放入main函数MOVE_TO_USER_MODE之前就OK了。产生这个问题的具体原因我至今还不是非常明白。估计是遇到了内核的保护机制,内核区的内存对用户区的程序是只读的,若用户态程序修改时会给它一个副本(?)(在内存页式管理中实现的?)。

另一下问题则更另人郁闷。实验环境是Windows下跑的bochs里面运行的字符界面的linux0.11。对文件所有的修改都是在linux0.11下的vi里做的,编译也是用里面的make。vi好在已经在Windows下用过一个学期了(gVim)问题不大,但make对我来说可是个完全陌生的东西。这下在完成第二个要求的时候就遇到了很大的麻烦:虽然我基本分析明白了生成最小内核所需的文件,但只要小改一下代码或Makefile文件,make一下就会生成好几屏的错误报告。而字符界面的linux没有滚屏功能,这下我根本弄不明白到底最开始是哪里出了错误。为了减小代码,最终我不得不采取了一个极其笨拙、极其不geek的办法:把用不到的函数一个个清空内容。

就这样,好不容易在验收前那个上午把东西搞定了。验收时发现,全系只有我一个人用的是改内核代码的方法成功的。其他人有用汇编自己写了一段代码搞定的(体积是够小,但与linux还有什么关系?),另外大部分人居然用的是自己编写一个实现输入输出的程序,替换sh让内核启动时执行(这个与内核就更没什么关系了)。

看到了自己的成果与收获,小小骄傲一下。呵呵

[tags]linux,编程[/tags]

所有标签:.net Ajax Java javascript Linux map MySQL RSS TD-SCDMA Ubuntu vim web Win7 乱码 基础知识 备份 奥运会 希望泉 性能 缓存 编程