我的ubuntu的一些问题

今天一大早起来开机, 掸出一个提示窗口:
_______________________________________________
启动 GNOME 设置守护进程时出错。
主题、声音或者背景设置等可能不会正常工作。
最后的错误信息是:
Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
GNOME 在您下次登录时仍将试图重启动设置守护进程。——————————————-

这种情况以前也出现过,一般注销一下就可以了。不过这次我试了好几次都不行。网上有的建议设置成默认主题,有的说是网络设置上的问题。

看到出错信息后边的reply,我推测是我使用别人代理上网的问题。于是把网关由192.168.12.99改为192.168.12.1就好了。难道我舍友不开机出错可能性就增大?

每次启动ubuntu过程中,都提示windows C盘/Documents and Settings/Administrator/Local Settings/Temporary Internet Files有坏文件,我在两个系统都清理过,有一个空文件删不了,创建日期:1986**** 搞笑了~~。我知道最好的解决方法是format c:

查上面问题时,看到建议修改fstab最后一个参数为0,加快开机速度。

fstab中存放了与分区有关的重要信息,其中每一行为一个分区记录,每一行又可分为六个部份,下面以/dev/hda7 / ext2 defaults 1 1为例逐个说明:
1. 第一项是您想要mount的储存装置的实体位置,如hdb或如上例的/dev/hda7。
2. 第二项就是您想要将其加入至哪个目录位置,如/home或如上例的/,这其实就是在安装时提示的挂入点。
3. 第三项就是所谓的local filesystem,其包含了以下格式:如ext、ext2、msdos、iso9660、nfs、swap等,或如上例的ext2,可以参见/prco/filesystems说明。
4. 第四项就是您mount时,所要设定的状态,如ro(只读)或如上例的defaults(包括了其它参数如rw、suid、exec、auto、nouser、async),可以参见「mount nfs」。
5. 第五项是提供DUMP功能,在系统DUMP时是否需要BACKUP的标志位,其内定值是0。
6. 第六项是设定此filesystem是否要在开机时做check的动作,除了root的filesystem其必要的check为1之外,其它皆可视需要设定,内定值是0。

Video of Tibet event

CCTV-9 Documentary on Lhasa Riots

http://www.youtube.com/watch?v=4Z_prFMROC8

温家宝总理就西藏和台湾问题答记者问

http://v.youku.com/v_show/id_ca00XMjEzNDE0MTY=.html

Toronto Chinese protests against ‘Free Tibet’ at Dundas

http://www.youtube.com/watch?v=ptDrx2UT8hU

——下面用批判的眼光观看

Tibetan People’s Uprising Movement

http://www.youtube.com/watch?v=gaEyQqpyn10&feature=related

Dalai Lama on CNN

http://www.youtube.com/watch?v=WcvbnsP2oG4&feature=related

The Dalai Lama speaking about The Tibet Connection

http://www.youtube.com/watch?v=Dr1vRdvz9W4&feature=related

组合算法

前两天和梅延涛碰到一个题目,要求从从1~100里取10个数的算法。我首先想到的是递归,比较容易理解十个for循环就能搞定,但是其效率很底。

组合算法
本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标
代表的数被选中,为0则没选中。
首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为
“01”组合,同时将其左边的所有“1”全部移动到数组的最左端。
当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得
到了最后一个组合。
例如求5中选3的组合:
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5
我自己用C写了一个程序。不过我把M 改成100 N改成10的时候运行了十分钟还没运行完。这个组合算法可以实现从任意M个数(连续&非连续)里取出n个数。其实我写的程序里只需要讲1到100和任意一百个数字一一对应就行了。

#include
#define M 5
#define N 3

int k = 0;
int check_over(int a[]){
int i;
for(i=0; i<m; i++){
if(a[i] == 1)
break;
}
return M-N-i;
}
void print(int a[]){
int i;
for(i=0; i<m; i++){
if(a[i] == 1)
printf(“%d “, i+1);
//printf(“%d “, a[i]);
}
printf(“n”);
k++;
}
void fun(int a[]){
int tmp, i, j, sum=0;
for(i=0; i<m; i++){
if(a[i]==1 && a[i+1]==0){
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
for(j=0; j<i; j++){
sum += a[j];
}
for (j=0; j<i; j++){
a[j] = ((j<sum) ? 1 : 0);
}
break;
}
}
}
int main(void){
int i, a[M];
for(i=0; i<m; i++){
a[i] = ((i<n) ? 1 : 0);
}
while (check_over(a)){
print(a);
fun(a);
}
print(a);
printf(“the kinds : %dn”, k);
return 0;
}

事无巨细

今天早上起来,听见窗外有雨水声。不错,可以好好休息一下了。

最近项目生活有点乱,得利用这个周末好好调整过来。前几天和付鹏程聊天时,他指出我有个缺点“事无巨细”,自习想想确实是。这可能是很久一来养成的习惯吧,学习上我就是把所有的事,一件一件做完,确保没有什么遗漏,生活上无形中也成了这样。心理上觉得自己是很负责人的人,其实把一些重要的事没做好。

当然这个习惯也有它的两面性,我觉得,我需要做的是,调整一下避免它给我带来的负面影响。

P.S Blog评论的Rss好像会推迟到有新文章发布时才更新到客户端。

virtualBox的/dev/vboxdrv文件权限问题

最近编译内核经常用到虚拟机 virturlbox,启动虚拟机里的linux都提示权限不足。于是用chmod更改/dev/vboxdrv权限,然后可以正常启动。但重启Ubuntu后,权限会自动变回去,每次都这样修改太麻烦了。

原来 /dev里的东西不是在硬盘上的,而是udev命名的内核处理的东西。文件的权限是udev设置的,或者跟内核模块本身有关。chmod之后虽然好用,但这一修改并未写入硬盘,所以重启又变回去了。可以修改udev的配置文件:/etc/udev/rules.d/50-vboxdrv.rules(不一定是50,也可能是其他数字)

文件内容如下:
KERNEL==”vboxdrv”, NAME=”vboxdrv”, OWNER=”root”, GROUP=”vboxusers”, MODE=”0660″

其实最简单的方法就是把自己添加到 vboxusers组里就行了。

在X下,System -> Administration -> Users and Groups,然后Manage groups,找到vboxusers,下面列出了成员,在用户前打上勾,退出重启就ok了。

命令行:usermod -a -G vboxusers username

BTW:感觉在虚拟机里运行命令行界面太爽了,连鼠标都不用贴换进去,只需要激活窗口就行了。

Java模拟“漂三页”

今天突发奇想,用程序模拟一下,“漂三页”的玩法,已经用java做出了命令行,这个基本没有什么实际意义,只是为了熟悉一下java,再一个就是好奇了,过几天在改造成图形界面。但里边一些玩牌的规则,实现起来比较有意思。比如随机发牌、牌的打印、大小比较、赌注添加等,不过代码很乱,有待进一步完善。

http://kongove.whostas.com/down/prog/psy.java

发发牢骚

开源校园行活动-西邮站算是结束了,这次活动从申请教室到宣传,大家都很卖力,特别是赵思杰、李磊、高伟……。Peter听徐继哲他们说咱这边技术搞的相当不错,想提前先搞个技术交流。本来想着能在linux方面好好交流一下,结果Peter主要搞java服务器方面的开发,俺对这个不大了解~~

Peter说要带几个朋友一起来,要进实验室我去问了保安,说要系里打招呼。于是我去找了老韩,他对这活动很支持,并让我们辅导员文老师帮我搞定。欣喜~~

谁知传单上边盖章从周一一直弄到周三中午,我在上课,思杰跑去那杨爽(王聪所谓的好老师)让找思杰他们导员,大家俗称的SB李兵。TMD 直接火了~,于是我去找杨爽,她说什么要安正规程序来,我说老韩点头了也没用。于是让自称团委混的比较熟的边疆跑了两趟,人家还是不给盖。于是开始踢皮球,我们被晃来晃去,团委、系办、导员办公室、学生会办公室……跑了N次。令人很纳闷的是,有人居然说学生会没章子,鬼才信!难道我们不做宣传??我和李磊又去了系办,老韩和我们导员没在,正当我绝望之时,磊子建议去找系办别的老师。想想王聪所谓的好老师,我都不想去了。没想那老师打了个电话随便问了一下又给盖了。??正规程序??!!

我一直以自己是西邮linux兴趣小组的一员为自豪,不像有些组织形同虚设。但从小组长远发展考虑,我们还是得寻找一个适合自己生存的支点。在哪里?

今年有效控制了一下,小组人员和实验室电脑数量,大家都比较认真。还有楼下的兄弟们也很有热情也很刻苦,从他们身上可以学到好多东西。我想这是我们每个人付出的最好回报吧,奋斗到底!!

第一次成功编译内核

昨天晚上去老校区旁听陈老师讲内核,我还以为是在大教室,没想到竟然在一个小会议室里边,怪不得陈老师没有给上面小组“通知”。

听了三个小时,前半部份讲的好多感觉都看过,而且还都记着。等下半节讲与硬件相关的东西就那不中了,把段、页 和寄存器搞到一块就有点乱了,理一理~~理一理~~

今天中午编写了一个Hello的模块,成功运行。并用lsmod等命令检查了一下。以前看着书写这个程序没成功 ,原来是2.4和2.6有点区别。

到kernel.org 下载最新稳定版内核源码包,打开ubuntu的ssh,在virturlBox里的红旗下用scp靠进去,一点半开始编译,make那一步两点一十二还没搞定,于是 shutdown -h +17 。晚上回来打开电脑,也不知道编译晚没,继续下边的

#make modules    //编译模块
#make modules_install   //将编译好的模块安装到/lib/modules/2.6.24/这个目录下
#make install

居然连Grub都自动更改了。init 6重启后,成功进入。

用 uname  -a 查看已经成功升级到2.6.24.3

关于2.6内核编译可参考:http://www.lupaworld.com/151392/viewspace_43406.html

ubuntu内核编译参考:http://www.lupaworld.com/151392/viewspace_44104.html

宏定义中do while的妙用

//宏定义中 do-while 的妙用
//这个程序是为了说明在宏定义是使用do while的作用。

#include
#define IF_A if (N == 0)
printf(“IF_A:tN等于0n”)

#define IF_Do_While do {
if (N == 0)
printf(“IF_Do_While:tN等于0n”);
} while (0)

int main(int argc, char **argv)
{
int N;
printf(“Please input N:t”);
scanf(“%d”, &N);
printf(“——————–n”);
if (N >= 0)
IF_A;
else
printf(“Else:tN小于0n”);

printf(“——————–n”);
if (N >= 0)
IF_Do_While;
else
printf(“Else:tN小于0n”);
printf(“——————–n”);
return 0;
}

编译程序时,对于”else”编译器会寻找前面最近的(还没有与其他else匹配的)if关键字进行匹配, do while语句的巧妙使用则解决了错误匹配带来的问题。如N=3时,上边代码第一个宏就会出错。

补充:

do{..}while(0) 只是为了更容易地把多个语句集合到这个宏定义中,让这个宏看起来更像一个函数。

宏中用到if()时就可能会出问题,比如:

#define FOOBAR() foo(); bar()
if (!something)
FOOBAR();

如果something为假,是只执行foo();

用{}把所有语句括起来也可以,但使用FOOBAR()时不能带分号,这可不像函数。{}是gcc的一个扩展,并不是标准的。
而且编译器会自动优化,不会影响执行速度。

3月12日植树节

0210filepermission_4_2.jpg

目录树可以分为小的部分,每个部分可以在自己的磁盘或分区上。主要部分是根、/usr 、/var 和 /home 文件系统。每个部分有不同的目的。

每台机器都有根文件系统,它包含系统引导和使其他文件系统得以mount所必要的文件,根文件系统应该有单用户状态所必须的足够的内容。还应该包括修复损坏系统、恢复备份等的工具。

/usr 文件系统包含所有命令、库、man页和其他一般操作中所需的不改变的文件。 /usr 不应该有一般使用中要修改的文件。这样允许此文 件系统中的文件通过网络共享,这样可以更有效,因为这样节省了磁盘空间(/usr 很容易是数百兆),且易于管理(当升级应用时,只有主/usr 需要改 变,而无须改变每台机器) 即使此文件系统在本地盘上,也可以只读mount,以减少系统崩溃时文件系统的损坏。

/var 文件系统包含会改变的文件,比如spool目录(mail、news、打印机等用的), log文件、formatted manual pages和暂存文件。传统上/var 的所有东西曾在 /usr 下的某个地方,但这样/usr 就不可能只读安装了。

Continue reading “3月12日植树节”