星期六 五月 19, 2007
星期六 五月 19, 2007
近来由于项目的需要,需要看一下Windows上的编码转换情况,本打算自己写个小程序来测以下,结果google了半天也没有发现好的例子,只是有WideCharToMultiByte, MultiByteToWideChar的API,鉴于已经 n 年没有写Windows的程序了(怎么编译都忘了),而且时间也不充足,所以还是想偷懒找个现成的工具。于是首先想到了功能极为强大的 UltraEdit, 结果UltraEdit果然没有让我失望,它提供了任意 code page 和 Unicode, UTF-8 之间的转换,而且不用修改系统的 code page. 下面简单介绍一下.(UltraEdit可以从http://www.ultraedit.com/免费下载试用45天,目前的最新版本是 v13.00a)
有一点需要注意:如何显示转换的结果?
星期三 一月 24, 2007
Using nxserver/nxclient is faster a lot than using rdesktop+xmanager for me. Below is the simple steps to setup nxserver and nxclient.

星期二 十二月 05, 2006
星期四 九月 21, 2006
| Interview with Brian Kernighan | Enjoyable reading with some support for our views on C++. Plus advice on how to pronounce his name correctly. |
| comp.lang.c Frequently Asked Questions |
Link to www version. Highly relevant. An up-to-date copy may be obtained from ftp.eskimo.com in directory u/s/scs/C-faq/. 中文faq的地址(提供了PDF格式):http://c-faq-chn.sourceforge.net/ccfaq/node1.html |
| ANSI C Programming Lanuage | A useful short help on C Programming, including precedence and the preprocessor. |
| ANSI C Standard Library | Summary of the ANSI C standard library functions (that's the real ANSI C). |
| Rationale for ANSI C | A link to the original Rationale for American National Standard for Information Systems - Programming Language - C. This was included in the original ANSI standard explaining why things were done as they were. It was unfortunately dropped from the ISO standard. |
| Style in C | Rob Pike's set of essays on coding style and a "philosophy of clarity in programming" as opposed to laying down hard rules. |
| C Traps and pitfalls | An essay by Andrew Koenig of AT&T Bell Labs written as the basis to his book C Traps and Pitfalls. "The C language is like a carving knife: ... This paper shows some of the ways C can injure the unwary, and how to avoid injury." Worth reading (and then re-reading). |
| How To Steal Code | Henry Spencer's article on inventing the wheel only once. "Never build what you can (legally) steal! Done right, it yields better programs for less work". There are some useful C programs at the end. |
| The Ten Commandments for C Programmers | Henry Spencer's amusing, but true, adaptation of the ten commandments for C programmers. We love number 6: If a function be advertised to return an error code in the event of difficulties, thou shalt check for that code, yea, even though the checks triple the size of thy code and produce aches in thy typing fingers, for if thou thinkest ``it cannot happen to me'', the gods shall surely punish thee for thy arrogance. Read and take note. |
|
How to write unmaintainable code
|
A link to Roedy Green's very amusing article on how to guarantee a lifetime's employment by making life impossible for maintenance programmers. (He actually has to explain that it's a joke!) Although focused on Java, he gives plenty of examples in C. If you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifetime. More quotes below.
很不错的一本书,不过包含很多看似和语言无关的东西,我第一遍看的时候都跳过去了。这也造成本书的组织有点散。 |
星期二 七月 18, 2006
As UTF-8 becomes the most popular encoding, many operating system
such as solaris, ubuntu are using UTF-8 as the default locale. Then how
to handle the large amount of legacy encoded
file(filename/filecontent)? There are several tools available, let's
have a look.
星期日 七月 16, 2006
测试字体颜色。
列表
列表
星期二 七月 04, 2006
通常我们需要在一个循环中遍历数组的所有元素,因此需要知道数组的长度。硬编码数组长度显然是不可取的,因为如果改变数组元素的个数的话,需要改动多处代码。使用下面的方式可以很好的避免这个问题:
char * hero[][2] = {
{ "Guo Jing", "She Diao" },
{ "Ling Huchong", "Xiao ao Jiang Hu" },
{ "Yang Guo", "Shen Diao" },
{ "Hu Fei", "Xue Shan Fei Hu" },
};
for (i=0; i < sizeof (hero) / sizeof (*hero); i++)
{
printf ("%s come from %s\n", hero[i][0], hero[i][1]);
}
信息来源:cprogramming.com
NULL is a macro defined in several standard headers, 0 is an integer constant, '\0' is a character constant, and nul is the name of the character constant. All of these are *not* interchangeable:
NULL is to be used for pointers only since it may be defined as ((void *)0), this would cause problems with anything but pointers.
Use cc -E you can see what NULL means on solaris. Commonly NULL is defined by "#define NULL 0" or "#define NULL (void *)0"
0 can be used anywhere, it is the generic symbol for each type's zero value and the compiler will sort things out.
'\0' should be used only in a character context.
nul is not defined in C or C++, it shouldn't be used unless you define it yourself in a suitable manner, like:
#define nul '\0'
empty string "" is "\0"
星期三 六月 28, 2006
There is several things which make my blogs display urgly: there is many stroke between text and some special characters will disappear, such as '*', '\'. Today i find the root cause: The evil is the plugins you used,some plugins( will convert some special characters automatically.
You have two way to configure plug-in used:
Breif introduction for plug-ins:
becomes 
星期四 五月 11, 2006
星期四 三月 23, 2006
This document is written when i build gnome cvs using jhbuild, and i write it just for reference by myself, there maybe many information which are not correct. Welcome any suggestion and comments!
First copy below contents as your ~/.jhbuildrc
# -*- mode: python -*-
# information about cvs server
cvsroots['gnome.org'] = ':pserver:anonymous@anoncvs.gnome.org:/cvs/gnome'
cvsroots['fontconfig.freedesktop.org'] = ':pserver:anoncvs@cvs.freedesktop.org:/cvs/fontconfig'
# modules to build (deps are also built)
moduleset = 'gnome-2.16'
modules = ['gtk+', 'meta-gnome-desktop', 'meta-gnome-devel-tools' ]
skip = [ 'hal', 'mozilla' ]
skip.append('evolution-exchange')
# the prefix to install things to (user must have write access)
prefix = '/export/home/gnome/install/gnome-cvs'
# where the sources are checked out to
checkoutroot = '/export/home/gnome/src/cvsroot'
# where to put downloaded tarballs.
tarballdir = '/export/home/gnome/src/tarballs'
# arguments to pass to autogen script
autogenargs='--enable-maintainer-mode --disable-static --disable-gtk-doc'
# set CFLAGS:
os.environ['CFLAGS'] = '-g'
os.environ['PYTHON'] = os.path.join(prefix, 'bin/python')
os.environ['PYTHONPATH'] = os.path.join(prefix, 'lib/python2.4/site-packages')
# On SMP systems you may use something like this to improve compilation time:
# be aware that not all modules compile correctly with make -j2
os.environ['MAKE'] = 'make'
os.environ['INSTALL'] = os.path.expanduser('~/bin/install-check')
module_autogenargs['libgcrypt'] = autogenargs + ' --disable-asm'
module_autogenargs['howl'] = autogenargs.replace('--disable-static', '')
module_autogenargs['fontconfig'] = autogenargs + ' --with-expat=/export/home/gnome/install/gnome-cvs/'
module_autogenargs['gtk+'] = autogenargs + ' --with-included-loaders=png'
module_autogenargs['ekiga'] = autogenargs + ' --with-pwlib-dir=/export/home/gnome/install/gnome-cvs/ --with-opal-dir=/export/home/gnome/install/gnome-cvs/ --with-sdl-prefix=/export/home/gnome/install/gnome-cvs/'
module_makeargs['libIDL']= makeargs + ' CPP="/usr/lib/cpp"'
module_makeargs['ORBit2']= makeargs + ' CPP="/usr/lib/cpp"'
module_makeargs['libbonobo']= makeargs + ' CPP="/usr/lib/cpp"'
module_makeargs['dbus']= makeargs + ' CFLAGS="-I/export/home/gnome/install/gnome-cvs/include" LDFLAGS="-lexpat -lintl"'
module_makeargs['cairo']= makeargs + ' LDFLAGS="-lc"'
module_makeargs['gtk+']= makeargs + ' LDFLAGS="-lintl"'
module_makeargs['libgnome']= makeargs + ' LDFLAGS="-lintl"'
module_makeargs['libgnomeprint']= makeargs + ' LDFLAGS="-lintl"'
module_makeargs['bug-buddy']= makeargs + ' LDFLAGS="-lintl"'
module_makeargs['eog']= makeargs + ' LDFLAGS="-lintl"'
module_makeargs['zenity']= makeargs + ' LDFLAGS="-lintl"'
module_makeargs['evolution-webcal']= makeargs + ' LDFLAGS="-lintl"'
addpath('XDG_DATA_DIRS', '/export/home/gnome/src/gnome-cvs/share')
addpath('XDG_CONFIG_DIRS', '/export/home/gnome/src/gnome-cvs/share')
export LC_ALL=C first
look at opensolaris.org
- need expat: http://nchc.dl.sourceforge.net/sourceforge/expat/expat-2.0.0.tar.gz
- need freetype: www.freetype.org
- module_autogenargs['fontconfig'] = autogenargs + ' --with-expat=/export/home/gnome/install/gnome-cvs/', exit jhbuild and rerun jhbuild build.
ps: build freetype and expat under jhbuild enviroment, otherwise freetype will link
expat.so.0 under /usr/sfw/lib instead of $prefix/lib
cairo will be compiled with the following surface backends:
image: yes (always builtin)
Xlib: yes
Quartz: no
XCB: no
Win32: no
PostScript: yes
PDF: yes
SVG: no
glitz: no
BeOS: no
DirectFB: no
the following font backends:
FreeType: yes
Win32: no
ATSUI: no
the following features:
PNG functions: yes
and the following debug options:
gcov support: no
test surfaces: no
using CFLAGS:
-DXTHREADS -I/export/home/gnome/install/gnome-cvs/include -I/usr/local/include/libpng12 -I/export/home/gnome/install/gnome-cvs/include -I/export/home/gnome/install/gnome-cvs/include/freetype2
- libpng: http://prdownloads.sourceforge.net/libpng/
cp scripts/makefile.solaris makefile
change prefix
make && make install
- cairo:
module_makeargs['cairo']= makeargs + ' LDFLAGS="-lc"'
- failed to load "./stock_about_16.png": Couldn't recognize the image file format for file './stock_about_16.png'
===> --with-included-loaders=png
It is true that lt-gdk-pixbuf-csource doesn't seem to have png/tiff/jpeg built
into it, so that's why I believe this seems to be the corrent line of solution.
I'm trying to impliment a similar solution... I'm pretty sure the SHLIB stuff is
hp-ux specific. So I went into gdk-pixbuf/Makefile and added the -L./.libs to
the LINK= line and did a 'gmake clean; gmake' and now I get:
g_module_open() failed for
/auto/src-01/common/usc/gnu/gtk+/gtk+-2.2.3/gdk-pixbuf/libpixbufloader-png.la:
ld.so.1:
/auto/src-01/common/usc/gnu/gtk+/gtk+-2.2.3/gdk-pixbuf/.libs/lt-gdk-pixbuf-query-loaders:
fatal: relocation error: file /usr/usc/png/1.2.5/lib/libpng.so.3: symbol
inflateReset: referenced symbol not found
Which I'm confused about. png 1.2.5 is the latest, and it was compiled with the
same compiler.
I've been playing with this for 3 weeks. I actually had to hard code the
'-L/usr/usc/png/1.2.5/lib' into the configure.in file because the configure
script couldn't find it with --with-libpng= even if I set LDFLAGS... This is the
last of *many* problems I've had trying to get gtk+2 to compile...
Phil
- Undefined first referenced
symbol in file
libintl_dgettext /export/home/gnome/src/cvsroot/gtk+/gdk/.libs/libgdk-x11-2.0.so
ld: fatal: Symbol referencing errors. No output written to .libs/gtk-query-immodules-2.0
==> -lintl
Use /usr/lib/cpp as c preprocessor, otherwise orbit-idl-2 will cause many problems.
- CFLAGS="-Werror-implicit-function-declaration -std=gnu89 $CFLAGS"
-> comment out this line in configure.in
- test/inhibit: unknow Foo_..._EPV, this is caused by lack definition.
add foo.h into baa.h.
see: http://mail.gnome.org/archives/orbit-list/2001-May/msg00074.html
***: if we use /usr/lib/cpp for libIDL, then no such problem.
need libIDL, ORBit2 use /usr/lib/cpp on solaris as CPP(c preprocessor)
module_makeargs['libIDL']= makeargs + ' CPP="/usr/lib/cpp"'
module_makeargs['ORBit2']= makeargs + ' CPP="/usr/lib/cpp"'
module_makeargs['libbonobo']= makeargs + ' CPP="/usr/lib/cpp"'
cpp under solaris:
/usr/lib/cpp
/usr/sfw/bin/cpp
/opt/SUNWspro/bin/cc -E
module_autogenargs['howl'] = autogenargs.replace('--disable-static', '')
- can't find expat.h
module_makeargs['dbus']= makeargs + ' CFLAGS="-I/export/home/gnome/install/gnome-cvs/include LDFLAGS="-lexpat -lintl"'
- ImportError: ld.so.1: python2.4: fatal: relocation error: file /usr/lib/python2.4/lib-dynload/array.so: symbol _PyArg_NoKeywords: referenced symbol not found
export PYTHON and PYTHONPATH
can't find pci.ids
Patch hal for solaris: http://lists.freedesktop.org/archives/hal/2006-February/004630.html
1) Can't find definition for __FUNCTION__, use __func__
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/pciids login
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/pciids co -P pciids
can't find 'endian.h', 'byteswap.h'
skip this module and delete all dependency on this.
- __PRETTY_FUNCTION__ undefined: As noted in the previous subsection, the g++ compiler defines two standard built-in preprocessor macros: __FILE__ and __LINE__. The g++ compiler also defines two non-C standard preprocessor macros called __FUNCTION__ and __PRETTY_FUNCTION__ that return the name of the current function. We can use any of these special pre-defined macros to build our own debug utilities.
GNU CC predefines two string variables to be the name of the current
function. The variable `__FUNCTION__' is the name of the function as
it appears in the source. The variable `__PRETTY_FUNCTION__' is the
name of the function pretty printed in a language specific fashion.
These names are always the same in a C function, but in a C++
function they may be different. For example, this program:
extern "C" {
extern int printf (char *, ...);
}
class a {
public:
sub (int i)
{
printf ("__FUNCTION__ = %s\n", __FUNCTION__);
printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
}
};
int
main (void)
{
a ax;
ax.sub (0);
return 0;
}
gives this output:
__FUNCTION__ = sub
__PRETTY_FUNCTION__ = int a::sub (int)
These names are not macros: they are predefined string variables.
For example, `#ifdef __FUNCTION__' does not have any special meaning
inside a function, since the preprocessor does not do anything special
with the identifier `__FUNCTION__'.
This symbol are gcc/g++ only, fortunately it is mostly used by debug.
We can disable debug, so that we don't compile it.
Sulotion:
rm $(topdir)/CVSVERSION
AC_ARG_ENABLE(http-debug,
[ --enable-http-debug Enable HTTP method debugging],
set_http_debug="$enableval",[
if test -f $srcdir/CVSVERSION; then
set_http_debug=yes
else
set_http_debug=no
fi
])
#ifdef HAVE_UTMP_H
/* This sets stdin, stdout, stderr to the socket */
/*if (login && login_tty (fd) == -1) {
g_printerr ("mount child process login_tty failed: %s\n", strerror (errno));
return -1;
}*/
#endif
- Undefined symbol: __FUNCTION__
add one patch: use __func__ for Sun CC compiler instead of __FUNCTION__
- ../../intltool-merge: No such file or directory
copy from other modules
- doc/ can't build
Run under command line manually.
- "mpih-add1.S", line 44 : Syntax error
--disable-asm
- No rules to make 'help/bg'
ignore it: need evaluate on this problem.
-
"shm_limits.c", line 62: incomplete struct/union/enum shminfo: sinfo
"shm_limits.c", line 73: improper member use: shmmax
"shm_limits.c", line 74: improper member use: shmmni
"shm_limits.c", line 76: improper member use: shmmin
"shm_limits.c", line 77: improper member use: shmseg
- using libgtop-2.8.3 and one patch from http://www.whacked.net/2005/07/25/libgtop-on-solaris-10/
- no doxygen
modify autogen.sh to don't --enable-doxygen
- illegal option -Wall
patch $(topdir)/libxklavier to remove them
- exmaple/Makefile: cantain '-O2' which can't be recognized by Sun cc.
- need install cups
--need openldap: need berkely DB install to /usr/ diretory
--berkely DB: http://www.sleepycat.com/
cd build_unix
../dist/configure default prefix
make
make clean
- When build example: can't found symbol definiton for libintl_dgettext
- need libexif: http://kent.dl.sourceforge.net/sourceforge/dropline-gnome/libexif-0.5.12.tar.bz2
- "/export/home/gnome/install/gnome-cvs/include/libxklavier/xklavier_config.h", : _XklConfigItem
cc:/opt/SUNWspro/prod/bin/acomp
- fno-rtti can't be recognized by compile
- liconv
- Wall illegal option
- -lc -lintl
=
Undefined first referenced
symbol in file
void __Crun::ex_rethrow_q() .libs/dvd_plus_rw_utils.o
void*operator new[](unsigned) .libs/dvd_plus_rw_utils.o
void operator delete(void*) .libs/dvd_plus_rw_utils.o
ld: fatal: Symbol referencing errors. No output written to .libs/libnautilus-burn.so.3.0.0
add -lCstd -lCrun at proper position
- ./examples/: ld: fatal: library -lstdc++: not found
-cpp_example_LDADD = $(top_builddir)/lib/libmusicbrainz.la -lstdc++ -lm
+cpp_example_LDADD = $(top_builddir)/lib/libmusicbrainz.la -lm -lCstd -lCrun
- cannot find include file: <linux/cdrom.h>
use patch from laca's spec file.
- no kill func:
include <signal.h>
- Replace '__FUNCTION__' with __func__
- CDROM_GET_CAPABILITY undefined: #define CDROM... 0x42432
- can't found lib Xdamage:
ld: fatal: library -lXdamage: not found
ld: fatal: library -lXfixes: not found
ld: fatal: File processing errors. No output written to .libs/magnifier
-R/usr/X/sfw/lib -L/usr/X/sfw/lib -lXdamage -lXfixes
- need xpcom, skip this
undefined symbol: NETSTAT_PROTOCOL_FORMAT
skip because of hal
-Wall
-lstdc++:
Package requirements (libsoup-2.2 evolution-shell-2.6 libedataserverui-1.2 libexchange-storage-1.2 libbonobo-2.0 libxml-2.0 gconf-2.0)
- need SDL
- need PWlib: http://sourceforge.net/projects/openh323 or cvs
--with-pwlib-dir
- need opal: cvs -z9 -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/openh323 co opal
PWLIBDIR=/path/to/pwlib
- modify configure file manually
--with-pwlib-dir=/export/home/gnome/install/gnome-cvs/ --with-opal-dir=/export/home/gnome/install/gnome-cvs/ --with-sdl-prefix=/export/home/gnome/install/gnome-cvs/
skip
Xnest binary not found.
--freetype: add include file
#!/sbin/sh
exec jhbuild --file=/.jhbuildrc run dbus-launch gnome-session
copy gnome.session jhbuild-gnome.session
SDT_ALT_SESSION="/usr/dt/config/Xsession2.jhbuild"
jhbuild-session
then execute fc-cache to handle with font issues.
update-desktop-database -v
bonobo-activation-sysconf --display-directories
bonobo-activation-sysconf --config-file-path
$prefix/etc/bonobo-activation/bonobo-activation-config.xml
add below: <item>$prefix/lib/bonobo/servers</item>
we need make bonobo-activation-server be able to find your .sever file, it can be done in three ways:
1) copy the server file to /usr/lib/bonobo/servers
2) export BONOBO_ACTIVATION_PATH
3) activation-client --add-path $(pwd)
gtk-update-icon
$prefix/libexec/gconfd-2: how to run it?
- Jhbuild issues: http://www.gnomebangalore.org/wiki/index.php/Jhbuild_issues
http://live.gnome.org/JhbuildIssues_2fpango
- Build gnome on Ubuntu: http://live.gnome.org/JhbuildOnUbuntu
- sample jhbuildrc: http://ftp.gnome.org/pub/gnome/teams/releng/2.13.1/sample-tarball.jhbuildrc
- Python issue: http://mail.gnome.org/archives/garnome-list/2005-July/msg00199.html
星期六 二月 18, 2006
星期三 一月 18, 2006
星期六 一月 14, 2006
po file are handled by gettext/dgettext/dcgettext.
char * gettext(const char *msgid);
char * dgettext(const char *domainname, const char * msgid);
char * dcgettext(const char *domainname, const char *msgid, int category);