Posts categorized “Software Development”.

Documentation, bleugh!

CaseDetective for FogBugz 1.1 is done, finished, complete … almost. Just need to get the documentation done.

It’s always the last thing to be done, we developers always put it off to the last moment and generally see it as that horrid task sent by the devil to torment us.

Except this time I’m not minding it too much for some reason.

Maybe it’s because I’ve decided to really shake up the documentation and website this time round, last time it was a little half hearted and I’m feeling I need to make a big push this time to get a much better quality set of docs there.

Since releasing CaseDetective last year I’ve had a fair few support requests that really shouldn’t have been there, documentation should have nipped them in the bud. Whether that be information on the website for prospective downloaders or in the help docs for those looking to get a little more from CaseDetective. Obviously my docs just weren’t up to scratch.

At first I’m just getting the basic documentation framework back into shape before private beta as I’m changing the way I produce them a little, it won’t be anywhere near complete but should give an idea as to the format (placeholders will abound).

Originally I authored my documentation and CaseDetective website in separate RapidWeaver files and then processed the documentation output through HelpLogic to get the final help files and separate docs website. There are pros and cons to doing this.

On the plus side it was easy to set up the documentation file so that it didn’t use any index.html files, HelpLogic doesn’t allow them as they conflict with files it has to create. It also meant I could have a nice docs website that looked and performed just like a normal help file, with searching, contents, index and everything.

On the minus side is the fact that I was maintaining two separate files which shared a lot of the same information, such as support contacts, features overview etc. Also, that separate docs website may be searchable by itself, but not from Google and other search engines as it uses frames, so does not contribute much to my marketing effort (when I actually start to do some that is). The separate docs site also doesn’t have my CaseDetective theme, it’s totally different so doesn’t look part of the main CaseDetective website. Both the searching and not being integrated into the main site are potentially big hindrances to getting free marketing from the content (when it improves) and looking professional.

So I’m now using one RapidWeaver file for my CaseDetective website and just rejigging it so that I only have one index.html, the main one which would never be included in the help files anyway.

My (new) website will have fully integrated documentation using the same theme as the rest of the site and will of course be searchable by search engines. And when building my in-application help files I simply switch the theme to a plain theme I’ve created and extract to a folder that HelpLogic will pick up from. Then I just delete the index.html file and it’s associated resource files and use HelpLogic to reformat everything for Windows and Mac help formats. A quick compile to CHM format with the free Windows HTMLHelp Studio and index the Mac OS X Help Book with the free Help Indexer and we’re ready to build the Windows setup file and Mac disk image. It takes much less time than it did to write this paragraph, honest!

Well, I guess I should get back to it, those private beta testers must be chomping at the bit by now, desperate to get their hands on CaseDetective 1.1b1!

CaseDetective 1.1 Sneak Peek #4: Graphs

So far the sneak peeks for CaseDetective 1.1 haven’t been all that enthralling, even I am able to admit that the features I’ve shown aren’t that big a deal to most users of CaseDetective and FogBugz.

This one may turn a few heads though, CaseDetective for FogBugz 1.1 will include the ability to view some “potted” graphs, just like this one:

SimpleGraphS.jpg

The above graph was grabbed from the new “Overview” pane, which includes the previously sneak peeked Last 50 Events list. To be able to include graphs of statistics from FogBugz in your reports, all you have to do is select an appropriate filter and pick the type of graph you want, then simply copy and paste the graph into your report. It’s as simple as 1-2-3!

SimpleGraphWithPopUpS.jpg

And as you can see from the above screenshot (click it for a better view), when you hover your cursor over a “node” you get a little yellow pop-up with a bit of info about it, such as the number of cases (Y value).

For some people this could be a real time saver, as it’s a very quick way of finding out how many of your FogBugz Cases are in a particular Priority, Status, Release and so on, there are quite a few fields you can graph:

GraphFieldsS.jpg

And of course, you need to be able to see when it was that you had that sudden spike in feature requests opened, resolved, closed or last updated:

DateLineGraphS.jpg

Being able to quickly see patterns in your FogBugz data through graphs and charts in CaseDetective for FogBugz should hopefully help a lot people get through their day that little bit quicker when it comes to getting those reports out.

Anchors Away! (CaseDetective 1.1 Sneak Peek #3: Recent Activity List)

This post was originally a guest post for the Fog Creek Blog, but I’m re-posting it here for completeness with permission from Michael.

There’s a neat little new feature hidden away in FogBugz 5 (currently in beta) that I think a lot of people will find useful (and not just because I asked for it), HTML anchors on displayed bug events.

I guess I should explain why I asked for them and why I think you’ll find them useful…

A few months ago there was a feature request on the FogBugz discussion forum that I thought was pretty good, so I nicked it for CaseDetective (thanks Sam Chrisp)!

The feature request was for a “Recent Activity List”, basically a listing of the last X number of edits and comment events so that the FogBugz user could see what has recently happened, and then click through to any Case that’s of interest. The feature request even included a picture of the list that the user had created for themselves by modifying the FogBugz code.

I liked the idea and felt it would be useful as long as you could click on an event line in CaseDetective and go directly to the FogBugz edit entry in the Case view page without having to scroll down the page to it. There was one snag though, FogBugz 4 didn’t have any HTML anchors on each of the entries in the view page so CaseDetective couldn’t construct a URL to go directly to the entry. Darn!

So I fired off a quick email to Michael (Pryor, I think you all know who he is :-) ) asking whether he’d consider adding anchors to the view pages in FogBugz so that anyone could construct a URL to go directly to the event. Michael said he’d pass it on to the development team for appraisal.

The announced features for FogBugz 5 didn’t mention anchors so I thought I’d missed the boat and would have to wait a little while before implementing my Recent Events list. However, while playing with the FB5 beta late one night (make that early one morning, just couldn’t sleep until I found out everything that was new) I checked the HTML source for the Case View page and there they were, BugEvent anchors. Yeehaa!

Here’s the deal, every bug event that is displayed in a Case has an anchor in it’s header, something like “<a name=”BugEvent.9969″>”.

This means you can send someone directly to a comment or edit with a URL such as:

http://server.example.com/fogbugz/default.php?pg=pgEditBug&command=view&ixBug=2469#BugEvent.9969

or the even simpler:

http://server.example.com/fogbugz/?2469#BugEvent.9969

As long as the URL ends with a “#” followed by the anchor’s name, you should be good to go.

This kind of thing is very useful when you want to point someone to a particular comment or edit, instead of having to say:

“Please have a look at the comment dated 03/04/2006 10:20:30 made by John Doe in case 2469″

you can say:

“Please look at this comment: <link>” and past in a direct link to the comment.

Of course, it’s helped me a lot as it meant CaseDetective could acquire the Recent Events list I wanted to implement. Double click an event…

CaseDetective-1_1-RecentEvents-SneakPeek.jpg

… and you’ll be taken directly to it in your default browser:

FogBugz5-Anchors.jpg

This event list will make up the bottom half of CaseDetective 1.1s new “Overview” view, which I’ll discuss a little more on my blog soon.

CaseDetective 1.1 is still in development, but we’re working hard on getting it into your hands as soon as possible. Stay tuned for more updates as we get closer to release.

CaseDetective 1.1 Sneak Peek #2: Open cases by Area

In FogBugz there is this concept of a Project Area. Areas are usually something like “Code”, “Documentation”, “User Interface” and so on, a way of categorizing a Bug, Feature or Inquiry so that the correct person can pick it up. They are very useful, a great way compartmentalizing you Cases for better resource and time management.

The problem is, these Areas are children of a Project, so it’s impossible to create a filter in FogBugz that captures all cases that are in an Area regardless of the Project they are in, for example; all Cases related to “Code”. This is a real shame, as many people use Areas for all kinds of things, and would love to see all cases that have the same Area. Some people think of Areas as a kind of tag.

In CaseDetective 1.1 for FogBugz we’ve opened up Areas a little by giving you a “Open cases by Area” summary filter, allowing you to see all open Cases in each of your Areas, regardless of the Project they’re in.

CaseDetective-1_1-OpenCasesByArea-SneakPeek1.jpg

But, if you then need to drill down to find out which Projects those Cases are in, you can.

CaseDetective-1_1-OpenCasesByArea-SneakPeek2.jpg

Some way of seeing all cases in an Area name without having to select a Project has been one of the most requested features I’ve seen, and something I’ve long wanted myself.

CaseDetective 1.1 is still in development, but we’re working hard on getting it into your hands as soon as possible. Stay tuned for more updates as we get closer to release.

The Marco Bambini Blog: Too perfectionist? / CaseDetective 1.1 Sneak Peek #1

Marco Bambini has just posted a

little update on where he is with SQLiteManager 2.0.

Marco’s included a couple of screenshots, one of the about box that shows off the new icon he’s commissioned and the other of the main window.

The new icon is great, looks very slick and professional. I liked the current icon for it’s simplicity and style, but now that I’ve seen the new one the old one looks kind of drab in comparrison. I think he’s made a good decision in getting a new icon created.

The screenshot of the new look interface shows a huge improvement over the current release, it looks much more user friendly and accessible, and I’m very glad the tabs have been replaced by a toolbar. There’re no details in his post on what’s new functionality wise, but a few of the toolbar icons hint at some new features, Analyze, Verify, Optimize etc.

Marco’s worried that he shouldn’t have invested so much time and money into the new look and upgraded functionality, it’s taken longer than he hoped and he’s still not finished yet. Obviously not having got my hands on the new version yet I can’t say for sure whether he’s done the right thing by doing so much and making his current and potential users wait a little longer, but from just those screen shots I expect he’ll not suffer for it.

I’m in a similar position with the next version of CaseDetective for FogBugz, although I’ll admit I run the risk of having even less to show for my efforts than Marco.

The next version of CaseDetective has taken longer than I hoped, but there’s good reason for it. The next release of CaseDetective, while retaining all the extract functionality of the previous version has changed a huge amount “under the hood” to make it more scalable and able to cope with FogBugz databases with large volumes of cases.

And, funnily enough, a lot of the functionality that has enabled me to make this version of CaseDetective more scalable comes from Marco’s original work on the SQLite plugin for REALbasic that was bought by REAL Software and integrated into REALbasic 2005 and later (I’m currently using REALbasic 2006r1).

I hadn’t planned on taking so long with CaseDetective 1.1, I expected it to be a small update with a few features that had been asked for, the most important of which being support for MS Access databases. But once I had that feature pretty much in place I found it too irresistible to extend the mechanics of the solution towards some longer term feature ideas and scalability requirements.

CaseDetective 1.1 will now cache all the case, event, attachment and reference data from the FogBugz server’s database on your desktop machine in a REAL SQL Database (SQLite3). Once the first full sync is complete only data from changed cases and the reference data will be synchronized when asked for.

CaseDetective-1_1-Refresh-SneakPeek_1.jpg

There are huge benefits in doing this:

  1. Network and server load is greatly reduced. CaseDetective used to hit the network and database server pretty hard if the filter pulled back a lot of cases, now it’s a local lookup to a very fast database with no network traffic. After the initial sync, only reference data and data from cases that have changed since the last sync are retrieved.
  2. Switching from one filter to another takes a fraction of the time in certain cases. Because there’s only local querying of a local database where CaseDetective controls the indexes needed, those queries can be much faster to execute and the data is available with very little latency.
  3. CaseDetective 1.1 can now support FogBugz servers using Microsoft Access databases as their back end. This is only possible because the queries to sync the data are pretty simple in comparison with the complex filter queries which MS Access couldn’t support in an ANSI SQL standard compliant way.
  4. Abstracting the FogBugz database opens up previously difficult to implement future features. And no, I’m not telling what they might be just yet! :-)

After achieving the MS Access compatibility goal, my next biggest goal in this area is support of large FogBugz databases. My ultimate goal is to get to the point where CaseDetective works well with Fog Creek’s own FogBugz database, which at last count had over 250,000 cases in it, and by now surely is exceeding 300,000. This is going to take some work, file sizes for the cache are going to get rather large with that many cases and associated event and attachment records, I can see file size limits being exceeded unless some partitioning of the data happens. But that’s a future goal, I doubt there are many installations anywhere near that size just now, so I’ll address that in a future release.

The observant among you will have noticed the funny little “Switch View” button in the toolbar of the above screenshot, I’ll explain all about it in a later “Sneak Peek”.

For now, that’s enough details on what’s in the pipe line for CaseDetective, I’d better go get on with finishing it, there’s still some way to go just yet.

Quick tip for taking screen shots.

Quick tip for taking screen shots…

Have folder (mine’s called “Blank”) on your desktop.

Open said folder and maximize/strech it to cover your entire desktop, making sure it’s background is pure white.

Open application and take screen shots with plenty of the white folder background surrounding the window being captured.

If you’re taking screen shots of modal dialogs or sheet windows (Mac OS X) then before opening the dialog window make sure the main window is either moved out of the way or made small enough to be hidden by the new window.

This will give you a nice clean screen shot without any clutter from other windows on the edges.

Alternatively, just set your desktop background to white and hide the desktop icons (can be done on both Windows and Mac with a couple of clicks).

I prefer the first way as all I have to do is open up the blank folder and switch back to my app, but if you’re constrained for space (i.e. using 800×600) then the desktop method works well.

You can see this in action on my screen shots page for CaseDetective for FogBugz. The Mac OS X shots are taken with a blank folder for background, the Windows ones are taken with a white desktop and hidden desktop icons.

Update (2006-02-19): This post was inspired by a question across on the Business Of Software forums.

One response was to use Alt+Print Screen to capture just the window. Here’s my response to that…

The problem with Alt+Print Screen is that it still captures a rectangular area, so if you have rounded corners to your window (Windows XP) then you’ll get some of the background show through.

Using a white (or whatever colour you need) folder background fixes that quickly without having to get your paint brush out!

Cheap, simple and effective.

And if you were to use something like SnapX Pro on the Mac to take a screen shot of a Windows app in Virtual PC then you’d need to select a screen area rather than window.

Also, I’ve found that by using a fixed screen area for my screen captures I can get a consistent image size for both my Windows and Mac screen shots simply by re-sizing my windows to fit. This helps a lot as you’ll not have any problems in fitting those images into a neat grid, which always looks much nicer (in my opinion anyway). You’ll also get much crisper window edges if you take a screen area rather than single window, at least that’s what I’ve found anyway.

Change in SCM

A while back I wrote about my development setup, a part of which is of course Source Code Management (SCM).

At that time I was using Perforce, which I was more than happy with, it sure is a great system, fast, efficient and very stable. I had no real problems with it at that time.

However, at the beginning of the year I moved to Subversion.

There are two main reasons for this:

1) Just like Cade I felt the cost of buying a license prohibitive.

If I should need to step up from the free 2 users/workspaces version I would need to outlay $800, which is way out of my league just now. And because I’ve been hopping between my Desktop and Laptop I’ve been very aware that I don’t have any slack there, I couldn’t for example do a secondary checkout of a back version without dropping one of my users or over-writing my current workspace. The 2 workspaces/users limit is too strict when you want to do anything except straight-line development (a second computer is at least a second workspace, even if copied from the first computer).

Subversion is free.

2) I want to be able to submit versions while on the road (i.e. at REAL World 2006) or from either my desktop or laptop.

This means I need to run my SCM on my laptop, as I can’t be sure I’m going to have a solid connection to a remote server while on the road.

I also use “Portable Home Directories” to sync my home directories between my desktop and laptop, this means I might be half-way through some development when I sync between the two and then carry on development on the second computer. With Perforce this is impossible to do, as Perforce recognizes different computers as being different workspaces (or users, never quite worked it out), and gets in a bit of a tizzy when you try and check in stuff from a different computer than which you checked it out on.

For Subversion I’ve downloaded Martin Ott’s (co-founder of TheCodingMonkeys) compiled version 1.3.0 which includes the more stable fsfs rather than bdb back-end.

I’m now running svnserve locally on my computers as me, with the repository sitting in my home directory. This means I can check in any time I like on either machine as Subversion doesn’t lock on check-out by default. And because of the sync going via my server I have a backup there (onto an external hard-disk), along with scheduled backups to my .Mac iDisk and another networked external hard-disk. This means my repository is sitting in at least 5 separate places (not counting backups to CD/DVD)!

All in all I’m much happier now that I have Subversion, it’s moved on a lot since I last looked at it, it seems very stable and I’m finding it a lot quicker to use now that I’m back to the command line too. I did enjoy using a GUI with Perforce, and I’ve looked at some of the offerings available for Subversion, but in the end I’ve found the command line more than adequate.

Plants are your friends

Merlin of 43 Folders has a nice post where he promotes solving problems by writing a note to yourself.

He discusses a lot of ways to progressively get to the root of your problem without bothering other people.

However, I think he’s missed the first and most important step, get a plant.

Eh? Get a plant? What do you mean Mr. Jones?

Get a plant, any plant will do (I have a cactus), and put it on your desk. Now, when you have a problem that you just can’t see around, talk to your plant about it.

As you explain your problem to your plant (in simple terms so that it can understand, they’re not that intelligent you know) you may find the solution just jumps out of thin air, it happens to me all the time.

Go on, give it a try!

REAL World 2006 – Preliminary Schedule

So, here’s my preliminary schedule for REAL World 2006, what’s yours?

iCalScreenSnapz001.jpg

I should probably point out that the session at 15:00 on Tuesday is “A Practical Approach To The Perfect Product Launch”, not “A Practical Approach To The Perfect Product”, that would be a little grandiose!

Also, the last day is pretty much up in the air as there’s this concept of voting for repeated sessions for when there are conflicts, and some sessions just haven’t been set yet. Even so, I already have a conflict on the Friday, I want to attend both “Windows User Interface Design” and “Database Reporting”.

Happy New Year!

Happy New Year!

Yeah I know, not the most original of titles, but it is timely (almost)!

I’m really looking forward to the coming year, primarily as it’s the make or break period for CaseDetective for FogBugz and anything else my company might produce.

I’ve been away for the Christmas period visiting my family “Down South” but kept an eye on my email and forums. As expected there wasn’t much in the way of support requests for CaseDetective as most people interested in CaseDetective were enjoying Christmas too, but there was a very nice volume license sale just a couple of days before Christmas, which was very nice and timely of itself.

Before releasing CaseDetective I set some sales goals that I hoped to achieve before the end of the year, in the paltry 6 weeks I had to do so. I had a “realistic goal” and an “optimistic goal”. The realistic goal was accomplished within a week of release and by the end of the year I’d more than doubled my optimistic goal. So things are looking good for this year, as long as I continue to improve CaseDetective to attract more users.

As I’ve actually made a few sales I thought it a bit silly to keep my blogs tag line as “So, I want to be an ISV…”, as technically I now am an ISV, with real customers and all that. Hence I’ve changed my tag line to “So, now I’m an ISV…”. I know, sheer genius!

I had been thinking about launching another product (or ten, my mind’s racing with ideas at the moment), but having the time to think about things over the last couple of weeks and the initial sales success I’ve since decided to work only on CaseDetective for the next couple of months.

I was going to accomplish development of these new products by splitting up my day to allow for a couple of hours “spiking” in the afternoon, but the following post will explain how I’m now going to structure my day.

Once again, Happy New Year to you all, here’s hoping we all accomplish our dreams this year!