几个KDE4使用技巧
  1. 如果觉得KDE太难看了,然后你的英语水平还行的话,试试把语言改成英文。方法是在系统配置(system settings)里修改"地区与语言(Regional & Language)"。加US English语言,地区则保持为China。我还设了Bitstream字体,觉得显示好看多了。

  2. 很多朋友不习惯KDE默认的单击行为。我记得以前WIN98也可以改成单击,结果是没什么人用。这个也可以在系统配置里修改。找到"键盘与鼠标(Keyboard & Mouse)",鼠标配置可以修改。

  3. 拜KIO组件所赐,在Konqueror可以查看各种命令的说明文件。不信,试试在Konqueror里输入man:ls就可以看到ls命令的使用说明了。格式很简单,man:后面加上命令名。实际上由于KDE4引入了KIO,大多数KDE4组件都可以 如同硬盘文件一样对待FTP、SFTP、HTTP上的文件。

  4. ssh是Linux下面提供远程终端的工具,在windows使用putty或者SecureCRT之类的终端软件可以连接到Linux进行操作。ssh还提供了sftp协议,在windows下可以使用filezilla或者winscp等工具访问linux的文件系统。使用方法跟ftp一模一样。KDE4的dolphin和konqueror已经内置了对sftp的支持,只要在地址里输入sftp://romotehostip就可以访问sftp了。

  5. 使用konqueror的时候,很多中国人很讨厌使用ctrl+space打开输入法的时候konqueror显示出一堆狗皮膏药。konqueror称它们为"access key",按ctrl键之后显示出来,用户只要再按一下对应的按键,就可以跳到对应的链接去了。在KDE4.2之前,去掉这个功能得修改配置文件,现在不用,在konqueror的配置对应框里找到"网页浏览(Web Browsing)",最后一个选项"启用Access Key"一项去掉即可。

类型:LinuxApp,创建时间:一月 1, 2012, 12:19 p.m. 点击查看完整内容。。。
在Linux安装配置unixODBC

ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问DBMS(Database Management System)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。微软公司在1993年以DLL集的方式发布了世界上第一个ODBC产品,现在成为了微软开放服务结构(WOSA,Windows Open Services Architecture)中,有关数据库的一个组成部分。微软的ODBC产品其实就是一个ODBC的驱动管理器,提供一个ODBC应用程序到某种ODBC驱动的接口。在UNIX系统上,有两个开源的ODBC驱动管理器,unixODBC和iODBC。

在Linux下,ODBC可以让一个软件本身不必花费太多的精力而支持多种数据库系统。开源的SIP服务器Asterisk就是这样一个例子。本文就是配置Asterisk服务器的产物,纪录了我将一个MySQL数据库配置为ODBC数据源的详细过程。

类型:LinuxApp,创建时间:一月 1, 2012, 12:16 p.m. 点击查看完整内容。。。
使用eclipse远程调试tomcat

相信很多J2EE的开发者都是在Windows上面开发程序,然后把程序上传到Linux下运行的吧。可是有时候在自己机器上运行的好好的程序,放到服务器下就出错了。单单看出错信息也推断不出是哪里的问题。这时候试试用Java的JPDA远程调试程序,一定可以让你很满意。

tomcat服务器已经内置了JPDA支持,只要用:

catalina.sh jpda start

这条命令启动tomcat,它就会监听8000端口,等待调试器的连接。要注意不能使用startup.sh脚本。tomcat会使用 JPDA_ADDRESS这个环境变量的值。比如想监听8017端口:

export JPDA_ADDRESS=8017
catalina.sh jpda start

接着,选一个自己喜欢的调试器,基本上现在主流的如Eclipse、NetBean都可以。我主要使用Eclipse,操作只要三步:

  1. 选择“Run”菜单里的“Open Debug Dialog”。
  2. 在对话框里找到“Remote Java Application”。 右键菜单选择“New”创建一个配置。
  3. 新创建的配置的Project选择服务器上的工程。HostPort分别填写你服务器的IP和JPDA的端口,默认是8000,或者$JPDA_ADDRESS

现在就可以像本机调试一样, 设置断点和跟踪调试了。

类型:Java,创建时间:一月 1, 2012, 11:52 a.m. 点击查看完整内容。。。
Qt的signal/slot机制原理

signal/slot在底层会使用三种方式传递消息。参见QObject::connect()方法:

bool QObject::connect (const QObject * sender,
        const char *signal, const QObject *receiver,
        const char *method,
        Qt::ConnectionType type = Qt::AutoCompatConnection)

最后一个参数是就是传递消息的方式了,有四个取值:

  • Qt::DirectConnection
  • Qt::QueuedConnection
  • Qt::BlockingQueuedConnection
  • Qt::AutoConnection

有关这几种类型的详细信息请点击查看正文。

类型:C++ & Qt4,创建时间:一月 1, 2012, 11:49 a.m. 点击查看完整内容。。。
有时候人就是懒

3月份的时候写了一个记帐本给自己用。它可以按时间列出帐目,并且统计一周、一月的开销,一直在用着。不过,它的时间列表没有按照先后顺序排。“反正凑合着用吧”,一直用到今天,终于看不过去,加了一行排序语句,花了一分钟时间。唉,我太懒了!

类型:随感,创建时间:一月 1, 2012, 11:39 a.m. 点击查看完整内容。。。
Windows Server 2003安装Vmware Server 2.0时碰到xxx.msi was rejected by digital signature policy

在Windows Server 2003上安装Vmware Server 2.0时碰到一个问题。当安装程序开始运行后,弹出一个提示,说xxx.msi was rejected by digital signature policy。在Vmware的网站上指出这是Windows Server 2003的一个BUG,还给出了一个链接,其中说明:

"当计算机没有足够的连续内存可供 Windows Server 2003 或 Windows XP 用于验证是否对 .msi 包或 .msp 包正确进行了签名时将出现此问题。"

解决方法请点击查看正文。

类型:随感,创建时间:一月 1, 2012, 11:38 a.m. 点击查看完整内容。。。
为什么使用SecureCRT或者putty通过ssh登录Linux主机很慢呢

相信很多使用Linux的朋友都会在Windows下使用putty之类的工具登录Linux主机。大家有没有发现,输入密码之后还要过很久才会显示命令提示符。这是不是因为Linux的服务器太糟糕性能太低才会这样呢?其实这是因为OpenSSH在用户登录的时候验证IP。OpenSSH会根据用户的IP使用反向DNS找到主机名,再使用DNS找到IP地址,最后匹配一下登录的IP是否合法。如果你的网络里没有DNS服务器,或者你的主机名是随便捏造的,花的时间就比较多。

安全和方便有时候两个不得不选一个。我比较希望OpenSSH帮我把等待的时候省起来。方法是修改/etc/ssh/sshd_config文件,添加(或者修改)一行:

UseDNS no

重启一下sshd服务器就可以解决了。

service ssh restart
类型:LinuxApp,创建时间:十二月 31, 2011, 5:39 p.m. 点击查看完整内容。。。
在Windows Server 2003下运行Rise Of Nations

搜索一下网上的一些文章,都说Windows Server 2003下不能运行Rise Of Nations。只要一启动就会跳出“Gathering Exception…”之类的错误。经过三四年的努力,今年终于在一个外国人的论坛上找到解决办法。据说这是因为微软认为没人在Windows Server 2003上玩游戏,所以把DirectMusic的部分组件禁用掉了,无论你再怎么升级Windows Server 2003都没有用。唯一的办法就是自己手动把DirectMusic组件装上去。详情请听说:

  1. 首先下载最新的DirectX来安装,比如我下载了一个directx_nov2008_redist.exe。这主要是为了避免新安装的DirectMusic组件不兼容系统的其它组件。

  2. 安装完之后,把directx_nov2008_redist.exe(用WinRar,因为它其实就是一个自动解压的压缩包)解压缩到一个目录里,找到里面的dxnt.cab包。接着继续把dxnt.cab解压缩到另一个目录里(姑且名为t:\dxnt吧)。

  3. t:\dxnt目录里找到这几个dll文件,把它们复制到c:\windows\system32下:

    • 文件列表见正文。
  4. 右键点击dmusic.inf,选择“安装”命令。

现在试着启动Rise Of Nations看看?

类型:随感,创建时间:十二月 31, 2011, 5:36 p.m. 点击查看完整内容。。。
MySQL在初始化权限表时报duplicated key ‘localhost-’错的原因

最近做了一个脚本能够自动将我们在程序以及相应的配置文件、附加库等安装到Linux。平常手动操作的话要半天时间,现在只要十分钟了。而且还大大减少了错误的可能性。这让我十分满意。

可惜这两天碰到一个错误,在脚本安装MySQL的那一步出现了错误。仔细考虑安装MySQL的步骤哪里出错了。首先脚本将从官方网站下载的MySQL解压到/usr/local/project/mysql下。然后根据MySQL安装指南的命令添加mysql用户和组、改变文件的属主以及读写权限,接着运行MySQL的初始化脚本。最后改变data目录的权限。仔细一看,发现只有运行初始化脚本的那个步骤报了错误,其它几个步骤都有达到命令所要求的目的。

初始化脚本的报错信息大概是duplicated key 'localhost-'。之后服务器就没有验证信息,无论使用任何方法都没办法登录(–skip-grant-tables不算)。经过查证,发现这是因为MySQL创建权限表时对于root用户会创建两条记录,一条是root@'localhost',另一条是root@hostname。其中的hostname如果跟localhost重名的话就会报这个错误。

所以这个错误就很好解决了。只要改一下主机名就OK了。。

类型:LinuxApp,创建时间:十二月 31, 2011, 5:32 p.m. 点击查看完整内容。。。
统一KDE3和KDE4程序的外观

使用Linux的朋友应该都会注意到Linux程序的外观通常是不统一的。因为在Linux下面存在着各种各样的图形库。这些图形库由不同的社区维护,在十年之内统一他们估计是不可能的了。想要一个统一外观的Linux,最好的办法只能是尽量选择由使用同一种界面库的程序集合。

目前主流的界面库有三种:gtk2、qt3、qt4。很多Linux下的程序使用GTK2界面库。目前大多数的Linux发行版都使用了GNOME桌面作为默认桌面环境,简单地使用他们就能得到统一的界面了。

从Windows转换到Linux环境的朋友一般会觉得KDE桌面更顺手一些。而且,与GNOME桌面相比,KDE的对应程序功能更加强大,运行更加稳定。可惜,KDE底层界面库最近两年升级,形成了qt3和qt4两种版本。这两个版本使用了不同的配置文件,因为外观上不大一样。不过没关系,使用本文介绍的方法就可以统一他们的外观了。

首先要明白,KDE程序的外观由三部分组成:风格(Style)、颜色(Color)、字体(Font)。风格是指按钮、滚动条、菜单的绘制方法。在KDE的配置程序中,这三个部分都位于“观感(Apperance)”里。

那好,现在就开始动手配置KDE。分别运行KDE3和KDE4的配置程序kcontrolsystemsettings。选相同的风格、相同的颜色、选相同的字体。需要注意的是,KDE3和KDE4相同的风格不是很多,目前只有少数的几种,有些朋友可能就得忍痛割爱了,可能内置的这些风格不是很适合;另外选字体的时候要注意“圆整字体边角(ClearType)”的设置也要一样。我的选择是Plastique(塑料)风格+QtCurve颜色+10号宋体。最后的效果非常好。

上面应该很多朋友可以做到吧。不过还有一些不大容易注意到的,比如root用户的设置可能不大一样,当我们运行管理程序的时候就觉得很碍眼。不过这个也简单,分别运行下面两条命令:

kdesu kcontrol
kdesu systemsettings

就可以打开KDE3和KDE4的设置程序。修改他们跟普通用户的配置一样就OK了。

希望KDE4早日成熟,我们就不用这么麻烦了。

类型:LinuxApp,创建时间:十二月 31, 2011, 5:27 p.m. 点击查看完整内容。。。
用Linux作NAT的简单例子

今天闹了一个笑话。我居然说启用IP_FORWARD之后就是NAT了。

很多有两台电脑的朋友应该都会想怎么样让自己的两台电脑都连上网。 如果其实有一台是WINDOWS的机器,应该是很简单的。只要保证直接连网的机器有两个网卡,然后做一个"Internet连接共享"就可以了。

Linux的机器就比较麻烦一些了。因为Linux下图形界面的工具基本太少。只能用命令来做。同样也是在直接连网的机器(称为Router吧,另一台机器则称为C吧)上安装两个网卡。配置好网络之后,分为三步(都需要root权限):

  1. 启用IP转发。方法是在Router里输入:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  2. 做个NAT。命令是:

    /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 10.0.1.0/24 -o eth1 -j MASQUERADE
    

    这条命令比较复杂,/sbin/iptables -t nat -A POSTROUTING是固定的,说明这条命令是做NAT的。

    -s 192.168.1.0/24是指你的两条机器形成的内部网络的网络地址。也可以写成192.168.1.0/255.255.255.0。这两种写法是一样的,详细情况可以Google一下无类IP地址。

    -d 10.0.1.0/24则是外面网络的地址。如果写上这个,表示内部网络的机器只能访问10.0.1.0/24这个网段。通常就不必写了。

    -o eth1,表示凡是满足条件的数据包都转到第2个网络接口上。

    -j MASQUERADE是固定的。。

  3. 在机器C上把默认网关写成Router的IP。

类型:LinuxApp,创建时间:十二月 31, 2011, 5:13 p.m. 点击查看完整内容。。。
在Linux下安装字体

国内很多Linux高手很不厚道。给人介绍一个功能的时候非要用一大堆的命令去做,有时还要修改配置文件。比如安装字体就是一个很典型的例子。

在Linux下安装字体其实是再简单不过的事了。在KDE3和KDE4安装一个TrueType字体都只需要在字体文件上按鼠标右键。在动作里选择“安装字体”。然后KDE会问你是安装到系统目录里还是个人目录里。家用电脑一般无所谓,就安装到系统目录里吧。输入密码就OK了。

类型:LinuxApp,创建时间:十二月 31, 2011, 5:06 p.m. 点击查看完整内容。。。
中国足球(转载)

老杜(LD教练)问上帝:中国男足什么时候能拿出线阿

上帝看了看老杜严肃地说:我看这届就行

老杜(LD教练)惊叹:你TMD拿我找乐吧

上帝怒吼到:是你TMD先拿我找乐的

类型:随感,创建时间:十二月 31, 2011, 5:05 p.m. 点击查看完整内容。。。
运行linux的脚本老是出现": No such file or directory"错误

我一直对字符界面有抵触感,即使会用vim,我的linux脚本(python/bash script)一般都是在windows下写完调试好,然后传到linux上的。

不过写好的linux脚本传到linux上运行的时候却经常报这样的错:

$ cat fish.py
#!/usr/bin/env python

print "fish"
$ chmod u+x fish.py
$ ./fish.py
: No such file or directory

找不到文件?可是无论怎么修改脚本,都没办法解决。找不到文件,那应该是第一行的env命令有问题啰?真是让人让人摸不着脑袋,到底是为什么呢?

类型:LinuxApp,创建时间:十二月 31, 2011, 5:04 p.m. 点击查看完整内容。。。
从linux qq不支持声音和视频说起

今天腾讯公司发布了qq的linux版本。这应该是linux世界的一个胜利,因为很多人不喜欢用linux是因为qq没办法在linux上面运行。经常看到有些人说qq有啥好用的。唉,真是想不通那些人为什么就想不明白这个世界除了他还有别的人么。

qq的linux版本只支持最少的功能。我还没有去用,但是确定视频和音频的功能是没有的。可能是因为开发时间不够吧。不过也让我想起一件事:linux下根本没有音频和视频的标准API,而且各个发行版还喜欢搞自己的配置,腾讯就算真的想做,它做得来吗?据我所知,linux下声音的API就不下三种,视频不大清楚。

今天刚好想下载一下picasa,也就是google的那个看图软件。发现了一件让人心酸的事。在picasa的安装说明里,居然是用命令行的。我想google也不想这样,这个世界上会用命令行的计算机用户可真少。google可不想开发一个只有一点点人用的软件。就算有一百万人用,它投入的成本每个人可能都要好几美元了,而且还基本上赚不回来。最终的原因还是因为linux的发行版太多了,而每个发行版安装软件的方法还各不一样。

希望在有生之年可以看到桌面linux统一为一个标准的版本。

类型:随感,创建时间:十二月 31, 2011, 4:54 p.m. 点击查看完整内容。。。
Python, Qt, Java的字符编码

首先定义只在本文中出现的两个基础概念:

  • 字节组。每8个位(bit)是为一个字节,多个字节成为一个字节组。
  • 文字串。现实语言的最小单位称为文字。一个英文字母就是一个文字,一个汉字也是一个文字,一个空格也是文字。

这两个概念是我生造的,主要是为了避免和现有的一大堆术语混起来。

文字串不能理解成字符串。倒是像圆这样的数学概念,比较抽象一些,只存在于头脑里。可以把文字串写在纸上,也可以记在计算机里,还可以读出来。字节组就是文字串在计算机中的表现形式。想一想,在纸上圆可以用一个公式来表达,也可以用一个图形来表达,还可以用文字描述它。文字串也一样,可以表述为多种字节组。众所周知,计算机只能处理数字,所以为了描述文字,最简单的方法就是把文字列出来,每个文字用一个数字表示。不同的国家有不同的方法来做这件事,比如美国人和英国人只有字母,还有一些符号,总共排了256个文字,叫做ascii码。中国的文字就比较多了 ,那个康熙大字典据说有40万,所以中国人排了gb2312标准,big5,gbk、还有gb18030,里面包含的文字总数各不相同。

  • 把文字串表述成字节组的方法就叫做字符编码。

显然,美国人的ascii码是不能表示中国文字的,因为它只能表示256个文字。虽然,中国的标准可以表示美国人的文字,但是却不能表示阿拉伯字符和其它一些像型文字。后来大家意识到这个问题是文化交流的障碍,于是就在一起制定了一个unicode标准。简而言之,unicode标准就是穷尽这个世界上所有的文字,给每个文字编一个数字。 和gb2312,gbk等一样,其实unicode也只是一种编码标准,只不过它能够表示所有的文字。从此,如果一个计算机系统想要支持多种语言文字,只要简单地支持unicode就可以了。在这种系统里,我们可以认为文字串就是unicocde字节组,unicode字节组就是文字串。

类型:Python,C++ & Qt4,Java,创建时间:十二月 31, 2011, 4:52 p.m. 点击查看完整内容。。。
排骨汤的煮法

去年搬了新家,有了一个厨房,终于可以煮自己最喜欢的排骨汤喝了。把煮汤的方法记下来。

首先当然是选料了。虽然家里人没少教我怎么选猪肉,但是作为生活白痴,只能记住主要的两点了:一、用手摸肉,红嫩有韧性的会比较好一点,手也不会有生涩的感觉。二、用鼻子仔细闻一下,有异味的一定不能要。因为排骨汤中最有价值的是骨头的部分,所以还要注意有些不良商贩在排骨里附带了很多其它猪肉。据说,非常长的排骨是母猪的,比较不好吃,这个。。大家自己体会吧。排骨汤的另一个是白萝卜,我倒觉得它的选料更复杂,因为我经常选到花心大萝卜。

接下来就是把排骨洗干净,把白萝卜去皮切块放锅里。试了一下,好像用冷水会比较好吃一点。锅用电饭煲就可以了,也可以用炖锅。煮的时间要看你的锅的火力了。我的做法比较土一点,看汤够不够我喝,如果够的话就可以了。

接下来是最后一步,也是最重要的一步——放盐。 没有放盐的排骨汤一点味道都没有,相当难喝,但是放了盐之后的排骨汤相当美味,不知道是为什么。。没有经验的时候可以慢慢放,一次放一点,粗盐比较咸,每一次少一点,细盐比较淡,每次多一点,搅拌一下,让盐散开,喝一下,如果觉得不够美味,多半是盐放太少了。我喜欢喝淡一点的排骨汤,生活嘛,平平淡淡才是真。

每次煮完,都情不自禁地喊出"Perfect!"。汤美之余味,久之不绝,赞而志之,愿乐长至。

类型:随感,创建时间:十二月 31, 2011, 10:02 a.m. 点击查看完整内容。。。
修改qt程序的图标(for windows)

最近经常在windows写qt程序。编译完的qt程序图标是windows默认的应用程序图标,不好看。于是就想给它换一个,找了一下qt的帮助文档,里面有提到这个问题。方法也挺简单的:

首先当然要有一个图标了,呵呵。把这个图标复制到程序的主目录下,姑且名字叫myicon.ico吧。没有?可以自己用vc画一个。然后编写一个icon.rc文件。里面只有一行文字:

IDI_ICON1               ICON                    "myicon.ico"

最后,在工程的pro文件里加入一行:

RC_FILE = icon.rc

qmakemake一下,就可以发现你的应用程序拥有漂亮的图标了。

顺便说一下,做WindowBlinds的那个公司有一个IconPackager,还一个叫做IconStudio的吧。可以用来管理和生成图标文件。 不过貌似要收钱的。。

类型:C++ & Qt4,创建时间:十二月 31, 2011, 10 a.m. 点击查看完整内容。。。
mysql下管理用户的命令

安装完mysql默认的root用户虽然没有设置密码,但是只能在本机登录。如果linux系统本身已经足够安全,这也是一个不错的选择。我见过不少系统,为了操作方便,设置了一些非常简单的密码,这种简单的密码跟不设密码差不多了。

如果要改root用户的密码:首先进入mysql,然后运行

set PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword');

这条命令也可以用来更改其它用户的密码。从所周知,mysql的用户包含了两部分名字和主机名两部分。所以'root'@'%''root'@'localhost'是不一样的,mysql默认没有创建'root'@'%'这个用户。如果要更改其它用户的密码,只需要替换一下上述命令的用户名部分就可以了。

mysql使用create user命令来创建一个新用户,比如:

create user fish;

就创建了一个名为fish的新用户。使用drop user命令删除一个用户,比如:

drop user 'fish'@'%';

就删除了上面那个用户了。值得注意的是mysql认为单写fish就代表了'fish'@'%'

现在我们创建一个数据库:

:::mysql
create database mydatabase;

然后赋权限给fish这个用户。

grant all on mydatabase.* to fish;

all代表fish拥有该数据库的所有权限,当然,也可以细分权限,比如fish可以只拥有添加数据,而没有添加、删除表的权限。mysql还可以划分细至表的权限,详细的信息查看手册吧。

类型:LinuxApp,创建时间:十二月 31, 2011, 9:57 a.m. 点击查看完整内容。。。
怎么给linux的网卡绑定多个IP

windows下给网卡添加多个IP是很容易的事,那linux下应该怎么做呢?不同的linux发行版有不同的做法。这两天刚好需要做这么一个东西,于是google了一下,在终端下,最普适的方法是使用ifconfig命令。

比如要给第一个以太网网卡绑定192.168.0.1/24这个IP ,192.168.0.1/24这种写法朋友们应该知道吧,24的意思是掩码是255.255.255.0,前24个位是掩码。一条命令搞定:

/sbin/ifconfig eth0:1 192.168.0.1 netmask 255.255.255.0

这里面比较奇怪的是第一个参数eth0:1,据说这个叫虚拟设备?eth0是第一个以太网网卡,如果是第二个以太网网卡的话就是eth1,冒号后面是以0开始的数字,每个IP对应一个。

不过,唯一的问题是,启动系统之后配置的IP就丢了。

对于这个问题,如果是使用redhat的话, 终端下有一个很不错的setup命令。输入setup,选择网络配置,可以看到setup程序列出了所有的网卡,一般就是一个eth0eth1(如果双网卡的话)。我们可以新增一个设备,名为eth0:1,把IP地址和掩码填上去,下次启动就自动添加了这个IP了。想要立即生效的话就运行:

service network restart
类型:LinuxApp,创建时间:十二月 31, 2011, 9:53 a.m. 点击查看完整内容。。。