Posts by ianmjones.

CaseDetective 1.3 Post Development Lessons Learned: Part 2

This post is very closely related to my previous post about the lessons I’ve learned while developing CaseDetective 1.3, as it’s also about my reliance on eSellerate’s tools. It’s therefore going to be a short post.

In the previous post I mentioned that with the change from Integrated eSeller to Embedded Web Store imposed by eSellerate when supporting Universal Binaries, it effected how CaseDetective checked for updates. If I’d had my own check for update code independent from eSellerate, I’d not have had any problems when eSellerate changed how they set up SKUs (Stock Control Units).

Lesson Learned: Develop your own check for update mechanism from end to end, or use an open source solution that you have full source for and control over.

Ha! I'm keeping up with the Joneses!

I’ve just updated this blog to Wordpress 2.1.1, and also updated all my Mint bits and bobs to the latest versions.

When I hit the “Check for Updates” button in the Mint preferences to make sure I got everything, this is what I got…

mintupdate400.png

Well, would you expect anything less from a Jonesy! :-)

Anyway, if you do notice anything fishy about the new setup, please let me know!

CaseDetective 1.3 Post Development Lessons Learned: Part 1

CaseDetective 1.3 took a little longer than I hoped to develop, partly because I took some time off to recharge my batteries after CaseDetective 1.2, but also because of some painful obstacles I had to overcome during it’s development.

This is the first post in a short series of “Lessons Learned” from development of CaseDetective 1.3 for FogBugz.

The first, and most asked for feature that I needed to develop for CaseDetective 1.3 wasn’t even a real feature; Universal Binary for the Mac OS X version.

A Universal Binary version was long overdue, I would have loved to have got one out for v1.2, but REALbasic hadn’t got that functionality stable by the time I started development, and more to the point, the eSellerate Universal Binary REALbasic plugin wasn’t anywhere near ready. As I rely on this plugin for validating serial numbers and for in-app purchases, this “feature” had to slip to v1.3.

Unfortunately the Universal Binary eSellerate plugin for REALbasic caused me a lot of headaches, which considering the Mac OS X users of CaseDetective are vastly outnumbered by Windows users, is very frustrating.

The first, and most annoying problem with the eSellerate UB plugin was that it wasn’t cross-platform, meaning I couldn’t compile CaseDetective for both Windows and Mac using the same eSellerate related code; I had to continue to use the old Integrated eSeller plugin for compiling the Windows version. And to add insult to injury, the old plugin would not work with the latest REALbasic IDE without being converted to the latest plugin format (a tool for this is provided with REALbasic), and even so, seemed to clash with the new plugin so that you had to compile for Windows and Mac as two separate steps (even when using #if to target the OS specific code). I resorted to making everything I could an external item and creating a copy of the project so that I had one project for Windows and one for Mac OS X. Each project referenced pretty much the same external items except for one module that included Windows or Mac specific eSellerate code, and ran each against a different version of the IDE so that the plugins didn’t clash. It worked, but wasn’t ideal for productivity.

The new eSellerate UB plugin for REALbasic was also different in operation to the old plugin, it used their “Embedded Web Store” framework, which used an embedded web browser in a window, and required setting up of a web store in the eSellerate admin panel. Now, I wouldn’t have had any problems with this change except that it required different handling of Stock Control Units (SKUs, don’t ask me why they use a “K”, I have no idea), which totally broke the way you setup the check for update functionality. Now I needed to update two areas of my eSellerate setup to cope with the Integrated eSeller used by the Windows version, and the Embedded Web Store (EWS) used in the Mac version. This is a recipe for disaster (although I think I’ve avoided disaster so far).

Also, unlike the old Integrated eSeller, the Mac EWS plugin needed a file to be copied into the app bundle after it was created, the old version didn’t require any extra files, it was compiled in and self installing.

Oh, and in the end I had to disable the in-app purchasing from the Mac version anyway because I found that if you tried to print the invoice shown after completing a purchase it totally hung the app and required a force-quit. Now, this may have been something that I did, but I’m stumped as to what that might be, seeing as printing the invoice had nothing to do with closing the window and returning to my app, so I’m pretty sure it’s a bug in the eSellerate plugin or EWS framework. When I found this bug I was about ready to explode, there was no way I was going to waste any more time in trying to find a workaround, so I just disabled in-app purchasing in the Mac version. Mac users will have to buy through the web store and copy their license details into the “Enter License” window, not a huge problem as most people seem to buy that way anyway, but still, it’s a shame I couldn’t use this convenient in-app purchasing mechanism which sets the user’s license details automatically on purchase completion.

I think version 2.0 of CaseDetective may just be using a custom serial number scheme rather than eSellerate’s own scheme, and then I won’t need to use any eSellerate plugins at all.

Don’t get me wrong, in general I like eSellerate, in all my dealings with them I have had superb support and have had zero problems reported to me by customers about their buying experience through them. It’s just that their REALbasic support has taken a serious nose-dive, which is unacceptable to me.

Lesson Learned: Develop your own license code scheme, regardless of purchasing mechanism.

CaseDetective 1.3 released.

Well, last Thursday I finally got CaseDetective 1.3 for FogBugz out and ready to download.

What’s new?” I hear you ask…

CaseDetective is now even easier to use offline, you can use it when not able to connect to your FogBugz database and can tell it not to automatically refresh it’s local data on startup.

It now better supports Multipart/mime emails in the preview pane, for printing and for exporting to PDF.

The Mac version is now a Universal Binary for much improved speed on Intel Macs as well as PowerPC.

And there are of course lots of little speed and stability improvements.

You can download the latest version for either Windows or Mac from http://www.casedetective.com/download

Copilot for Mac!

Hey, good news for us Mac based peeps that help out peeps on remote machines now and then, Fog Creek’s Copilot service is now Mac compatible!

And, what’s more, the Copilot 2.0 day pass price has been cut in half from $10 to a very attractive $5, that’s nearly free!

 I also like the new “direct connection” feature whereby after an initial connection mediated through Fog Creek’s servers, if it can get a direct connection between the two helper and helpee machines, it will. I doubt this feature will actually be used all that often by casual users who have the ports closed on their firewalls, but for those that use Copilot a lot I expect this feature will further speed up an already pretty fast service.

But, probably the top feature for current users will be the ability to transfer files directly to the remote desktop, this’ll make it so much easier if you’ve got a file you want to use, such as a new build of your software or the remote debugging stub.

That’s a great update, me likes.

Managing Media

Merlin Mann pointed out a great article on TechDigs that addresses a lot of the problems people have with managing their ever increasing volume of media data, and how to back it up. I’ve been thinking about getting a ReadyNAS+ for a while, now I have some better information on how to use it more efficiently.

In the article Amazon’s S3 service is used for the off-site backup, but I wonder if something like CrashPlan wouldn’t be much better. With services like CrashPlan you backup over the internet to your own external disk that you’ve given to a friend to connect to their computer/network. It doesn’t incur any service charges, just a software purchase for the party wanting to backup, the friend doesn’t even need a license to be able to act as your backup target (just a pint every now and then to say thanks for the electricity).

What I really like is that you can do the initial (huge) backup locally, and then give the disk to your friend for the daily incremental backup offsite. I’m thinking about setting this up with a friend of mine, it’d backup early every morning while my ADSL bandwidth is free. If things were to go terribly wrong at home, I can pop around to my friends place to pick up the backup drive ready to do a local restore, much better than spending days downloading data from a server somewhere off in the cloud. Oh, and just in case someone nicks the device you’ve given to your friend, the data is compressed and encrypted before being sent, and saved encrypted too, which is nice to know.

I’m seriously considering CrashPlan and wonder if anyone out there has any experience of it or similar software?

Under The Wire

Oops, nearly had a month with no posts, better correct that!

So, umm, Merry Christmas and Happy New Year! Better late than never eh? ;-)

The last time I spoke about stuff going on in my life, I mentioned that I’d slowed things down and wasn’t going to get too uptight about lack of progress with CaseDetective. Well, although I’m still not rushing things, after a little rest I did start getting things done on CaseDetective again, and there’s a small release forming at the moment. There’s a couple of things I want to fix up before I finish testing and release unto the World, but it’s not too many weeks away. The latest release of REALbasic is working well for me, finally I’ll be able to get a Universal version of CaseDetective out for the Mac.

I’ve recently updated my IMiJ Software and CaseDetective websites with a new look. I’ve decided to stop bamboozling people with a myriad of menu options listed down the right hand side, using a much reduced horizontal menu at the top instead.

As well as looking more “business like”, it’s allowed me to add nice big “Free Download”, “Buy Now” and “Only $69″ buttons in the sidebar of the CaseDetective website. I’m hoping this will make these options even more obvious than before and encourage people to try it out.

I’ll admit I’m not the biggest fan of drop-down menus, but this new design uses them. I’ve been very careful to make sure nothing has actually moved in the website layouts, all the paths should be the same for now, but the actual menu options have moved around a little. I doubt anyone will notice though.

The design is Blueball Design’s Pro Colors 3.5 Theme for RapidWeaver, which I’ve actually had for quite some time, and may be the first theme I bought for RapidWeaver. I’ve made a few tweaks though; I took the Platinum version and changed the header and sidebar backgrounds to be white rather than grey as I wanted a lighter feel and think icons and logos always look better on a white backdrop. I also moved the header logo to the left and removed the header text so that it wouldn’t interfere, as well as making sure the page title has the website name included rather than just the page name. I personally think it looks rather good, nothing spectacular and pretty boring compared to some, but it works well on Windows and Mac and I believe it won’t turn anyone away.

Apart from my treadmill dying last week, my attempts at getting healthier in body and mind are coming along. I’ve lost a pound of weight every week this month, and am eating much healthier. I’ve also started to get back into reading before hitting the sack, so I might even start making a dent in that huge pile of books and magazines sitting beside the bed waiting to be read. There’s other little bits and bobs I’m doing or looking into that all add up, but I’ll not bore you with them.

Mandy’s at the “very uncomfortable” stage in pregnancy, she can’t seem to find any kind of sitting or sleeping position that stops her from getting sore in a few minutes, she’s soooo looking forward to getting her body back all to herself in approx 2 months time.

It’s an exciting and nerve-wracking time all round. We’ve been buying lots of bits and pieces for the baby, and I’m really looking forward to seeing what pops out, but also very aware that life isn’t ever going to be the same again and just hope that it all goes OK when the time comes. Tick, tock goes the clock!

Simplicity

OK, Joel Spolsky is stirring up a link storm again, as only Joel can, and this time I’m going to join in.

I don’t need to write 900+ words over 9 paragraphs to say what Joel said, it all boils down to…

 As simple as can be == As complex as need be

It’s that simple really, everyone wants products that are as simple to use as possible, but they must still have enough features to be able to get the job done, otherwise they’re useless.

 The problem of perceived over-complexity comes from a product being used for many different jobs by many different groups, if the product has a large user base then catering for all users will undoubtedly confuse some users as the path to using the features they need is made more difficult due to interface limitations.

That’s why “simple” products get created, they seek to fill that niche where some users have been using a product that has grown arms and legs in a bid to please all the users most of the time. The simple product aims to please only some of the complex product’s users, but all the time. And this is a valid proposition, but those users of the “simple” product will want ever more competing features as the user base matures and develops, eventually causing a split in the user base with some perceiving the product as too complex. It’s inevitable, just ask Darwin!

It’s a simple and well understood market dynamic, and nothing to get hot under the collar about, go with the flow and enjoy the ride!

Getting fitter step by step.

Getting fitter step by step.

I find I’m much much more likely to achieve something if I set a goal and actively monitor it step by step.

For example, for the last three or four years I’ve kept a spreadsheet of my weight as measured every Monday morning. The spreadsheet has a tab for each year with columns such as date, goal weight (in pounds), actual weight and the difference between the goal and actual weight. The goal starts off at the same weight I was on the first Monday of the year and decreases by a pound per week until it hits my goal weight, the idea being that if I look after myself I should be able to average a pound a week’s loss until I get to where I want to be. It’s a simple matter to then plot a graph alongside the data that shows the goal vs. actual readings. If the “Actual Weight” line roughly follows the “Goal Weight” line, then things are going in the right direction and I’m a happy camper.

I know, you might be thinking this is pretty anal, and I won’t pretend I’ve lost tonnes of weight by doing this either, but what I have been able to do is shame myself into maintaining a weight that although higher than I want it to be, isn’t morbidly over what it should be. Whenever I “slip” (usually when family visits from “Down South” for the weekend or there’s some sort of blow-out on a special occasion) I can instantly see a blip in the graph when those extra two or three pounds exert their force on our poor old scales. It’s usually enough to stop me from having that bacon roll or Double Decker (one of my fav chocolate bars) at work for a week or two.

But, as mentioned above, I’ve not really been achieving my goal. Sure I’m half a stone or more lighter than my heaviest over the last few years, and sometimes my weight doesn’t even change by so much as an ounce for weeks on end which is better than gaining, but I need to start burning more calories than I consume to get that graph heading back in the right direction. My actuals are pretty flat these days.

I’ve talked before about trying to keep an appointment with myself to exercise at least three times a week, but frankly I always start off really well and then slowly find reasons to not do the session, basically because I find it pretty tedious and have no concrete result after each session, except tiredness and a sweat soaked t-shirt that is.

So, as part of my drive to get a little fitter I put a Nike+iPod on my wishlist for my Birthday, and was lucky enough to receive one*.

I really wanted a Nike+iPod so that I could set myself goals and monitor how much running** I’m doing session by session. OK, I could have simply logged each run in a spreadsheet just like I’m logging my weight, but it’s a bit tedious and I often forget to log for a day or two (make that week or two). Having my iPod automatically record my run, distance and time and upload it to my computer whenever I plug it in is the bee’s knees! Now I don’t have to think about recording my run, it’s all done for me.

The Nike+ website where all the data ends up is great, as well as showing a neat graph of your runs with stats you can set goals that are automatically monitored. I’ve already set myself a goal of running 10 times in 4 weeks and am eager to meet or beat it, currently I’m one run ahead of goal.

And what’s super nice is that both Lance Armstrong and Paula Radcliff have taken time out of their busy schedules to magically squeeze themselves into my iPod nano and congratulate me at the end of my run when I’ve recorded a personal best for the mile.

But do you think it’s really mean of me to have thoughts of not plugging in my iPod after the session just so they can’t escape? ;-)

The big present I got for my Birthday from my wife was a set of Golf clubs, so that I get out in the fresh air, get some exercise, spend time having some fun with friends and more importantly to Mandy, get away from the ‘puter!

I started off with a couple of trips to the driving range, which was fun except for when my shots went sideways rather than forward and slammed into the wall of the bay with a resounding crack. I’m soooo grateful to those people at the driving range who haven’t even turned a head in my direction at the sound of a very hard ball slamming against a wooden wall at speed, maybe they remember what it was like when they first tried this daft game?

And then yesterday I had my first proper round of golf, which although very long and frustrating was great fun, even if I did loose a couple of balls***.

I think I’m going to enjoy playing golf and hope it’ll also contribute as another step towards getting fitter, especially if I continue to take as many steps as I did yesterday as I zigzagged my way down the course!

Here’s to getting fitter, step by step!

 

* Ironically I got the Nike+iPod from my Mum and Dad when they visited for the weekend after my Birthday, guess what happened to my weight graph on the following Monday morning after a couple of nice meals out and a few bottles of wine while they were up?!

** I use the term “running” very loosely, it’s more like walk for fifteen minutes, run for a minute or two and then walk for the rest of the session. It’s all part of a slow ramp up plan to avoid damaging my knees etc, honestly, nothing to do with being extremely crap at aerobic exercise!

*** My very first drive was the mother of all slices off into the woods, graciously chalked up as a practice hit by my fellow golfers, luckily all fairly new to the game, out of practice or hung-over and therefore very understanding!

Slow Progress / Big News / Time Out

Last month was very slow, development wise. I guess I’ve just been a bit burnt out from the frenetic pace I maintained when developing CaseDetective 1.2.

There have also been quite a few outside influences on my time, and some things have tended to play on my mind about the future, which held me back as I wondered how I’m going to have the time to fit everything in, and generally procrastinated.

The biggest thing in my life just now, and that is very much changing the way I see the future, is that Mandy and I have some fantastic news to share, we are going to have a baby, “due” April 4th.

As you might imagine, even though this has been planned and looked forward to for quite a while, and we’ve know about it for a couple of months now, when you sit down and start to think about how to fit everything in when you already don’t have enough hours in the day, it’s kind of over-whelming.

Some very good friends of ours have recently had a gorgeous bundle of joy (called Karis) drop into their lives (about 8 weeks early), it’s been a right eye-opener on just how much work a newborn can be. They are totally smitten and love her to bits, but I’m sure the sleepless nights and general constant attention that a newborn requires is very hard on the body and mind, and may just affect how much development I can get in on an evening come next spring! :-)

I’ve decided to just “go with the flow” at present, I feel like time spent catching up with friends and family, getting ready for the new arrival, acting on those self improvement ideas, getting a bit fitter, learning a few new skills and generally having a bit more fun is very much called for. I’m not going to beat myself up about not getting much development done just now.

I’m sure my brain will switch back into “work like crazy” mode at some point, when it’s ready, hopefully before I have no time to act on it!