Timeout in CruiseControl

In my Cruisecontrol setup, I need to make an ant call to ruby scripts. Originally, I setup CruiseControl timeout in AntBuilder, somehow it could not kill ruby process. CruiseControl will wait till the end of ruby process, and show timeout error in the report.

I started looking at Ant exec task timeout, which I expect the process times out after 5 hours, but the build always times out within one minute.

What's wrong?

Don't laugh at me. Cruisecontrol AntBuilder use seconds to measure timeout, but Ant Exec task uses milliseconds!

How to start Organizational Transformation

In big companies, how to start working on Agile Organizational Transformation? Starting from selected projects is a good idea. Picking various projects is extremely important. You may want to pick projects to cover different business domains, platform, programming languages, etc.

Organic Java Developers?

Today at lunch time, we went to SF ferry building farmer's market to get some coffee. Everything in the market had a marker "organic", and the price was crazily expensive. Paulo, one of my colleagues, said, we should name ourselves organic java developers. We use open source tools, cage free:)

Sure, you could not be called organic java developers several months ago, because Java itself was not open source yet. Now you can:)

Ruby on rails for startups?

Ruby on rails is one of the hottest buzz words at this moment. Comparing R/R to the current J2EE and .Net. I would like to raise a question about the performance and scalability, since I have not found any industrial data yet.

Until the performance/scalability is proved, I treat R/R as a great tool for startup companies. Startup companies should be able to dive into their prototype quickly and raise the money based on the prototype. But what they are going to do next...is a secret:)

CruiseControl setup for multiple projects/releases

I tried to set up CruiseControl to handle multiple releases among different projects. All the projects share the same build scripts (which is a whole build project, sounds odd, ah?).

My original plan for the file structure was:

___CruiseControl (cc installation)

|__projects___ config.xml











With this file structure, everything related to the project is under one directory tree. If you want to remove an obsolete project from cc, you don't have to delete files from multiple places.

But I hit a road blocker when I tried to set up logs and artifacts. There is no way to archive the above goal if I don't modify CC source code. I could make the build without any problem, but the reporting system crashes. Since CC index page will look for projects under default logs directory. After considering the design carefully, I think it makes sense for CC to setup this way, since it will avoid another setup to tell cc the available projects.

Now I will change projects directory setup to a flat file structure like what I did at other clients:

___CruiseControl (cc installation)

|__projects___ config.xml



| |___trunk-build

| |___release1-build

| |___release2-build

| |___trunk-project1-quick

| |___release-project1-nightly

|| ...

|___target (the same as checkout)

|___logs (the same as checkout)

|___artifacts (the same as checkout)

But I'm still wondering if there is a better way to remove obsolete projects/release branches easily.


Last week, I attended the OOPSLA 2006 at Portland, OR. For the last several years, I tried several times to register for this conference. Every time, my registration was canceled due to different reasons. Finally, I made it in 2006:)

In general, it's a great conference with great hot topics, like AOP (Aspect oriented programming), MDD (Model driven design). On the other hand, I was a bit disappointed because it's more academic than industrial oriented. There was no talks about "Web2.0" during the whole conference. After more than 6 years of work in various industries, I'm more concerned about the actual usage than academic research.

There was an interesting talking: The Geography of Programming. But it's just the start of the search. I'm curious to see more search result coming out.

Leaving Instiki, joining Trac

Recently, I helped a team to solve their wiki problem. They were using a Ruby wiki named Instiki 0.10. The wiki stopped creating snapshot after one server power outage. In the end, it took 40 minutes to restart the wiki.

Firstly, I upgraded Instiki to the latest version which is using database. But several unexpected problems happened afterwards:

  1. We got segmentation error from time to time, and Instiki automatically shuts down. The error comes from sqlite driver.
  2. Server runs out of memory several times a day, and Instiki automatically shuts down.
  3. The performance of the page is unbearble. It takes 30 seconds to do a search with around 1000 pages.
After doing some research, we decided to move away from Instiki. Trac was picked as our new Wiki. Luckly, in Instiki, we could export all your pages into textile files. With the help from Simon, my colleague, I created a simple textile to trac wiki converter using Perl. It will look through the input directory for all the files with .textile extension, convert them into trac format, and dump the new files into specified directory. Then we used "trac-admin wiki load" command to load these pages into your trac wiki. Bingo!

The script was not perfect. I had to manually change several pages manually. At least, it's a good start. If anybody wants to get the script, feel free to shoot me an email.

Ruby Intellij Plugin

I tried to install Ruby plugin for Intellij today. There is no distribution available, so I had to get the source code from subversion repository and built the distribution file myself.

I could not create any new project in Intellij after the plugin was installed. Uninstalling the plugin fixed the problem. I guess I would wait for the next release.