RSS Feed
Jan 7

Accelerating From a Stop

Posted on Monday, January 7, 2008 in Leopard, OS X, programming, rails, ruby, Software, software engineering

Ok, step one: Install Netbeans 6.0 Ruby version. No problem here, it works like any other package install. Now to configure it to my taste. The main change is to change the default Ruby engine from the included JRuby to the OS X installed 1.8.6 version of Ruby. I have nothing against JRuby, but at this stage I don’t want to debug JRuby related issues, so I want to stick with the de facto version. On Windows the location of your local Ruby installation is easy enough to find, c:rubybinruby.exe. On OS X I looked all over for it. It ran fine from the console, so it was installed and worked. But, where is the binary? I looked in the usual places, that I could think of, no joy. So, I turned to my local OS X/Ruby/NetBeans guru: Google. After much searching, I found a page with the path I needed. It seems that Ruby has been “framework-ized” into OS X. But, the binaries have been symlinked to: /usr/bin/ruby. Problem solved.

Step two: MySql. Downloaded. Installed from package. Done. Well, I need to install an OS X admin util. But, I can administrate it from the command-line in the meantime.

I opened the Depot Rails app from the Agile Rails book, ran the DB migrations and fired it up. Success.

Ok, I have a usable environment. Time to code.

Jan 7

Right turn ahead…

Posted on Monday, January 7, 2008 in programming, Software, software engineering

Ok, now back to software development topics. In particular, my current interest in Ruby, and it’s current killer app (framework): Rails. As for the post title, look here. It’s my hope that following the Rails won’t end up similiarly, but if you read stuff like this, you have to wonder. Although Zed seems to be generally pissed at life, he takes it out on the Ruby on Rails “community”.

I just got a new Apple MacBook Pro laptop a couple of weeks ago. I’ve been getting it all set up with my preferred apps. And, getting it set up to do some RoR development. OS X 10.5, Leopard comes with Ruby and Rails installed, which makes it easier to get started. I installed TextMate, the preferred Mac text editor. I also installed the Ruby version of Netbeans. I’ve been an Eclipse (and IBM Rational Application Developer, Eclipse with an IBM clown suit*) user for several years. Prior to that I used JBuilder and Forte, Netbeans predecessor. Eclipse has become a conglomeration of every plugin that can be imagined. It used to be the fast and slim alternative to Netbeans. Netbeans 6.0 is a cleaner, slimmer, and more focused IDE than Eclipse. I wish I could use it for Java development at work. I’ve played with the Ruby version of Netbeans 6.0 on Windows XP, with Instant Rails. Very nice, except for the Windows part.

So, I am going to try to document my journey down the (Ruby on) Rails.

* Credit for this description goes to my friend Kelly.

Oct 20

Us vs. Them


I am a software developer (or programmer/analyst, if you wish). Over my 20 year career i’ve flirted with management positions a number of times. I’ve been a project lead developer (as I am now), i’ve been a team lead with several developers working for me, i’ve even been an IT manager with a budget and employees (in an IT department of 5). But, mostly, i’ve been a developer, probably 16 of the 20 years. Writing software is the reason i’m in the industry.

I am always wary of efforts to seduce me to the dark side (management). I find that I don’t think like most of the managers i’ve ever had. I laugh at jokes that make fun of managers or the corporate bureaucracy. And I find that I have a strong bias toward the developer side of the argument, no matter the subject. No matter what the management edict, I question and push back before submitting willingly. I question the reasoning of management decisions, or the source of management facts and information. It’s just the way I’m built.

This leads me to the inspiration of this post: The Gartner Group (The Big “G”, or GG). I work for an organization with about 900 employees in the corporate HQ. The are about 130 folks in IT.

My coworker and friend (see his posts about the Pacific Northwest Software Symposium, where we ate some excellent Pad Thai, and talked about Microsoft, Open Source, and Robert Scoble). Have been discussing the role of Gartner Group in our organization. When we have discussed this with a mutual friend and member of upper IT management, there is clearly a wide divide between us (the developers) and them (IT management).

Our first reaction when there is a mention of Gartner Group is pretty predictable. We roll our eyes, and let out an exsaparated “Puh-leeeze!”. My actual contact with Gartner Group has been limited, a teleconference or two, and a few too many white papers, and far too many web stories with Gartner Group quotes to back up one claim or another.

In our organization, Gartner Group is the first stop before any decision making takes place. Management wields Gartner Group information like a bludgeon, justifying any inane decision with a white paper, or analyst quote. The developers are instantly on the attack when the Gartner Group club is pulled out.

It’s all about trust. Management trusts the large, well funded, analyst organization that provides wishy-washy and vague guidance that can be spun to fit any organization. Developers find such organizations without credibility, because they are populated by people who aren’t fighting in the trenches with them. They are in nice window offices, wearing suits, and fiddling with Blackberries, just like our managers. They are one of them. That’s why we trust Slashdot, Digg, Joel On Software, and that Java developer we met at a conference who has a blog. They are us.

Oct 10

Self Inflicted Pain, Part II

Posted on Tuesday, October 10, 2006 in Corporate IT Life, Development methodology, software engineering

In my previous missive I examined how we, the developers, had created our own implements of torture to apply to ourselves. I just received the final draft of the documentation standards from our internal team. It covers most of the expected things, why we need docs, why we need well written docs, where to store the docs, and most importantly, the list of required docs.

The required docs list is a matrix with the doc list on the left and across the top the types of development products (web service, portlet, jar file, etc). At the intersection of doc and product is a single letter code indicating whether the doc is required, optional, or occasionally required. As I expected there were no optional docs and only one that had occasional applicability.

As I read further the document went on to discuss the processes surrounding the production of the required development documents.

At the end, the last paragraph concedes that with time pressures on the development staff being what they are, we won’t actually have time to write all of the docs on the required list. So, it specifies a short “really” required list. That excludes the one document that is actually required to get an application deployed to QA or production.

It only took 5 months to write this 6 page document.

Sep 16

The Iron Triangle Still Rules


I’m in a session titled ‘Real World Agile’. It’s an introduction to the how’s and why’s of Agile development. One of the attendees wanted to know how Agile would help in his environment where they had a fixed required list of features and a hard deadline. Failure could torpedo the company. It was clear to me that he (like many) either hadn’t heard of, or wasn’t aware of the ‘Iron Triangle’ principle. This principle basically says that you can only control two of the these three items in a project: cost, scope, resources (people). If you have a fixed cost budget, and limited resources, the scope will have to change to meet the budget with your fixed resources. The resource element of the triangle can be people, hardware, software, etc. Scope can be a feature list, requirements, or an acceptable level of quality.

Software methodologies exist to manage the constraints of the Iron Triangle. Agile development is the latest in a long history of methodologies (and Agile is really an umbrella term that covers a number of methodologies) that hope to make it easier to manage to successfully complete projects.
Remember: You can’t have it all.

Sep 16

No Fluff, Just Stuff, Seattle Style

Posted on Saturday, September 16, 2006 in Boondoggle, Conferences, Corporate IT Life, software engineering, Travel

I’m sitting in the first session of day 2 of the Pacific Northwest Software Symposium. It’s part of the No Fluff, Just Stuff series of software development conferences. Yesterday I attended sessions on the Spring framework and Agile tools. Today will Agile development and Hibernate sessions. So far, the sessions have been very good. Lot’s of good info, with NO marketing crap. The speakers are generally authors and practiioners, not company representatives.

Arriving in Seattle proved the stereotype: Cool, gray,  and drizzly. Natives have tried to convince Kelly and I that the weather has been really nice lately, sunny and warm. We suspect they work for the chamber of commerce. The hotel is very nice. It’s in the middle of an outside shopping mall area, just outside old downtown Redmond. We found a Thai resturant and had some very good Pad Thai to help wake me up before the first sessions. People have been a little surprised to find out that we flew from Kansas City to Seattle for this event. There have been other events that are part of the NFJS series as close as Omaha and Des Moines. I won’t try to explain why we decided we would rather go to Seattle.

Of course, my cell phone rang half way through lunch yesterday with a call from work about a project that is in testing. So, I had to fire up my laptop during one session to change some code and email the resulting EAR file back to the office for deployment.

I’m a little torn at the conference. Next door to the software symposium is the BetterPhoto seminar. I have already spent some time checking out the books for sale out front. I think I would rather spend a weekend at a photography seminar, but I am enjoying the software seminar so far.

Sitting in these sessions makes you very self conscious about your appearance. Just how well do I blend in with this collection of the geekiest people you will generally ever see outside of a Star Trek convention? Do I really look like these people? Unfortunately, the answer is probably yes. And once someone overhears your conversations during this event, your geekiness is confirmed. I guess that’s the curse of being a software development.

Sep 6

Simplicity is the ultimate sophistication. –Leonardo da Vinci

Posted on Wednesday, September 6, 2006 in Corporate IT Life, software engineering

I’ve been thinking about application architecture and design since I arrived at my present employer. Along with development team dynamics (a topic for another time), architecture and design have reared thier ugly heads a number of times. Being new to this team and corporate environment I have looked at apps others have built, and have spent considerable time, debugging, modifying, and otherwise maintaining several examples. The experience level here varies from newbies with a year or less of Java experience to those with a considerable number of years of experience. There is a significant level of confidence on the part of the senior staff of the correctness of the design and architecture of several of the applications I have worked seen. At first, I questioned my own knowledge and experience (I had not been a 100% fulltime Java developer prior to this) when confronted by these apps. I blamed my confusion and lack of understanding on my inexperience. However, as I talked to others and had more contact with some of these applications and the authors and architects, I came to realize that the problem wasn’t entirely my own.

Increasingly, people seem to misinterpret complexity as sophistication, which is baffling—the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user –Niklaus Wirth

I was told of the power of this application server framework, and that open source framework, and the in-house sub-framework built upon it. The ‘benefits’ hit all of the buzzwords and phrases: loose coupling, service oriented, flexibility, testability, etc.

Unfortunately, what I saw was complexity that addressed no real problem domain, or an over-engineered solution to a simple problem.
In an article by David Hayden he observed:

“In the past year, however, I have started to see various classes and interfaces being added to my code to support looser coupling. I remember the effort of creating the classes, but have not realized any benefit from their existence because their creation wasn’t based on actual requirements, but my desire to use the ever evolving best practices and patterns to make my software ‘more maintainable and flexible.’ “

In another article he goes on to define ‘low coupling’ and the downside of it:

“If a part of your application is not really unstable, don’t treat it as such. How many times have you heard a person boast about having a data access layer that is loosely coupled to the rest of the application, but which there is an unlikely chance that a different database / data access layer will be used by the application? :) Low coupling for the sake of lowering coupling can (but not necessarily will) cause unnecessary complexity in your application and perhaps cause more harm than good. Pick your battles wisely.

The trend here is to apply low or loose coupling everywhere, because it’s a ‘best practice’, not because it solves a problem we actually need to solve. This trend has also led to the proliferation of ‘factory‘ classes. In the name of loose coupling, build a factory class to return an instance of an implementation of an interface. These have almost universally been one-offs with no return on the development investment. In most cases, instantiating a concete class directly would be faster, simpler, easier to understand and maintain, and most likely never change enough to require the loosely coupled version.
This article by Zed A. Shaw rings very true for me:

“This is the actions of an expert. They love complexity because the art is still new to them, something which should be explored. A list is not just a container, it’s a linked list, or red-black tree, or doubly linked list. To me, it’s just a container. I realize now that they’re missing my need for simple beautiful things. They don’t love quiet elegance, and would rather shout their superiority from the top of the mountain. Meanwhile, I’m just a lazy old man who wants to get his job done and write something without any wasted energy. I want to climb the mountain with the least amount of effort and their shouting is causing an avalanche of bad code. “

And here are some quotes that apply as well:

A charlatan makes obscure what is clear; a thinker makes clear what is obscure. –Hugh Kingsmill

Unformed people delight in the gaudy and in novelty. Cooked people delight in the ordinary. –Erik Naggum

Simplicity is prerequisite for reliability –Edsger W.Dijkstra

What have I learned? I’ve learned that my desire for simplicity in design and implementation is something to nurture, not second guess.

Easy AdSense by Unreal