安装tokyocabinet的问题

在SUSE Linux version 2.6.27.7-9-default (gcc version 4.3.2)上安装tokyocabinet的时候,需要安装相关的lib

http://fallabs.com/tokyocabinet/misc/bzip2-1.0.5.tar.gz

这个压缩包在安装的时候,Makefile中没有添加 -fPIC 参数 导致安装后,tc找不到它,所以要在它的Makefile中添加上 -fPIC
那gcc这个 -fPIC参数是什么意思的。
这位仁兄的描述很清晰
网友总结如下:
因此,不用fPIC编译so并不总是不好.
如果你满足以下4个需求/条件:
1.该库可能需要经常更新
2.该库需要非常高的效率(尤其是有很多全局量的使用时)
3.该库并不很大.
4.该库基本不需要被多个应用程序共享

这样解决了安装tc的问题。

Rhythmbox歌词插件

最近发现Rhythmbox听歌没有显示歌词很不爽,Rhythmbox自带了一个老外写的歌词插件很难用,心里就想着开发一个插件,结果一翻了解以后,发现已经有国人写了一个鲁班歌词插件了http://code.google.com/p/sogou-lyrics/ 相当好用,所以就放弃了自己写插件的想法。

另外还发现一个Rhythmbox插件onlinemusic,也是国人写的,主要是抓取google音乐,也不错,唯一遗憾的是搜索功能不能用,有时候网络很卡的话,rb还会死掉。

误删了rpm,yum的经历

最近又发疯了,搞了一个严重的错误,本来想升级CentOS5.4上的subversion到1.6.x,结果不小心用yum erase sqlite的时候,居然把yum,rpm相关依赖都给卸载了,无语了。

想同遭遇的同仁::

http://weic.wordpress.com/2009/12/08/centos-误删了-rpm-怎么办/

http://hi.baidu.com/rainchen/blog/item/ee4107080a398e38e924881c.html

告诉自己,不在错误中成长,就在错误中麻痹。

linux下一些有意思的命令

最近有人问我关于页面中的联系方式是怎么生成的,这个也是从我朋友那里受到的启发。

这个主要是为了告诉网络机器人“非诚勿扰”,其实大家把联系方式做成图片更好。

正题:

1. echo “xxxxx@gmail.com” | xxd -ps -u

得到:787878787840676D61696C2E636F6D0A

2. echo “ibase=16; 787878787840676D61696C2E636F6D0A” | bc

得到: 160132878550962084828530736251255352586

3. dc -e  160132878550962084828530736251255352586P

得到: xxxxx@gmail.com

当然还有更简单的,用base64编码

1. echo “xxxxx@gmail.com” | base64 -i

得到: eHh4eHhAZ21haWwuY29tCg==

2. echo “eHh4eHhAZ21haWwuY29tCg==” | base64 -d

得到:  xxxxx@gmail.com

ubuntu环境下使用subclipse提示不能加载JavaHL Library

最近发现eclipse老弹出窗口说不能加载JavaHL 包,按照javaeye网友提示,sudo apt-get install libsvn-javahl 的时候发现根本找不到这个包,在ubuntu官方package里面搜索找到了libsvn-java

原来ubuntu10.04下的包名已经改成libsvn-java,而不是libsvn-javahl.

svn怎样目录合并

最近开发小组采用了分支开发,分支发开避免不了要合并的问题,合并的时候有这样的情况:

如果一个分支开发的时候只是在主干的某一个目录下做了修改,添加,删除文件的操作,而且这样操作到的文件比较多,合并人员这时候肯定是希望只在这个目录上来选择合并。

然而由于我们的svn服务端使用的是1.4.x的版本,svn客户端(eclipse下的subclipse)是1.6.x的,选择目录合并的时候服务端会提示:svn: Retrieval of mergeinfo unsupported by ‘xx.xx.xx.xx’

也就是说1.4.x的服务端是不支持目录合并。

这时候要升级svn服务端(升级到1.6.x),但是升级到1.6.x的后,发现还是不能目录合并。

经过分析,在升级之前,我的一个项目(project-a)源代码路径为:/abc/a/project-a,因为svn对所有目录都有版本号控制,所以升级服务端后还要对svn代码库也升级

#> svnadmin upgrade  代码库路径

升级后,终于可以合并目录了。

ubuntu安装的初级建议

ubuntu是一个让人又爱又恨的桌面linux系统,爱的原因是它优秀的桌面,强大的可用性,稳定的周期性开发,大众华的社区支持,等等,那些热爱ubuntu的人可以说出一大堆好处。
那可恨的是什么呢?不同的硬件环境,始终不能做到平滑升级,尽管ubuntu的团队一直在努力,但是效果都不够理想,我尝试过几个版本的升级安装,多少都出了点状况,也许那些从来没有升级失败的人要站出来反驳,我接受,世界本来就有很多我不了解的,所以我每次的结果都是从光盘安装才取得成功,试想我每次都从光盘安装,最后那张光盘到底是ubuntu爱好者的历史纪念品还是废品呢,虽然微软也是光盘发布windows,可是一张盗版的xp可以用很多年,我甚至还有大学第一次安装xp的光盘,我们是不是该低碳呢?

好了,既然每次都光盘安装,那是不是我每次都要反复安装我习惯的软件,调整适合我自己的设置呢,答案是一定的,但是可以总结经验的。

下面的建议针对个人pc

1.安排合理的分区结构

/boot       1G (系统内核和grub存放位置,实际上256M都够了,硬盘空间都那么大了何必那么吝啬)

/             这个分区20G吧,这个分区主要存放系统,和一些你自己要安装的软件

/home     剩余的空间都分到这个分区,这是你经常使用到的分区。

还有就是swap分区,2G足够了,也有推荐说是物理内存的两倍,个人pc没必要那么大,除非你经常开很多软件,经常待机,linux真正使用到swap分区的时候,它已经变得很慢了。

当然还有人喜欢把/var  , /usr , /usr/local都单独分出来,那样做也可以,我没有这样做。

有了上面的分区,把一些个性配置都放到 /home个人目录下的 .XXX文件里面(比如: .vimrc),个人使用的开发工具都安装到个人目录,这样下次光盘全新安装的时候,就不会被删除,比如我经常使用的java jdk,eclipse,xmind都是自己指定安装路径,没有通过apt来安装。

2.做一些文件备份

一个朋友将修改过的一些系统配置文件(例如/etc/profile)都备份到个人目录,下次光盘安装后,再覆盖一下就可以了,其实ubuntu在升级安装的时候会去检测这些关键的配置文件是否被改动过,它会提示你是不是要覆盖你的修改,默认是不覆盖,但个人还是建议最好让它覆盖,你自己再来覆盖它。

说ubuntu很强大是因为你没必要太多的修改他的一些桌面环境,它已经做得很好了,如果你非要看起来不一样,就hack它吧。

Apache基金会被攻击,密码遭窃

首先见到这个消息是来自于朋友的网站开源中国社区,然后顺着消息的来源,找到了apache官方发言,这是一起典型的XSS跨站攻击(不清楚的同学可以google一下什么是XSS跨站攻击),整个过程apache官方描述得很清楚,最有趣的是,apache描述那家叫做http://www.slicehost.com虚拟主机的公司,

Unfortunately, SliceHost did nothing and 2 days later, the very same virtual host (slice) attacked Atlassian directly.

难道这是虚拟主机商的通病?个人在这里只是总结一下前辈们的经验。

  • 1.input is a devil (一位资深的安全专家感言)。
    特别是互联网上,对于所有来自于用户的输入,都应该先把用户想象成黑客,而不是你认为的忠实用户。
  • 2.密码的复杂度,和密码修改的策略。
    没有破解不了的密码,只是时间问题。
  • 3.计算机服务应该尽量保证独立。
    这就是虚拟机,虚拟服务等虚拟概念大行其道的原因。
  • 4.如果家里放了贵重的东西,那么出门前请锁好门,花点钱买一条好警犬,这样还不够,在家里装上监视器。
  • 5.计算机真正最大的安全问题,来自于内部(一位资深的安全专家感言)。
    这条规则虽然和本文关系不大,但是个人深有体会,黑客要花1小时,1天甚至1年才能破解的密码,内部人员却只需要几秒钟就能将它泄漏。

小贴士:推荐一款安全监控软件fail2ban

svn关键词BASE, HEAD, COMMITTED, PREV的深入理解

(@转载请注明出处:http://blog.csdn.net/cmatch)
svn关键词BASE, HEAD, COMMITTED, PREV可以很方便用于日常操作中,但是很多人对他们的工作原理和方式不是太了解。

在这里我将使用用例,诠释他们的作用和意图。

先给出svn手册中对他的解释:

“HEAD” latest in repository
“BASE” base rev of item’s working copy
“COMMITTED” last commit at or before BASE
“PREV” revision just before COMMITTED

HEAD表示在版本库中最新的版本,记住一定是版本库,而不是某个working-copy, 另外需要注意的是,这里提到版本库是指对应working-copy的那个分支或主干。

COMMITTED表示在working-copy中最近的一次提交版本。

PREV表示在working-copy中最近的倒数第二次提交版本,也就是COMMITTED – 1。

前面3个概念都是比较好理解的。

最后一个BASE有点不好理解,先给出例子,最后结论BASE的含义

1. -bash-2.05b$ svn co http://svn.corp/…/proxyio/
2. A proxylog/proxyio.procinfo
3. A proxylog/pi.cpp
4. A proxylog/Makefile
5. A proxylog/run.sh
6. Checked out revision 134057.
7.
8. -bash-2.05b$ svn st -v
9. 134057 134034 deyi.long .
10. 134057 102502 deyi.long proxyio.procinfo
11. 134057 134034 deyi.long pi.cpp
12. 134057 102674 deyi.long Makefile
13. 134057 114428 deyi.long run.sh
14. 备注:第一列表示BASE, 第二列表示COMMITTED

可以看出checkout一个working-copy后,svn会给这个working-copy分一个新的、统一的BASE版本号(如 134057)。

接下来可以修改pi.cpp代码,然后checkin,你就会发现这个文件的BASE和COMMITTED会同时增加,并且相等。如下

1. -bash-2.05b$ svn st -v
2. 134057 134034 deyi.long .
3. 134057 102502 deyi.long proxyio.procinfo
4. 134058 134058 deyi.long pi.cpp
5. 134057 102674 deyi.long Makefile
6. 134057 114428 deyi.long run.sh
7.

接下来在此目录下执行update动作,你就会发现所有文件的BASE都进行了升级,但是COMMITTED没有改变,如下

1. -bash-2.05b$ svn up
2. At revision 134058.
3.
4. -bash-2.05b$ svn st -v
5. 134058 134034 deyi.long .
6. 134058 102502 deyi.long proxyio.procinfo
7. 134058 134058 deyi.long pi.cpp
8. 134058 102674 deyi.long Makefile
9. 134058 114428 deyi.long run.sh
10.

通过上述用例,可以看出BASE表示在working-copy中每个文件基准版本,会经常变动,并且有统一working-copy的版本的意图。另外,也说明对每个文件来说,BASE就是COMMITTED的别名,但是它可以和其他文件BASE保持一致,用于统一,批量处理.

升级到ubuntu 10.04

升级过程比较简单
命令行输入:update-manager -d (不清楚update-manager的看看help)

然后升级到10.04
升级过程中会有些提示,比如提示是否替换一些配置文件,如果你之前修改过一些系统配置文件,他都会提示你是否要替换成新的。建议系统的文件都替换成新的,如果有要修改的,升级后再修改,以免升级后出现问题。
升级后没什么大问题
但是工具栏中firefox找不到图片,这个倒是好处理,重新添加一个。

然后就是修改一下语言环境,默认是中文,我喜欢英文
ubuntu的语言环境和一般的linux系统有点不一样

$ sodu vi /etc/default/locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

Centos是

$ vi /etc/sysconfig/i18n
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

当然了,所有linux系统都可以在/etc/profile中修改
===============================================
经过今天的使用,升级10.04的最新包,结果不能启动了,后来恢复到9.10,建议大家不要在工作系统中使用最新版本的ubuntu。

Page 1 of 212»