• Subversion 1.3.0 Release Candidate 4 released. According to the announcement, this is the first public release candidate. It looks like there are tons of changes for this one, including speed improvements, more support for xml rendering in commands (the –xml switch) and a whole lot more. Comments Off
  • Mark Baker has a post called The Service Oriented Web in which he links to a presentation on REST that he wrote and was presented in Japan. I like how he explains the concepts of REST and the simplicity of the model relative to SOAP. Comments Off
  • Tom the Architect led me over to the Gizmo Project. Free Skype-like VoIP services, including free voicemail and phone mail. It also has the ability to record calls for you podcasters out there! (1)

Too Much Object Orientation?

Ed Gibbs has an article entitled Spaghetti OOs Code in which he talks about a conversation he had with his brother about “too many objects” vs. more “meaty” objects and it reminded me of a position I was in once, and hopefully a lesson that makes sense.

I’ve always ahered to the idea to have enough objects to get things done in an understandable way, without having 4000 objects to keep track of in order to get something done. I’ve seen many applications written where there are several layers of indirection that you have to traverse in order to figure out whats going on, as you have objects that perform certain actions on other objects such as rendering its contents as HTML or XML. These would all be great if they worked on a base class of the actual object being rendered, however they work on specific derivitives, requiring a reimplementation of a rendering object for each specialization of the original object.

Here’s an example. I worked at a place once that had a general rule (big red flag here) that each piece of functionality had to be made up of four separate components:

DA (Data Access)
This object was responsible for retrieving data from a database or other data source.

BO (Business Object)
This object was normally a result of retrieving data through the DA object and represented a business object.

BS (Business Service)
This object was responsible for performing services related to the BO.

BA (Business Access Object?)
I know we had something called a BA, but I can’t remember what it was used for (second red flag). However, it was a required component.

These components had no base classes or framework around them (third red flag), they were just required components that had to be used. Now, for some, this doesn’t seem like a big deal, but try writing some simple code that renders a pulldown in HTML off of a database query and then multiply that work by 10 and you’ll see where this becomes problematic. No framework in place, but all objects were required.

When I first came on, I had to write code that rendered a pulldown box in HTML and I wrote something like the following (Editors note: This was written to illustrate a point and most likely will not execute - its been a while since I’ve written Java):


/** 
 * Yes, this should or could have been an interface.   I was a beginning java programmer at the time, coming from C++ - so
 * this made much more sense to me at the time!
 */
public abstract class PulldownData {
   /**
    * Generate a hash table from a query in which the keys are the select values and the values are the descriptions to appear
    * in the pulldown
    */
   public abstract Hashtable getData();
}

public class PulldownRenderer {
   public String renderData(String name, PulldownData dataObject) {
      StringBuffer strHTML = new StringBuffer();
      String keyName = null;
      String itemDescription = null;

      if (dataObject != null)  {    /* still have arguments whether this is necessary in Java */
         strHTML.append("<select name="" + name + "">n");

         for (Enumeration e = dataObject.keys() ; e.hasMoreElements() ; ) {
            keyName = e.nextElement();   
            
            if (keyName != null) {
               itemDescription = dataObject.get(keyName);
               
               strHTML.append("<option value=""+ keyName + "">" + itemDescription + "</option>n");
            }
         }

         strHTML.append("</select>");
      }
   }
   return(strHTML.toString());
}

Once this framework was completed, all you had to do to create a new combo box was to derive a new class from the PulldownData object and pass this object to an instance of the PulldownRenderer class and voila! You had a pulldown!

Despite the decrease in actual work involved, I actually spent quite a bit of time arguing why this was a better approach than having four tightly coupled objects that could not be reused to render my combo box with an “architect” that was on staff at the time. I had violated the “general rule” and written something simple and useable.

All of this was written just to illustrate a point. The simpler the better. If you are decomposing things into 500 objects because “thats the way we do it” or “everything else here is written that way”, you are doing it for the wrong reasons. There has to be a reason to decompose things to a level that makes sense for the person coming after you, or the people you are working with. Object orientation has the ability to make your job a hell of a lot easier, but its a two edged sword. It can also make your life extremely difficult if you ignore the KISS principle and abstract for the sake of abstraction.

Related posts

Tagged with:

The Self Checkout Line at The Grocery Store

We went to Jewel tonight to pick up a few things before coming home from Christmas shopping. We had only a couple of things and wanted to go through the self checkout line. The lines were full and the Jewel person that was assigned to watch the lines was extremely busy helping a woman check out her full cart of groceries.

This is the second time that I’ve seen this. If you have a full cart, go into a regular line. The self checkout line is for people who want to get in and out of the store quickly. If you are going grocery shopping for a week, stay out of the self checkout line so that those of us in a hurry can get into the store and get out.

Related posts

Tagged with:

  • I found a reference to Xooglers, self explained as “A gathering spot for ex-Googlers to reminisce and comment on the latest developments in search”. Some interesting reading here. Comments Off

First Snow of Winter Hits Woodstock

First Snow of Winter Hits Woodstock

Photo by rbieber

The first semi-real snowfall of winter hits Woodstock, IL.

I really hate winter.

Related posts

Tagged with: , , ,

  • Harvard Extension School course made available via iPod - another feather in the podcasting communities cap. From the article, “Extension School students represent a variety of ages and occupations and Podcasting has become a convenient asset that allows them to learn with minimal obstruction to their other obligations”. The article mentions that Princeton also offers lectures via the medium. (1)
  • Chicago’s NBC Affiliate has now joined the podcast front. Comments Off

Podcasts Moved To podcast.bieberlabs.com

I’ve been thinking for a while about moving the podcasts out of the main site in order to continue doing them but see what is going on from a traffic perspective. One of the things I wanted to do was change the feeds to use FeedBurner for the podcasts alone as I did with the main site.

On November 14, Tony Steidler-Dennison of The Roadhouse put up a show in which he was talking about how his feeds were split and asked all of his subscribers to resubscribe to the new feed so that he could get numbers to use in his talks to get permission from labels to broadcast music. As I listened to this, I was a little concerned at inconviencing the small amount of people who might have actually took the time to subscribe and listen to the drivel I’ve been putting out as I learn how to do this stuff. I didn’t want to have to make them resubscribe to a new feed, so I rethought my original plan to move the feeds to a different site.

Then I said to myself, “Self, there must be a way to redirect the feeds to a new feedburner feed from iTunes, and if there is, there must be a way to redirect them to a new site as well”. So I started playing around.

Luckily, before I submitted to iTunes, I thought ahead enough to use Apache URL rewriting to rewrite the URL http://www.bieberlabs.com/wordpress/podcasts to my Wordpress RSS feed in order to provide a level of indirection to the podcast RSS feed. This is the URL that I then used to submit the podcast to iTunes. Since I had this level of indirection, once I moved all of the content and set up a FeedBurner feed, all I had to do was add this little section to my .htaccess file to redirect to the new feed:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^(podcasts)/?$ http://feeds.feedburner.com/bieberlabspodcast? [R]
</IfModule>

This little block of instructions tells the Apache server to redirect any requests to http://www.bieberlabs.com/wordpress/podcasts over to the new FeedBurner feed, making the transition to the new site completely invisible (at least it is to me so far).

So, all of the podcasts are now finally moved to http://podcast.bieberlabs.com. This site will be used to only support my podcasts, which will be refocused on instrumental guitar music like the stuff that I played on the 7th show. I have always had a real passion for this type of music and I have to say, Rory’s music completely inspired me to refocus.

So, in addition to the new site, I’m putting a call out to instrumental rock guitarists. If you create this type of music, please send it to me (bieber.r_at_gmail.com) so that I can start creating shows highlighting this beautiful type of music. The great thing about podcasting is to be able to create shows around niches and aside from Satriani, you rarely hear this type of music on the radio. I’d like to be the place in which people come to find this kind of music and to be able to give the artists a place to have their music played. The frequency of the show, at least initially, will be dependant on the amount of music in this genre that I can find, but hopefully as people see this and submit their work, it will be more frequent.

I hope the new shows are to someones liking. I also hope this explanation of how I moved the content without interupting iTunes service is helpful to someone starting out. Until Apple gives us a way to modify a feed URL in the iTunes interface, this is most likely the way that moving content like this needs to be handled and I feel really good in figuring out how to get around this gap in the interface.

To those who are subscribed or listen to these shows periodically, thanks for being patient as I stumble through the learning process. This has been a lot of fun for me so far and I hope to get a lot better and have a lot more fun in the future.

Related posts

Tagged with: , ,

Sure Sign of Winter

Sure Sign of Winter

Photo by rbieber

When you leave your coffee cup in the car , pull it out the next morning to empty (and wash) it — and it looks like this — you know winter is here.

Related posts

Tagged with: ,

  • Forbes.com has an interesting article describing the environment over at Google. From the article: “Hundreds of projects go on at the same time. Most teams throw out new software in six weeks or less and look at how users respond hours later. With 82 million visitors and 2.3 billion searches in a month, Google can try a new user interface or some other wrinkle on just 0.1% of its users and get massive feedback, letting it decide a project’s fate in weeks”. Now thats agile! (1)

CastBlaster 0.51 released and Equipment Rehash for Keith

Yesterday the 0.51 version of CastBlaster was released. I really like this software a lot. It makes podcasting so much easier. The user interface, once you get use to it, is very natural and simple to use. It takes care of the whole process, from creation to description, to publication via FTP of your MP3 to your servers. The sound quality on the resulting MP3’s are excellent. If you’re looking to start a podcast, you should definitely pull down the trial of this software and give it a try. The trial is free and allows you to record for 10 minutes. To purchase the product it costs $50, of which its worth every penny. Registration for the beta carries over to 1.0, obviously.

Keith was asking me what I was using for my setup now, so I thought I would recap it for him. Consider this a Pay It Forward for the help I received from the Roadhouse Podcast.

Related posts

Tagged with:

Dilbert on Agile

Tagged with:

Google Analytics

Google Analytics

Photo by rbieber

A look at the first cut of data received by Google Analytics on the site. Cool set of tools, with lots of information.

This ones a keeper in my toolbox.

Since I fall WAY under the 5M page hits, I may use this from now in instead of BAStats. It will cut down on my database size and there is much more information in this package.

Related posts

Tagged with: