Blogs

Dejal year in review: 2007

The year 2007 was a good one for Dejal, with lots of releases, nicely growing revenue, and other goodness. Here are some highlights from the year:

LeopardApple released Mac OS X 10.5 "Leopard" in October. It is an excellent upgrade, with hundreds of enhancements, both at the UI level and in terms of frameworks and tools for developers.

Simon: My flagship website and server monitoring tool had two significant updates, versions 2.2 and 2.3, with several fix updates bringing it to 2.3.5. These versions added the versatile Script service and notifier, plus several other plug-ins and lots of other improvements.

Time Out: Version 1.5 of this popular freeware break reminder app was released, with 1.5.1 as the latest release as of this writing. This version added a much improved icon, layout tweaks, and other changes.

Caboodle: This handy snippet-keeper app was updated to version 1.1, with the current release being 1.1.3. These releases added import and export functions, enhanced printing, and many other improvements.

Narrator: My fun speech synthesis app hasn't been updated for a number of years, but I've been working on a rewrite of it using Leopard technologies, which is currently in private alpha testing, and will be available publicly soon.

BlogAssist: This useful HTML markup tool was updated to version 2.1, with 2.1.2 the latest release. It added a very useful Services menu command, allowing inline replacement of text -- something I use daily. Plus other changes.

Macfilink: My affiliate link cloaking app was updated to version 1.4, with 1.4.2 the latest currently. It didn't have many changes, since it is a very simple app that does one job well, but it had some tweaks.

Dejal site: The Dejal web site also had a number of improvements in 2007. Back in January, the entire site was migrated to a new server, driven by a hybrid of custom PHP code and the Drupal CMS. It uses my custom code for the product and store pages, among others, and Drupal for the remainder -- basically any page with a navigation menu or login fields in the sidebar is a Drupal-powered page. Using Drupal allows easy blog posting, forums, FAQs, plus combined account management and commenting. I also added a Developer section, where I share some of my Cocoa code for other Mac developers. The screenshot slideshows were also improved, using JavaScript instead of reloading the page each time, and I added JavaScript to the Store pages to make them prettier. Speaking of the Store, I also implemented PayPal's Instant Payment Notification service, allowing purchases to be processed promptly and automatically.

2007 was also an interesting year in terms of Mac events. I attended Macworld for the first time (as an attendee only, not an exhibitor), which was quite interesting. I also attended my second WWDC.

What will 2008 bring? I don't want to pre-announce too much, but you can expect updates to all of my current apps, some of them major upgrades with significant new looks. One such is Time Out version 2, which I'm really excited about. Another is Narrator 2, which will be going into public beta testing very soon.

My year in cities, 2007

Here are all of the cities I spent one or more nights in during 2007:

Portland, OR (home)
San Francisco, CA (for Macworld & WWDC)
Sunriver, OR

Much less travel than last year.

My wife did more travel in 2007: she went to Italy with a friend, Dallas for work, and Seattle for a concert.

Fourth annual HobbitFest

My wife and I have a recent holiday tradition which we call "HobbitFest": a marathon of watching the extended editions of all three Lord of the Rings movies in one day. It takes about 12 and a half hours, including short breaks between each movie and in the intermissions: the extended editions are each so long that they're spread over two DVD discs, so we have breaks when swapping discs.

We consider Lord of the Rings to be the best set of movies ever created. I may be slightly biased, since it was filmed in my native New Zealand, and by a Kiwi director. But even after watching all three movies several times, we still really enjoy the story and cinematography.

I'm not sure what we'll do once the two Hobbit films are done and available on DVD. No doubt they'll have really long extended editions, too... so we might have to make it a two-day event.

Yesterday was our fourth annual HobbitFest. It was a fun day. We enjoyed snacking on "Sarlacc dip", aka spinach dip and sourdough bread -- a favorite dip, named for a Star Wars themed party many years ago. Sometime we should come up with more LotR-themed snacks... salted pork, crackers, etc, perhaps.

Yes, sometimes my geek shows. I'm just glad that I married another geek, so we can geek out together. :)

Happy Holidays!

MacSantaHappy holidays everyone!

I will continue to be available for sales and support queries over the holiday period, though responses may be a little slower than usual.

Remember, the MacSanta discounts are still available till the end of 2007... and even though the Extended Deals participants are supposed to offer 10% off, I'm offering the same great discounts as on my featured day for the rest of the year -- several more than 20%.

Visit the Dejal Store and enter the MACSANTA07TEN coupon (that link will automatically apply it) to take advantage of these special deals. But hurry -- they are only available till the end of 2007!

Thanks again to Paul Kafasis at Rogue Amoeba for organizing the promotion.

Best wishes to everyone; have safe and pleasant holidays. Special thanks to my valued customers. 2007 has been a great year for Dejal, with the ever-increasing popularity of my products, and I'm looking forward to the many improvements planned for 2008.

Macfilink 1.4.2 released

Macfilink, the affiliate link cloaking tool, has been updated to version 1.4.2.

This update includes a few useful fixes, plus changes the distribution method from disk images to ZIP archives -- a change I'm rolling out for all of my products with each subsequent release.

You can read the release notes, or download now!

A sneak peek of Narrator 2

Narrator version 2 is coming... a long time coming. It's been over four years since the last update, which is way too long.

Version 2 is a major upgrade, a complete rewrite. It requires Mac OS X 10.5 "Leopard" as it uses the latest technologies. Version 1.1.4 will remain available for people who aren't ready for Leopard.

At present it is incomplete, and in private alpha testing, but a public beta should be available in January, with a general release a little later.

The features are still being worked on, but here's a sneak peek at a couple of them.

Firstly, there's a new Character (voice) marker in the text, instead of using text colors:

Marker

Secondly, the Character configuration area is now in the window sidebar, and has a description of the Character and individual reset buttons for each of the voice sliders:

Detail area

This will be a paid upgrade (the price to be determined, but probably not much). But I'll offer a generous free upgrade period: everyone who purchased Narrator since October 1, 2007 will be eligible for a free upgrade. So, of course, if you purchase Narrator now, you will qualify for a version 2 license at no further cost -- and will likely save money, as I'm also thinking of increasing the price a little.

If you've purchased Narrator (or are about to), feel free to contact me to get access to the alpha release.

Stay tuned for more information about this new version.

MacSanta continues till the end of the year

MacSantaThanks to everyone who purchased on my featured MacSanta day. It was a great success.

But it's not too late! This year MacSanta has an Extended Deals page where participating developers are offering 10% off for the rest of the month, using the coupon code MACSANTA07TEN.

I am rebelling against that a little, though: I'm offering the same great discounts as on the featured day for the rest of the year -- in fact many are more than 20%.

Visit the Dejal Store and enter the MACSANTA07TEN coupon (that link will automatically apply it) to take advantage of these special deals. But hurry -- they are only available till the end of 2007!

Thanks again to Paul Kafasis at Rogue Amoeba for organizing the promotion.

MacSanta is back!

MacSantaMacSanta is back with more big savings! For the month of December, many independent Mac software developers are offering great deals on their products, via the MacSanta site.

Each day, a few developers will be featured, with 20% off their products using the special coupon code MACSANTA07. You can still save 10% from developers from previous days via the Extended Deals page and the coupon code MACSANTA07TEN.

Dejal will be featured on the main page on Tuesday. The MACSANTA07 coupon is now active at the Dejal Store.

Thanks to Paul Kafasis at Rogue Amoeba for organizing the promotion again this year.

Having RSS issues

I'm having issues with my RSS feed. Sorry about that. I think I've fixed it, so this is a post to see if it's working now, as well as to apologize for the issues.

I think it happened as a result an update to the Drupal CMS I use.

BlogAssist 2.1.2 released

BlogAssist version 2.1.2 is now available.

BlogAssist is a helpful tool; it adds a system menu (on the right-hand-side of the menubar) with a list of operations that can be performed on text. You can copy some text, choose an operation, and paste -- the text will be marked up based on the chosen operation. The operations include HTML and forum markup. If you prefer, a floating palette is also available (to drag the text), or you can mark up inline by selecting text in your web browser or editor application, hitting Cmd->, and choosing the operation in a small window that appears, then click OK to substitute it right in the app.

Very handy... I use BlogAssist daily. For example, the product icon, release notes link, and download link in this blog post were generated very simply by BlogAssist.

Anyway, this update adds German localization, improves the French localization, plus a few other changes.

Download now!

Simon 2.3.5 released

Simon version 2.3.5 is now available.

This update includes lots of changes, as follows. I considered calling it version 2.4, but strictly speaking all of the changes are improvements or fixes, not new features, which is my rule for bumping the second digit:

  • Improved the notifications to avoid notifying again if the test is already failing; it used to notify again if the error was slightly different, but that's usually just annoying. You can turn off the "Only notify once for each failure" checkbox to get repeatedly notified until recovery.
  • Improved the SSH service to avoid protocol identification warnings in the Console.
  • Fixed an issue with the FTP service where it had the wrong default protocol, which caused the incorrect Edit Test view to be displayed.
  • Improved the FTP service to work with the Security section of the Edit Test window, allowing checking secure FTP sites (without having to prepend the username and password to the URL).
  • Fixed a bug with the Basic service plug-in where it would mistakenly look for cookies for FTP services, which while harmless most of the time, can cause crashes in some situations.
  • Fixed a bug in the MySQL notifier plug-in where the Password field wasn't enabled correctly when using notifier-specific authentication.
  • Fixed a minor typo in a couple of report templates.
  • Fixed the tooltip for the "keep backup" checkbox in the Advanced preferences.
  • Enhanced the URLs for the Help menu to better support localization.
  • Updated the built-in Kagi purchasing tool to the latest version, which fixes some issues with Leopard.
  • Updated the French localization.

Download now!

Black Friday specials

Dejal cornucopiaHere in the US it's Thanksgiving Day tomorrow, which is traditionally followed by "Black Friday", a day of big discounts at retail outlets.

In keeping with that tradition, I'd like to wish you all a happy Thanksgiving and offer my own discounts. Until the end of the weekend, you can get big discounts of all of my products via the Dejal Store - no coupon or special code needed.

Save up to $50 on a Simon license, and similar large discounts on the other products. Hurry, this offer expires on 2007-11-25!

Happy Thanksgiving!

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

Syndicate content