Skip to content

{ Tag Archives } linux

ubuntu 9.04 jaunty desktop effect lag

最近在ubuntu下打开了composite显示效果,结果发觉在最大最小化和Alt-Tab的时候居然会lag几秒。心里郁闷,本子显卡是ATI HD3470,应该不会这样啊。于是放狗搜了一下,居然是个Xorg已知bug。
对于ATI显卡,在Gnome、KDE或其他WM上,都有这个问题,本来Xorg早有patch了,但是ubuntu 9.04里似乎居然没有集成进去。可以在源列表里加入如下源:
deb http://ppa.launchpad.net/ubuntu-x-swat/xserver-no-backfill/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ubuntu-x-swat/xserver-no-backfill/ubuntu jaunty main
认证密钥如下:
sudo apt-key adv --recv-keys --keyserver keyserver.Ubuntu.com 0x643dc6bd56580ceb1ab4a9f63b22ab97af1cdfa9
sudo aptitude safe-upgrade后重启X,发觉X Window在切换窗口的时候已经流畅了。

Also tagged

折腾一下系统

周末球友出差,没有打成球,于是宅在家里到半夜,突然脑袋一热就犯了IT民工的毛病。本来我已经渐渐修炼到,心中有系统,手头无系统的返璞归真之境界,无奈还要偶尔玩一玩。遂把心得小结如下:
首先是启动系统的工具,要启动系统,肯定得先有启动光碟啊。不过由于俺们越来越懒散,已经不知道多久没有见过启动光碟了,手头只有几个USB碟。不过有了这个就足够啦,推荐一个好玩的开源工具:UNetbootin,它目前支持基本所有的主流非主流的Linux系统,直接下载你要安装的ISO,利用这个工具灌装到USB碟里就能启动机器啦,你可以启动一个Live Linux,或者安装Linux,随便你了。
不过你没看错,它只是Linux工具,如果你要用USB安装Windows,那可以用这个工具:usboot,这个链接里的工具包括了一个ghost镜像,可以通过USB恢复Windows镜像,太方便了。另外还有个著名的PE-Builder,提供一个Live Windows,就跟那个深山红叶光碟差不多啦,既然已经能启动一个Linux Windows,那能干的事情就由你想象了。
装完系统后,关键问题就是如何联网了。说明一下连接无线的办法,如果你安装的系统还没有安装X环境,那建议使用HP的wireless tools,来连接无线网络。连接常见的WEP加密网络的步骤是:
# iwconfig wlan0 essid "wlan name"
# iwconfig wlan0 key s:"wlan password"
# dhclient wlan0
这样就可以自动获取IP了,如果不知道无线网络的名字,使用iwlist wlan0 scanning查一下。这部分代码也可以写到 /etc/network/interfaces里:
if-pre /sbin/iwconfig wlan0 essid "wlan name"
if-pre /sbin/iwconfig wlan0 key s:"wlan password"
iface wlan0 inet dhcp
这样系统装好了,网络也没问题了,然后就随便干什么事情啦,over。

Also tagged

[翻译]把STL容器放入共享内存

昨天在上篇blog里描写了如何把STL容器放到共享内存里去,不过由于好久不写blog,发觉词汇组织能力差了很多,不少想写的东西写的很零散,今天刚好翻看自己的书签,看到一篇挺老的文章,不过从共享内存到STL容器讲述得蛮全面,还提供了学习的实例,所以顺便翻译过来,并附上原文地址。
共享内存(shm)是当前主流UNIX系统中的一种IPC方法,它允许多个进程把同一块物理内存段(segment)映射(map)到它们的地址空间中去。既然内存段对于各自附着(attach)的进程是共享的,这些进程可以很方便的通过这块共享内存上的共有数据进行通信。因此,顾名思义,共享内存就是进程之间共享的一组内存段。当一个进程附着到一块共享内存上后,它得到一个指向这块共享内存的指针;该进程可以像使用其他内存一样使用这块共享内存。当然,由于这块内存同样会被其他进程访问或写入,所以必须要注意进程同步问题。
参考如下代码,这是UNIX系统上使用共享内存的一般方法(注:本文调用的是POSIX函数):

Also tagged ,

赞一下ubuntu的Windows免CD安装法

一直习惯了远程ssh工作, 所以好久没有遭遇到装系统这样的麻烦事了. 不过最近期望在本地部署一个系统, 所以打算安装一个ubuntu试试. 下载完ISO, 才懊恼的发觉手头没有空光盘可以刻录. 我想可能大家都遭遇过这样的事情, 再想起以前的那些硬盘安装方法也很头疼, 比如用vmware之类的. 不过可能我对Linux安装的印象太古老了, 上网查了一下, 才发觉ubuntu已然替用户考虑了这些繁琐的问题, 开发了一个wubi.exe的安装程序, 可以让用户异常方便的在Windows下免CD安装上ubuntu. 简单的几个步骤:

挂载上ubuntu的安装ISO. 如果你没有虚拟光驱程序, 直接解压ISO, 把其中的 .disk, casper, umenu.exe和wubi.exe 这四个文件和目录复制到某个盘的根目录下也行. 如果你想最终安装一个真正的Ubuntu系统到某个盘比如E:盘, 那不要复制到E:\上, 因为待会你会把它格式化掉. 如果只是想装个跑在Windows上的demo版本,那就无所谓.

运行 umenu.exe
在出现的对话框上选择 demo and full installation, 然后选中 help me to boot from CD, 安装并重启即可.当然也不要安装到E:\. 这个步骤结束后会在你的系统盘, 比如C盘下生成wubildr和wubildr.mbr这两个引导文件, 同时修改 boot.ini, 加入Ububtu的启动选项.
重启后, 选择进入Ubuntu, 将进入一个虚拟的demo版本, 登录后运行桌面的安装程序, 安装真实的ubuntu程系统.

之所以选择先安装Demo, 是为了保险起见, 而在运行umenu.exe的另外一个直接安装的菜单时候, 老是出错. 总之, 这个过程对于Windows用户来说已然变得非常傻瓜方便了. 一直以来我认为Gentoo是最容易装的, 因为只要一张liveCD就能干所有的事情了, [...]

Also tagged

日志操作利器log4cxx

今天看了一场今年WCG的比赛,jaedong对阵stork,非常精彩。突然感觉星际里的微操和大局观就类同C和C++的开发,写C代码的时候就满脑子的字节、移位、共享内存、文件描述符之类的,C++就考虑类、模板、重载、IO流、标准库了。这只是个引子,在C开发一直用openlog(), syslog() 来记录日志,虽然方便,但不够强大。今天来看一下C++中的一些日志操作库。
流行的一些C++日志库有好些,比如 log4cplus, log4cpp, log4cxx, boost log 功能依次增强吧。
当前的状况是,log4cplus已然停止开发许久;log4cpp去年突然有了更新,升级到1.0稳定版;log4cxx今年有了更新,现在属于apache的一个项目;boost log功能最强,而且文档十分详尽,不过不清楚为何当年申请进入boost库被reject。前三个有着共同的前缀log4,意思是它们都是从apache优秀的log4j日志操作库port出来的。优秀的实现总是在多个语言和平台上都会被人借鉴。
文档状况是,除了boost log外文档都很匮乏,主要参照内容就是doxygen生成的API文档。
性能上,一些早期的资料表明log4cpp性能相当出众,它也是较早移植log4j的C++库,log4cxx是后来apache自己的一个移植,具体性能影响和你使用的配置有关系。log4cxx是个线程安全并且支持多种appender的日志库。
其他细节,log4cpp提供了一个对比表。

Also tagged

tcpdump分析soap包

Tcpdump是个异常强大的网络包抓取和分析工具,最近又把它翻出来了。因为在写一个Web Service相关的程序,嫌原来的脚本性能太差,准备用gSoap重写一遍。这台服务器是需要身份验证的,可是服务器应答我身份验证成功后,RPC调用依然失败,怀疑是否soap包的结构有错误呢。因为不清楚具体原因,所以想抓包看看。
我们知道一般使用tcpdump可以这样,这会打印出你所要抓取的包的详细内容,其中-X选项会同时打印出hex和ASCII格式的内容,特别适合分析新协议:
# tcpdump -X -s0 host 192.168.0.1 and tcp and port 80
如果要抓取的内容太多,不希望打印到标准输出,那么可以通过-w和-r选项,写入到文件,然后再从文件中读出分析:
$ tcpdump -w tcpdump.log host 192.168.0.1
$ tcpdump -r tcpdump.log
而soap其实是架设在http之上的,tcpdump有专门打印出数据包ASCII形式的参数,所以我们过滤所有包含endpoint的ip地址如192.168.1.111的数据包,然后打印出来,我们就能直观的看出soap交互的详细内容。
$ tcpdump -A -s0 host 192.168.1.111

Also tagged

STL小记

使用hash_map
这两天写段程序, 需要用到hash_map, 于是跑到 sgi 上学习了一下, 结果郁闷的发现给出的例子在Mac和Linux下都没法编译通过. 因为hash_map并没有进入C++的STL标准, 于是破费了点周折才发现hash_map位于/usr/include/c++/4.0.0/ext目录下, 并且在__gnu_gxx的名字空间中. 所以要在Mac或者Linux下使用hash_map, 需要加上该名字空间.
这里有个例子:

Also tagged ,

操作mysql数据库

Mysql数据库管理
强制指定mysql的字符集
修改my.cnf
collation_server=utf8_unicode_ci
character_set_server=utf8
skip-character-set-client-handshake
高负荷请求的一些设置
set-variable = max_connections=500
set-variable = max_connect_errors=10000
set-variable = wait_timeout=300
set-variable = interactive_timeout=30
set-variable = thread_cache=40
set-variable = back_log=500
skip-locking
skip-name-resolve

Also tagged

可视化工具Graphviz

自由绘图软件中有两大神器: gnuplot 和 graphviz. 前者一般用来可视化你的数据, 比如描绘函数sin的曲线之类的, 对我来说其实用的不多. 而后者在软件领域使用得相对频繁, graphviz 主要用来显示一些结构化信息, 比如画画流程图, 网络拓扑图, 函数调用序列之类的, 很是实用. 这里主要介绍一下graphviz.
我之所以说他俩是神器, 因为他们提供非常方便的命令行接口, 可以完成自动化绘图功能. 另外你不必仔细考虑绘图的图形细节, 只需要把握处理流程或者拓扑结构就可以了. 这是一种"所思即所得"的绘图工具, 当然, 你很快就想到了, 它们一定也和latex, make这套系统结合得很好.
比如你想画这样一副图:

Also tagged

惊心动魄3小时

在实验室待到8点多,打算回去了,这时候师兄跑过来告诉我vista的盘刻好了;于是突发奇想,想装起来玩玩,没想到一下子搞到12点。
我笔记本上原来装了三个系统:Gentoo,Win2k3Serv,还有一个Mac OS X 10.4.3,因为Mac OS X for x86版本里边的驱动有些问题,笔记本显卡还是FireGL 9k,支持不是很好,常常Aqua挂掉。于是就想把这部分format掉,转个Vista玩。
不知道是因为Mac分区的问题还是Vista本身磁盘管理工具的问题,格式化再创建新分区之后,当安装到大半的时候,Vista安装程序告诉我,硬盘引导部分出现问题,所有的安装过程就被Cancel掉了(汗,这里不得不说安装程序做的有些傻,一是最后才去尝试引导系统,二是没有恢复性操作,前面又是复制又是解压又是检索硬件的忙活半天了,跑这里断掉了)。虽然有些纳闷,但是心里还是比较坦然,商业系统的安装碟自带的分区和格式化工具都是剧弱无比,没有一次能够在新分区下发挥成功的,当年装Mac的时候也是这样——那次的粗心导致硬盘数据全挂,寒。
重启机器,发觉出现“disk error, please press ctrl+alt+del restart”如此的字样,我心想估计mbr由被抹掉了,还好我的mbr在linux分区有备份,于是用一张livecd启动,挂载上了linux备份分区,发觉我居然备份了两个mbr文件,一个叫mbr.sav,一个叫mbr.win。心里一愣,也没有多想,直接执行 dd if=mbr.sav of=/dev/hda,然后重启。没想到噩梦发生了,我是用grub引导多系统的,这时候发现启动后只提示grub1.5...之类的,然后就出现 error。心下一惊,怎么会这样?
再次用livecd启动,fdisk -l一看,大汗:extend分区居然丢失了(这事情很灵异,现在我也没搞清楚怎么回事,因为我后来发现mbr.sav是正确的)。我想难道应该是导入 mbr.win?但是我硬盘结构是两个primary分区,分别是Mac和Win系统,一个扩展分区中包括linux和数据。mbr文件保存在备份分区上,现在整个分区表丢失了,我也没法找到正确的mbr备份了。突然想到好多的资料还有没写好的学位论文都在扩展分区上,不由脑袋发麻。经验教训就是:冲动是魔鬼啊,大家进行底层磁盘操作的时候一定要慎重呀,而且一定要在头脑清醒的时候做。
不过万幸的是,我时不时喜欢备份总结。后来查找资料发觉,当年在系统分区完成之后,我写过一片 wiki做总结,上边居然详细记录了分区表的扇区数值:
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start [...]

Also tagged , ,