Author Archives: Administrator

Repairing flat bearings on a Microsoft Trackball Explorer

Tools needed (these happen to what I had handy):

From iFixit:
– Mako Driver Kit – 64 Precision Bits (philips 0 and sim tool)
– Precision Tweezers Set
Prying and Opening Tool Assortment

Hobby tools:
Tamiya Fine Pin Vise 74112
Godhands Pin Vise Drill Bit Set B

Tekton mini picks

Blutak or Tak n stik
3x 5/64″ ceramic ball bearings (avail on amazon)

1. Remove 5 screws from exterior shell. Use prying tools to remove bottom rubber covers to remove without damaging. Take note of screws and holes (they’re not the same).
2. Remove two ribbon cable connecting bottom half to top half of trackball. Use picks to undo latches.
3. Undo the 2 screws holding the board next to the circle.
4. Remove board, taking note of orientation.
5. Remove 2 screws holding trackball holder.
6. Remove trackball holder.
7. 3x for each ball bearing.
– Use sharp pick to create pilot, use 1mm hand screw to drill.
– When it’s completely through, use sim card tool to push through ball bearing. Use tak n stik to receive bearing and to protect fingers.
– Push in new bearings.

ball bearing is 1.99mm. Replacement is ~1.98mm, but it seems to work well enough.

Building zlib 1.2.5 on windows

To build zlib on windows I did the following:

  1. Opened up a windows cmd prompt and ran vsvars32.bat from C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools (You may need to change this depending on which version of Visual Studio you may have)
  2. Ran nmake -f win32/Makefile.msc. At this point I ran into a LNK2001 error with _inflate_fast being unresolved
  3. Editted Makefile.msc to add the inffast.obj to the OBJS target per the hint given at here Chinese instructions to build zlib on Windows
  4. Reran nmake -f win32/Makefile.msc. This time it worked.

Edit: Justin in the comments pointed out a better way to resolve this issue:

There is a facility in the Makefile that lets you chose if you want the regular inffast, or one that was written in assembler (there is a 32-bit of 64-bit version).
Instead of editing the Makefile, you can instead use
nmame -f win32/Makefile.msc OBJA=inffast.obj
or instead of using inffast.obj, you can pick on of the assembler built ones

Emachines M5414 CMOS (Bios) Battery Replacement

I recently had to replace the CMOS battery for an Emachines M5414 for a relative. The battery is in a rather hard to reach area, but instructions given at Emachines M53XX disassembly instructions give a detailed breakdown of how to disassemble the machine. The M53XX has a slightly different layout than the M5414, but the instructions are similar enough that I was able to follow them 90% of the way. Two things of note though – when removing the hotkeys panel, a spudger comes in quite handy in unlatching the panel. Credit cards cut into thin strips make great spudgers. In addition, be very careful when removing the trackpad cable from the motherboard, the latches are very delicate and hard to reach. A slight push into the side is all that is needed to lift the plastic piece up (don’t try to completely remove it) at which point, the cable should come up easily.

The CMOS battery used in M5414 is indeed a Maxell CR1220 battery, and it’s a simple replacement once the entire top assembly of the laptop is removed.

Visual Studio Build Enviroment Variables (aka Property Sheet User Macro)

Here’s a howto for setting build environment variables within Visual Studio itself. Given that I’ve seen plenty of projects that used system wide environment variables for project level settings, I suspect this will be of use to other developers as well.

  1. From the menu: View > Other Windows > Property manager.
  2. Right click on Property Manager, add Property Sheet.
  3. Double click on the just created Property Sheet.
  4. Click on User Macros.
  5. Click Add Macro.
  6. Add the build variable’s name and value. Check “Set this macro as an environment variable in the build environment”.


Work Resume

Contact Information

  • Email : sunny (-dot-) chow (-at-) acm (-dot-) org


Seeking San Jose based company that can leverage advanced image analysis and application development skills to create more intelligent products.


  • Consultant

    Consultant: 03/2010 – Present

    • Implemented a rectangle bounding box algorithm for outlining photographs in a video stream.
    • Developed a DirectShow library to interface with video cameras.
    • Developed a MicroManager (open source Microscope control system) plug-in to control a Direct Electron camera system over TCP/IP using Java.
    • Developed a web service interface for OSCommerce to enable AJAX requests for the aging but widely supported e-commerce platform using PHP, MySQL, JSON & JQuery. Json Interface for OsCommerce
    • Increased e-commerce website conversion rates by 12% by improving the user friendliness of our product display and transaction systems.
  • FreightScan Cargo

    Senior Software Engineer: 07/2007-04/2008 & 04/2009 – 02/2010

    • Participated in the development of a next generation cargo dimensioning system.
    • Developed automated testing of dimensioning algorithms to measure and improve accuracy.
    • Improved existing dimensioning algorithm and reduced processing time.
    • Used Microsoft XNA to develop an interactive 3D visualization tool.
    • Developed the server-client networking layer using .NET Remoting.
    • Implemented motion triggered cargo scans using OpenCV and DirectShow.
    • Prototyped noise reduction algorithms using MATLAB and implemented it using OpenCV.
    • Prototyped 3D alignment routines for multi-camera systems using MATLAB.
  • (Hangzhou, China headquarters)

    Product Developer: 04/2008 – 04/2009

    • Coordinated regional US and Hong Kong marketing operations from China mainland.
    • Jointly developed overseas online marketing programs and bridged language communications.
    • Oversaw development of a Cost Per Acquisition tracking system for affiliate marketing.
    • Developed custom international trade database import system serving entire countries.
  • National Center for Microscopy and Imaging Research

    Associate Development Engineer (07/2001-08/2006)

    • Created an automated system to acquire thousands of individual images to stitch into one single image bringing to fruition gigapixel mosaic images of mouse brains. Software Link
    • Enabled the scientific understanding of genetic disorders expressed in mouse brains at the micro and macro level.
    • Utilized the combination of Microsoft Visual C++, MFC and COM to synchronize stepper motor movements with image acquisition.
    • Engineered a non-uniform illumination correction and image alignment solution in a memory efficient manner via Eclipse and Java Advanced Imaging libraries. JAI Success Story
    • Collaborated with Olympus engineers to develop commercial automated mosaic systems.
    • Published “Automated Microscopy System for Mosaic Acquisition and Processing”, Journal of Microscopy, Vol 222 Issue 2 Pg 76 – May 2006.


  • University of California, San Diego

    • M.S. Computer Science, Concentration in Computer Graphics and Vision, June 2004.
    • B.S. Computer Science, June 2001
  • Tsinghua University, Beijing China

    • Chinese Language Studies, September 2006 – July 2007
    • Fluent in spoken and written Chinese


  • Programming Languages:

    • C++, C#, Java, PHP, MATLAB
  • Windows Programming:

    • Windows MFC & COM, Winsock, Microsoft .NET
  • Graphics and Visualization:

    • OpenCV, OpenGL, Java Advanced Imaging Toolkit
    • Development of a distributed ray-tracer with photon mapping
  • Computer Vision and Image Processing:

    • Feature and Edge detection, Motion tracking, 3D Scene reconstruction, Segmentation, Random Sample Consensus, Video stabilization