It’s not a typo. is an awesome library for C# programmer to write OpenCL code. As surveying OpenCL libraries, we found a good library for beginners. Since John Hu work with a junior programmer who can only program .net framework, we start to survey a tool to for a .net programmers. is the one. It translates .net framework bytecode to CUDA and OpenCL. We can use it to generate OpenCL source code from .net framework bytecode. That means you can write an OpenCL program in C#/ It’s awesome. And the most awesome part is that is open sourced at here.

Let’s see an very simple example. You may find the following code which calcualte the moving average in C#:

the c# code for cudafy
the c# code for cudafy translate it to:

the opencl code generated by cudafy
the opencl code generated by cudafy

Since we need to use a jekyll theme, it has a dependency on nokogiri. If you cannot install it just with “gem install nokogiri”. Please check this post.

This is the error message we met:

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/hchu/.rvm/rubies/ruby-2.0.0-p247/bin/ruby extconf.rb

Using pkg-config version 1.1.7
checking if the C compiler accepts ... yes
checking if the C compiler accepts -Wno-error=unused-command-line-argument-hard-error-in-future... no
Building nokogiri using packaged libraries.
Using mini_portile version 2.1.0
checking for iconv.h... yes
checking for gzdopen() in -lz... yes
checking for iconv... yes



Building Nokogiri with a packaged version of libxml2-2.9.4.

Team Nokogiri will keep on doing their best to provide security

updates in a timely manner, but if this is a concern for you and want

to use the system library instead; abort this installation process and

reinstall nokogiri as follows:

    gem install nokogiri -- --use-system-libraries

If you are using Bundler, tell it to use the option:

    bundle config build.nokogiri --use-system-libraries
    bundle install

Note, however, that nokogiri is not fully compatible with arbitrary

versions of libxml2 provided by OS/package vendors.


Extracting libxml2-2.9.4.tar.gz into tmp/x86_64-apple-darwin12.3.0/ports/libxml2/2.9.4... OK
Running 'configure' for libxml2 2.9.4... OK
Running 'compile' for libxml2 2.9.4... ERROR, review '/Users/hchu/.rvm/gems/ruby-2.0.0-p247/gems/nokogiri-1.6.8/ext/nokogiri/tmp/x86_64-apple-darwin12.3.0/ports/libxml2/2.9.4/compile.log' to see what happened. Last lines are:


    unsigned short* in = (unsigned short*) inb;

encoding.c:815:27: warning: cast from 'unsigned char *' to 'unsigned short *' increases required alignment from 1 to 2 [-Wcast-align]

    unsigned short* out = (unsigned short*) outb;

4 warnings generated.
  CC       error.lo
  CC       parserInternals.lo
  CC       parser.lo
  CC       tree.lo
  CC       hash.lo
  CC       list.lo
  CC       xmlIO.lo
xmlIO.c:1450:52: error: use of undeclared identifier 'LZMA_OK'

    ret =  (__libxml2_xzclose((xzFile) context) == LZMA_OK ) ? 0 : -1;

1 error generated.

make[2]: *** [xmlIO.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

We found the root cause is the following two things:

  1. Lacking of libxml2 2.9.4
  2. use of undeclared identifier ‘LZMA_OK’

Our MBP had already installed libxml2 before but it is old version. You may check your version through:

brew list libxml2

If it is not libxml2 2.9.4. Please use the following commands to upgrade it:

brew update
brew upgrade libxml2

After that, if you cannot install nokogiri 1.6.8 with the same error. Please check your xcode-selected. We found an issue of nokogiri which is exactly the same one. The main clue to fix it is:

xcode-select --install

Hope this helps…

Desktop Laser Engraving Machine

This is my first laser engraving machine. I brought it from taobao with CNY 310. It’s a small desktop version with 100 mW blue light laser. I have to admit that it is just a toy. It works pretty well. But the lifetime of laser head is short. So, after a few hours engraving, the laser head is so weak to engrave a new photo.

I had tried multiple materials, like paper, leather, wood, PLA, etc. My favored material is wood. I took my son’s toy and engraved on it. This is my first work:

A brick engraved with bookteller
A brick engraved with bookteller

Although John Hu had left mozilla, I had wrote a post before leaving. This post is about how to write a high performance animations. Please go to this URL to find it out:

John Hu's Bugzilla

September 2015

I left mozilla at September 2015. It’s a special adventure at the mozilla. I learned the mozilla’s JavaScript coding styles, review rules, module owner/peer system, automation tests, tree tacking, and the most important open web culture. The best part at mozilla is to know a lot of talent engineer.

At mozilla, I did a small amount of jobs. The best retrospective is to see the Bugzilla statistics. It shows the works done during these 3 years:

  1. 309 bugs, 0.5 bugs filed per day

  2. 3366 comments, 5 comments made per day

  3. 183 patches submitted, 0.25 patches submitted per day

  4. 239 patches reviewed, 0.33 patches reviewed per day