Thursday, October 30, 2008

Grouping "Friends" List on Facebook

One feature I especially like since the Facebook redesign is the ability to group your "Friends" list. If you have not noticed this feature yet, start by going to your "Friends" list. On the left side, click "Make a New List." Just as the instructions say, choose a name for your list, then hit the Enter key to save the name. You will be given a screen where you can type names or, even better, you can select multiple friends from a list of your entire Friends list.

Additionally, this feature allows you to do two other things I find helpful: 1) You can send a message to an entire group of friends and 2) You can select your group from the "Live Feed" on the dashboard. This allows you to get a quick update of information for a select group of people.

Tuesday, October 28, 2008

OpenCV on Fedora 8

Our team has just spent a bit of time configuring and running openCV on our Fedora 8 boxes. openCV is a very rich toolkit for applications that have computer vision requirements. After some bouncing around between various useful web sites with different installation processes, we assembled a complete set that works for us.

This install process includes the ffmpeg libraries, and takes you from a basic Fedora 8 box to running the facedetect example.

Install ffmpeg

Do this as root.

* yum install SDL-devel
* From ffmpeg, download a full checkout.
* tar xjf ffmpeg-checkout-snapshot.tar.bz2
* cd ffmpeg-checkout-2008-10-28 (or whatever release yours is)
* ./configure --enable-shared --enable-swscale --enable-gpl
* make (You'll have time to get coffee, maybe see a movie, while this runs.)
* make install
* echo "/usr/local/lib" >/etc/
* ldconfig

Now, run ffplay and pass it the name of a local video file - flv, avi, whatever.

Install OpenCV

You're still root, yes?

* yum install gtk2-devel
* Download
* cd /tmp
* tar xzf opencv-1.1pre1.tar.gz
* cd /usr/local/include/
* mkdir ffmpeg
* cd ffmpeg
* find ../ -name "*.h" | xargs -n1 ln -s
* cd /tmp/opencv-1.1.0/
* ./configure --enable-apps --enable-shared --with-ffmpeg --with-gnu-ld --with-x --without-quicktime CXXFLAGS=-fno-strict-aliasing CFLAGS=-I/usr/local/include/ffmpeg CPPFLAGS=-I/usr/local/include/ffmpeg LDFLAGS=-L/usr/local/lib

You should see

Use gtk+ 2.x: yes
Use gthread: yes
Use ffmpeg: yes

* make
* make install

Now, to verify that everything's good.


You can do this as an ordinary user in your home directory. You'll need an avi to use, in the place of /shared/public/videos/dove_hires.avi, but I'll leave it up to you to go find one.

* mkdir face
* cd face
* rsync -a /tmp/opencv-1.1.0/samples/c/ .
* g++ facedetect.c -o facedetect -I /usr/local/include/opencv/ -L /usr/local/lib/ -lm -lcv -lhighgui -lcvaux
* ./facedetect --cascade="/tmp/opencv-1.1.0/data/haarcascades/haarcascade_frontalface_alt2.xml" /shared/public/videos/dove_hires.avi

You should see the video play, with facedetect drawing a red circle around anything it thinks is a face. Cool stuff!

Monday, October 27, 2008

Free Lean Software Development Course

Alan Shalloway (NetObjectives) is offering a free Lean Software Development Course starting Dec. 1. Here's some of the email that I saw posted on the XP-St. Louis list:
Lean-Thinking provides a framework from which to improve virtually any organization's software development process. While not a panacea, Lean provides clarity on what to look at and how to solve the problems that are often beyond other methods. For software development organizations, Lean provides several principles that provide guidance to Agile methods, particiularly Scrum. Lean will assist those organizations which have either had problems adopting Agile methods or those who have been successful at the team level and are now attempting to scale it to the Enterprise. See Alan Shalloway's blog Is Scrum Failing Us?  for some examples of the challenges Lean can give guidance to.

This Free on-line training is true training, including lectures, readings, exercises and question & answer periods. The intent of this training is:
  • Provide the equivalent of a one-day Lean Software Development Overview course
  • Promote Lean Software Development to many in the industry
  • To improve the ability of participants to explain to their associates why Lean Software Development is useful
  • Provide insights on how to scale Agile/Scrum to the enterprise
Session 1: Introduction to Lean Software Development
Session 2: Five Reasons for Agility
Session 3: Lean as a Guide for Agile Methods
Session 4: QA's role in Lean Agile Software Development
Session 5: How Business Analysts can help their teams
Session 6: Lean Anti-Patterns
Here's the link, if you're interested: If you decide to take it, please let me know or post a comment here.

Thursday, October 23, 2008

Adventures in testing (or user experience? or fraud?)

Let's hope that we don't have any job applicants from the Obama campaign anytime soon; their online work is a bit, shall we say, suspect. From Powerline blog, quoting a reader's experiment with Obama's web site:
I've read recent reports of the Obama campaign receiving donations from dubious names and foreign locales and it got me wondering: How is this possible?

I run a small Internet business and when I process credit cards I'm required to make sure the name on the card exactly matches the name of the customer making the purchase. Also, the purchaser's address must match that of the cardholders. If these don't match, then the payment isn't approved. Period. So how is it possible that the Obama campaign could receive donations from fictional people and places? Well, I decided to do a little experiment. I went to the Obama campaign website and entered the following:

Name: John Galt
Address: 1957 Ayn Rand Lane
City: Galts Gulch
State: CO
Zip: 99999

Then I checked the box next to $15 and entered my actual credit card number and expiration date (it didn't ask for the 3-didgit code on the back of the card) and it took me to the next page and... "Your donation has been processed. Thank you for your generous gift."

This simply should not, and could not, happen in any business or any campaign that is honestly trying to vet it's donors. Also, I don't see how this could possibly happen without the collusion of the credit card companies. They simply wouldn't allow any business to process, potentially, hundreds of millions in credit card transactions where the name on the card doesn't match the purchasers name.

In short, with the system set up as it is by the Obama camp, an individual could donate unlimited amounts of money by simply making up fake names and addresses. And Obama is doing his best to facilitate this fraud. This is truly scandalous.
It would seem that the people running Obama's site either a) don't test their stuff very well, b) don't care much for user experience, c) intentionally engaged in fraud or d) all of the above. It's a lesson for all of us, whether we're programming web sites for high-profile political campaigns or simple apps for internal use. 

Oh, and the power of the blogosphere shows itself again: NRO's The Corner blog reports that the Obama camp, $600 million later, has fixed the problem.

Tuesday, October 21, 2008

For all your Kanban needs

Since at least two of our projects have dipped a figurative foot in the Kanban pool (aCe and kinda Mako and kinda MFKR), people who are interested in learning more (like me!) can join a Yahoo group for Kanban development, aptly titled "kanbandev."

Here are a few other Kanban links:

Monday, October 20, 2008

Cross-Location Teams: Stay Connected Via Co-Op

If you're anything like me, RSS feeds have significantly altered your reading habits.

So many options, so little time.

I skim, glance, peek, and ponder (alliteration, +2 blogging points) through countless options that are surface-level unique only through the negligible details.

Although the sophomoric tendencies of limiting my reading/downloading habits to items that immediately appeal to my interests is mindless at best, I've learned to appreciate 'simple' in addition to 'functionality'.

One such item I encountered over the weekend is the "Co-Op" web application.

Think Ace iteration planning...mixed with online to-do managers such as "Remember The Milk"...mixed with Twitter.

Co-Op is completely web-based, completely free, and completely simple. Yet, it encourages structure and organization across a group of people that are working tasks in parallel.

While morning stand-ups and the tight environments of a localized agile team can probably accomplish most of Co-Ops online features on its own, don't write off it's usefulness just yet.

As Asynchrony continues work in corporations with existing IT shops, off-site employees communicating with on-site employees is a growing concern. The need for a cross-location communication tool external to email is evident, and essential, to daily team performance.

Furthermore, although the Asynchrony sales team attempts to stay connected with daily standups, any number of individuals could be out of town or away from the office. And yet, there are proposals and projects that depend on the entire group.

Co-Op serves as a central meeting place for general team notes, important to-dos, and team member status updates. It's worth taking a brief look. I promise.

And yes, each team member can upload their own avatar.

Monday, October 13, 2008

Selenium tip of the day: assertXpathCount

For those of you (like me) learning some Selenium IDE commands, here's a tip that Ben showed me today: assertXpathCount. The other day, Abra and I were trying to assert that a certain column in a table contained the same value. Ben noted another way to specifically check the count of something in a page using assertXpathCount. So if I wanted to assert that Roger's name appears in a column (any cell with a particular class) three times, I'd use the assertXpathCount command and the following arguments:

  • Target:
    //td[@class="presenter" and contains(text(),"Roger")]
  • Value:

Thursday, October 09, 2008

Another published Asynchronite!

Some of you may have already heard: Shawn Sheldon is the latest Asynchronite to become a published author. Tate Publishing recently released his children's novel, Stranded, the first book of his Dragon Ship Series. From the site:
"That night was another restless one. Actually, it was the worst one of my life to that point. I knew I had better get some rest if I was to have any hope of managing the day that was coming for me the following morning. What kind of day you ask? Let’s review. Tomorrow I would need to secretly explore the Blue Goose site gathering intelligence information, lead my brother and sister and four other children in play, and rescue my dog Snowball—a pretty tall order for a twelve year old; I think anyone would have to agree! In Stranded, the first book in the all new series The Dragon Ship Series, written by Shawn Sheldon, follow a boy and his brother and sister on their unusual Christmas vacation. Their backyard adventure leads to both frightening and exciting encounters with intelligent dragons, Bigfoot, and ‘pet’ robots. A mystery begins to unravel as they discover that the common link involves an amazing space ship, hazardous waste, and even their own family history. Will they be smart enough and brave enough to meet the challenges they discover?
Congrats, Shawn! Bring your copy to the third floor, and he'll autograph it for you!

p.s. Yes, those are his kids on the book cover.

Wednesday, October 08, 2008

Customer tests breaking the build?

I was chatting with a team member about the possibility of his team moving toward ATDD (Acceptance-Test-Driven Development) in which they would write automated acceptance tests before development. He raised the concern that it would mean that they would be checking in tests that broke the build for unacceptably-long periods of time (a day or more). I turned to Brian Button and Ryan Tyer to see how they handle that. Their responses:
Brian: I ignore the ATs that aren't implemented yet so they don't show up as broken tests. (I mean ignore from a JUnit ignore point of view, not just ignoring by choosing not to look at their failures!) Once I start working on something, I unignore the tests.

The restriction on checking in code on broken tests goes for programmer tests, not customer tests. Customer tests go from ignored, to failing, to passing, and shouldn't ever regress.

Ryan: I'd add that with some testing frameworks (TestNG comes to mind) you can flag tests to ignore programatically (@Ignore if I remember correctly). These will not be run so they will not fail the build. You could have two suites of tests (all and all but ignored tests) for the frameworks that don't support this.

Brian: That idea is what I was talking about. In junit 3, you'd have to comment the test out or something, since it doesn't have a way to ignore tests. In Junit4, Nunit,, TestNg, you just mark the test as ignored.

In visual studio architect edition, team suite, or tester edition, you can use test lists to separate ignored ATs from those that should pass.

Google Chrome, Zimbra and you

I started using Google Chrome when it first came out but quickly reverted to Mozilla Firefox 3 because the advanced version of Zimbra didn't work on Chrome. When I polled the company about whether anyone else could get the two to work together, here's what I received:
"No. And it's really annoying. I believe they have some js in the page that looks for IE 6 or 7 and Firefox browsers and anything else gets the standard view."

"yes and no. I am using Chrome, but the Ajax version doesn't work. I am using it anyway, because I have run into issues with the Ajax version in Firefox."

"Last time I looked there were some issues with it and both google and zimbra were looking into it."

"I have been using Chrome for a while, and it always uses the standard version no matter what version you pick. I'm guessing here, but suspect that Zimbra doesn't recognize the browser so it doesn't understand whether or not it has AJAX support, so it launches the safest (standard) version no matter what you choose.

Another thing to note here is that Zimbra Standard has some things that don't work properly (and there are AI's already in ACE about them). For one thing you can't download e-mail attachments (it produces an invalid URL in the download link). For another, if you create a public calendar entry (i.e. "Out of Office") via Chrome, nobody else can see it but you. There are probably other limitations, but those are the only ones I've seen so far. Other than that Chrome & Zimbra seem to work together okay - albeit limited by what the HTML version can do."


Tuesday, October 07, 2008

Finally-close your resources

You are a java programmer. Do you read from databases? Perhaps you write to files? If you aren't careful, you might be creating memory leaks and inadvertently leaving database connections open. Java is notorious for making simple things like file i/o complicated. Consider the try-catch block inside the finally block, which is necessary because the close() method throws an IOException; what is an application programmer supposed to do if the operating system won't allow him to close an open file? Witness the following code:

2 contents = myFile.readContents();
3 myFile.close();
If an exception occurs while reading the file's contents on line 2, your program will skip over line 3 where the file is closed, as the exception interrupts normal execution flow and propagates up the stack, leaving the file ambiguously open. Fortunately, you can invoke this simple solution. Behold:
1 File file = new
2 BufferedReader reader = null;
try {
reader = new BufferedReader( new FileReader(file) );
String line = reader.readLine();
// Deal with line
catch (IOException e){
// Deal with exception ...
finally {
try {
} catch (IOException e) { /* ignored */ }
When execution leaves the try block (line 3), code inside the finally block (line 5) is executed under any circumstance. Therefore, in the above solution, if an exception occurs while reading the file's contents on line 3, the file will still be closed on line 5 before the exception propagates up the stack.

Frameworks like Commons IO from the Apache group ( http://commons/ take much of the pain out of dealing with Java I/O. Commons IO provides variety of utility classes which safely implement common I/O operations without dealing with the ugly Java Reader/Stream/Exception semantics.

Resource leaks due to exceptions are a problem in more-or-less every programming language. Each language has its own idioms for dealing with them. C++ coders wrap resources in their own classes and use the language's constructor-destructor semantics to allocate and de-allocate the resource. In Ruby, you use the IO::open method with a block; this automatically closes the resource when the block ends. Familiarize yourself with these idioms as part of learning a new language.

Monday, October 06, 2008

Coming soon: Selenium Grid

Coming soon to a project near you: The advantages of Selenium Grid. From the web site:
Selenium Grid transparently distribute [sic] your tests on multiple machines so that you can run your tests in parallel, cutting down the time required for running in-browser test suites. This will dramatically speeds up end-to-end web testing, giving you quick and accurate feedback you can rely on to improve your web application.
We've been using Grid for one of our customers and within the next few weeks will be setting up a hub for use in other projects. See Cornel, Dave M. or me for more details.

Agile2008 conference proceedings

The Agile2008 conference proceedings are now on the public drive at \Agile Conferences\Agile2008. You can find a lot of good presentations and material there. (The Agile Conferences directory also has Agile2006 and Starwest2007.)