Tommy Chheng

Icon

All Things Programming!

CouchDB Install Problems on Snow Leopard: Trace/BPT trap

Just got the new Mac Snow Leopard this weekend! With the OS switching from 32bit to 64bit, i had to recompile much of my development software. CouchDB was particularly troubling.

I deleted all my macports, installed new macports 1.8, built 64bit versions of spidermonkey, icu and erlang using macports. Erlang looked like it was working:

→$erl
Erlang R13B01 (erts-5.7.2) [source] [64-bit] [smp:2:2] [rq:2]
[async-threads:0] [kernel-poll:false]
Eshell V5.7.2  (abort with ^G)
1> 1+1.
2
2> q().

I rebuilt couchdb from the latest sources using

./bootstrap; ./configure; make && sudo make install

When I tried to start CouchDB:

→$sudo couchdb
Apache CouchDB 0.10.0a802973 (LogLevel=info) is starting.
Trace/BPT trap

Ouch…no idea what this “Trace/BPT trap” error means, but luckily Benoit Chesneau on the CouchDB user mailing list found out it was a MacPorts build issue and not the code itself. Installing CouchDB and its dependencies from the directly from source solved the issue.  The exact solutions to rebuild from the sources rather macports are shown on the CouchDB wiki install page.

OS Process Timed out CouchDB error and fix

If you come across an OS Process Timed out using a view in CouchDB, you can adjust the os_process_timeout setting in the couchdb futon utility.

os_process_timeout

[Tue, 21 Jul 2009 23:57:45 GMT] [error] [<0.2804.0>] Uncaught error in HTTP request: {exit,
                                {{bad_return_value,
                                  {os_process_error,"OS process timed out."}},
                                 {gen_server,call,
                                  [<0.2808.0>,
                                   {prompt,
                                    [<<"reduce">>,
                                     [<<"function(keys, values, rereduce) {\n     return sum(values);\n   }">>],
                                     [[[[<<"0832603">>,<<"and">>],
                                        <<"0832603">>],
                                       1],
                                      [[[<<"0832603">>,<<"and">>],
                                        <<"0832603">>],
                                       1],
                                      [[[<<"0832603">>,<<"and">>],
                                        <<"0832603">>],
                                       1],
                                      [[[<<"0832603">>,<<"and">>],
                                        <<"0832603">>],
                                       1],
                                      [[[<<"0832603">>,<<"and">>],
                                        <<"0832603">>],
                                       1],
                                      [[[<<"0832603">>,<<"and">>],
                                        <<"0832603">>],
                                       1],
                                      [[[<<"0832603">>,<<"and">>],
                                        <<"0832603">>],
                                       1]]]},
                                   infinity]}}}

Thanks to Dustin on the couchdb user mailing list for pointing this out.

Installing CouchDB on Ubuntu: Problems and fixes

Got around to install CouchDB from source on a Ubuntu VM. CouchDB is schemaless “document” database server with a RESTful HTTP/JSON API. I’m mostly experimenting it with because of the schemaless design. The map/reduce views took a bit to get used to after being so well acustomed to SQL queries in the past, but I like what I see so far.

While installing it, I ran into a few problems:

Install Erlang(I was having trouble with the 64-bit erlang and openssl package, i ended up just using the 32 bit version):

sudo apt-get install build-essential erlang

First error message:

configure: error: Could not find the js library.
Is the Mozilla SpiderMonkey library installed?

Uh oh, let’s install spidermonkey:

sudo apt-get install libmozjs-dev

Another error pops up:

checking for icu-config... no
*** The icu-config script could not be found. Make sure it is
*** in your path, and that taglib is properly installed.
*** Or see http://ibm.com/software/globalization/icu/
configure: error: Library requirements (ICU) not met.

Oh no, international character support needed, install icu:

sudo apt-get install libicu-dev

And then another error appears:

checking for curl-config... no
*** The curl-config script could not be found. Make sure it is
*** in your path, and that curl is properly installed.
*** Or see http://curl.haxx.se/
configure: error: Library requirements (curl) not met.

Hmm, curl needed:

sudo apt-get install libcurl4-openssl-dev

Now for Couchdb install commands (stolen from the couchdb wiki)

svn co http://svn.apache.org/repos/asf/couchdb/trunk couchdb
cd couchdb
./bootstrap
./configure
make
sudo make install
make clean
make distclean
sudo -i
adduser --system --home /usr/local/var/lib/couchdb --no-create-home --shell /bin/bash --group --gecos "CouchDB Administrator" couchdb
chown -R couchdb:couchdb /usr/local/var/lib/couchdb
chown -R couchdb:couchdb /usr/local/var/log/couchdb
chown -R couchdb:couchdb /usr/local/var/run
chown -R couchdb:couchdb /usr/local/etc/couchdb
chmod -R 0770 /usr/local/var/lib/couchdb
chmod -R 0770 /usr/local/var/log/couchdb
chmod -R 0770 /usr/local/var/run
chmod -R 0770 /usr/local/etc/couchdb
cp /usr/local/etc/init.d/couchdb /etc/init.d/
update-rc.d couchdb defaults

Start it up with:

sudo /etc/init.d/couchdb start

CouchDB has a really great development community behind it. Subscribe to the mailing list, read the wiki, follow the couchdb twitter and read the book

Google IO 2009 Thoughts

Last week, I attended the Google IO 2009. Here’s a list of things I found to be important:

  • Web Programming is the new programming model of our time. Learn it or be at a disadvantage.
  • Google Wave is a strong real time communication tool. It looks promising but also looks bloated with too many features. I don’t see it replacing e-mail or IM in the near future.
  • Just how Google Maps/Gmail popularized Ajax, HTML 5 will need a compelling application to make it widespread.
  • Microsoft Internet Explorer needs to support HTML5!
  • The major HTML5 components:
    • canvas: ease of interactivity in the browser. A “paint” application can be written in a just few lines of code.
    • video: no more flash video! Lets you use Javascript to alter the video as well. There was a demo of an object tracking at IO.
    • geolocation: Straight from the browser. Will be interesting when laptops/netbooks start coming with GPS
    • app cache: imagine developing apps using HTML/JS instead of traditional compiled languages. Should greatly improve software quality and app development-to-market time.
  • Google Web Elements are quick copy and paste elements to make your site more interactive.
  • Ignite Talk: Reading scifi is one way of predicting the future not because they will be true but because many of the world’s shapers also read them.
  • Ignite Talk: Tim Ferris says to list your fears in great detail to realize greater possibilities.
  • Ignite Talk: Patterns and anti-patterns:
    • make the right thing easy and the wrong things hard
    • allow users to party with others without you
    • what role do you play for your users
  • Google IO was seriously the best ran conference I’ve been to: great hospitality, great presentations and not to mention, very green(even with compostable bins). Here are some io2009 photos from my flickr.

Researching “Research”

As researchers, we often wonder if what we are working will be beneficial. Additionally, we wonder if our limited time should be spent on one topic vs another. Over the upcoming months, I will be analyzing this problem and presenting possible solutions.

I will be working with Bill Tomlinson at UC Irvine on a new project called ResearchWatch. We are effectively researching “research.”

Our first goal will be to analyze the distribution of research today. We want to see which topics are at the heart of research and which are being possibly ignored. Could these ignored topics warrant more interest? Are the over-researched topics unnecessary?

We will be specifically analyzing the NSF Research Grant dataset for the past 10 years. We will cluster these into topics using various unsuprvised learning algorithms. This will give us a high level mapping of what the NSF has considered to be important to warrant research grants. Stay tuned for future updates…

Thanks to Amazon for supporting the academic community. They have provide us with a grant for various AWS services. Check out their recent blog post if you are a researcher and need a base of operations.

Developing OpenCV Applications with Eclipse on Windows

Here’s a guide to start hacking computer vision and image processing applications using OpenCV/Eclipse on Windows machines. While you can use Microsoft Visual Studio to program OpenCV apps, I find Eclipse a much easier to use IDE.

C++ Development Tools

  • MinGW: A collection of freely available and freely distributable Windows specific header files and import libraries combined with GNU toolsets that allow one to produce native Windows programs that do not rely on any 3rd-party C runtime DLLs. MinGW is different from Cygwin because it uses the Windows C runtime libraries(mscvrt) rather than GNU’s libc.
  • Msys: A Minimal SYStem to provide POSIX/Bourne configure scripts the ability to execute and create a Makefile used by make.
  • Eclipse CDT: A IDE originally made for Java but includes an extensive plugin library. Now supports C/C++ and many other languages.

The latest version can be checked on the respective website. I used MinGW 5.1.3 and Msys 1.0.10. When installing MinGW, select the G++ and other compilers. Do NOT install the make in the MinGW setup. Msys will provide it.

MinGW does not include the GDB debugger so download gdb-6.6.tar.bz2 and install it to your MinGW directory. To uncompress it, open up the msys window and type in bunzip2 gdb-6.6.tar.bz2 and then tar -xvf gdb-6.6.tar. Copy all the contents to your MinGw folder.

OpenCV

The two big open source computer Vision/Image processing libraries in C/C++ are OpenCV and the Nasa Vision WorkBench.

OpenCV is the old-school C/C++ computer vision/image processing library. It is robust and contains many functions described in computer vision textbooks. I haven’t played with the newer NASA tool but it looks like it has a decent API as well.

Download and install OpenCV.

Linking OpenCV in Eclipse

You can setup Eclipse CDT to work with the OpenCV libraries. Create a new C++ project in Eclipse CDT. Select MinGw as the toolchain.

In the project properties, go to the C/C++ Build->Settings->GCC C++ Compiler, set the directories to:

  • OpenCv\cv\include
  • OpenCv\cxcore\include
  • OpenCv\otherlibs\highgui
  • OpenCv\otherlibs\cvcam\include
  • OpenCv\cvaux\include

In the C++ Linker->Libraries, set:

  • cv
  • highgui
  • cxcore

In Library search path, set:

  • OpenCV\lib

Here’s a sample file to get you started. You should be able to compile this program and see an inverted image when you run it.


////////////////////////////////////////////////////////////////////////
//
// hello-world.cpp
//
// This is a simple, introductory OpenCV program. The program reads an
// image from a file, inverts it, and displays the result.
//
////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>
int main(int argc, char *argv[])
{
IplImage* img = 0;
int height,width,step,channels;
uchar *data;
int i,j,k;
if(argc<2){
printf("Usage: main \n\7");
exit(0);
}
// load an image
img=cvLoadImage(argv[1]);
if(!img){
printf("Could not load image file: %s\n",argv[1]);
exit(0);
}
// get the image data
height = img->height;
width = img->width;
step = img->widthStep;
channels = img->nChannels;
data = (uchar *)img->imageData;
printf("Processing a %dx%d image with %d channels\n",height,width,channels);
// create a window
cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
cvMoveWindow("mainWin", 100, 100);
// invert the image
for(i=0;i data[i*step+j*channels+k]=255-data[i*step+j*channels+k];
// show the image
cvShowImage("mainWin", img );
// wait for a key
cvWaitKey(0);
// release the image
cvReleaseImage(&img );
return 0;
}

Very Large Screen Displays Driven by Hand Tracking

Got a really large screen display? It would be pretty hard to use a mouse, eh? Our senior engineering project at UC San Diego was to design a system where we would track a person’s hands to drive a large screen display.
The technology in this project was used in a SIGGRAPH Art project

Hand Tracking as Pointing Device UCSD ECE191 Poster

Check out the full report here.

Vision Based Traffic Light Triggering for Motorbikes

Back in my college days at UC San Diego, I worked on a project using computer vision to solve the traffic light triggering problem. The general gist of problem is that a lot of traffic light sensors have a hard time detecting the presence of a motorcycle. This is a safety hazard as a motorcyclist may have to run a red light simply because the traffic light is not triggered. My idea was to detect and predict the trajectory of an object in video capture targeted at a traffic light.

Abstract

Current traffic light triggering is based on inductive loop sensors. Unfortunately, motorbikes (scooters, motorcycles, etc) have a difficult time triggering these sensors. In this paper, we propose an image processing algorithm to detect motorbikes at a traffic stop using a fixed camera. The algorithm tracks the trajectory of the objects in the footage by motion segmentation and connected component labeling. Classification can be created to categorize these objects as incoming traffic based on the object’s trajectory. To handle different lighting conditions in the motion segmentation, we take a dual approach by selecting RGB or Opponent colorspace. RANSAC is utilized to help trajectory creation. Experimental tests using real video footage exhibit robust results under varying conditions.

Video

In this video, you see the detection of all the light sources. Then we track the bike(note how it bike stays labeled #1) using RANSAC to differentiate the bike from the intersecting traffic.

Presentation

For more details about this idea, check out the project blog at Vision Based Traffic Light Triggering for Motorbikes

Blog Post #1

Hello, I’m starting this blog to write about my projects(academic/industry and fun) which can be helpful for someone someday… stay tune!

Read Books on the Amazon Kindle 3