Feb
我的2011-持续积累
Dec
svn 提交出现Password for ‘(null)’ GNOME keyring: 错误
新安装了系统之后一直没有给gcode提交过代码了,前天收到一位网友xgcom的patch,我整理了一下,想提交,不想出了这样的问题:在svn commit 之后出现了以下的信息:
Password for ‘(null)’ GNOME keyring:
以前提交都会提示输入我用户名的密码,这次却提示输出null的gnome keyring,在网上搜索看了之后发现是svn和gnome的一个key冲突了,只要删除就可以了:
rm ~/.gnome2/keyrings/login.keyring
这里写下来记录一下。
Dec
Linux 让你的软件支持多国语言
1. 开头
Xgcom一直想做成多国语言的支持,但是之前没有仔细研究怎么做,今天有时间,就研究了一下,感觉也挺简单的,这里先做一个测试demo出来,也刚好记录一下。
如下的程序:xtest.c
#include <stdio.h>
int main(int argc, char* argv[])
{
printf(_(”Hello, GetText!\n”));
return 0;
}
对这个做一个中文的,默认是英文,在没识别出你当前的语言环境或者没有这种语言支持的时候以英文显示。
2. 首先把代码修改如下:xtest.c
#include <stdio.h>
#include <locale.h>
#include <libintl.h>
#define _(string) gettext (string)
#define LOCALEDIR ”./locale/” //这是语言包的引用路径
#define PACKAGE ”xtest” //包名称,以这个名称去找语言包
int main(int argc, char* argv[])
{
setlocale (LC_ALL, ”");
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
printf(_(”Hello, GetText!\n”));
return 0;
}
3. 制作文本po文件:xtest.po
制作命令:xgettext -a xtest.c -o xtest.po
一般生成的xtest.po会不是很符合我们的需求,要修改或是删除一些不需要的内容。
比如这里修改了一下几个方面:
1.删除不需要替换的msgid和msgstr
2.修改了文件的编码类型为UTF-8
3.默认生成的msgstr是没有内容,这里需要添加,我这里添加的是“你好,GetText!\n”
修改后的xtest.po内容如下:xtest.po
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE’S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ”"
msgstr ”"
“Project-Id-Version: PACKAGE VERSION\n”
“Report-Msgid-Bugs-To: \n”
“POT-Creation-Date: 2011-12-14 14:26+0800\n”
“PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n”
“Last-Translator: FULL NAME <EMAIL@ADDRESS>\n”
“Language-Team: LANGUAGE <LL@li.org>\n”
“MIME-Version: 1.0\n”
“Content-Type: text/plain; charset=UTF-8\n”
“Content-Transfer-Encoding: 8bit\n”
#: xtest.c:14
#, c-format
msgid ”Hello, GetText!\n”
msgstr ”你好,GetText!\n“
4. 制作mo文件
首先要保证刚才的xtest.po文件的编码是utf-8的,是和xtest.po中所注明的编码格式是一致的。否则在生成xtest.mo的时候会报错。
制作命令:msgfmt xtest.po -o xtest.mo
mo文件是二进制文件,无法用文本编辑器查看。
5. 建立语言包目录并存放语言包
在程序当前目录下再建立这样的目录:
mkdir ./locale/zh_CN/LC_MESSAGES/
用来保存mo文件,把刚才生成的xtest.mo文件拷贝到这个目录
6. 编译程序测试查看
编译程序命令:gcc xtest.c -o xtest
查看当前的语言环境:locale
1) 运行结果1
helightxu@zhwen:/helightxu/testcode/xtextgen> locale
LANG=en_US.UTF-8
LC_CTYPE=”en_US.UTF-8″
LC_NUMERIC=”en_US.UTF-8″
LC_TIME=”en_US.UTF-8″
LC_COLLATE=”en_US.UTF-8″
LC_MONETARY=”en_US.UTF-8″
LC_MESSAGES=”en_US.UTF-8″
LC_PAPER=”en_US.UTF-8″
LC_NAME=”en_US.UTF-8″
LC_ADDRESS=”en_US.UTF-8″
LC_TELEPHONE=”en_US.UTF-8″
LC_MEASUREMENT=”en_US.UTF-8″
LC_IDENTIFICATION=”en_US.UTF-8″
LC_ALL=
helightxu@zhwen:/helightxu/testcode/xtextgen> ./xtest
Hello, GetText!
2) 运行结果2
helightxu@zhwen:/helightxu/testcode/xtextgen> export LANG=zh_CN
helightxu@zhwen:/helightxu/testcode/xtextgen> locale
LANG=zh_CN
LC_CTYPE=”zh_CN”
LC_NUMERIC=”zh_CN”
LC_TIME=”zh_CN”
LC_COLLATE=”zh_CN”
LC_MONETARY=”zh_CN”
LC_MESSAGES=”zh_CN”
LC_PAPER=”zh_CN”
LC_NAME=”zh_CN”
LC_ADDRESS=”zh_CN”
LC_TELEPHONE=”zh_CN”
LC_MEASUREMENT=”zh_CN”
LC_IDENTIFICATION=”zh_CN”
LC_ALL=
helightxu@zhwen:/helightxu/testcode/xtextgen> ./xtest
你好,GetText!
7. 话尾
总的来看用xgettext 和msgfmt可以做出支持多国语言的程序,在操作上和后期更新上还是比较方便的。
但是这里介绍的只是一个简单的demo,要真正使用起来还需要配置其它的脚本,如:如何控制根据当前的语言环境安装所需要的语言包等。后面还需要再好好探索学习一下啊。
Dec
gnome3下ibus设置
在gnome3下安装了ibus-pinyin后,安装方式如下:
apt-get install ibus ibus-pinyin
并且在~/.bashrc文件中加入了以下内容。
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
发现一个很奇怪的问题,进入gnome3后可以看到ibus启动了,也添加了拼音输入法,鼠标点击ibus图标也可以看到拼音输入法的图标,但是无论你使用快捷键还是鼠标点击切换,它就是没法切换到拼音输入法,在网上看了好久,终于在一些资料中看到ibus-gtk3,才想到可能事这个东西没有安装,再安装了ibus-gtk3.然后重启机器,进入非常慢,但是进入之后发现输入法可以使用了,可以自由的切换了。
最近使用gnome3感觉还可以吧,使用起来有些不是很方便,估计事没有习惯使用,以后习惯了也许会好一点。
Nov
上一张我的gnome3的截屏
Nov
debian testing+gnome3+ibus+kernel3.08
debian的6.0出来之后,一直就心很痒,又加之之前刚刚从同事那里买了个笔记本,所以老婆把她的本就给我用了,虽然配置是有点底,但是安装debian我想肯定没有问题的,在g+上看到debian的testing中已经加入了gnome3了,所以更想试试了,但是没有想到道路事这么的曲折,我这两周花了好多时间,终于在今晚搞定了。
首先是下载了debian的testing版cd,在虚拟机中测试安装,结果发现testing的cd安装到最后grub没有办法安装完成,无奈只好用稳定版的cd,稳定版的cd安装没有问题,但是稳定版的cd在我刻录成光盘之后却无法从我这个较老的本本上启动,无奈只好,用之前的光盘安装分区,让后使用硬盘安装的方式终于安装好了,稳定版使用起来肯定事没有问题啦,但是我还想使用gnome3,所以在又把源修改为wheezy,让后作了distupgrade,编译了新的kernel3.0.8的内核。
但是问题总是一个又一个,在安装了gnome3之后发现新内核会出现花屏,系统更本没办法使用。而好在一个系统自带的32的内核还可以使用,想应该是软件和驱动不兼容,在32的内核上使用,但也只能使用gnome3的standard模式,这个模式和gonme2差不多,但是更简单,无法体验gnome3的实际效果。之后在网上看到有人说卸载了xserver-xorg-video-all这个所有的组件再从新安装有可能会修复这个问题,我又这样做了一次,先卸载xserver-xorg-video-*的东西,让后autoremove所有不需要的东东,再从新安装xserver-xorg-video-ati,因为我的显卡事ati的显卡,让后安装了firmware-linux相关的固件,从新制作了内核文件系统,重启电脑,心内核,新界面,gnome3居然可以使用了,万分高兴阿。
输入法之前一直使用scim,这次想体验以下ibus,看网上资料说这个输入法已经比较成熟了,再安装了之后,终于都可以了,这就是我定制的自己的debian系统,自己编译的新内核+gnome3+ibus输入法+firefox,哈哈不错不错。
一切还在体验中。。。
Oct
debian下触摸板使用
之前在本本上安装了debian,但是发现触摸板的点击功能就是用不了,以为是驱动问题,加之有鼠标,而且回家用本本来写程序的时间也是很少,因为小丁同学要学习,老占用电脑,所以就没有管这个所谓的问题了,但是总是感觉不方便。
今天从公司同事那里又买了一个本本,配置比原来的本本要高,所以就给她专门使用了,我也专用了这个本,而且现在家里就一个鼠标,当然只能小丁同学用,所以有折腾了一下,突然发现是我设置的问题,简单的只要在系统鼠标配置的面板上够选一下就可以了。。。。
下面附上鼠标控制面板图:
Sep
自娱自乐写的linux下音乐播放器
前一段时间周末在家没事做,突然之间就想写一个之前一直想写但是也是一直没有写的小程序--写一个自己的音乐播放器,现在终于写好了,可以使用,有基本的音乐播放功能,隐藏和tray按钮控制播放等等。小巧,程序了不多,够我自己平时在家里听音乐使用了。。。。下面是截图。
Aug
内核又拒绝挂载fat32的磁盘了,报codepage cp437 not found
前几天从新编译了内核,是应为升级了内核后vbox不能用了,所以又从新编译了内核,并且安装编译了vbox的内核模块,但是也出了问题,在每次shutdown的时候机器总是无法断点,磁盘灯不再亮,说明磁盘也不写了,只是一个锁灯在不断的闪,看了messages总的日志看到这样两句:
bonobo-activation-server (xding-3053): could not associate with desktop session: Failed to connect to socket /tmp/dbus-OWuBY31JHu: Connection refused
cfg80211: Calling CRDA for country: US
在网上看,说有可能是这bonobo高的鬼,才想起内核升级了,但是gnome的这个东西没有升级,从新安装了这个bonobo后,关机终于正常了,不过在配置内核的时候手闲的没事又把几个多余的内核编码支持取消了,编译安装试用没有问题,但是今天才发现,fat的盘没法加载使用了,郁闷阿,看日志又看到这样两行:
FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
FAT: codepage cp437 not found
可谓不顺阿,又得要编译内核了,想编译个为自己定制的内核还真不容易阿。
这个编码支持是在文件系统-》网络文件系统-》的nls中,又多选择了cp437,先编译看看吧。这下应该是没有问题了。
Jul
一个json数据格式导致的杯具
今天业务组的同事反馈系统数据入库失败,而且耗时耗力。。。老大说谁上,我主动请缨了。
查查查。。。从操作追到代码(这些代码不是我写的哇),最后日志发现了,是数据请求回来的地方出了问题,呃,会不是是请求的服务挂了呢,再日志了请求结果,发现,没有问题,最后发现问题处在了json_decode()这里,数据经过这家伙处理之后,竟然没有了,难道数据黑洞?
把几百行的数据拉出来单独分析,但是普通的人工分析几百行数据,那这个程序员一定是个白痴。ice老大看了看告诉我一个方法,json的数据,保存成网页文件的js段中,用一般的编辑器打开,json的格式问题立马就可以出来。我用notepad++打开一看,果不其然,黑白彩色的一看就发现了问题是在一个字段中多了双引号,导致了json_decode成了数据黑洞。



