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

Flower in CSS

This CSS art is made by a tricky croping CSS effect. The tricky part is to make a leaf. But the hardest part is to calculate the correct math arguments. This CSS art is scalable. You may change the width and height to have different size of flow: