Wu Yongwei's Programming Page

Nvwa

Nvwaupdated 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

Libunibreakupdated 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 really sucks at this)!

Translation

I am not a serious writer or translator, but I am 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.

我很荣幸地参加了《编程大师访谈录》的翻译工作。这本书有点年头了,但今天看仍很有意义。推荐大家一读。

Articles

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.373. 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. You may also use my Cygwin script update_vimruntime.sh to update the Vim runtime files (you may need to modify the VIMRUNTIME_RT line to reflect the real Vim path).

jhead-2.97-ccdwidth_hack.zipupdated: 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 2.97 source, my patch, and prebuilt binaries for Mac OS X Snow Leopard and Microsoft Windows.

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.

_vimrc or as HTML: my Vim configuration file for Windows. It is 20 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.

tellenc.zip: a program to detect the encoding of a text file (source and Win32 binary included). It currently supports ASCII, UTF-8, UTF-16, UCS-4, Latin1, Windows-1252, CP437, GB2312, GBK, Big5, and SJIS. It is intended to work with Vim for file encoding autodetection: first multienc.vim, and now fencview.vim.

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.

doxygen.vim: provides Doxygen highlighting on top of C/C++/IDL/Java for Vim. Currently I added some comments on font choosing, and let <code> be displayed in Bitstream Vera Sans Mono by default on Windows; otherwise it behaves the same as the official release 1.15. — Click here to see a snapshot of gvim (under Red Hat Linux 8.0) with cvsmenu.vim and doxygen.vim installed. — You do not need it under Vim 7. In that case Doxygen support should be already included in the standard installation, and you only need to set the variable load_doxygen_syntax to enable it, and possibly doxygen_use_bitsream_vera to use that font. See also my _vimrc (search for ‘doxygen’).

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++11 Standard: the working draft closest to the C++11 Standard

C++ TR1 Information on Scott Meyers’ Site: TR1 (‘Technical Report 1’) is a specification for new functionality being added to C++’s standard library

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

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 version 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 (Win32): prebuilt binary for the non-interactive GNU downloader, v1.11.4 with complete OpenSSL support is only 403968 bytes, without any external dependencies!

STL Error Decryptor for C++: simplifies and/or reformats long-winded C++ error and warning messages, with a focus on STL-related diagnostics

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

STLport: a multi-platform ANSI C++ Standard Library implementation based on the original SGI STL implementation

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 CUJ articles are highly recommended)

Joel On Software: insightful opinions on the software industry

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

A List Apart: good articles about website design

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 20+ 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: 2014-07-22, by Wu Yongwei
Contact: wuyongwei AT gmail DOT Suffix-That-You-Know