2005年03月29日

分局撤消了,我失去了我不是十分适合,却比较好的一份工作

工作三年了,离开学校三年了

人都26了,老了吗

本来的冲劲被磨没了好多

大学积累的知识沉淀的只省下了简单的思想

面对着家庭

面对着我的工作

三年前的选择对吗

放弃了一个机会,拥有一个机会

我变了

变得更加怀疑自己,对自己没信心

我是什么,一头驴子,一头永远默默的驴子

分局撤消,我心里竟然没有想象中那么大的波动

麻痹了

等待着默默上缴,对接,呆着

好久没这么舒服的呆着了

到分局的2年,工作几乎是我的全部

我走过了改革最激烈的2年

生产力布局调整,撤并运输业站段

工程设计单位从铁路分局剥离,成立中铁X局

文教卫生属地移交

分局撤消

下步,生产力布局继续调整,房建生活剥离,主辅业分离,多经与主业分离

41个铁路分局撤消

4-5万干部待岗

我只是4-5万分之一

哈哈

好小

我算什么一个小人物而已

论资排辈也到不了我一个26岁小青年身上

也许外面的空间更广阔

外面的世界更好

学了N年的计算机

现在想起来

当初放弃了我热爱的计算机专业,有点可惜

如果没放弃,我可能…..

哈,又在吃后悔药了

我当够驴子了

我要主自己的主人

2005年03月20日

童话

歌手:光良 专辑:童话

忘了有多久
再没听到你
对我说你最爱的故事
我想了很久
我开始慌了
是不是我又做错了什么
你哭着对我说
童话里都是骗人的
我不可能是你的王子
也许你不会懂
从你说爱我以后
我的天空星星都亮了
我愿变成童话
你爱的那个天使
张开双手变成翅膀守护你
你要相信
相信我们会像童话故事里
幸福和快乐是结局
一起写我们的结局
你哭着对我说
童话里都是骗人的
我不可能是你的王子
也许你不会懂
从你说爱我以后
我的天空星星都亮了
我愿变成童话
你爱的那个天使
张开双手变成翅膀守护你
你要相信
相信我们会像童话故事里
幸福和快乐是结局
我要变成童话
你爱的那个天使
张开双手变成翅膀守护你
你要相信
相信我们会像童话故事里
幸福和快乐是结局
我会变成童话
你爱的那个天使
张开双手变成翅膀守护你
你要相信
相信我们会像童话故事里
幸福和快乐是结局
一起写我们的结局

—————————————————————

2005年03月17日

今天才知道什么是人生如梦

才知道什么是变化无常

原本以为顺从父母,找一个稳定工作,找一个对象,简单过完一生,没想到,一切真的如梦似幻,变化得太快了

工作了快三年了,一切才渐渐步入正轨,爱情也才由深谷反弹,

做梦都没想到,一切突然变化

我做了什么,就算我做了什么,也应该只惩罚我一个人,不应该这么折磨爱我的人

这样的罪,我承受不了,我真的是一个害人精,靠近我的人没有得到好下场

爱一个人,想给她幸福,没想到,遭到双重打击,原本稳定的收入,变成了不定,不知道明天会成为什么

家里也突然反对起来

真的不明白

老天,你如果要惩罚,请惩罚我一个人,为什么要连带上她

我可以收入很低,哪怕我只有每个月的生活费

我也仍然努力工作

但现在,为什么要在我刚刚熟悉这个生活的时候把我推向深渊

又为什么让家里人突然反对

我错了

我承认我的错误

我错了

请不要惩罚他们

我代他们受罪

我爱她,原来我可以给她很多

现在我突然什么也给不了

我恨自己

我现在要怎么面对她,面对如此爱我的人

梦醒了

歌手:那英

我想起你描述梦想天堂的样子
手指著远方画出一栋一栋房子
你傻笑的表情又那么诚实
所有的信任是从那一刻开始
你给我一个到那片天空的地址
只因为太高摔得我血流不止
带著伤口回到当初背叛的城市
唯一收容我的却是自己的影子
想跟著你一辈子
至少这样的世界没有现实
想赖著你一辈子
做你感情里最後一个天使
如果梦醒时还在一起
请容许我们相依为命
绚烂也许一时平淡走完一世
是我选择你这样的男子
就怕梦醒时已分两地
谁也挽不回这持离
爱恨可以不分责任可以不问
天亮了我还是不是你的女人

2005年03月16日

你好就好

歌手:霍建华

看见你聊到了他而微笑
我心里那点遗憾不见了
你的最後选择是谁
忽然之间这个答案已似乎不重要
我肩膀永远等著你依靠
但是我更不希望你受困扰
我把时间对摺一遍从前未来唯一重叠
要你很幸福这心愿不动摇
只要你好就好你好就好
其他的我不计较
就算我会烦恼就算我会焦躁
就算我会被忘掉
你好就好你好就好(要过得比我好)
我的爱没有句号
像过去那样做到对你的付出坚持不肯少

携手游人间

歌手:张真 专辑:携手游人间

携手游人间
张真

不让岁月倦了等待的心
我的世界随你到天涯遥远
窗前灯火此刻悄悄熄灭
我心轻轻擦亮你如水的容颜
你的笑容仍甜美依如当年
你的消息是我珍藏的依恋
不管繁华成落叶战士没荒野
承诺永远不如记得每个今天
你我相隔遥远人事偷偷改变
历尽万水千山是否心意相连
不求生生世世不想朝朝暮暮
但愿平平淡淡携手游人间

谁说两地倦最是扰人心田
谁说人海沉浮难有恒久情缘
不管分分合合也许聚聚散散
只求平平安安携手游人间

携手游人间

歌手:张真 专辑:携手游人间

携手游人间
张真

不让岁月倦了等待的心
我的世界随你到天涯遥远
窗前灯火此刻悄悄熄灭
我心轻轻擦亮你如水的容颜
你的笑容仍甜美依如当年
你的消息是我珍藏的依恋
不管繁华成落叶战士没荒野
承诺永远不如记得每个今天
你我相隔遥远人事偷偷改变
历尽万水千山是否心意相连
不求生生世世不想朝朝暮暮
但愿平平淡淡携手游人间

谁说两地倦最是扰人心田
谁说人海沉浮难有恒久情缘
不管分分合合也许聚聚散散
只求平平安安携手游人间

白月光(电台版)

歌手:张信哲 专辑:下一个永远

张信哲—-白月光



白月光
心里某个地方
那么亮
却那么冰凉
每个人
都有一段悲伤
想隐藏
却欲盖弥彰
白月光
照天涯的两端
在心上
却不在身旁
擦不干
你当时的泪光
路太长
追不回原谅
你是我
不能言说的伤
想遗忘
又忍不住回想
像流亡
一路跌跌撞撞
你的捆绑
无法释放
白月光
照天涯的两端
越圆满
越觉得孤单
擦不干
回忆里的泪光
路太长
怎么补偿
你是我
不能言说的伤
想遗忘
又忍不住回想
像流亡
一路跌跌撞撞
你的捆绑
无法释放
白月光
心里某个地方
那么亮
却那么冰凉
每个人
都有一段悲伤
想隐藏
却在生长
mumumu…

猪之歌

歌手:香香 专辑:香香·猪之歌

猪!你的鼻子有两个孔,感冒时的你还挂着鼻涕牛牛.
猪!你有着黑漆漆的眼,望呀望呀望也看不到边.
猪!你的耳朵是那么大,呼扇呼扇也听不到我在骂你傻.
猪!你的尾巴是卷又卷,原来跑跑跳跳还离不开它
哦~~~

猪头猪脑猪身猪尾(yi)巴
从来不挑食的乖娃娃
每天睡到日晒三杆后
从不刷牙从不打架

猪!你的肚子是那么鼓,一看就知道受不了生活的苦
猪!你的皮肤是那么白,上辈子一定投在那富贵人家
哦~~~

传说你的祖先有八钉耙,算命先生说他命中犯桃花
见到漂亮姑娘就嘻嘻哈哈
不会脸红不会害怕

猪头猪脑猪身猪尾(yi)巴
从来不挑食的乖娃娃
每天睡到日晒三杆后
从不刷牙从不打架哦~~~
传说你的祖先有八钉耙,算命先生说他命中犯桃花
见到漂亮姑娘就嘻嘻哈哈
不会脸红不会害怕
你很象她

2005年03月14日

前些日子在 China-Pub 买了本《操作系统:设计与实现(第二版)》,然后就开始满世界的找 Minix(呵呵,我向来对底层机制比较感兴趣,想起来了就看看吧)。谁知道在网上一搜,发现了 Bochs 这个东西,不错啊!身材确实苗条,还是开源的:)它的官方网站上正好有 Minix 的硬盘 IMG 下载,一起给我拖回来。这个 Minix IMG 包的作者甚至还在包里带了配置文件(bochsrc.txt),省得自己配了:)(还是老外比较能办实事啊,这个不得不承认)

我就效仿 Bochs 自带的 dlxlinux 建了个叫 Minix 的文件夹,然后把 dlxlinux 里面那个 Run.bat 拷过来修改如下(我的 Bochs 装在 C:\Program Files\Bochs 里面):
cd “C:\Program Files\Bochs\Minix”
..\bochs -q -f bochsrc.txt

以后要用 Bochs 运行 Minix 双击这个批处理就搞定了——至此,算是解决了 Minix 的安装问题。其实虚拟机还有 vmWare 和 Virtual PC,而且在虚拟机和主机之间交换数据做得也比 Bochs 好,可是冲着 Bochs 的身材我算是喜欢上它了:)

好了,马上可以上路了!启动 Bochs 不久后可以看到:


Minix boot monitor 2.16
Press ESC to enter the monitor
Hit a key as follows:
= Start Minix

按等号后就可以看见登录画面了:


Multiuser startup in progress.
Starting daemons: update cron.

Minix Release 2 Version 0.3

noname login:

主机名是 noname,登录后可以在 /etc/hostname.file 里面改。这里的登录名用 root,没有密码。登录之后就可以看到 shell 提示符“#”,不过只有两个控制台可用。找了半天好像没有办法把提示符设成当前工作目录(就算设了也不能即时刷新,这点用起来觉得不太方便,不过它毕竟是个教学系统,不是用来干活的,凑合一下吧:)

大概转了转,基本的命令都有,不过也不可以 alias,以前在 Linux 和 FreeBSD 里面都习惯来个“alias dir ‘ls -al’”,这么一来还真觉得不方便:)看了一下手册,Minix 的 shell 好像叫 ash(以前没听说过),看来功能确实是简单啊。vi 也有,其实是 elvis(跟 vi 兼容又没版权问题的工具),居然还可以读配置文件,就是 home 目录下的 .exrc 文件(这个 IMG 把 root 的 home 目录设在了 /,当然你也可以改 /etc/passwd)。试用的感觉好像比 Solaris 下面带的那个 vi 还好用一些:)
set ts=4
set sw=4
这两个选项也可以用,就是不支持语法高亮(开个玩笑:))。

最爽的是这个 IMG 里面还带了 cc 和所有的源代码,这样一来我们有什么不满就可以自己动手丰衣足食了,不错,不错!看来这个 Bochs + Minix 2.0 IMG 还真是个学习操作系统原理和 Minix 的好东西!所有的源码就放在 /usr/src 下。

看着手痒,就先小试一把吧,ls 列目录的时候没有颜色,就拿这个改改吧:)什么?颜色怎么出来?给你看看下面的代码吧:


#include <stdio.h>

int
main( void )
{
printf( “\033[31m2ndBoy\033[0m\n" );
return( 0 );
}

假设程序保存为 color.c,编译:
# cc -o color color.c
运行结果如下:
# ./color
2ndBoy

怎么样?看到彩色了吧!我们只要把格式串里面的 31 换成别的值就可以看到其它颜色了,其它部分只要照搬就可以了。下面来看看我们要修改的对象:
# cd /usr/src
# find . -name ls.c
./commands/simple/ls.c

ls.c 是个 1134 行的程序,大致的看了一下源代码,发现一个叫 printname() 的函数,在没有详细分析过代码的前提下它看起来比较象是我们要找的对象,那就先试试看,我们参照上面的代码来修改一下这个函数:


void printname( char *name )
{
int c, q = present( 'q' );
printf( "\033[31m" );
while( ( c = (unsigned char)*name++ ) != 0 ){
if( q && ( c <= ' ' || c == 0177 ) ) c = '?';
putchar( c );
}
printf( "\033[0m" ); /* 恢复默认颜色,免得影响后续内容 */
}
红色代码是我加进去的,存盘退出,编译:
# make ls
cc -i -D_MINIX -D_POSIX_SOURCE -o ls ls.c
install -S 20kw ls
# ./ls

果然,所有列出的文件名全变成了红色,看来是找对门儿了!我们继续修改。

又看了看,程序中是用一个 struct file (ls.c:248)来存放每一个文件的文件信息的,而这些信息又是通过调用 stat() 得来的(注意程序中的 status()),而这正是我们需要的!由于 struct stat 结构中的 st_mode 中存放了文件的文件类型,所以我们可以通过解读这个成员来用不同的颜色显示不同类型的文件。但是 printname() 只有一个参数,看来我们要给它再加一个参数了,改成这样:
void printname( char *name, struct file *f )
当然调用的地方也要做相应的修改,一共有两处,改为:
printname( xxxx, f );

这样一来我们就有了文件类型和文件名这两个东西了,代码修改如下:


void printname( char *name, struct file *f )
{
int c, q = present( 'q' );
if( S_ISDIR( f->mode ) )
printf( "\033[1;34m" ); /* 目录用亮蓝色 */
else if( f->mode & S_IXUSR || f->mode & S_IXGRP || f->mode & S_IXOTH )
printf( "\033[1;32m" ); /* 可执行文件用亮绿色 */
else if( f->mode & S_IFCHR || f->mode & S_IFBLK )
printf( "\033[1;33m" ); /* 字符和块设备用黄色 */
#ifdef S_IFLNK
else if( f->mode & S_IFLNK )
printf( "\033[1;36m" ); /* 符号链接用青色 */
#endif
while( ( c = (unsigned char)*name++ ) != 0 ){
if( q && ( c <= ' ' || c == 0177 ) ) c = '?';
putchar( c );
}
printf( "\033[0m" );
}
编译完之后我们用修改过的 ls 将原来的 ls 覆盖,方便以后正常:
# cp ls /usr/bin
覆盖之后试试有无效果:
# ls -al /

果然,目录用亮蓝色显示出来了。不过在不加 -l 参数时显示出的文件名却没有颜色,看来我们在没有详细分析过程序的前提下改出的代码还有有问题的:)想了想:要取得文件类型肯定要调用 stat(),顺着这个思路搜了一下,果然,程序里调用 stat() 的地方必须要求 field 不为 0(也就是设置了某个参数)。所以我们换个思路,让 ls 认为我们所有对它的调用都加了参数,field 所有的取值在程序中都定义了宏,从 0x0001 到 0x2000,那我们就用它还没有霸占的 0x4000:)在 main() 中做如下修改(红色代码是我加上的):
if( field & L_LONG ) field &= ~L_EXTRA;
field |= 0x4000;

这样一来就可以了,我们的 ls 算是修改成功!!!

上面说到了,Minix 的 shell 不能把提示符设置成即时显示当前目录,那我们再来改改:)搜了一下发现在 /usr/src/commands/ 下面有 sh 和 ash 这两个目录,编译后试了一下,sh 不支持 Tab 键命令补全,那么我们用的这个 shell 一定是 ash 了。在 /usr/src/commands/ash/ 下一番 grep 后确定了目标:parser.c。看起来在显示提示符之前都要用 ps1val() 来获得 PS1 的值,那我们改写这个 ps1val() 提前做个处理不就行了?!打开程序一看,原来这个 ps1val() 是个宏,它在 var.h 里面定义成了 #define ps1val() (vps1.text + 4),而 vps1 里面存放的是 PS1=xxx 的形式,所以 +4 之后直接得到了它的显示内容。要做手脚就不太可能继续用宏,我们把这个宏注视掉,把它改成函数声明:
char *ps1val( void );

现在打开 parser.c,按 G 跳到文件尾加入如下代码:


#include <pwd.h>

char *
ps1val( void )
{
static char szPS1[128];
char *p = vps1.text + 4;
int nPos = 0;
memset( szPS1, 0, sizeof( szPS1 ) );
while( *p != ‘\0′ )
{
if( *p != ‘\\’ ) /* 不是转义字符就原样输出 */
{
szPS1[nPos] = *p;
nPos++;
}
else
{
p++;
if( *p == ‘w’ ) /* 取当前工作路径 */
{
getcwd( szPS1 + nPos, sizeof( szPS1 ) – nPos );
}
else if( *p == ‘u’ ) /* 取用户登录名 */
{
uid_t uid = getuid();
struct passwd *pPasswd = getpwuid( uid );
strcat( szPS1 + nPos, pPasswd->pw_name );
}
nPos = strlen( szPS1 );
}
p++;
}
szPS1[nPos] = ‘\0′;
return( szPS1 );
}

这里我模仿了 Bash 的做法,你可以用转义符来代替一些东西,比如这里用 \u 代表当前用户名,\w 代表当前工作目录。存盘后编译:
# make

这里 make 时间要长一些,好了之后让我们来试一下:
# ./sh
# PS1=”[\u \w]# “
[root /usr/src/commands/ash]#

哈哈,大功告成,双儿,来……

把编译好的 sh 复制到 /bin 下,以后我们进入系统就用它了,记得改一下 .profile 设置好 PS1,这下 Minix 的环境好用多了!!!

Minix 是专门设计用来学习操作系统原理的,我在这里改改 shell 跟 ls 根本没有接触到 OS 理论的东西,呵呵,不过用这两个东西开个头倒也不错。