David Ron

Important News

Wednesday, March 17, 2010

Big Visible Cruise Web Updated!

I just updated BigVisibleCruiseWeb!  I created this tool as a cross-platform web-based clone of the C# "Big Visible Cruise" as a way to monitor the status of all of your builds across any number of build servers.  It has support for filtering (with regular expressions passed in the URL) and hiding (via a menu driven interface) builds you don't care about, and a mini mode for embedding on your project wiki.  Here are some of the new features:
  • Now includes an embedded Jetty server so you just kick the jar off to start it instead of having to deploy a .war file.
  • It now builds with maven.
  • Cruise/Hudson build feeds as well as the bvc server port can be configured on the command line.
  • Better command line logging.
If you use CruiseControl or Hudson to automate your build process, check this tool out because it only takes seconds to get up and running!
http://code.google.com/p/big-visible-cuise-web/

Monday, March 15, 2010

Easiest Way To Embed Jetty With A Spring Web Project

So, you have your spring project that works great inside of something like Tomcat or Resin, but you want to distribute it like a normal executable .jar file.  Look around the Internet, and you'll find some extremely complex directions.  They don't have to be.  As an example, you want to be able to access the pages at http://localhost:8080/cruise/, and you have a standard WebContent folder that contains WEB-INF in it.   Just add the jetty jar files to your classpath, and then create a main class with the following:

package yourProject; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.WebAppContext; public class MainClass public static void main(String[] args) throws Exception{ Server server = new Server(8080); WebAppContext context = new WebAppContext(); context.setDescriptor("/WEB-INF/web.xml"); context.setResourceBase("WebContent"); context.setContextPath("/cruise"); context.setParentLoaderPriority(true); server.setHandler(context); server.start(); server.join(); } }

Ubuntu 9.10: How To Do Nothing When Closing The Laptop Lid

The available options for what to do when the lid is closed in "Power Management Preferences" does not include "nothing".  But, sometimes, you want your docked laptop to operate when closed.  Here's how to disable the sleep/hibernate/blank screen when the laptop lid is closed:
$ gconf-editor
  • Go To: apps-->gnome-power-manager-->buttons
  • Set lid_ac and/or lid_battery to "nothing" (without the quotes).
Source

Monday, March 8, 2010

Just stumbled on the "driver" for a serial port scale I wrote in 2005 on the company owner's personal site.

We bought the scale to use in the Shipping department with the custom
shipping software I was working on. The guy I wrote it for apparently
still has it available for clients to re-use. I was pretty proud of it
at the time, with the commented out code for developers who want to test
how it works and the fact that it was my first forray into reading and
writing directly from USB/Serial ports using a thin wrapper around JNI.

The site:
http://www.phizzypup.com/Scale_Software/scaleReader.zip

The guy even saved the e-mail I sent him about it:
http://www.phizzypup.com/Scale_Software/ReJavaAPI.htm

Mr. Kanban, Scrum Isn't So Bad.

I recently a fairly decent article that describes Kanban whilst pitting it against Scrum.  While I don't know enough about Kanban to make a decent comparison myself, I did find a few issues with the attack on Scrum.

Shrinking The Story:

The original article states as a disadvantage of Scrum:

Shrinking stories forces earlier elaboration and decision-making. Where product owners could write their stories fairly generally and consider many of the details later, now breaking them down into smaller stories forces more thinking earlier in a planning lifecycle.
What the author misses is that large stories inevitably have ambiguous requirements.  This is why waterfall requires extremely long planning, and short iterations require short planning.  It would seem that the larger the story, the more upfront planning is required for that story.  That makes sense for two reasons:
  1. It's useful for the product owner and the team to estimate how long a story will take.  In Scrum this is necessary for time-boxing.  In Kanban, this may not be as necessary for the team, but it will certainly be necessary for any product owner with a boss who wants to know how long something will take for short and mid-term project planning.
  2. The more "meat" is in a story, the longer it will take to determine what needs to be completed before the developers and product owner can say the story is "done".  Larger stories require more time to hash our ambiguity that may exist in customer requirements. 
My current Scrum team runs at a velocity of 25-30 Scrum story points per 2-week iteration, yet we have an informal rul that we never take in a story larger than 8 points (13 being the next on the scale).  This is because we believe that stories that large come with too much ambiguity which causes stories to often be brought back into future backlogs for completion.  Now, some may say that such small slices lead to "useless features", but let us not forget that proof of progress is a valuable deliverable in and of itself.

What we attempt to avoid is upfront design, but what we must not sacrifice is requirement divergence or misunderstanding, especially with hostile/new product owners, or product owner who tend to micro-manage teams when given the opportunity.  Where Scrum places a larger responsibility on the product owner to manage a larger backlog, Kanban places a larger responsibility on the product owner to create more specific requirements and deal with unexpected delays due to requirement divergence.

Testing:
It’s difficult to fit thorough validation of the story into a short time-box as well. So, often testing slips into the time-box after. Which leaves the nasty problem of what to do with bugs - which often get piped into a subsequent time-box.
The simple solution to this problem is to integrate the testing team into the Scrum team and make "test" a task instead of a task state.  Now, the team is responsible for estimating the time required to test the feature right along with all other development.  This is good because it places "testability" in the hands of the developer and encourages TDD.

Disable Caps Lock Key in Linux

I hate the caps lock key. So, in my ~/.bashrc I have the following line to disable caps lock:
xmodmap -e "remove lock = Caps_Lock"

To turn off caps lock key, enter:
$ xmodmap -e "remove lock = Caps_Lock"
Now caps key is disabled. To enable caps key, enter:
$ xmodmap -e "add lock = Caps_Lock"
Source

Thursday, March 4, 2010

How To Get Command History In sql*plus

sql*plus does not have a command history function under Linux and Unix. Lately I listened to Tom Kyte at one of his seminars he delivered in September in Zurich. He used a virtual Linux machine and had a command history for his sql*plus obviousely. He told us that he used a utility called rlwrap for this. rlwrap is a readline wrapper for shell commands which uses input from the controlling terminal. It adds a persistent input history for each command and supports user-defined completion.
Under Ubuntu, you can install rlwrap by:
$ sudo apt-get install rlwrap

And, you can start sqlplus:
$ rlwrap sqlplus username/password@server

Finally, the following alias in .bashrc will allow you to start sqlplus as normal with rlwrap turned on by default:
alias sqlplus='rlwrap sqlplus'

Source

AddThis

Bookmark and Share