Wu Yongwei's Programming Page


Nvwa is my small collection of C++ utilities in Open Source. It includes a memory leakage detector, a ‘static’ memory pool, a thread transparency layer, and other such stuff. Release 1.0 can be downloaded here. The latest README is here.


Libunibreak is an open-source implementation of the line and word breaking algorithms as described in Unicode Standard Annexes 14 and 29. Line and word splitting is much more than breaking at the spaces (the China Web world often sucks at this)!


I am not a serious writer or translator, but I was honoured to be one of the three translators to translate a very good old book, Programmers At Work. You can find out more details (in Chinese) in the link of the Chinese translation.



A Small Experiment of System Scripting in Python (2016-07-24)new

Choosing a Multi-Precision Library for C++ — A Critique (2016-06-04)

MSVCRT.DLL Console I/O Bug (2016-05-27)

Generic Lambdas and the compose Function (2015-01-03)

Type Deduction and My Reference Mistakes (2014-12-29)

Installing Clang 3.5 for Windows (2014-12-24)

A Complaint of ODF’s Asian Language Support (2014-12-18)

Y Combinator and C++ (2014-12-14)

Study Notes: Functional Programming with C++ (2014-12-7)

Specify LANG in a UTF-8 Web Page! (2006-3-28)

Vim 实用技术:技巧插件定制 (Practical Vim); PDF version available (2006-3-22)

Design and Implementation of a Static Memory Pool (2005-1-11)

A Cross-Platform Memory Leak Detector (2004-11-28)

Stdcall and DLL tools of MSVC and MinGW (2002-8-20)

Issues about Time Routines on Win32 and *NIX (2002-2-26)

A Fast String Implementation for STL Map (2002-2-24)

MSVC and MinGW DLL Interlinking FAQ (2001-12-21)

Multibyte Functions in Microsoft C Run-time (2001-12-16)

ASP 应用程序开发规范 (Active Server Pages Programming Guide) (2001-8-12)

Downloadable files

gvim74.zipupdated: my personal Win32 build of gvim.exe and vim.exe version 7.4.2098 (DirectX support introduced in 7.4.393 is compiled in the GUI version so as to support Unicode characters beyond BMP). It differs from the standard Vim executables in the following ways: 1) the file and product versions are in the form major.minor.patchlevel (not major.minor.build.patchlevel) and are consistently updated; 2) both the GUI and console versions are compiled with Perl, Python2, Python3, Ruby, Tcl, and Lua support; 3) Ruby 2.0 is used (instead of Ruby 1.9.2); and 4) a private patch is used to make plug-ins like fencview.vim run more smoothly on Windows. The build and patch files can be downloaded as an archive. Check out my GitHub Vim page on how I build Vim.

breaktext: a small program that uses libunibreak (formerly liblinebreak) to break the lines of input text. Type ‘breaktext’ for the usage. Some usage examples (Windows): ‘breaktext input.txt output.txt’ breaks a UTF-16 text file with no explicit language info; ‘breaktext -LChinese_China.936 -lzh - < input.txt > output.txt’ breaks a Chinese text file encoded in CP936. The source has only changed slightly recently, but I have to build the Windows binary with MSVC now, as MinGW GCC (which I used back in 2009) uses the unreliable C runtime — MSVCRT.DLL — which is terribly broken in Windows versions later than Windows XP when dealing with multi-byte characters, without even being able to output a single Chinese character by putwchar(wch)! The same code runs without any problems in MSVC versions that do not depend on MSVCRT.DLL (i.e., any MSVC compilers later than Visual C++ 6.0).

jhead-3.00-ccdwidth_hack.zip: a modified version of the command-line tool jhead that reports the correct ‘35mm equivalent focal length’ on resized photos from Canon digital cameras (this is a common problem for resized digital photos, if they do not contain the EXIF 2.2 tag ‘FocalLengthIn35mmFilm’ — Picasa has this problem too). This download contains the original jhead 3.00 source, my patch, and prebuilt binaries for Mac OS X Snow Leopard and Microsoft Windows.

_vimrc or as HTML: my Vim configuration file for Windows. It is 23 KB, and is designed for Vim 7, with heavy customizations on using Chinese/Japanese/Korean together with Western European languages. It is well commented, and should serve as a good reference if you intend to customize your Vim. Notice: You should have iconv to set a different fileencoding from encoding, as is done in this _vimrc. Please download libiconv-win32 and extract iconv.dll to somewhere in the path or where gvim.exe is, if you do not have it already. After doing that, you should also save the original libintl.dll in the Vim directory, and replace it with intl.dll from gettext-win32 (with renaming).

tellencupdated: a program to detect the encoding of a text file (source and Win32 binary included). It supports ASCII, UTF-8, UTF-16, UCS-4, Latin1, Windows-1252, CP437, GB2312, GBK, Big5, SJIS, etc. It is intended to work with Vim for file encoding autodetection: first multienc.vim, and now fencview.vim. The latest source is available on GitHub, but the Windows binary will be provided here from time to time.

echofunc.vim: A Vim plug-in to echo the function declaration as in the tags file. It display the function declaration when ‘(’ is typed, and it support displaying the function declaration, variable definition, etc. as tooltips when Vim is compiled with +balloon_eval.

cvsmenu.vim: the CVS integration plug-in for Vim. I use it daily, so it is updated quite often. It supports menu and short-cut operations, and has special multi-encoding support. The script is now hosted at Vim Online (don’t forget to give me a good rating if you find it useful ;-)). You can see some snapshots here: CVS Annotate, CVS Diff, CVS Log, CVS Directory Local status; and an old snapshot showing the menu.

gvim64_patched.zip: my personal Win32 build of gvim.exe version 6.4.10 (with no Perl, Python, Ruby, or Tcl support) with a special patch. This is for archival purpose only, since Vim 7 has already incorporated the patch, as well as added many new features. The patch is necessary for the Vim option encoding=utf-8 to work reliably on Far East versions of Windows, since the *printf functions in the Microsoft C Runtime (MSVCRT.DLL) require the format string to be encoded as expected by the country preference specified in the Regional Options if one calls setlocale(LC_ALL, ""). It works very well for me, but Bram did not accept in into the 6.x source tree because he thought the patch was a little risky for a stable version. See also my old _vimrc.

synctime: a simple POSIX C program to synchronize local time with a time server on the Internet (tested under Cygwin and Linux).

reimp (enhanced version by José Fonseca): a tool to convert a Win32 import library (.lib) into a .a file usable with GCC for Win32 (MinGW).

CGIC 1.07 (fixed for Win32): CGI programming library in C by Thomas Boutell.

ASP samples file: accompanying the Active Server Pages Programming Guide.

Useful links

Free Culture: a must-read for everybody who cares about freedom in more than software

Bjarne Stroustrup’s C++ Page: every C++ programmer should read the page from the designer and original implementor of C++ (the papers are especially recommended)

Draft C++14 Standard: the committee draft of the C++14 Standard

Draft C++11 Standard: the working draft closest to the C++11 Standard

Boost C++ Libraries: free peer-reviewed portable C++ source libraries that are candidates for the future C++ Standard

Andrei Alexandrescu: author of Modern C++ Design and pioneer in policy-based design (the free chapters and the articles are highly recommended)

Software Optimization Resources by Agner Fog: Excellent resources for optimizations, including but not limited to C++

Clang Home Page: Currently my favourite C++ compiler (though it works best on a Mac, I use it even on Windows, both to test new C++ features and to use the handy clang-format)

GCC Home Page: the prosperity of Open Source software depends upon this Open Source C/C++/Fortran/Java/... compiler

MinGW — Minimalist GNU for Windows: the GCC compiler and related toolchain for Windows

MinGW-w64 build: Unofficial but easy-to-use MinGW toolchain download for Windows (abundant choices are provided for SJLJ/DWARF and thread libraries; the SJLJ versions can target both x86 and x64)

Debugging Tools for Windows: the free debugger from Microsoft (that can be used to debug MSVC-compiled programs)

Vim Online: all about this excellent Open Source editor

Cygwin Home: a Linux-like environment for Windows

Native Win32 Ports of some GNU Utilities: recommended for Windows users that are used to UNIX command lines

WGET for Windows: This is the non-interactive GNU downloader. I used to use binaries from Bart Puype’s WGET for Windows page, which featured very small executables. However, that site is now gone, and Jernej Simončič is providing a build that has nice Windows integration and is much more up-to-date.

Standard Template Library Programmer’s Guide: the original STL page from SGI

Joel On Software: insightful opinions on the software industry

The Old New Thing: informative, and often enlightening, blog of a Microsoft insider

Larabie Fonts: hundreds of free (fancy) fonts

Dieter Steffmann @ typOasis: hundreds of free (traditional) fonts

About me

I am Chinese, and my full name in Chinese is ‘吴咏炜’. Please notice that Eastern names usually go with family name first, so my given name is ‘Yongwei’. I have been a programmer for ~30 years, and am mostly interested in writing code that is reliable, reusable, efficient, and cross-platform.

You can find me in the Google services like Mail, Plus, and PicasaWeb by the user name wuyongwei. You can also check out my LinkedIn Profile for my professional experience.

Last update: 2016-07-24, by Wu Yongwei
Contact: wuyongwei AT gmail DOT Suffix-That-You-Know