Posts categorized “Software Development”.

First week working on my own

Well, I’ve just finished my first week working on my own for myself as “IMiJ Software“, and it’s been kind of strange, and not as productive as I hoped.

The first couple of days were wasted with setting up my desktop computer, moving stuff across from my PowerBook to my PowerMac and installing all the software I use on a regular basis.

Moving my data was a breeze as I use “Portable Home Directories” on my Mac OS X Server, but installing software took forever, partly hampered by a dodgy external firewire drive that held all my install files. I dragged a lot of stuff across from my PowerBook, a lot of other stuff off of the ‘net, but some stuff had to be installed from scratch from CDs etc (e.g. Virtual PC).

Of course I didn’t spend two full days installing software, I did catch up with email and feeds, and did even manage to develop a little bit of stuff in CaseDetective, but the first two days did feel like a bit of a waste.

After that though things started to get moving, although I still haven’t found a rhythm yet. I thought I’d spend the first hour each day checking mail, answering support questions that came in via mail or my forums, and then scan my news feeds before getting down to work. But it never really worked out that way, there always seemed to be things I needed to do or that took my interest before I finally got going with development.

Having said that, I have managed to get some solid development in during the week, much more than I would normally, but very little of it would be visible to CaseDetective users, most has been restructuring for some features planned for the next couple of releases. Important work, but hasn’t given me the satisfaction that I’d get from seeing new features.

What has been noticeable about the time I’ve spent developing is that I’ve been able and willing to do the tricky stuff that I would normally be putting off due to the lateness of the evening. Now that I’m developing during the day I feel a lot more alert and have a lot more energy to put into development. I can juggle more code in my head and the “big picture” isn’t getting lost. I’ve also found myself entering a lot more feature ideas into FogBugz for future development.

It’s been very nice not having to commute into work every day that’s for sure, and having much more time with Mandy has been fantastic. However, I can see why some people find working from home so hard, come today (Friday) I’m definitely feeling a little cut-off from the rest of the World, even though I’ve been visiting my regular forums and such regularly. I’m missing the guys I used to work with, even though I was never very chatty I enjoyed being with them.

I need to start getting out more during the day, something I said I would do from day one but haven’t managed yet. I’m just too wrapped up in getting on with things and so haven’t torn myself away from my desk much at all this week. That’s going to change, come next week I intend to set myself some tasks that mean I have to leave the house, simple things like finish off the Christmas shopping (just need a few cards etc) and get out on my bike for a gentle spin every other lunch.

All in all it’s been a great week, but I’m looking forward to a more productive time from now on now that all my systems are sorted and I have some plans for getting away from the desk occasionally to recharge.

One week to go.

Five weeks have passed since I decided to give up my day job and go full time developing and selling my own software, only one week left working for someone else. Where has the time gone, it’s just flown by!

I’m really excited about my impending freedom, every day I think of new features for CaseDetective or have them suggested by users, I can’t wait to have the time to implement them.

As briefly mentioned in my last post I’ve really started to get a good solid bunch of tools and workflow together over the past few months while producing the Betas and eventually the final release of CaseDetective. I thought it would be nice to quickly itemize them:

Hardware

My main development machine at present is my PowerBook running Mac OS X 10.4.3, I’ll no doubt switch back to my dual processor G4 once I’m based in my home office permanently. At present it’s convenient to have a laptop while I’m spending most of my day away from home, catching the odd half hour during lunch to update docs and the occasional bit of development.

My main server is a Mac Mini running Mac OS X Server 10.4.2, this box runs my version control, main FogBugz application and all other server like stuff (DNS, domain control, home dirs etc).

I also have a few Wintel boxes, 1 is running Small Business Server with FogBugz running under MS SQL Server, another is a WinXP client and another is my old Debian Linux server. They all come into play for testing, but aren’t used for any development itself.

I also use Virtual PC on my laptop for quick (well, convenient) tests of Windows builds on various flavours of Windows, from Win98 through to WinXP. I also use it for building my Windows setup application for CaseDetective as it can read all the files off my PowerBook’s hard drive without network access.

Development IDE

As regular readers are most likely aware I use RealBasic by Real Software to develop CaseDetective for both Windows and Mac. I started off using RB5.5 over a year ago now, and only switched to using RB2005r2 a couple of months ago.

I really like RB2005, the improvements in the language from RB5.5 to RB2005 have made the change in IDE more than worthwhile, and I’ve grown to love the single window format of the IDE. I also like the new window design guides very much, and love the fact that I can have objects such as timers sitting outside the window on the back canvas and not cluttering up the window. Although search within selection is still missing I find the new search results tab very usable, I love that I can see all the matches in a list and select which ones I want to replace all in one go, it has seriously sped up search and replace (which you do a lot of when re-factoring young code). It’s all very VB.NET like, but in my opinion much much nicer.

I’ve since moved on to RB2005r4 which brought with it some nice additions to the language but also a couple problems, which may be due to bugs in the IDE or my code. I had developed some custom bindings to link up different data provider and consumer objects within my UI without having to duplicate lots of code, it worked really well until I moved to RB2005r4 when all of a sudden I got some assertion errors when compiling. To this day I don’t know whether it’s something I’ve done wrong and was just getting away with earlier or whether there’s a bug in the compiler, but I’ve found some neat ways round it by implementing a MessageCentre module. It’s working nicely for the conversations I had the errors with, I think I’ll start using throughout as it actually brings with it some nice features I’ll find useful in the future.

Anyway, using RB makes it a snap to design and write code once and compile for both Windows and Mac (could do Linux as well if I wanted, but I’m not going there just yet), it’s great for working with databases and without it CaseDetective probably wouldn’t have been built.

Graphics

Photoshop. Need I say more? Oh, OK, Photoshop 7.0, it costs way too much to upgrade every blinking release, so I’ll wait until the version ready for Intel Macs is ready before upgrading again. If it were cheaper I’d of upgraded every time and probably given them more money in the long run, but from their revenue it looks like they’re doing OK as it is!

Website Creation / Help Doc Content

I’m using RapidWeaver from RealMac Software for both website development and user guide content creation.

I’m a refugee from CityDesk, which was very nice while it was being developed and supported, but Fog Creek have all but officially dropped it, Joel has mentioned in a couple of interviews that it’s not been that successful and he’s got no interest in it any longer. Which is a great shame as it was a great little app that allowed me to design a basic template for my website once and then just write content for ever more afterwards. However, since then I’ve moved to a Mac as my main desktop and even though I continued to use CityDesk in Virtual PC it wasn’t too long until I started looking for something a bit better.

Then I found RapidWeaver, which has quickly found it’s place in my arsenal of tools. It’s just so darn easy to use, with great built-in and third-party themes and plugins. The community around RapidWeaver is fantastic, a great (huge) bunch of people that recognize just how nice the app is.

Since I’ve started using RW I’ve found it very easy to build my website, and now I use it for creating the basic HTML for my help docs too with a very simple plain theme I’ve created especially.

Help Doc Publishing

for converting my HTML help docs into properly formatted indexed and searchable help docs for Windows and Mac I use HelpLogic from Electric Butterfly.

HelpLogic is a superb little app that allows me to structure and add meta data to my help docs and then output to Windows HTML help and Apple’s Help Doc formats, as well as a nice web ready format. I originally used Electric Butterfly’s UniHelp module to display my help in CaseDetective but found the naming conventions it needed the html to be too constricting, and also felt it would be nicer to use native Windows and Apple help formats just for userbility and consistency.

Once I’ve got the output from HelpLogic all I have to do is drop the folder with the Apple Help Doc stuff into the Help Indexer that comes with Mac OS X to give it all the indexes etc that Apple’s Help Viewer application needs and then copy the whole folder inside the Bundle created by Real Basic when I compiled. For the Windows help I flip over to Virtual PC to run Microsoft’s HTML Help Studio which loads the file generated by HelpLogic and compiles it into a CHM file. I could have used the Microsoft HTML Help formatted output from helpLogic as it was, but I prefer the single file format, which HelpLogic does all the prep work for already.

Application Setup

For building the final Windows setup application I use Jordan Russel’s Inno Setup. Inno setup is a breeze to use and builds nice simple compressed Windows setup files that save a lot bandwidth and do all the heavy lifting needed when setting up Windows software. It takes virtually no time for me to build the setup file, I simply update a couple of strings which hold version info and then click compile, that’s it.

For the Mac OS X disk image with it’s simple drag the app to install interface I use FileStorm. It’s child’s play to use, and now takes me exactly two clicks of the mouse to use once open. One click to say “finalize” which starts the build off and another to confirm that I want to replace the .DMG I’ve already got from the previous build, so if I deleted that first it would be a one click wonder once opened.

Both of the setup compilers above took a little bit fiddling to get right at first, but now they just work.

Version Control

I use Perforce to version all my source and third party objects. It’s fast and has a nice easy to use GUI, so I’m more than happy with it.

I’m now using Subversion.

Wrap Up

To get everything up on the servers I just hit the Publish button in RapidWeaver, my download page picks up the setup files if they’ve changed and sends them on their merry way to my domain host provider.

The online docs get transferred via Transmit, a quick Sync of the folder on my Mac and they’re up online. Transmit is a great FTP application, no Mac user should be without it.

And that wraps up this post, I’m bound to have forgotten a few things, if you want to know anything else about how I develop CaseDetective, please post a comment and I’ll try and answer.

Oh, nearly forgot…

Bug/Feature/Inquiry Tracking

FogBugz! :-)

Minor update to CaseDetective released (v1.0.1)

Just released a minor update to CaseDetective for FogBugz.

There were a handful of tiny things that irked me about 1.0.

The automatic check for update popped up a dialog asking the user to connect to the internet if it couldn’t connect to the internet straight away. I feel the automatic check should just ignore the error and pretend there wasn’t anything to download. The manual check for update will however ask the user to connect to the internet if it can’t get through.

The Database and FogBugz specific areas of the Connection tab in Preferences weren’t well defined, now they’re in nice little group boxes. Makes it very clear what’s what.

There’s a limit of 64 columns in the listbox I use for displaying the cases, and as I have one column hidden to store meta data that means users can pick up to 63 columns to view/extract at once. This isn’t likely to be a problem, can’t see many people wanting to extract all 77 columns currently available, but strange things happen if you try. So I’ve made it impossible to select more than 63 columns for display, with a nice little message if the user tries.

The docs had a few spelling mistakes and I wanted to update the list of fields in the features page to have dinky little Yes and No pictures for when a field is sortable or not. I’ve also added an acknowledgments page and updated some of the wording in a few places.

This release was a lot easier and faster to put together than 1.0, I’ve got a nice little suit of tools that had to be put together and learnt during the run up to 1.0, now I know the sequence. Hopefully it’ll get easier and easier as I refine my workflow.

It’ll be a good test of the auto check for update too, hopefully those CaseDetective users that have switched it on will get a little dialog pop up when they first run it tomorrow. Then again, most of my users will no doubt be taking the day off tomorrow seeing as it’s a holiday in the States.

CaseDetective 1.0 Released!

CaseDetective.jpg

CaseDetective for FogBugz version 1.0 has been released unto the World!

There’s a new logo for IMiJ Software too.

I’m very happy, and very very tired, need I say any more? Well, yes, I’ve got lots to say, but it’ll have to wait until I’ve had some sleep and sent out the proper emails tomorrow today.

REAL World 2006

This weekend I registered for REAL World 2006, so next February I’m off to Austin, Texas for a few days to learn lots of stuff about RealBasic and hang out with like-minded geeks.

Should be fun, some of the sessions already posted look very interesting, and I’m really looking forward to meeting the RB staff and other developers in the RB community.

I haven’t booked my flights and hotel yet though, mainly because the wife and I haven’t decided whether she’s coming along or not. Thought it might be nice to extend the trip a little to see the sights (and sounds) of Austin as it looks like a nice place to be for a few days. Then again, Mandy won’t see me for a good three whole days while I’m at the conference as there’s evening socials as well as daytime sessions. But apparently there’s some good shopping to be had in Austin, so Mandy says she should be able to keep herself occupied for a few days, as long as the credit card holds out! :-)

1 Year Old Today!

The current incarnation of this website is one year old today, happy birthday ianmjones.net!

Although ianmjones.net has been around for a few years with a blog like appearance, it wasn’t until September 30th 2004 that I started to properly “blog”.

Since last September I’ve always intended this site to stay on track, to talk about how things were going with my quest to become an independent software vendor (ISV). I’m not sure I’ve managed that very well, I seem to have strayed quite a bit, really haven’t written a lot about what I’ve learnt along the way and haven’t written as often I hoped I would.

What have I achieved in my first year?

  • I’ve read and listened to tonnes of marketing and business material in many different forms of media and from many sources (which I’ve failed to talk about here when I really should have, slap my wrist).
  • I’ve researched and picked suitable tools to develop, source control, package and sell my software.
  • I have designed and developed a software application in a programming language and with other tools that I hadn’t used before.
  • I’ve learnt a lot about the FogBugz database schema and data usage and installed it way too many times on far too many platforms!
  • I’ve registered something like 35 separate domains and set up the websites.
  • I’ve set up an online store to sell my software (visited a few times by people, but never used the way it should be).
  • I’ve set up a few channels for public communication, such as the Newsletter and Yahoo! group (there’s a proper forum waiting in the wings).
  • I’ve released three public betas of my software, with the second and third showing a lot of improvement over the first!
  • I’ve even released some open source code as a by-product of my software development.
  • I’ve met (in a virtual way) a lot of really nice people from all over the world.
  • I’ve had very little sleep compared to the year before, and seen a lot less of my family too (this isn’t a good one).
  • And tonnes of other bits and bobs that escape me just now.

Some of this stuff I’m very proud of, some not so. But having a real direction in my life and being able to continuously step closer towards my goal of becoming an ISV while having lots of support from my family and friends, and new friends too, has made this a fabulous year.

Really looking forward to the next year, it should be good.

Quick Update / FogBugz & LDAP / Selling Beta Software

Working hard on getting the final few things sorted for CaseDetective 1.0.

Just got to learn about and write some LDAP code for Active Directory and OpenLDAP authentication now that FB4SP1 has it, add automatic version update checks, and update all my Help Docs and I’ll be all set ;-)

I’ve already knocked off a few other little bits and bobs, but still have quite a bit to go by the looks of things!

The final beta has proven to be a real non-event, which is great! Eh? Well, no one has raised any bugs at all on this version, there’s only been a couple of questions about how things may go in the future and some really nice comments. So I’m very happy.

I’m obviously going to be taking a little bit of a risk by adding the LDAP stuff to v1.0 without having a public beta, but before going live I’ll seed it out to a few current testers that I know use domains etc and might be using this new FogBugz feature.

The thing is, I doubt a huge number of FogBugz users will start using this LDAP authentication straight away, it does take a little bit of planning to make sure existing users are correctly configured for when you switch. I found this out the hard way, locking myself out of FogBugz in the process. It was easy to get back in by updating a couple of records directly in the database though. Second attempt worked much better once I’d sorted out how the user names should be set. I guess a network professional would have no problems, but I’m not one of those by any stretch of the imagination.

One disappointing but expected thing about the betas is that I’ve made no sales. Well, I say no sales, I know of plenty beta users who have said they’ll be buying it, but none have yet.

I kind of expected this, it won’t be until v1.0 is out the door before I actually start to get sales. As I see it there are two primary reasons:

Firstly, people don’t like to pay for something which is in Beta as that label means “not quite finished” and who knows when it actually will be finished? Paying up is a risk.

Secondly, I gave the beta users way too much trial time to play with. 60 usage days of trial time is a very long time, I should have kept it at the default of 30 days. But it’s too late now, the deal was done and I promised 60 days, and a further 30 once v1.0 was out there, so that’s what I’ll do.

If someone uses CaseDetective only once every month they’ll be able to use the v1.0 trial for over two and a half years! It’s a very unlikely scenario, but is possible. I’ll just have to work hard to make CaseDetective irresistible and so useful that people will feel like paying for it just to say thank you :-)

CaseDetective Beta 3 Released

As well as releasing my UNIXCrypt RealBasic module, I’ve also released the latest, and hopefully last beta of CaseDetective.

This one doesn’t look like much on the outside, but has a few fixes on the inside, and a bit of mutli-threading chucked in to make things a little more responsive in the GUI while grabbing data from the database.

ALso, I’ve put in the framework for the Help system. It’s a little sparse at the moment, but should be improved plenty in time for the 1.0 release.

I had seriously considered making some big changes in this version (as discussed in an earlier post), but decided that they ought to wait until 1.0 is out the door. I’ve got users who are pretty happy with the way CaseDetective works at the moment, so I don’t want to rock the boat just yet, I’ll leave that until 1.1, giving me plenty of time to make sure I get it right. This release is made with RelBasic 2005r2, but doesn’t include any of the stuff I need to do to support MS Access databases.

I’m chomping at the bit to get onto v1.1, but I know I should finish off the docs and final polish of 1.0 first, and make sure this final beta is as solid as I hope.

Started to use RealBasic 2005r2

Just yesterday I started to use RealBasic 2005r2 for my development of CaseDetective.

I had been holding off from using the latest version of RealBasic because of two things:

  1. I was happily using v5.5.5 for my project and didn’t want to risk breaking anything by moving to new versions of my tools.
  2. Didn’t feel v2005 was quite stable enough (from comments in the RealBasic mail lists).

So given those two very important reasons, why have I decided to move to v2005r2 before v2005r3 has been released?

The prime reason is that there are features in v2005 that I think I need now to be able to develop features I’m planning and to improve some other areas of my software.

In particular, I’ve been struggling with trying to support Microsoft Access databases as a data source in CaseDetective. It’s not that I can’t connect to the database etc, that’s easy with ODBC, it’s that Microsoft Access does not support the advanced SQL I can use in the other supported FogBugz databases, namely Microsoft SQL Server and MySQL.

By moving to RealBasic v2005 I think I can now make changes to the way I handle the data so that I can keep all the extra fields I give the users of CaseDetective (such as Last Updated By, Closed By, Resolved By etc) and also support MS Access. Whereas at the moment I simply can not keep those fields and support MS Access too, the SQL I’m using just doesn’t work no matter which way I do it, so I’m going to have to split the grabbing of the extra data into separate queries.

Splitting the retrieval of data into separate queries means I can’t use SQL “sort by” for when the user wants to sort by those extra fields, I’m going to have to bring the sorting back into the application only. This means sorting arrays of data, which will hopefully be easier to do using RealBasic 2005’s new “SortWith” method.

I first came across the new array SortWith method in a post about new features in RealBasic 2005 by Jonathan Johnson on his NilObject blog. The new SortWith method allows you to sort an array and keep other arrays that have the same number of elements in step with the re-organising. So, if you sort the LastNameArray you can keep the FirstNameArray in step, so that elements 1, 2, 3 … n are always locked together across the two arrays. And you can do this for multiple associated arrays at the same time…

LastNameArray.SortWith(FirstNameArray, MiddleNamesArray, EmailAddressArray)

This would mean if the 3rd element of LastNameArray was moved into position 1 as a result of the sort, then elements 3 of FirstNameArray, MiddleNamesArray and EmailAddressArray would also move into position 1 of their respective arrays.

I’ve yet to try this out (so I don’t know whether sorting by one array and then another would allow me to get what you’d expect from “sort by LastName, FirstName”), and haven’t fully planned my new architecture, but I think this will help me get to where I want to be, and will hopefully open up the possibility to add more sort fields too as once this is implemented I can’t see anything stopping me from sorting by every field I make available, whether basic FogBugz or derived field. It’ll just take a little extra work to make sure all dates and times have a SQL format string (or TotalSeconds integer) companion to get around the restrictions of the SortWith method, but I already have this for most fields.

Update: Stuff arrays, me thinks RealSQLDatabase (a.k.a SQLite3) is the way to go, can you say “super fast in-memory SQL database”! This to be honest was my prime reason for moving to RB2005, but I wasn’t sure it would work. I’ve just spent my lunch hour looking into this further, and as soon as I found out that I can do in-memory SQLite3 databases in RB2005, and can then save the contents out to disk by attaching a file based database and inserting my in-memory table’s data into the file based database’s tables, I was sold. This totally opens the door to some features I want to implement in the future. I’m a very very happy man! :-)

A nice thing I’ve already noticed with RB 2005 is that a disabled listbox on WinXP actually looks disabled now, whereas in RB 5.5.5 it looked active, but you couldn’t do anything with it, which was very confusing. On the flip side I seem to have lost one of the separators in a menu, so I need to sort that one out.

I think I’ll finish off a couple of small changes to CaseDetective and release another (final) beta made with RB 2005, and then I’ll tackle the MS Access problem for a separate release, so look out for a new version of CaseDetective in the next week or so with some minor updates and fixes.

OpenBase Adds RealBasic Stored Procedures Support

In the wee hours of this morning, while I was sound asleep, my server received an email from OpenBase announcing that OpenBase 9.1 will be released on September 14th.

Usually I’d just delete such an email as I’ve yet to use OpenBase in anger, and haven’t really played with it for a couple of years now, when I first had a dabble with WebObjects. However, in their list of new features for this version was support for RealBasic Stored Procedures, which caught my eye.

This sounds great, I’ve spent the last year writing RealBasic code, and so am slowly getting more and more comfortable with it, to the point that I miss it’s features when working in other languages. So this announcement along with the much anticipated “Swordfish” web application framework from Real Software is starting to make my investment in time and money in RealBasic a good bet.

Of course, I haven’t got OpenBase, don’t as yet have a really good use for it that would warrant spending that kind of money (I’ve always felt it costs just a little more than I can afford), but with all the other improvements and new features that are in v9.1, I’ll certainly be looking at it again soon. It’s maturing nicely.