Blogs

Caboodle 1.1.3 released

Caboodle, the handy snippet keeper tool, is now at version 1.1.3.

This bug-fix update addresses a bug with opening attachments: if you happen to have two attachments in Caboodle entries with the same name, and open both of them, Caboodle might have opened the first file again instead of the second one, thinking it was the same file. This is because the attachments are saved to a hidden temporary folder before they are opened. Now, Caboodle saves each attachment in a unique sub-folder, ensuring that files with the same name are still treated as different.

This update also adds German localization, kindly done by Ulf Dunkel of DSD.net, along with a few minor tweaks that came up during localization. Ulf will act as a reseller of Caboodle for German-speaking customers. Please purchase via his store to give him a cut of the proceeds.

This version is (as far as I can tell!) fully compatible with Leopard, and back to 10.3.9.

Download now!

Cocoa: custom attachment in a text view

I recently posted a query to CocoaDev asking for help with inserting a custom attachment cell into a text view. I had spent quite some time investigating and experimenting, and searches showed several people who had the same question, but no satisfactory answers. Some comments I read suggested subclassing NSTextView, which I tried, but not very satisfactorily.

Fortunately, Douglas Davidson was kind enough to point me in the right direction, combined with helpful off-list discussion with another developer who was working on much the same problem.

I thought I'd share my solution here, in case it helps anyone else. It turned out to be easier than I'd expected. Note: this is written for Leopard with Garbage Collection, so doesn't have releases etc.

Firstly, a file wrapper is used to create a placeholder TIFF with a special "sub-extension" to identify it. I could store any kind of data, but I use a placeholder image so if the user pastes the text into another app, it shows up as something nicer than a generic document icon. The identifier is a unique reference to the data that the attachment represents:

- (NSFileWrapper *)fileWrapperWithIdentifier:(NSString *)identifier;
{
    NSString *wrapName = [[identifier stringByAppendingPathExtension:@"myspecialmarker"] stringByAppendingPathExtension:@"tiff"];
    NSSize size = {100, 18};
    NSData *data = [[NSImage imageNamed:@"AttachmentPlaceholder"] TIFFRepresentation];
    NSFileWrapper *wrapper = [[NSFileWrapper alloc] initRegularFileWithContents:data];
   
    [wrapper setFilename:wrapName];
    [wrapper setPreferredFilename:wrapName];
   
    return wrapper;
}

This method inserts the attachment with the above wrapper and my custom cell:

- (void)insertMarkerWithIdentifier:(NSString *)identifier;
{
   NSFileWrapper *wrapper = [self fileWrapperWithIdentifier:identifier];
   NSTextAttachment *attachment = [[NSTextAttachment alloc] initWithFileWrapper:wrapper];
   MyAttachmentCell *cell = [MyAttachmentCell new];

   cell.identifier = identifier;
   [attachment setAttachmentCell:cell];

   [[myTextView textStorage] appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
}

I use a couple of text view delegate methods to write the cell's file wrapper to the pasteboard as file contents, allowing it to be copied, dragged, and saved to disk with the text:

- (NSArray *)textView:(NSTextView *)aTextView writablePasteboardTypesForCell:(id <NSTextAttachmentCell>)cell
             atIndex:(NSUInteger)charIndex;
{
   return [NSArray arrayWithObject:NSFileContentsPboardType];
}

- (BOOL)textView:(NSTextView *)aTextView
       writeCell:(id <NSTextAttachmentCell>)cell
         atIndex:(NSUInteger)charIndex
    toPasteboard:(NSPasteboard *)pboard type:(NSString *)type;
{
   if (type == NSFileContentsPboardType)
       [pboard writeFileWrapper:[[cell attachment] fileWrapper]];

   return YES;
}

And to convert the attachment back to my custom cell after pasting/dragging/loading it, the text storage delegate (which is set via [[myTextView textStorage] setDelegate:self];). It looks for TIFF attachments that have my special marker "sub-extension" but aren't using my custom cell, and replaces their cell with my custom one:

- (void)textStorageWillProcessEditing:(NSNotification *)note;
{
   NSAttributedString *text = [myTextView textStorage];

   if ([note object] != text)
       return;

   NSUInteger length = [text length];
   NSRange effectiveRange = NSMakeRange(0, 0);
   id attachment;

   while (NSMaxRange(effectiveRange) < length)
   {
       attachment = [text attribute:NSAttachmentAttributeName atIndex:NSMaxRange(effectiveRange) effectiveRange:&effectiveRange];

       if (attachment)
       {
           if ([attachment isKindOfClass:[NSTextAttachment class]] &&
               ![[attachment attachmentCell] isKindOfClass:[MyAttachmentCell class]] &&
               [[[[attachment fileWrapper] preferredFilename] pathExtension] isEqualToString:@"tiff"] &&
               [[[[[attachment fileWrapper] preferredFilename] stringByDeletingPathExtension] pathExtension] isEqualToString:@"myspecialmarker"])
           {
               MyAttachmentCell *cell = [MyAttachmentCell new];
               [cell setIdentifier:[[[[attachment fileWrapper] preferredFilename] stringByDeletingPathExtension] stringByDeletingPathExtension]];
               [attachment setAttachmentCell:cell];
           }
       }
   }
}

The custom attachment cell is a subclass of NSTextAttachmentCell, to simply draw in a custom way.

I hope this is helpful to others.

Dejal and Leopard

LeopardAll the cool kids are doing it, so it must be my turn....

Mac OS X 10.5 "Leopard" is available tomorrow. It's a great update, that I've mostly enjoyed using for the past few months, so I highly recommend it to everyone. But an important consideration is always: will my existing software run on the new OS version? So here's a summary of the Leopard compatibility status of Dejal products, as far as I'm aware.

I should point out that this is based on a recent seed (pre-release version): Mac developers don't get the final version of Leopard any sooner than you do... and in fact get it later if they wait for the copy Apple sends as part of the Apple Developer Connection membership. There's been a bit of an uproar about that, but it was the same with Tiger, and will probably be the same again with the next big cat. Such is life.

Simon: My website and server monitoring tool runs fine under Leopard. It has been updated to use Leopard's window style for the Monitor window when running under 10.5, or the custom window style under 10.4 or 10.3.9. I plan on making several more Leopard improvements in a future version.

Time Out: Version 1.5 of this break reminder app was released not long ago, which added Leopard compatibility. It has no known issues with 10.5. Work on version 2 is underway (though currently paused); you can expect that in Q1 2008. It will require a minimum of 10.5, as it leverages several Leopard technologies.

Caboodle: This handy snippet-keeper app is also Leopard-ready as of the current release, version 1.1.2. I have big plans for Caboodle over the coming year, once I've done the other updates.

Narrator: My fun speech synthesis app hasn't been updated for a number of years, but appears to run okay under Leopard. I am currently working on a long-overdue new version of it -- actually a complete rewrite. The new version requires a minimum of Leopard. Watch the Dejal blog for more information about that as it progresses.

BlogAssist: This useful HTML markup tool is Leopard-ready as of the current release, version 2.1.1. It will also see some improvements in 2008, using technology being developed for Time Out.

Macfilink: My affiliate link cloaking app hasn't had an update for Leopard yet, but it seems to work okay. I haven't decided what to do for its next update, but it's possible I'll replace the data storage with Core Data for the Leopard update. It's the lowest priority, as this app does one job and does it very well as-is, so it doesn't need much tinkering.

So there you go. I hope you enjoy Leopard as much as I do. Please let me know if you discover any compatibility issues, but as far as Dejal products are concerned, you should be good to go!

Possible Dejal site downtime this week

The Dejal site will be moving to a new server at a new data center sometime this week, as part of a planned migration that my web host is performing. Hopefully this will result in improved reliability and performance of the server. But in the meantime, the site may be offline for a while.

They assure me that there shouldn't be any noticeable downtime, or only for a few minutes. But you never know with such operations, so I thought I'd provide warning here. Apologies in advance if you try to access the Dejal site and get an error. Please just try again later if you do.

Rest assured that I will be closely monitoring the situation (via Dejal Simon, of course!), and will do what I can to minimize any downtime.

Simon 2.3.4 released

Just a couple of days after version 2.3.3, here's another bug-fix update for Simon.

I really don't like doing releases so close together, and apologize for any inconvenience... but I figured that it was soon enough that many people wouldn't have got the weekly update notification yet. And the issue this update fixes affected a reasonable number of people, so was important to address quickly.

The main point of this update is to fix Mac OS X 10.3.9 compatibility, which was broken in the 2.3.3 release. It also fixes a minor bug with the status menu, that nobody has reported (or probably noticed), but was worth fixing regardless.

So, how was 10.3.9 compatibility broken, you may ask? Well, I develop on my MacBook Pro under Leopard, but it doesn't have the compiler for 10.3.9 installed. So to do a release I open the project on my PowerMac G5 running Tiger, do a clean build there, plus update the localization, then package the release up in a disk image and upload it back on the MBP. It's a little convoluted, but doesn't really take much longer than just using one machine, since both computers are on my desk, and I can open the project via file sharing.

Anyway, the important part there is a "clean" build -- if I forget to clean the code (i.e. throw away already-compiled binaries and re-compile it), the app won't work on 10.3.9. This has bitten me a few times, though I usually catch it quickly.

Of course, this issue will go away in due course, as each app is upgraded to require a minimum of Leopard -- which will happen over the next year or so.

So, sorry again if you upgraded to Simon 2.3.3 and have to upgrade again. Only about 5% of Simon customers are using 10.3.9 still, but that's enough people to make this quick update worth doing. If you are using Tiger or Leopard, you could skip this update... but there's no harm in updating, too, especially if you didn't already update to 2.3.3.

Download now!

Simon 2.3.3 released

Version 2.3.3 of Simon, the website and server monitoring tool, has now been released.

It is an important update, recommended for all Simon customers. Apart from some minor updates to the German localization and Growl support, it also includes three important changes:

Firstly, the way the test scheduling works has changed. In recent previous versions, I had added a "secret" preference called overlap prevention, which was on by default. This prevented more than one test from being automatically checked at once, as a way to reduce the load on the machine and ensure accurate checking times. The problem with this, though, is it could cause some tests to never get checked if the tests table is sorted by Next Check date and there are lots of tests, as they become queued but are never reached. This was because it scans for candidates to start in the sort order, and always found another queued one before the earlier queued one. Kinda convoluted, and only affecting a few people, but there it is.

This release goes back to allowing multiple tests to be checked at once, but changes things so they are started at least one second apart, even if they fall due at the same time. It uses the same checking interval as set in the Advanced preferences for checking all or multiple selected tests. It still scans in sort order, but it adds all due tests to a queue and starts them one second apart, ensuring that the computer isn't overloaded.

Another important change is to fix a bug in the Edit Test window. I spent a couple of vexing days tracing this, with the most valuable help of a customer. The mystery was that Simon seemed to be forgetting about notifiers assigned to tests in some random conditions. I couldn't recreate it, and added logging to trace what was happening to the data, and nothing seemed missing. Yet when the customer viewed the test configs, sometimes it'd only list one notifier when there should be three or so assigned to the test. Yet if he added the notifiers back, the next time he checked the missing ones would be back, along with the new ones. Wacky!

It turned out that this mysterious situation was just a cosmetic issue. No notifiers were being lost. What was happening was the disclosure triangles were interfering with the loading of the lists of notifiers (and auto-pause and reports). If the disclosure was in a collapsed state when the window was opened, the notifiers list UI wouldn't be visible, so wouldn't be resized to show more than one notifier. If it was in an expanded state, all worked as expected. So the fix was simply to set the disclosure triangle state (and thus UI visibility) after loading the lists, rather than before. An easy oversight, but and important one!

Lastly, this update has several report enhancements. One is to allow digits in test short names (as used for URLs in reports), to allow for people who name tests like "UL102", "UL104", etc, i.e. differing only by digits. Another report change is to handle the file:// protocol better. When saving a report locally to the Desktop or some other location that isn't in the global or user-specific web sharing folders, the report is accessed via the file:// protocol rather than http://. That's all fine and dandy, but several report templates use directories for detail pages to provide tidy URLs, which doesn't work so well with the file:// protocol, as it opens directories as folders in the Finder. So this version solves that by adding the detail page (e.g. index.html) to the end of the URL. As part of that, it also adds a new report variable, SummaryPath, which is like BasePath but includes the index in the URL of the Summary page when saving to a file:// URL - useful for links from the detail pages back to the summary page.

Lots of good fixes and improvements. Download now!

I'm the MacTech Spotlight for October 2007

MacTech magazine has a monthly feature at the back of each recent issue called "MacTech Spotlight", where they devote a page to Q&As with a developer or other personality in the Mac community. They've talked with Paul Kafasis of Rogue Amoeba, Wolf Rentszch of Red Shed, and several others.

This month was my turn.

I haven't seen how the article turned out yet (my copy's in the mail), but hopefully it'll be okay. :) I talked about how I originally got into computers and programming, how Dejal got started, what I like about Apple and Mac OS X, how I come up with product ideas, and more.

For those interested, MacTech offers discounts on subscriptions - 60% off the cover price, or a limited-time offer of a six-month sub for only $9.95.

Simon tip: automatic offline support

One "hidden" feature of Simon is how it handles the situation when your computer loses its internet connection.

People sometimes ask me what Simon does in this situation, concerned that it would count as a failure for tests. Simon is smarter than that, though. Every time it starts a check, it first checks if the computer has a current internet connection, and only then performs the check.

If it determines that your internet connection has been disrupted, it places the test in an "offline" state, where it shows a blinking "lightning bolt" for the status icon until the connection is restored. This offline state doesn't count as a failure (or success).

Simon works out if you have a connection by seeing if it can resolve one of two popular domain names; if either work, your connection is probably fine, but if both fail, it is likely disconnected. Using two domains avoids a temporary outage of either one.

From version 2.3 onwards, you can disable this internet connection check on a per-test basis via the new Can check when offline checkbox in the Edit Test Checking Options. This is useful if you want to create a test to notify you when your connection goes down, or for tests that don't require an internet connection (e.g. using the Application or Script service plug-ins).

Test Options

Caboodle tip: alias a file instead of copy it

A quick tip for Caboodle, from the FAQ:

Normally when you drag a file into a Caboodle entry it copies it, allowing you to delete the original. But often you want to keep the original in place too, and want to avoid bloating Caboodle's data with large files (or folders).

The solution is to hold down the Control () key when dragging the file or folder to the Caboodle entry: the mouse pointer will change to include an alias symbol instead of the green plus. It will then make an alias (link) to the original. Then when you double-click on the file (or view it inline for images and PDFs), the original will open. Of course, in this case you shouldn't move or delete the original file.

Piwhacket: 1994 - 2007

Piwhacket, our beloved cat of about 13 years, passed away early this morning, following a week of veterinary treatment, due to kidney and heart troubles.

My wife and I got Pi as a kitten, shortly before we got married. She was named after a cat in the movie "Bell Book & Candle".

Pi was a great kitty, who enjoyed sitting on my lap while I work, despite bad eyesight making it harder for her to jump up. She had a cute "quack" sound she'd make when she wanted attention. When we were sick, she was always there to comfort us. She was our pretty princess. She is greatly missed.

Piwhacket

Piwhacket's opal eyes

Internet people commenting on the universe

A clip show! Here are three fun videos I saw in the last week or two. You may have already seen them, but they're enjoyable to watch again if so.

Firstly, Internet People, a fun song featuring lots of popular names in the blogosphere. I think I recognize most of these, though there are a few I don't. (Via WebbAlert - see that link for a list of everyone mentioned in the video.)

Next, a hilarious video on what a business meeting would be like in the style of web commenters... less well behaved ones than on Dejal, anyway! Warning: not suitable for work (NSFW):

Don't miss the followup from the same people, which is perhaps even funnier (and also NSFW).

Finally, an impressive video that starts out with an aerial view of a picnicking couple, then slowly zooms all the way out to 100 million light years from them... then back in again down to a microscopic level. Along the way, it includes an indication of the scale in powers of ten. Very impressive. (Via Dark Roasted Blend, a great site of interesting images and videos.)

And here's a similar scale-of-things site, as a clickable animation.

Enjoy!

Simon tip: shortcut for entering test URLs

The Web (HTTP) service is the most popular one for tests. So I thought I'd share a helpful tip with adding them.

When entering the URL, you can use very minimal text, and Simon will fill in the remainder when you click OK. It automatically adds the default protocol ("http://") and the "www." and ".com" if necessary.

For example, if you type "apple" (without the quotes), it will be saved as "http://www.apple.com/". Similarly, entering "dejal/simon" will end up as "http://www.dejal.com/simon/".

Web (HTTP) test

Happy anniversary, Dejal

Dejal anniversary

Today is the 16th anniversary of founding my company. 16 years ago today, on September 20, 1991, I started Dejal, with an aim to produce high quality Mac software. Actually, the exact date could be argued: I had used the Dejal name informally for years before that, as a kind of nickname for myself, and the company grew organically over time, with things like getting a commercial bank account and registering the name at different times during the growth. But September 20th was when historic evidence points to me having started treating my programming hobby as a business.

I had produced a bunch of freeware products beforehand, but my first shareware product was called SndPlayer, a Classic Mac app to play a bunch of sounds easily. It was started on October 24, 1991, and first released on February 24, 1992. It's still available on my site (now freeware), too.

Thanks to everyone who's purchased products or offered congratulations this week. You've still got a couple of days to take advantage of the anniversary specials:

Buy now with the anniversary discounts!

Be quick — these specials expire on Sunday, September 23, 2007.

Dejal's sweet 16!

Dejal anniversary

I first started selling Mac software under the Dejal name in September 1991... which makes this Thursday the 16th anniversary of the founding of the company. Wow... it's certainly been a while!

As a celebration of this event, I'm offering discounts on all of my products from today till the end of the week. No special codes or coupons required, but you need to use the online store, not the in-app purchasing tool, to take advantage of these low prices.

Buy now with the anniversary discounts!

Be quick — these specials expire on Sunday, September 23, 2007.

Choosing big cats

LeopardWhenever a developer does a major new release, one of the many issues that they need to consider is which OS versions to support. It's always a tradeoff: having the apps continue to work with older versions allows more people to use the product, whereas the more it is restricted, the more new OS features can be leveraged.

Let's explore the second point first. Each time Apple does an OS upgrade, they make some cosmetic UI changes, add new bundled apps, and so forth, but they also introduce new or improved development frameworks, APIs, and tools. For example, in Tiger (10.4) Apple introduced Core Data, a sophisticated database-driven data modeling and storage API, among others. While it is possible to use some new functionality by checking for its availability, some are more fundamental, so just have to be done without to maintain support for older OS versions.

Apple's Non-Disclosure Agreement forbids me to talk about the new features in their upcoming OS, Leopard (10.5), other than what has been publicly announced. But it should be clear from the available information that Leopard is one of their most significant OS updates, with numerous UI changes, and for developers, Objective-C 2.0, which includes fundamentally different memory management and other improvements.

Being able to leverage the new technologies in Leopard will offer a huge advantage in terms of the features that can be added, and the efficiency of the underlying code. To maintain compatibility with Tiger, a developer would either have to forgo these features, or write lots of code to emulate them. Certainly doable... but is it worth it?

That brings us to the other side of the equation: how many people would benefit from a release that supports an older OS? Thankfully, history provides some guidance. Of course, it should be pointed out that every market is different, and people find software in lots of ways. Lots of people, probably the majority, just pick up a few boxed software products when they buy their Mac at a local Apple store or other retailer, and never explore beyond that. They only need a few core apps, many of which come bundled with the Mac, and that's all they want.

While I'd love to bring my products to the attention of these people, the ones that most interest me are those who actively seek out third-party indie apps to enhance their Macs. This subset tend to be early adopters, often upgrading their computers every few years, and thus getting the new OS then, or they go out and buy the OS as soon as it is released, or perhaps after an update or two, to ensure it is stable. In fact, one could hypothesize that there is a strong correlation between the speed of upgrading the OS and that of upgrading third-party apps. Or put another way, if someone isn't interested in keeping the OS up-to-date, they are probably less interested in keeping third-party apps up-to-date, or even trying third-party apps.

I have tracked OS versions of people using my products, as many other developers do, and these numbers support this hypothesis. For fascinating interactive charts showing the OS versions and other attributes of the Omni Group's customers, see their update charts.

So, there seems to be little benefit in maintaining support for older OS versions, and several benefits from being able to leverage the new technologies.

As for my own products, I do plan to require Leopard when I next do major upgrades of each product, but they will be phased in over time. I will continue doing updates that support 10.3.9 and later in the meantime. Even after the major upgrades, the older releases will continue to be available for customers who aren't ready to upgrade their OS. Hopefully that will keep most people happy, while allowing me to move forward.

New Zealand and the US: a comparison

As some of you may know (if you've read the About Dejal page), I was born in New Zealand, and moved to the US in 2001. I'm a citizen of both countries, and both have special places in my heart.

As a fun distraction yesterday, and to satisfy something I've been curious about, I superimposed a map of New Zealand (and a portion of nearby Australia) on one of the US, using the same scale for each. I lined up New Zealand's east coast with the US's east coast, being a similar angle.

The result is quite fascinating. It shows that New Zealand is about the same size as the small east coast states of the US, and where I am in Portland, Oregon is an equivalent distance from New York (say) as between Auckland, NZ and two-thirds of the way across Australia.

USA with NZ and Oz superimposed

Some interesting statistics (numbers from Wikipedia): New Zealand has a land area of 103,738 square miles and a population of 4,228,000. Compare that to the US's area of 3,718,695 square miles and population of 302,394,000... bit of a difference! Interestingly, the state of Oregon has an area of 98,466 square miles and population of 3,421,399 - both only a little smaller than the entire NZ.

I also did another comparison image, this time with Greater Auckland (NZ's largest city, actually a metro area made up of four cities) superimposed on Greater Portland (a medium-sized US metro area, Oregon's largest city). The size difference wasn't all that great this time, unsurprisingly; both Auckland and Portland have similar population sizes. In numbers, Auckland has a size of 419 square miles and population of 1,329,900, while Portland covers about 600 square miles with about 2 million people. Both have constraints on growth, too: Auckland has two harbors limiting growth, and Portland has very firm urban growth boundaries.

Portland with Auckland superimposed

What does all this mean? Nothing profound. The US is big. NZ is small. NZ is about the same size as Oregon. Auckland is about the same size as Portland. Whatever the sizes, they are both great places to live.

Oh, and I'm entirely too fascinated with maps. :)

Simon 2.3.2 released

I just found a bug that was inadvertently added in the previous release of SImon, where the License or Setup Assistant windows might not display. This was an unintended side effect of the change in 2.3.1 to avoid reusing the editor windows - as they and the license windows share some common code, but work in very different ways.

This was previously reported in the forums, but I couldn't recreate it till today, when I was testing something else in Simon. There were workarounds, but I felt that it was important enough to warrant a special bug-fix release. Particularly as the Simon Enterprise license will be featured on MacZOT tomorrow! (There's a tip for anyone wanting a cheap license.)

If your copy of Simon is already licensed, you could skip this update if you wish... but there's no harm in updating. For anyone who has experienced this issue, I apologize for the inconvenience.

Download Simon 2.3.2 now!

Simon tip: notify via email

I recently received a question from a potential customer, asking whether Simon has the ability to send a notification via email.

Although I do mention it in a number of places, this wasn't an unreasonable question, particularly if you just download Simon and start playing with it, as no email options appear in the list of available notifiers in the Edit Test window by default.

Why is this? Because unlike the Speech and Sound notifier plug-ins, the Email one requires some configuration before it can be used, so it can't be offered by default.

The way notifiers work is (I hope) pretty intuitive, but a little indirect. Simon provides a number of notifier plug-ins that do the work of notifications, and you configure notifiers to use those plug-ins, then choose notifiers for each test.

These levels of abstraction allow easy re-use of notifiers: a single plug-in can be used by multiple notifiers, and a single notifier can be used by multiple tests, without having to set up the same things over and over again.

For example, you can add an email notifier to yourself for some failures, another email notifier to your clients for other failures, another one for recoveries, and so on, and use whichever ones of those are desired in tens or hundreds of tests, as required, as simply as choosing them from a pop-up menu.

Test Notifiers

So, as I said, there is no email notifier set up by default, since it needs configuration, but you can easily add one. If you're editing a test and realize that you want to receive an email or SMS when this test changes, fails, and/or recovers, you can click the New Notifier... button in the Notifiers section of the Edit Test window, which will open the New Notifier window. You can then choose E-mail from the Notifier Kind pop-up menu, and the controls below will change to those for the email plug-in:

Email Notifier plug-in

You can then configure the email, and save the notifier, which will be available for that test and any others you want to use it in. Easy!

Simon 2.3.1 released

Simon version 2.3.1 is now available. This release is a bug-fix version, with just a few changes:

  • Rewrote the Port service plug-in to use a helper app to do the work, to avoid instability caused by multithreading and resource usage issues.
  • Added support for the Preview function for the Port service plug-in. It displays the session script at the top, and the actual transcript of the check at the bottom.
  • Changed editor windows to not reuse the window instances, to avoid issues with windows appears incorrectly in some circumstances.
  • Added German localization, thanks to Manfred Brandstater.
  • Updated French localization, thanks as always to Philippe Bonnaure.

I'd like to give special thanks to Manfred for his hard work in getting the German localization done, and also to the couple of German Simon customers who provided feedback on pre-release builds. If you have any feedback on the localization (issues, suggestions for improvements, compliments for Manfred, general comments), please let me know.

Also of note in this version is the rewrite of the Port service plug-in. I've had several reports of crashes and other issues with SImon, which on investigation all traced back to the Port services. There was definitely something NQR there. It's a complex plug-in, though not the most complex. I've tried patching it a couple of times in the past, without complete success, so the time had come to refactor it more significantly. I moved the checking work out into a separate helper app (aka an "agent"). The plug-in launches the background-only helper when starting the check, which does the work, then quits itself when done. This allows avoiding multithreading, which I believe was a factor in the problems, along with some other optimizations that will make it more reliable. And worst case, if it does crash, it won't take out Simon in the process. The crashes do seem to be a thing of the past, though, which is great. Thanks also to the customers who tested pre-release builds with this change.

Another benefit of this refactoring is that it has allowed adding Preview functionality. The Port plug-in did allow previewing in an older version, but I had to disable it when I changed the way the plug-ins worked (from keeping an instance around for the life of the app, to using a separate one for each check). But now I've re-enabled this functionality, and improved it. The Preview window for Port-based services now displays the session script at the top of the window, and the resulting transcript of the check at the bottom (much like for Scripts). This is very handy for ensuring that the test is doing the right thing, or seeing more detail about why it is failing - e.g. whether the session script is incorrect, or the server is misbehaving.

Download Simon now!

Be your own customer

A comment by Chris Smolinski of Black Cat Systems on the Mac Small/Software Business mailing list (there doesn't seem to be any consensus if it's "Small" or "Software") inspired me to share my views on this: "Be your own customer."

This was in response to a question on how to get good ideas for software, with the popular opinion being that scratching your own itch can lead to great product opportunities. Find something that irritates you about existing products, or something you want to do that isn't covered by an app already, and create a solution.

I can vouch for this approach. Although my products started out in various ways, most of them started because there weren't any satisfactory solutions at the time. For example, Simon began as a way for me to watch for website updates, and became more sophisticated as it became popular. There weren't any easy-to-use Mac products for site monitoring at the time - and the ones that did exist don't anymore. Similarly, I created Time Out to improve my health, since I can suffer from eyestrain when staring at a computer for hours on end. BlogAssist was written specifically for my wife, who was really into LiveJournal blogging at the time... but I find I use it a lot, too. All of the products have grown and evolved over the years based on customer feedback, but also my own ideas, since I use them myself on a daily basis (e.g. I used BlogAssist's Services window four times to create the links in this post).

When you are your own customer, or "eat your own dog food", to use that colorful and somewhat unpleasant phrase, you notice little irritations in your initial implementation, and can do something about it. Chances are, your paying and potential customers are also noticing such issues. They can can also be a great source of ideas for better ways to do things that you may not have thought of, perhaps because you're so used to a certain way of doing things.

So if you're a developer looking for the next big hit, or just something to get you started, look inside yourself for your inspiration. Sure, an idea has to have some market appeal to be a success, but even seemingly niche products can be successful if you do a good job. Put your heart into it, and people will respect that. Keep working on it, and using it yourself, and word will spread.

Syndicate content