Warning: include() [function.include]: Unable to access /var/www/html/rogue-development/blog2/wp-content/advanced-cache.php in /var/www/html/rogue-development/blog2/wp-settings.php on line 62

Warning: include(/var/www/html/rogue-development/blog2/wp-content/advanced-cache.php) [function.include]: failed to open stream: No such file or directory in /var/www/html/rogue-development/blog2/wp-settings.php on line 62

Warning: include() [function.include]: Failed opening '/var/www/html/rogue-development/blog2/wp-content/advanced-cache.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/rogue-development/blog2/wp-settings.php on line 62

Notice: add_option was called with an argument that is deprecated since version 2.3 with no alternative available. in /var/www/html/rogue-development/blog2/wp-includes/functions.php on line 3468

Notice: register_sidebar_widget is deprecated since version 2.8! Use wp_register_sidebar_widget() instead. in /var/www/html/rogue-development/blog2/wp-includes/functions.php on line 3382

Notice: register_widget_control is deprecated since version 2.8! Use wp_register_widget_control() instead. in /var/www/html/rogue-development/blog2/wp-includes/functions.php on line 3382
Marc’s Musings

Technology Nomad

The scrum tool I’ve been working on for a few months is seeing some real user growth.

One thing I find a little weird is jumping between the user communities

Earlier in my career, when I was doing c++ development, that was it.  During my Java days, that’s what I coded day in and day out.  Flash/Flex, same thing.  Sure, I’ve always dabbled in various technologies.  Some scripting (perl, ruby), maybe play with the latest hotness (an iphone app).  But I only ever felt like I was part of one developer community at a time.

But now, I find myself switching between the Flash/Flex world in my dayjob, and the Python communities in my extra-curricular.  And they’re vastly different.  The flash world tends to be heavily design focused on one side and real enterprisey-development on the flex side with new frameworks, patterns, and methods of development popping up all the time.  The python communities feel more pragmatic.  Getting things done quickly and efficiently.  Each new framework that comes out tries to be leaner and smaller, yet more expressive than the last.

Instant gratification of GitHub and AppEngine

So, I’ve been testing a web callback by using postbin – http://www.postbin.org/ – a pretty great service exactly for this sort of thing.

But I found that I’d really like to be able to replay those requests on a server running locally.  A quick look behind the scenes at postbin, and it’s open source on GitHub, and runs on google app engine.

So I forked a copy, made my changes, and uploaded a new version to my own google app engine account so I could use it right away.

I also sent a pull request to Jeff Lindsay, the developer on Postbin so he could incorporate the changes on the main site.

None of that is particularly amazing.  But the fact that I did it in less than a half hour is!

Distributed VCS, running apps in the cloud, I hope this is the future of software development.

ScrumDo – new release and open source!

The other day over at ScrumDo we pushed a pretty major release that included a lot of new functionality and usability improvements. I’m especially proud of a the predictions tool and the excel import/export functionality.  You can export an iteration, work on it in excel, and then import your changes back in.

But perhaps even more important, we are officially open source now.  If you’re a Django developer, and you use Scrum, consider pitching in some help.  We’ve got a list of area’s that we’re specifically looking for help in and would be happy to have other things worked on as well.

Follow the project on twitter.

p.s. ScrumDo not ScrumDoo — The doo wasn’t working, t0o many people thought about poo.

Scrumdoo.com

I’ve been taking a shot at an agile story management website in my off-hours.  It’s not ready for prime time yet, but I think it’s moving in the right direction.

I was able to get a talented developer, Ajay Reddy, to help me out in it’s future development.

We plan on open sourcing it so anyone can run their own instance of the server.  It’s a DJango/Pinax/Mysql software stack.

My goal is to have a usable version up by December 6th.  Any suggestions / comments are greatly appreciated.

Oh.. the name will be changing.  Apparently both my wife and Ajay thinks it sounds too much like a form of excrement.  Suggestions welcome there as well.

Eventually, I’ll integrate the work I’ve done on Todo-Board into it.

Backlog Management Software?

We’re moving to Agile/Scrum development.

Right now, we’re using spreadsheets to track our backlog.  It’s working fine.  But I’ve got a big project coming up, and the spreadsheets just aren’t going to scale.  I’m looking for something slightly more heavy weight than a spreadsheet, but still light, easy to use, doesn’t get in the way.

It’s got to be web-based since we have remote teams.

It has to support multiple teams on a single product with a single backlog.

It has to support a deep backlog with hundreds of items.

It must support the ?, 0.5, 1, 2, 3, 4, 8, 13, 20, 40, 100, Infinity point scale

I need a reasonable assurance it’ll be around for 3+ years.

It should generate burn up charts for each team and for the project as a whole.

We already have a defect tracking system.  I don’t need that in the system, and would prefer it to be absent.

Pivotal Tracker is the closest thing I’ve found so far.  But it fails the point-scale and the longevity requirements.

Rally and Version One are close seconds, but they’re way too “Enterprisey”.  I want something quick and light.

I’m tempted to tack something onto Todo-Board, but it’s more than I want to bite off right now.

What do you look for in backlog management software?

Hour a day

I’ve adjusted my day-job work schedule a bit as of late.  Now, I’m coming in and staying about an hour later Monday through Thursday.

Why?

Because my personal projects had stalled.  I’m using that 1 pre-work hour a day to work on Todo-Board

I’ve been at it for about two weeks, and in that 8 extra hours I’ve developed more of the site than what I accomplished in the previous several months!

I’m trying to complete one small logical piece every day and it’s amazing at what time-boxing your self for one hour a day can accomplish.   One day I made a new toolbar that hovers with the notes.  Another day I optimized the logic that decides when to save the project.  Yet another I implemented the ability to share your board through links on the site.

So many people say “If I only had the time, I could do X” and then never do it.  Why not find an hour a day and do it?

It also helps that this lets me miss some traffic.

Still time to teach your reps math Verizon.

I remember reading a story about a guy getting overcharged one hundred fold by verizon because the rep didn’t understand the difference betwee “Point zero zero two cents” and “Point zero zero two dollars”.  They’re still making the same mistake.

This rate was just quoted to me over the phone as “Point zero zero two cents”.

I asked to see it in writing and this is what I got:

They could fix it by quoting this in MB. Nobody is going to say $2/mb wrong.

GIT

I’ve been working with GIT more and more lately.  It seems like it’ll make complex projects with several simultaneous branches a lot easier to work on.  I just wish there were some really good easy to use graphical clients for non-engineers.  Something like Versions for SVN/OSX would be great.

If you’re looking for a book, go with the Pro Git one.  I originally bought the oreilly book and was disappointed.

A lesson on AIR certificate signing

Yesterday, I created a new version of one of my AIR apps. I tested it, it looked good, so I uploaded to my distribution site. One of the tests I always do after that is to use the auto-update feature to make sure the upgrade goes smoothly for my customers. It found the update, downloaded it as usual, began installing, and them BAMN

“Air cannot install this application because the installer is misconfigured.”

Odd I thought. So I dusted off a couple virtual machine images with different versions of AIR and my application installed, and they all behaved the same.

Then I tried to upgrade by manually double-clicking the .air package and got this error: “The application could not be installed because an application with that name already exists at the selected installation location. ”

It turns out that I hadn’t made a release since last I renewed my code signing certificate. Now, last year, around this time I didn’t have any problems. I just signed the new version with the new certificate and it all worked fine. But this year, something’s different.

After some digging around, I found out I may have to migrate from my old certificate to the new one. It’s a fairly trivial process. First you create your air package with your new certificate. Then you run adt and also sign it with your old certificate. A command like this works:

adt -migrate -storetype pkcs12 -keystore ../OLDAgileAgenda.p12 -storepass MYPASSWORD -keypass MYPASSWORD AgileAgendaBC_0070.air AgileAgendaBC_0070_migrated.air

BUT. When I ran that I received an error about my old certificate being expired and I can’t use it. Oh shit. You need to migrate certificates before they expire?

Some googling around and I found the answer. Apparently this was a common enough problem that AIR 1.5.3 changed this behavior slightly. Now, you can migrate from an expired certificate, but only for 180 days after the expiration. Luckily, I’m easily within that 180 day window, but I pitty large commercial applications that go out on CD and don’t get updated that often. (About that time I got spooked since I worked on one of those.  But that’s an enterprise-level problem to be solved in an enterprise-level way at an enterprise-later date and time.)

So to update my AIR sdk I downloaded from here and followed the instructions here.

Now, my adt migrate command worked perfectly.

So I tried installing the migrated air package, and the upgrade went through perfectly.  A shot at the auto-update, and that worked as well.

But I noticed something when I ran the app.  It had forgotten all my settings.  Unfortunately, that included the registration info.  If I released like this, I know I’d have dozens of angry emails the next day with customers who can’t find their license keys anymore.  So some more googling…

Turns out, the publisher ID changes when your certificate changes.  That publisher ID is the weird string in your local settings directory.  For instance, on OSX the local settings dir for my app was ~/Library/Preferences/com.agileagenda.AgileAgenda.F49A4D8DF78A1FEE7A3BE440DC11BAB18D922274.1

Now, there was an entirely new directory being created with a different publisher ID.

After some more searching, I found out that AIR 1.5.3 also solved this problem.  You can add a publisher id tag to your -app.xml file to specify one to use, such as:

<publisherID>F49A4D8DF78A1FEE7A3BE440DC11BAB18D922274.1</publisherID>

To use that, you’ll also have to update the XML namespace at the top of the file

<application xmlns=”http://ns.adobe.com/air/application/1.5.3″ >

(NOTE: For brand new applications, don’t specify a publisher id.  They’re being phased out.  Blank is better since your config directory name will be cleaner)

After doing that, I rebuild my air package, re-signed it with the migration certificate, re-performed all my tests.  And all was good.

Hopefully, this blog post will save someone else in the same situation a lot of frustration.

Scholastic / Tomsnyder hiring in Boston area (Watertown)

My employer is hiring like mad.

I’d post the descriptions here, but that would be rather long, so here’s the craigslist ads for four of them:

http://boston.craigslist.org/bmw/sof/1704769566.html
http://boston.craigslist.org/bmw/sof/1704765818.html
http://boston.craigslist.org/bmw/sof/1704758792.html
http://boston.craigslist.org/bmw/sof/1704749682.html

Please use the email addresses in those posts, and do not contact me directly. I simply can not track this volume of requests outside those channels.