2007年 12月 的归档
原来软件还可以这么装
http://linuxdesktop.cn/2007/12/14/use-firefox-installed-softwares
用firefox装软件,还真是新奇,哈哈,稍微分析了一下:
about:config 里面搜索 apt,可以看到 network.protocol-handler.app.apt 关联到了 /usr/bin/apturl ,而是一个python写的程序,不过据作者自己说 FutureWarning: apt API not stable yet
权当趣味吧~
自己架了个WP玩
又有人说我的配色不好看,但是这里的配色有不是随便能改的,不好调试,于是就自己假了WP来试试,哈哈。
好在WP的假设还是超级简单的,就像它主页里面说的“五分钟”。
下载这个文件,解压到 /var/www/blog 里面,然后数据库里面建个表空间和用户名,方法可以参照我以前的这篇文章,然后把 wp-config-sample.php 重命名为 wp-config.php ,再修改里面的表空间名和用户名、密码。执行 http://bones.3322.org/blog/wp-admin/install.php 就OK了。
另外还装了coolcode插件和一个主题,也超简单:分别下载,解压到 plugins 和 themes 目录就装好了。
临时增加swap的方法
我的机子物理内存是1G,当时装系统的时候,以为也不会运行很多程序,于是只分了500M左右的swap.
但是后来,因为种种原因,导致系统缓存不够(主要是因为开了VBox和eclipse两大东东,加上ff和compiz之类的),又不想去动分区结构,怎么办呢?办法当然是有的:
- lily@LLY:/home$ sudo dd if=/dev/zero of=swapfile bs=1024 count=655360
- 记录了 655360+0 的读入
- 记录了 655360+0 的写出
- 671088640 字节 (671 MB) 已复制,18.6445 秒,36.0 MB/秒
- lily@LLY:/home$ file swapfile
- swapfile: data
- lily@LLY:/home$ sudo mkswap swapfile
- Setting up swapspace version 1, size = 671084 kB
- no label, UUID=789730ee-9dcb-4143-8a5c-bbdff938c5a6
- lily@LLY:/home$ file swapfile
- swapfile: Linux/i386 swap file (new style) 1 (4K pages) size 163839 pages
- lily@LLY:/home$ sudo swapon swapfile
- lily@LLY:/home$ free -m
- total used free shared buffers cached
- Mem: 1002 982 19 0 3 250
- -/+ buffers/cache: 728 273
- Swap: 1126 486 639
解释一下,dd那命令其实就是新建一个约640M的空白文件,注意这里不推荐用其他方法建立文件,因为作为swap的文件不能有空洞(应该就是所谓的碎片吧).
mkswap是在那个空白文件的基础上,建立swap的文件系统,可以看到之后的file命令输出就不一样了.
然后在用swapon命令激活,一切都是那么简单.
另外,如果想让更改永久有效的话,还需要修改一下 /etc/fstab 文件,否则重启后就要再执行swapon命令激活一次.
自己修改了下这里的theme
现在这个theme不错吧,这里可有我自己的那么一点点功劳哦.
原来这个theme的页面是不支持GuestBook模板功能的,也就是说,我那个”给我留言” 的页面,其实根本就留不了言,这不是形同虚设了嘛~所以我就自己修改了下theme的源文件,让一叶给传到服务器上去了,嘿嘿,还有一些其他的杂七杂八的小修改.
原来WP的theme还是很容易写的,哈哈.
(++i)+(++i)+(++i)+(++i)
今天,看到一个面试题,居然无聊到这种地步,看这代码:
- #include<stdio.h>
- main()
- {
- int i=1,j;
- j=(++i)+(++i)+(++i)+(++i);
- printf("%d\n",j);
- }
问输出的j是多少。。。虽然知道这个很无聊,但是反正闲着也是闲着嘛,就研究了下,执行
lly@LLY:~/test$ ./a.out
15
这我就不懂了。。。再看看objdump的结果:
...省略若干
8048385: c7 45 f4 01 00 00 00 movl $0x1,0xfffffff4(%ebp)
804838c: 83 45 f4 01 addl $0x1,0xfffffff4(%ebp)
8048390: 83 45 f4 01 addl $0x1,0xfffffff4(%ebp)
8048394: 8b 45 f4 mov 0xfffffff4(%ebp),%eax
8048397: 03 45 f4 add 0xfffffff4(%ebp),%eax
804839a: 83 45 f4 01 addl $0x1,0xfffffff4(%ebp)
804839e: 03 45 f4 add 0xfffffff4(%ebp),%eax
80483a1: 83 45 f4 01 addl $0x1,0xfffffff4(%ebp)
80483a5: 03 45 f4 add 0xfffffff4(%ebp),%eax
80483a8: 89 45 f8 mov %eax,0xfffffff8(%ebp)
...省略若干
里面的0xfffffff4 是变量i,0xfffffff8是j,可以看出现在是先把i自加2次,再取出两个i的值相加(这时候两个i的值都是3),再执行后面的,也就是 3+3+4+5 = 15。不解,于是用了另一个编译器(小型的tcc)编译,执行,结果就不一样了:
lily@LLY:~/test$ ./a.out
14
也看看关键的汇编代码:
80481ed: b8 01 00 00 00 mov $0x1,%eax
80481f2: 89 45 fc mov %eax,-0x4(%ebp)
80481f5: 8b 45 fc mov -0x4(%ebp),%eax
80481f8: 83 c0 01 add $0x1,%eax
80481fb: 89 45 fc mov %eax,-0x4(%ebp)
80481fe: 8b 4d fc mov -0x4(%ebp),%ecx
8048201: 83 c1 01 add $0x1,%ecx
8048204: 89 4d fc mov %ecx,-0x4(%ebp)
8048207: 01 c8 add %ecx,%eax
8048209: 8b 4d fc mov -0x4(%ebp),%ecx
804820c: 83 c1 01 add $0x1,%ecx
804820f: 89 4d fc mov %ecx,-0x4(%ebp)
8048212: 01 c8 add %ecx,%eax
8048214: 8b 4d fc mov -0x4(%ebp),%ecx
8048217: 83 c1 01 add $0x1,%ecx
804821a: 89 4d fc mov %ecx,-0x4(%ebp)
804821d: 01 c8 add %ecx,%eax
804821f: 89 45 f8 mov %eax,-0x8(%ebp)
...
可以看到这里面的-0×4(%ebp) 是i,而 -0×8(%ebp)是j。而之前的两次自加操作分别是在 %eax 和 %ecx 上执行的,第一次相加操作就是直接把这两个寄存器里面的值加在一起了。所以最终的效果相对于 2+3+4+5 = 14 。
这样的结果说明了同样的C代码,在不同的编译器下,会产生完全不同的可执行文件,当然如果你的源代码写得不好,完全有可能产生不同的执行结果。另外也再一次说明了这样一个面试题的无聊性,作为反面教材还差不多,嘿嘿。
BTW: 有兴趣的朋友还可以自行研究一下 (++i)+(++i)+(i++)+(i++)+(++i) 的执行结果。
aptitude forbid-version
接着昨天的libcairo2问题,小土蛋(其实我至今还没搞清楚zhan为什么叫小土蛋…)留言说可以用什么 aptitude forbid-version ,嘿嘿,于是呼研究了下,发现forbid-version不是zhan想的那样,但是aptitude还是蛮好用的.
降级,如果用 aptitude 命令的话,可以这么做:
- sudo aptitude install libcairo2=1.4.10-1ubuntu4
然后可以用 forbid-version 把有问题的版本锁定:
- sudo aptitude forbid-version libcairo2=1.4.10-1ubuntu4.1
这样以后用 sudo aptitude upgrade 命令升级的时候,就不会升级到 1.4.10-1ubuntu4.1 版本了,但是如果以后又出了个 1.4.10-1ubuntu4.2 的话,还是会升级的,这就是和 hold 的区别,也是这个命令存在的意义所在.嘿嘿.
当然如果用是 sudo apt-get upgrade 升级的话,会照升不误,看来apt-get不买你aptitude的帐啊~哈哈.
升级libcairo2出了问题
早上一来,照例升级了一下系统,发现了一堆更新,于是没想啥就都装上了,结果问题就开始了:
点击ff的关于对话框崩溃,打开 thunderbird 直接崩溃, leafpad和mousepad的关于对话框也崩溃,ccsm拖动一下滚动条就崩溃.
在命令行里面看到,错误都是 Floating point exception (core dumped)
把升级的包都翻出来看了一下,怀疑最有可能是 libcairo2 ,这个,于是下载了旧的包,覆盖安装,一起又恢复正常了.
发了个帖,以示后人,貌似也有几个和我一样的,呵呵.具体看这个:
http://forum.ubuntu.org.cn/viewtopic.php?t=93410
Shell脚本转化成二进制文件
工具名称: shc
安装方法: sudo apt-get install shc
使用方法: shc -f xx.sh ,就会生成一个 xx.sh.x 的二进制可执行文件,执行这个可执行文件的效果和执行原shell脚本的效果一样,另外还会生成一个 xx.sh.x.c 的C源文件,自己编译这个源文件成二进制文件也是可以的.
另外这个工具好像还可以设置过期时间,到了这个预设的时间后,再执行二进制文件的话,就会输出一行已过期的信息(当然这个信息也可以自定义),不过我想这个功能一般用不着吧 :)
很老的电子书
http://books.solidot.org/article.pl?sid=07/11/30/072204
这里说:
Google的图书扫描计划有很多强大的对手,除了互联网档案馆外,还有许多著名的大学图书馆。卡耐基梅隆大学从10年前就开始了图书数字化计划。根据美联社的报道,本周二,它的电子图书数量超过了150万本,相当于一座典型的大学图书馆的馆藏量,所有的电子书都免费在网上公开。到目前为止图书馆的电子书一共有20种语言,其中中文版图书有97万册之多,有大量民国时期的图书(版权过期?),英文图书36万册。这项计划是非赢利性质的,合作伙伴包括中国的浙江大学,印度科学院和埃及亚历山大图书馆。网址是http://tera-3.ul.cs.cmu.edu/。
发现里面中文的书还是很多的,不过可能都比较老,如果喜欢看几十年甚至百多年前的书的话,可以去看看,也是前几天刚提过的 DjVu 格式的扫描版.