Showing posts with label Personal. Show all posts
Showing posts with label Personal. Show all posts

Thursday, October 25, 2007

Leopard

I think it's fair to say that I could be characterized as a Mac "fanboy" from time to time.  I've been known to spout pro-Mac statements occasionally.  I take some unfounded pride in the fact that Apple's market cap is now bigger than IBM or Intel. And I love the fact that Apple just had yet another record quarter....

Perhaps it's just the validation of what I've felt in all the years that I've used a Mac, it's just plain better than Windows!  So now I sit here waiting for my pre-order of Mac OS X - Leopard to get to my house.  It's supposed to arrive tomorrow but the status already changed to "shipped".  To fill some of my waiting time I watched Apple's guided tour. I read some of the reviews (evolutionary not revolutionary) but I still can't help but be excited.  It's like a little bit of Christmas in October.

I'm sure I'll be underwhelmed a bit once the glow of a new OS has worn off but for awhile I'll revel in my fanboyism.  So if you too are a bit excited about the next Mac OS release, roll over to AppleInsider and feel free to take part in the unbridled Mac love fest and read some of the "Road to Mac OS X Leopard" series. Some of them are quite well written and will give you a good perspective of where Apple and NeXT have been and how the features in Leopard came to be.  Ignore the fact that some of the statements are a little too biased toward Apple and just enjoy the moment...

Thursday, September 27, 2007

Marching on...

I used to develop applications with PowerBuilder (PB) for about 8 years.  I started with PB 1.0.  In the beginning it was new and exciting.  Windows was new.  Client/Server was new and even object oriented development in a mainstream tool was relatively new (at least in the corporate software development scene).  But as technology progressed I began to see exciting things elsewhere.  At the time Delphi was the cool new product.  The speed, the beauty, the elegance... ahhh I was smitten.  But the other PB developers around me didn't see it.  I fought for Delphi and even did one or two project with it.  But unfortunately Delphi wouldn't become my mainstream development tool.  PB was entrenched and the developers around it protected it with a passion.  It was disappointing. 

Then Java came along.  To my eye Java shared a lot in common with Delphi.  I liked it too.  But still the PB developers around me couldn't seem to appreciate this new tool. In fact, a lot of them were actually pretty hostile to anything that might threaten the sacred cow that was PB.  Fortunately for me the hype of the Internet and the .COM boom turned Java into something people couldn't ignore.  And I decided to ride the wave and finally leave PowerBuilder behind.

Now another 8 years has gone by and I find myself in the middle of a community of Java developers who are extraordinarily similar to that crowd of PowerBuilder developers.  They only see Java.  They've built a career around it, they're entrenched and they protect it with a passion.  For me, I see the appeal of other languages and tools.  In particular Ruby is beautiful and Rails elegantly solves many of my Java web development headaches.  But many of the people around me don't see it and quite frankly I doubt that they've even looked.  And that's the disappointing thing.  They're just like the PB guys with the blinders on.  They're hostile to anything that isn't Java.

In my current group there seems to be a new love forming for GWT.  Personally, the Google Web Toolkit and its unmistakable Swing/AWT flavor of Web development just seems wrong.  It's definitely web development for Java developers and I can see why they like it, but to me it's an artificial abstraction that doesn't sit well with me. Ruby and Rails isn't perfect either, but even a couple years after I started looking at it I still think it's better than GWT.  Rails embraces the browser technology of HTML, CSS, and Javascript and makes it easy to work with.  GWT on the other hand, puts me behind a Java facade where I can pretend to be developing Swing and it will generate the HTML and Javascript for me.  Ick.  No thanks Google.

Anyway, my point is that I think I'm getting to another point in my career where I need to migrate to a new place with like-minded people.  I'm tired of trying to get others to see what I think is self-evident if only they'd look...

Saturday, October 14, 2006

Google Reader

News Readers have been around for several years and like many other people I have my own collection of feeds to which I subscribe. The only problem was synchronization from computer to computer. It was fairly common for me to read through a list of published articles at work and then come home to do it all over again. It wasn't as time consuming the second time because I could just skip over the ones I'd already read but it was still annoying.

So finally, Google's listened to its users and upgraded its previously weak Google Reader and added the features I needed to use it full time. It's amazing to me what they can accomplish with a browser application. It's making me rethink what can be done with a web app.

Sunday, September 24, 2006

Rethinking the car



Here are two extraordinary cars that I discovered through the magic of the internet. One is the Tesla Roadster. The Tesla is fascinating because it redefines what an electric car can be. How does 0 to 60mph in about 4 seconds and 135mpg equivalent all wrapped up in a gorgeous sports car package sound? Nikola Tesla would be proud.

Then you have the Ariel Atom. A stripped down minimal sports car with a phenomenal power to weight ratio but no windshield. You have to see this one to believe it. It's amazing.

I'll take one of each. ;-)

Sunday, May 28, 2006

Billion Dollar Boondoggle

The "Canadian Firearms Program" more widely known as the "Canadian Gun Registry" was a program instituted by the former Liberal government of Canada under Prime Minister Jean Chretian to license and register certain types of firearms across Canada. Bill C-68 was introduced in February 1995 and has been controversial ever since for a number of reasons but undoubtedly the issue that has caught everyone's attention has been the cost of the program, now over $1,000,000,000, and growing.

So leaving the politics behind, I was interested in the technical details behind this program from a software developer's perspective. What exactly did these guys do wrong that would result in such astronomical cost overruns? What technologies did they use and what could be learned from their mistakes?

Well it was surprisingly difficult to find information but finally I came upon a two-year-old article in eWeek titled "Canada Firearms: Armed Robbery". The system was originally comprised of an Oracle 7 database and a PowerBuilder application built by EDS. Given what I know about those technologies, I doubt that the problem was the technology. Instead, it appears that the biggest problem was incorrect initial assumptions and ballooning, ever-changing requirements.

But after eight years of mismanagement what was the solution? That's right! They decided to rebuild the application with a different set of technology and consulting resources (CGI)! Maybe the implementation really was poor, but I suspect some incompetent management types were deftly pointing fingers elsewhere and some unwitting bureaucrat believed them. Ahhh that old story...

Thursday, March 30, 2006

Fast and Furious

I'm sure I have goofy speech patterns and favourite catch phrases of my own but I also have a talent for picking these colloquialisms out of someone else's speech as well. I have discovered over the years that the best time to capture these beauties within an IT environment is during the inevitable "status meeting". It's almost like a freestyle rap battle where two or more contenders try to outdo each other for status meeting supremacy. Fortunately for me, the agile process inspired daily standup meetings on my new project have become a veritable gold mine for these things. We have a few people on the project who are black-belt kung-fu masters of the colloquialism spinning these out with speed and grace... Here's a sample of the ones I've captured so far:

up to speedhigh level design
make it realsnapshot
visionary thinganecdotal evidence
identify the needlay the groundwork
cycles availabledisparate user experience
bottom feederlook and feel
production capacitynebulous
contextnumerous permutations
driversshock effect
more or lessimpact
grease the skidsfresh set of eyes
steer going forwardengage you
take forwardexternalize
put the spin on itsocializing it
draft rollout planshow stopper
iterative processmitigate risk
right hand manextra pair of hands
duck is cookedmessaging protocol
key artifactsvalidation effect
verbagesooner rather than later
put lipstick on ittechnical components
bring to the tableconsider the options
test bedfull meal deal
iterative cyclelock it down in stone
instant gratification

Tuesday, March 07, 2006

Suffering

One of the Pragmatic Programmer tips is:
"select" Isn't Broken.
Which means that's it is rare to find a bug in the OS or the compiler, or even a third-party product or library. The bug is most likely in the application, i.e., my code.

The problem with the project that I'm working on is that there is so many layers of code and abstraction that I don't even work with the framework anymore but some class ten times removed.

For example I have a JSP calling a JSF configured backing bean, calling a Spring configured service, calling another Spring configured EJB in a different process, calling another Spring configured service calling another Spring configured DAO which is (eventually) a subclass of Spring's HibernateDaoSupport class which attempts to hide Hibernate's API altogether.

So while I try to take the tip seriously and not blame the framework, there is so much stuff happening before it even gets to Hibernate (and let's not forget all that XML goo that glues everything together) that I can't help but lay some blame at the feet of these frameworks that encourage so much obfuscation.

To get real geeky I'll quote C3PO from the original Star Wars movie:
We seem to be made to suffer. It's our lot in life.

Thursday, February 16, 2006

Manifesto

Everyone has a manifesto nowadays. I just read an interesting entry at the "Creating Passionate Users" blog that pointed to the the 37signals manifesto. Both recommended reading.

Thursday, January 12, 2006

Checkboxes

Ever since I started developing Windows applications I've consistently seen other developers use two radio buttons for a boolean option with ridiculous labels like "YES"/"NO" or "TRUE"/"FALSE". And just today I'm redeveloping a page with 3 of these things. Why on earth don't people use a checkbox? It was made for this! On or Off! For crying out loud! Arghhh!

Thursday, January 05, 2006

Déjà vu

On this date one year ago the Canadian junior hockey team beat the Russians in a gold medal match. This time they were one of the underdogs in the tournament but still came out on top. Congratulations again!

Monday, January 02, 2006

2005 Redux

In 2005 I think I met my Pragmatic-Programmer-inspired goal to learn a variety of programming languages e.g.,
One thread that seemed to permeate many of these technologies was object-relational-mapping. There's EJB3 and Hibernate for Java, ActiveRecord for Ruby, Core Data for Cocoa, and even LINQ for C#. While the implementations all vary, the basic principles apply to all. It seems like all that time I spent with TopLink in 2001 was well spent because ORM has become the norm.

It also looks like dynamic languages are becoming more popular. I'm glad I spent some time looking at Objective-C before getting on the Ruby bandwagon. A mature framework like Cocoa helped me appreciate the power of a dynamic language. Rails will undoubtedly continue to occupy me for at least a little while in 2006.

But not everything I did in 2005 was related to programming. I also spent some time with:
  • A family trip to Maui
  • Video Editing
  • Looking into my family history
  • Playing foosball
  • Digital Photography
Travelling has always been something I've enjoyed doing since I met my wife. But when we had kids our amount of travel significantly declined. But now that they're getting old enough, it's nice to be getting back into it. In 2004 we made it to Disneyland, last year it was Maui. Who knows what 2006 will bring...

At the end of 2005 I finally burned a custom DVD. I made a slideshow out of the pictures I took at Christmas, added some videos I edited a few years ago and put them all together with some music and some fancy menus. With the exception of GarageBand and some help from Final Cut Express, I used all the other pieces of iLife for my grand DVD opus.

There's only one thing I wish I'd done more of in 2005, and that's art. I suppose the video/editing/photography thing could be considered somewhat artistic but I'm talking traditional oil-on-canvas kind of art. My son recently complimented me on a painting I'd made a few years ago. Maybe that'll inspire me to finally break out the paints... Here's looking forward to the new year. :-)

Tuesday, December 20, 2005

The Daily WTF

A co-worker just sent me this URL. I had a good chuckle looking at some of the code posted on this website so I figured I'd post it here for posterity. There's an RSS feed too so you can keep up to date with the latest WTFs.

Tuesday, December 13, 2005

Revolution

I was just listening to the Beatles' Revolution... Very appropriate lyrics for software development don't you think?
You say you want a revolution
Well, you know
We all want to change the world
You tell me that it's evolution
Well, you know
We all want to change the world

But when you talk about destruction
Don't you know that you can count me out
Don't you know it's gonna be all right (3x)

You say you got a real solution
Well, you know
We'd all love to see the plan
You ask me for a contribution
Well, you know
We're doing what we can

[...]

Wednesday, December 07, 2005

Testing

I came in to work this morning only to listen to a QA lead and a senior developer discuss the almighty importance of tests (specifically unit tests). "They are the specifications, blah, blah, blah". But you know what I didn't hear, the importance of the actual software itself! Agile-development, test-first, test-driven, whatever-process-comes-next are all well and good but don't get so damn attached to it that you don't focus on what's really important, the software. Don't get me wrong, tests are important but they come a distant second to the system under development.

Thursday, December 01, 2005

Tornado Foosball


We got a new foosball table at work about a week ago, a Tornado Whirlwind. Now I can fully indulge my addiction to this fun but difficult-to-explain-to-your-wife game. The Tornado tables are very solidly built and are designed for a controlled game. So while we still have some slaptastic players whose style of play is better suited to the "speed-ball" rules, most are coming around to trying to intentionally score a goal rather than just smacking it as hard as you can and hoping something good happens.

Digital Cameras

iPhoto on the Mac was first released in January, 2002 and nearly four years later I've finally joined the party by buying the Canon PowerShot SD450 digital camera. I learned that size is a pretty big consideration when buying digital devices and generally the smaller the better. The less of a hindrance it is to take with you, the more likely you are to use it. That's certainly been my experience with my iPod shuffle. I sometimes wish I had the features and storage of the larger model but the size is perfect. The feature I like best about my new camera is its ability to rotate the image according to orientation of the camera when I'm playing back existing shots. Very cool!

Monday, November 21, 2005

Genealogy

What started out as an innocent school project for my daughter has turned into a full time project for me! What was a simple family tree has now turned into a genealogical expedition of epic proportions... well okay maybe not... But I have discovered some interesting facts:
  • my grandmother on my father's side came from Scotland
  • my great Grandfather on my father's side was a candy maker in Germany
  • my great grandparents on my mother's side came from England
My cousin (once removed) in Los Angeles (who I met over the internet) was a great help for getting me started with information about my mother's side of the family. My aunt in Saskatchewan has been great for my Dad's side of the family. I've never felt terribly close to either side of my family but a few phone calls and e-mails is changing my perception. What a friendly, helpful bunch of people!

Finally my software of choice has been a little Java application called GenealogyJ or GenJ for short. Having never touched a commercial tool that does this stuff I'm pretty impressed with GenJ. There's a nice little graphical viewer and lots of reports. The best part is that it stores all it's data in a UTF-8 encoded text file (in the standard Gedcom format) that's easily read in any text editor. That's pretty important to me so that my information will always be accessible even if GenJ should go the way of the Dodo.

For those of you who've been into this stuff for years and have some pointers, send me an e-mail or post a comment...

Saturday, October 01, 2005

6 days later

I've been in my new job for six days now and thought I'd post my thoughts about what I've done so far. The short answer is "not much". It's actually pretty amazing to me how little is done to prepare for a new person. And I'm not even talking about this specific company, it's a general problem. Even the most glaringly obvious things like getting ids and passwords for databases, version control systems and even permissions on file servers are almost never set up when I go to a new job. Sometimes the environment is responsive to new requests, other times... not so much.

Secondly, when being inserted into a team of people already madly coding away, nobody has the time to give you the lay of the land. So I spent at least a couple days looking a existing code to figure out what I need to do to make my code fit in with everything else. It all seems highly inefficient and a waste of my time and their money. Maybe when you consider just one developer, it may not seem like much but multiply a week of time for every new developer who walks through the door then it's easy to see a pretty big opportunity to save. Do the math with let's say 20 developers and you soon start to think "I could probably build a lot of stuff in 20 weeks".

Anyway, I did manage to build a single web page this past week. But what really impressed me was the number of files I needed to create/edit to enable this one page. I created:
  1. a domain object with Hibernate XDoclet annotations
  2. a DAO interface
  3. a Hibernate DAO implementation
  4. a DAO unit test
  5. a Service/Facade interface
  6. a Service implementation
  7. a Service unit test
  8. a JSF backing bean and a JSP page.
I edited:
  1. an application resources properties file (despite the fact localization is not a requirement)
  2. two Spring XML files
  3. a JSF config XML file and
  4. added some XML to the tiles definition file.
Phew! That's fourteen resources and I chose to expose my domain objects to my presentation layer instead of using the DTO pattern which would have increased my resource count by one more! The unfortunate side effect of all this stuff is that I find myself constantly navigating around all these files and fighting the typo-prone XML. I'm starting to question if all this layering and scoffolding is really buying me anything.

In my last job, where I made the decisions about architecture and technologies, I had:
  1. XDoclet annotated domain objects (which included named queries)
  2. NO DAOs (I felt that the Hibernate abstraction and named queries were a sufficient data access layer)
  3. Service Objects (typically singletons with explicitly coded session and transaction management)
  4. XDoclet annotated Struts Action/Form objects + JSPs
  5. the typical smattering of JUnit test classes.
In retrospect it seems so extraordinarily straightforward: One class for my domain layer, Hibernate annotations in the same file for my data access layer, one class for my service layer and typically two classes for my presentation layer and absolutely no XML. When I needed to internationalize my GUI I also had at least one or two resource bundles (*.properties files). But compare 7-8 files against 14 or 15 and you can see that complexity has grown significantly.

Having worked with a variety of people over the years I know there are those who believe that elegance is expressed with simplicity. Look at E=mc² for example. And then there are those who love to wallow in complexity. I love simple, efficient, elegant designs. I'm not sure I've found that here... Not yet anyway. Maybe I'll come to love it over time (my fingers are crossed).

Finally, let me comment on a couple of my statements in earlier posts:
  1. There is a simpler way to integrate Spring and JSF so that you can inject Spring configured beans into JSF managed beans. Using Spring's org.springframework.web.jsf.DelegatingVariableResolver configured within your faces config makes it all transparent. Yay! It may not be as good as using only one dependency injection framework but it's a good runner up.
  2. Secondly, you can integrate tiles into JSF by configuring org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl in your faces config file.
  3. Finally, I read Spring's documentation a little more closely and it appears you can use HibernateTemplate's execute method to call whatever Hibernate code you want. So I can now feel free to use that lovely Hibernate API all I want! ;-)

Tuesday, September 06, 2005

Lube, Rods, Scoring, oh my!


I was told by a couple of people who read my blog that it's too "boring" so I figured I'd spice it up a bit and talk about lubing your rod. All your partners will oooOOOOooo and aaaaAAAAAaaaa...

Get your mind out of the gutter...

I'm talking about foosball again! LOL. In addition to the new men on our foos table I had enough money left over from our "foos-aid" office collection to buy a can of 3-in-1 silicone spray lubricant from Canadian Tire for the foosball table rods. What a difference maintaining your uh "equipment" can do for you.