Win a copy of Node.js Design Patterns: Design and implement production-grade Node.js applications using proven patterns and techniques this week in the Server-Side JavaScript and NodeJS forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
  • Campbell Ritchie
  • Ron McLeod
  • Rob Spoor
  • Tim Cooke
  • Junilu Lacar
  • Henry Wong
  • Liutauras Vilda
  • Jeanne Boyarsky
Saloon Keepers:
  • Jesse Silverman
  • Tim Holloway
  • Stephan van Hulst
  • Tim Moores
  • Carey Brown
  • Al Hobbs
  • Mikalai Zaikin
  • Piet Souris

URLyBird Lessons Learned

Posts: 16
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hello - I got my score on Monday, and I passed! I posted my score in the proper forum here, but wanted to share some of my experiences with the forum. I waited just over three weeks after upload and testing to receive my grade. Although I was not overly pleased with the score, I am happy with the results achieved in a span of about 4 weeks.

The actual process, however, was much longer. I originally downloaded this thing over two years ago! I finally found some idle time at work around the holidays, and put it to good use. So to anyone wavering, what have you got to lose (other than ~400 USD)?!?

Enough of the excuses already, here are some of my thoughts:

1) The KISS principle - Put simply, keep it simple stupid. I tried to stay as close to the letter of the law with the assignment as possible. Doing more than requested can only hurt you, as you don't get "extra credit". Other reasons for doing this - I'm a pretty conservative guy, and I wanted to honor the month I allotted for the assignment.

2) Logging - I used Java logging. Since the default is to output >INFO to the console, I selected levels below that and documented it as such. I didn't want these messages to frighten/intimidate the user. Since we weren't allowed to provide additional configuration files, I documented that the tester might want to enable "ALL" or something similar on their test machine.

In hindsight, maybe that's why I lost some points in the general considerations?

3) Technologies - I used the nio package and RMI for the key technology decisions. I had nothing preventing me from using FileChannel, and it was super easy once you figure out what flip() does.

RMI is just something I have experience with, and it was SO much less code than sockets!

I tried to show some initiative here by turning the network server GUI into a sort-of console. Once running, it displayed info about the host, address and port the server was running on, as well as the name(s) of objects bound in the registry. Pretty easy, and kind-of fun to tinker with the APIs.

4) Test on multiple platforms - I tested on several versions of Windows, as well as my Powerbook running Mac OS X. I used varying topologies for remote mode with my wife's ThinkPad, my PB, and our home office desktop. It was fun to tinker with that!

I've heard it said that Java is "Write once, run anywhere", but also "test everywhere". I think this rings true more for desktop apps more than web apps.

5) Test harness - A lot of the data in my file was invalid (i.e., dates in the past, not within 48 hours, etc.). I used a test harness to add valid data to the file. It also let me exercise the insert/delete methods on the Data class.

6) Testing - JUnit, enough said. It allows you to test your API, and to keep your test code separate from your submission. I used extensions like ActiveTestSuite to test concurrency, and RepeatedTest to test the varying states of a reservation. Of course it doesn't show, since I got a 44/80. :roll:

7) Documentation - These are free points, folks, so max them out. Manually inspect the Javadoc, or try the validation doclet available from Sun. As for the user documentation, I had the wife glance it over and provide her input.

8) Builds - I suppose you could use the command-line JAR tool, but I went with Ant. I've used it many times before, and it just works. The default target created runme.jar, and I had another target for the submission that created the Javadoc and rolled everything else up. Using a property for the submit file name allowed me to change it if the upload site demanded.

I wrote it one afternoon while watching football. The bottom line is this - you've invested too much time to have your submission be the cause of automatic failure.


I'm almost offended that I got a 17/30 on O-O Design. I used a number of pretty common patterns (DAO, transfer object, MVC, session facade, etc.), packaged things up well, and had a couple of interfaces and abstract types that were useful.

I just wish that you could get a little more feedback, so it could help you improve next time. Still - I feel like I learned a lot from the whole experience.


There are too many helpful people in this forum to call out individually - that's really a good problem.

Thank you again!
[ February 01, 2006: Message edited by: Steve Baranski ]
Ranch Hand
Posts: 89
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Congraduations. Thanks for the tips.
[ February 02, 2006: Message edited by: B Chen ]
    Bookmark Topic Watch Topic
  • New Topic