The Sixty One

I listen to music all day long while I’m working. It’s a habit (good or bad) that I developed in college while studying for hours on end and have kept up since. Heck, I became a DJ at the college radio station (WOUI – pumping out an amazing 10,000 milliWatts!) to listen to a lot of different music and did a study marathon one finals week because it was the ‘quietest’ place on campus. I love music and it’s one of the reasons why I have such a large music collection and why I fell in love with iTunes and my first iPod.
So even though I have 31 days of continuous music in my iTunes library I’m always looking for something new to listen to.  Rock, alternative, pop, blues, jazz, R & B, classical and even the occasional country song can often be heard in my office.  I think I found an excellent new source of music that thinks the way I do and is an excellent example of a good web app.

I’m talking about TheSixtyOne at www.thesixtyone.com.  It’s sort of Digg for music.  Using a simple system, people can ‘bump’ music they like that’s been uploaded by musicians to the site.  The drawback is that it costs you points to bump a song so it’s not in your best interests to bump everything.  You, in turn, earn points for songs that other people bump and for listening to more songs.

All songs are streamed to your computer in their entirety – not like iTunes where you get a 30 second clip – and there is no limit to the number of times you can listen to a song.  You can add songs to your own playlist and follow other people on the site and view the music that they’ve been listening to and bumping.  All in all it’s a very fun site.

The site was created as a ‘music discovery game’ by two USC students who have long since quit their jobs.  They’ve done an excellent job of it, in my opinion.  You can navigate the site without having your music stream interrupted.  There are numerous places like comments and bump lists that smoothly expand and collapse without stopping the music.  It’s very easy to navigate the site and discover music.  It’s very easy to browse by music category, new music, best music (music bumped the most) and follow and subscribe to other people’s activity.

An example of why you might want to subscribe to someone else’s activity is if you find yourself always bumping music that was already bumped by someone else you might want to follow them on a regular basis.  It’s sort of like the Amazon book rating service of ‘those who bought this book also bought this…”  It’s very handy and convenient and naturally you get more points if people subscribe to your activity.

I should point out that some tracks are available for download and some are available for purchase through the Amazon MP3 store.  The iTunes store will sometimes have the artists but I’ve found that it’s somewhat spotty.  Regardless, I’ve found that The Sixty One is fun if you like listening to ‘undiscovered’ music and artists are uploading new music every day.

Some of the music is incredibly bad and I wonder if the ‘artists’ upload music on a dare or a whim.  Others, though, are impressive in the quality and depth of their sound and it makes you wonder how many wonderful musicians never ‘made it’ because they couldn’t get their music to the masses.  I was already not listening to the radio because of commercials and repetition.  I don’t every see myself listening to commercial radio again.

Oh, and if you’re so inclined, I’m at thesixtyone.com/griffin.  Griffin?  That’s a story for a different day.  🙂

I know there are some other sites out there that do similar things.  What are they?  Other thoughts?

The Quest for a Good Bug Tracker

Let’s start with the documentation aspect.  We generated 30 plus pages of assumptions, clarifications and questions from an 8 page document we received from the client.  The document we received is the crux of the project so it doesn’t surprise me that it generated that much.  In fact, once the client answers the questions it’ll most likely generate yet another set of questions.

It’s hard wrapping our minds around the agile process.  All of our documents are ‘living’ which means that from sprint to sprint they might (and most likely will) change.  Documenting the documentation changes is becoming important.  From my engineering days this is completely backwards.  Requirements documents were set in stone and were the bible and it took an act of God to change them.  So in the end, all of us are adapting.

Rally
Our agile tool, Rally, has some built-in defect tracking software.  We are now generating defects (i.e. bugs) in our prototypes and have to start tracking them.  Rally’s own set of defect tracking is severely limited in a number of ways.  It just doesn’t seem to follow the life cycle of a bug properly:  report-assign/feedback-fix-evalulate fix-close.  Their default states just don’t follow that and while I’m sure we could have added our own status’ I think our biggest limitation was the interface.

The interface just isn’t very rich and the Rally interface is just setup wrong for our needs.  They have the ability to add custom fields which is nice but their inline edit doesn’t always work the way you would like it to.  So you end up using the editor screen which is clunky:  it doesn’t expand to fit the available screen space and that means you end up scrolling to get to your required fields.  Slow and painful.

So I went looking for alternatives.

Bugzilla
Our Subversion host automatically gives us Bugzilla and Rally has an integration with Bugzilla.  This was my first stop.  I’m not sure why Bugzilla is considered one of the best bug trackers around.  I (and everyone else on the team) found it very hard to use.  Maybe it’s because all of us are Mac users and we just found it confusing.  I was tasked with setting it up and found setup to be very cumbersome.  The people entering bugs didn’t like it either and then the integration piece didn’t work so well in that there’s really two components of any bug (the fix by the developer and the verification of the fix by QA) that Rally doesn’t create automatically.  So rather than beat our heads against the wall any longer I did more research.

TestTrack Pro
I’ve used this tracking system before.  Unfortunately we’re using hosted servers (i.e. hosted) and there doesn’t seem to way to get this to work for us.  Everything I’ve seen on their website says that you need a dedicated machine for the server.  I even tried finding a hosted TTP and couldn’t.  Since I didn’t have a lot of time to set it up I gave up on this solution.  Perhaps when our QA team comes on board we’ll revisit this solution since Rally has an integration tool for it but it’s also a bit pricey and before I commit to it again I’d want to use it for a while.

phpBugTracker
I’ve never had good luck with this tool so I didn’t bother with it.  It’s been very buggy in my experience.  Other developers I know have had good success so your milage may vary.

Mantis
We’ve used Mantis for a long time.  The other team members have used Mantis on their other projects as well so in the long run this really wasn’t much of a contest.  When we made the decision to switch I had it installed and setup in under an hour.  The project setup seems to be especially easy to understand and use.  The Change Log is very handy for documenting changes in any particular build and we’ve found that the email process works well for us.

I must admit that the MyView page takes a while to get used to but once you ‘get it’ it makes life easy.  With one glance you can see issues assigned to you, unassigned issues, recently changed issues, issues you submitted and issues that you’re monitoring.

Maybe I like Mantis because its interface is compact and doesn’t require a lot of scrolling and clicking.  The interface just seems to be in the right spots for me.

I would have liked to taken a look at FogBugz (Real Software uses this) and others but time just didn’t permit.  Frankly, now that we’re up and running on Mantis it’ll have to be something compelling to get us to change.

I mentioned this in one of my RB Developer columns, but I think it’s worth repeating.  A good bug tracking system that is accessible by your clients, as well as your team, is very important.  It’s important not only from a development standpoint but from a sales standpoint.  When you’re making your pitch to the client you should mention that you have a bug tracking system and that they’ll have access to it and they’re expected to use it (rather than email and phone calls).  You’re helping the client see that you have a process for your software development.

What are your thoughts on bug tracking systems?

Nice To See That They’re Asking

I find this very encouraging.  It says, to me, that Real Software is serious about listening to its users.  It suggests that they’re at least thinking about making some changes to RBScript in a future release and want feedback before they do it.  That’s a huge and very welcome change in my opinion.

Obviously Real Software will take care of itself first and foremost, but if they’re going to do work for themselves, they might as well ask the users how they’re using it and how they’d like it to work.  We all know that once you go in and start working on a major piece of code it’s always easier to do it all than to revisit it again in six months.  Can you remember the details of code you wrote six months ago?

I  encourage you RBScripter’s to take the survey at http://www.surveymonkey.com/s.aspx?sm=fF9Txc8NCybIJeJE0SnggQ_3d_3d

Since I’m not an RBScript user I’d love to hear your take on the survey and what sorts of information you gleaned from it (if any).

For Those Complaining

For those complaining about REALbasic bug and feature requests being ignored I offer you this: http://arstechnica.com/journals/microsoft.ars/2008/05/13/windows-live-messenger-9-0-beta-program-frustrates-testers

My guess is that Microsoft will fix the problems and add new features, but just like Real Software, Microsoft really does have limited resources for any given project.  Just food for thought.

Err.Stack Isn’t Guaranteed To Be Accurate

I ran across an issue the other day where I was testing throwing an exception. Yes! I was actually throwing an exception on purpose and testing it in Mac OS X and in Windows XP and checking to make sure my error reporting tools were working properly. On Windows the err.stack array contained the function where the exception occurred without fail. On Mac OS X, however, the stack array only showed the functions before the exception occurred.

This naturally confused me and I immediately started assuming something in my code was the cause.  My first idea was that the stack cleaner class from Fireye Software (http://fireyesoftware.com/developer/stackcleaner/) was the culprit and was accidently removing the function call from the stack array.  Upon review the code in the debugger, however, this was not the case.  Literally, on the Mac, the stack array didn’t contain the function where the exception occurred.

Let’s back up a bit for some history.  Back in 2006 Real Software added the stack feature to much acclaim.  It no longer meant that you had to have an exception handler in EACH method that contained code.  Adding this code was tedious, error prone (think copy and paste errors) and just plain sucked.  Before the stack I was using a derivative of BugReporter from http://www.ravenna.com/~forbes/yonk/source/ to send bug reports in to us via email.

I happened to be in the middle of a conversation (via AIM) with an RS engineer and asked him about my experience.  The response was somewhat shocking:

You should never rely upon the stack traces as being 100% correct.  Stack traces are just a good guess.

So in the long run, you either rely on the stack being ‘close enough’ and do an inspection to find the culprit or you’ll have to add exception handling in every method.

In my Visual Basic 6 days, we didn’t even have a stack (and we liked it that way – God I sound old sometimes), but we could have error reporting in every function and track it down to the line level which was handy.  We looked at adding some stack trace capabilities but it meant adding two lines of code to every method, function and event in a 950,000 line program and in the long run decided against it.

I digress.  So, to guarantee that you know exactly where an exception occurred the only 100% way to do so is to have exception handling in everywhere.  It sure would be nice if REALbasic had a method name constant to make doing that fast.

So what are you doing for error reporting?

Windows Activation Sucks (Like This is New?)

My old 7 year old Dell is now (or will be after getting activated) relegated as the kids computer.  This means I don’t care what they do to it as long as it still boots up and can run the occasional test app.  It had a bunch of development software on it and old files that they kids don’t need and that they probably shouldn’t see anyway (no, not porn – like old contracts and stuff like that).

So I wiped the drive.  I reinstalled Windows XP SP1.  Of course I couldn’t find the original Dell drivers CD so I had no network connectivity.  So I had to download a network driver from the Dell website using my trusty iMac (which now runs XP, Vista, and Ubuntu) and burned it to a CD so I could install it on the Dell.  Great.  Finally got the network up and running via ethernet cable – forget about the Wireless network for now.

So I figured I’d just bite the bullet and activate Windows sooner rather than later because I know it’s going to choke on some new update that requires Windows to be a certified genuine live advantage BS (or whatever they’re calling it these days).  I knew this was going to be painful as I just activated Windows on not just one, two but three copies of XP on two separate iMac’s running VMWare and one running Parallels.  Each time it failed validation and required a phone call.

So this brings you to the validation window and an 800 number that forces you to type in what seems to be a gazillion set of 6 digitis.  Since I’ve been through this before I went to the bathroom got a drink and got into my best yoga position to achieve a zen moment even though the pleasant recording said it would only take ‘about’ six minutes.  After speaking into the phone like a friggin’ idiot with all those numbers, I’m oh so pleasantly told that she couldn’t help me.  No shit.  I could have told her that before I started but that wasn’t an option.  So now comes the really fun part.

I get transferred to someone half way around the world where I have to give them the numbers AGAIN!  Come on folks, this is computer company that is supposed to help companies do a better job with their data.  Couldn’t the call router send an id to the db record that I’m sure it just recorded?  Obviously not.  Instead I have to talk to someone half way across the world with a horrible phone connection and after the first three sets of numbers their phone system hangs up.  Good thing the kid was asleep because he would have learned a few things.

So I go through the whole process again even though my zen moment is gone.  The computerized activation system, the transfer to a human being and I this time somewhere on the planet a phone rings twice and the system hangs up again.  So Microsoft has now wasted about 6 hours of my time between reformatting, not having all the drivers needed and trying to activate Windows.  And I’m not.  Done.  Yet.

It would have been far simpler and cheaper to just go buy a new computer and throw the old one away.  And people wonder why I’m pro-Apple.

If I wasn’t  a cross-platform software developer I would be a Microsoft free household.  At least with REALbasic I can develop on the Mac and only use Windows when I have to.  VMWare and Parallels makes this incredibly easy to do and more or less pain free.

Do I feel better now?  Only partially because I know that I’ll have to go through this whole process again tomorrow sometime.

Web Apps The Future?

Some things like undo, feature rich controls, keyboard shortcuts and modifier keys, application-wide drag and drop, and copy and paste of application objects are just a few of the things that I just find myself missing terribly.  We spent 8 hours yesterday using a web app and in the long run we went to a text editor to figure out stuff before we entered it into the web app because it was just too painful and too slow to do it directly using the tool.  The application designer in me was screaming, “No!  You only have to do this to get this to work properly!  It’s easy!”

When we first started using this tool a lot of people commented that is was one of the nicest web apps they had ever seen.  I hope that’s not the case for web apps in general.

Now, I don’t claim to be an expert on web apps.  I make desktop applications and I do them well so my comments should not be construed as an opening salvo in some online vs. desktop app war.  What I’m really asking for is web experts to tell me what I’m missing.

There are very obvious reasons why web apps are a great idea.  There is no distribution and installation issues.  I get it.  All you need is a web browser.  But honestly, as an end user that has to use these apps in a day in and day out, I want (nay demand) that my applications have all the buzzers and bells that I have in my desktop apps.

So are there any examples of web apps that are as feature rich as my desktop apps or am I living in a fantasy world?  What’s the best language for developing feature rich web apps?

Abandoning the Fantasy of VB Migration Wizardry

That’s a great question!  I’ve always said that REALbasic is a good choice (for the most part) for people wanting to migrate from Visual Basic 6.  The article points out that for most applications, they should probably stay in VB6 unless they’re highly visible in the organization or if they need something specific to .NET.

And therein lies the rub of migrating from one development environment to another.  There’s pain involved.  In fact, a lot of pain.  Regardless of how good an automated conversion process is, it will always miss something and that something might be very subtle.  So subtle in fact that it might take months to find it, or even worse, after it’s been released (because after all, who has time to properly test anything these days?).

Hiring a developer or even a service can be very expensive.  One VB6 to .NET conversion service charges $1 per line of code.  A VB6 project I worked on for years had 950,000 lines of code.  There was no way that they could afford to get it converted to .NET because they didn’t have $950,000 sitting around.  Doing it themselves would have cost them a minimum of a year with a team of experienced .NET developers.  They thought they wanted to go to .NET but yet they could never give any good reasons why they wanted to go .NET other than it is the new ‘thing’ to code in.

Let’s face it, VB6 is still a capable language and while language purists might dismiss it, I’ve done and seen a lot of awesome code in it.  Sure, to make a modern looking application you have to go through some hoops but it’s not that hard.

The situation with converting to REALbasic is similar to that of VB6.  Unless you have a need for RB’s strengths, such as wanting to support Macintosh and Linux users, you’re probably better off staying in VB6.  I’ve had quite a few people amazed at how much it costs to convert from VB6 to RB.  For some reason they think it should be ‘easy’ because they both have the word BASIC in their name.  Nothing could be farther from the truth:  RB and VB are completely different languages and frameworks and only a skilled developer can convert between the two.

Converting from VB6 to .NET is always an option.  If you do that you’re stuck with Microsoft for another decade and you’re still not supporting Mac and Linux users.  REALbasic should be considered an option if you want to migrate away from VB6.

What are your thoughts?