David Sinclair's blog

Last chance for the Mac Bundle Box!

[Mac Bundle Box]

The Mac Bundle Box promotion is almost over! Last chance to get Simon Standard and 11 other apps for just $49.00!

This great bundle expires in just a couple of days, so if you've been thinking about it, wait no more!

The bundle includes a Standard license for my Simon, the essential website and server monitoring tool. Use it to watch your own sites for failures, or others' sites for changes, and get notified via Twitter, email, sounds, speech, or other means.

Simon Standard retails for $59.95. This is the first time it has ever been included in a bundle. If you're at all interested in Simon, you'll save $10 and get 11 apps for free by buying this bundle... if you hurry!

Other apps in the bundle include:

  • Freeway (normally $79.99)
  • Keynote Themes (normally $39.00)
  • DEVONthink (normally $49.95)
  • myNotes (normally $24.95)
  • iCash (normally $60.00)
  • DaisyDisk (normally $19.95)
  • Web2Delight (normally $19.95)
  • Chronicle (normally $19.95)
  • xHub (normally $24.95)
  • Stomp (normally $29.95)
  • Exces (normally $30.00)

Visit the Mac Bundle Box site now to take advantage of this great deal. Don't delay!

Announcing DSActivityView: open source for iPhone developers

This blog post has been replaced by a newer edition.

Please see blog posts on DejalActivityView.

DSActivityViewI recently wrote a reusable class for a couple of iPhone apps I'm currently working on, called DSActivityView. I decided to release it as open source. Read on for details.

Firstly, I should say that this work was inspired in part by Matt Gallagher's excellent article, Showing a "Loading..." message over the iPhone keyboard. My code only uses the -keyboardView method from his article, but he deserves credit and thanks for that and many other helpful articles. If you're not reading his blog, Cocoa with Love, you're doing yourself a disservice.

Back to my class. Actually, there are three classes: DSActivityView, DSBezelActivityView, and DSKeyboardActivityView. They provide three styles of activity view, and could easily be extended to support more.


DSActivityViewThis does a simple horizontal-style loading view, intended for situations where you have a blank view while loading data. It can be displayed very easily — for the default "Loading..." label text, simply use:

[DSActivityView activityViewForView:self.view];

The activity view is automatically added as a subview of the specified view (e.g. the current content view). No need to save the result to an ivar. It automatically supports rotation to any orientation, too.

You can specify a custom label via:

[DSActivityView activityViewForView:self.view withLabel:@"Processing..."];

Or specify a custom width, e.g. so you can change the label while it is being displayed without upsetting the geometry, via:

[DSActivityView activityViewForView:self.view withLabel:@"Connecting..." width:100];

Then when you're done with it, simply invoke this to get rid of it:

[DSActivityView removeView];


DSBezelActivityViewThis is a subclass of DSActivityView, which displays an animated round-rect-enclosed variation: it animates into view by zooming from full-screen, with a gray background fading in to cover the passed view, and animates out by zooming to half size and fading out the background (see below for a movie showing it in action). It is ideal for situations where you have content visible already, but want to do a network operation to validate or send data, or some other time-consuming activity.

Display it via:

[DSBezelActivityView activityViewForView:self.view];

The [DSBezelActivityView activityViewForView:withLabel:] and [DSBezelActivityView activityViewForView:withLabel:width:] variations are also available. To remove with animation, call:

[DSBezelActivityView removeViewAnimated:YES];


DSKeyboardActivityViewThis is a subclass of DSBezelActivityView, which displays over the keyboard, somewhat like the OS 2 Text app used to do. It is useful to simply prevent further typing while validating a field or sending data (though you might also want to disable the field, to prevent pasteboard operations on it). No need to specify a view to use for this, since it uses the keyboard:

[DSKeyboardActivityView activityView];

Plus a [DSKeyboardActivityView activityViewWithLabel:] variation for custom text. Remove it the same as for the bezel style:

[DSKeyboardActivityView removeViewAnimated:YES];


I've included a demo project that builds an app to show the various options: the three styles, default or custom label text, covering just the content view or whole window, etc. It requires iPhone OS 3. Here's a movie showing the demo app running:

You can get the project from my Dejal Open Source Subversion repository via this Terminal command:

svn checkout http://dejal.svn.beanstalkapp.com/open/DSActivityView

Or browse the source directly on the web.

You can also download a snapshot, though it may not remain up-to-date; using Subversion is the recommended approach.

Follow @dejalopen on Twitter for automated Subversion commit message updates. You may also like to follow @dejaldevdiary for my behind-the-scenes development diary, and @dejal for general Dejal and personal tweets. Finally, there's also a RSS feed for the repository.

I hope these classes are useful. You are welcome to use them in any project, commercial or otherwise. I just ask that you give me credit; see the DSActivityView header for the easy and free licensing terms. If you do use this code in any form, please tell me (or comment here).

If you make improvements, e.g. to add other activity styles or fix bugs, please send them to me so I can share them with the community. Thanks.


Update: see also an update to optionally support the network indicator, and an update for iOS 4.

Mac Bundle Box 5 now available!

[Mac Bundle Box]

The fifth Mac Bundle Box, a collection of 12 great apps, is now available!

$458.59 worth of software for the low price of just $49.00! An amazing deal. Plus 10% of each sale will be donated to Charity: Water, a very worthy cause.

The bundle includes my own Simon, the essential website and server monitoring tool. Use it to watch your own sites for failures, or others' sites for changes, and get notified via Twitter, email, sounds, speech, or other means. The bundle includes a Standard license, which retails for $59.95 and enables up to 20 tests. If you need more, you can upgrade to the Enterprise license for much less than the normal standalone price. So you can get 12 amazing apps for less than the normal price of a Simon Standard license! It's a no-brainer.

Other apps in the bundle include:

  • Freeway (normally $79.99)
  • Keynote Themes (normally $39.00)
  • DEVONthink (normally $49.95)
  • myNotes (normally $24.95)
  • iCash (normally $60.00)
  • DaisyDisk (normally $19.95)
  • Web2Delight (normally $19.95)
  • Chronicle (normally $19.95)
  • xHub (normally $24.95)
  • Stomp (normally $29.95)
  • Exces (normally $30.00)

Buy Simon Standard from the Mac Bundle Box, save $10, and get all these other apps for free! :)

Visit the Mac Bundle Box site to take advantage of this great deal, while it lasts!

Anatomy of a feature

Brent Simmons wrote today about the anatomy of a feature, an article that really resonated with me.

It's tempting to think that adding a feature like this is just about adding the functionality — but there's a bunch more to it than that.

I get a lot of feature requests for my apps, which are certainly very welcome. But I think a lot of people don't quite realize how much work even the most trivial-sounding feature enhancement can be.

Brent gives a very clear and accurate picture of the process many developers, myself included, go through when considering and implementing such changes. Every aspect of them needs to be carefully analyzed and refined. Perhaps someone asks for a specific feature, but I can tell that what they really want is something different — they just came up with what sounded to them like an easy compromise, when the ideal solution might in fact be easier, as well as better for the overall app. Happens all the time.

But as I said, I do really value feature requests (and bug reports). I want my apps to work well and be as helpful as possible to my customers. For that reason, I keep track of such requests for each app, and also keep a running tally of "votes" for each feature (which sometimes requires some interpretation when different people have different takes on something). When lots of people are asking for the same thing, it rises to the top of my list, and I make it a priority for the next release. But only if I can do it in a way that is consistent with the design goals of the app. That's the tricky part.

Good thing I enjoy planning; I spend much more time analyzing and planning features than actually writing them.

Follow @dejaldevdiary for David's Dev Diary

Just thought I'd mention for any Mac or iPhone developers who read my blog, or customers who are interested in a behind-the-scenes look at my development process:

I recently joined the club and created a David's Dev Diary account on Twitter. It is a separate place for me to post a potentially boring diary of my development work. It is focused purely on the technical aspects that I normally wouldn't bother mentioning on my main Twitter account, @dejal.

Follow @dejaldevdiary on Twitter for all the highly exciting technical details (and maybe a hint or two about what's coming up... e.g. I'm currently working on a secret new iPhone app).

For a list of other developers writing diaries, check out the Dev Diaries website.

Pan-Mass Challenge software auction

[PMC Software Auction]

Seth Dillingham is hosting a Pan-Mass Challenge software auction once again this year, as a fundraising project for a Massachusetts cancer care charity.

He wants to collect hundreds of software products, which will be auctioned via his site soon.

This is a very worthy cause. I've participated the last couple of years, and am happy to participate again this year. I am donating at least 10 Standard licenses for Dejal Simon, at least 10 licenses for Dejal Caboodle, at least 10 licenses for Dejal Narrator plus at least 10 licenses for Dejal BlogAssist (about $1,140 total value). I encourage other Mac developers to join in, too.

For more information, visit the PMC Software Charity Fundraiser site.

Impressive a cappella rendition of Toto's Africa

Very well done; this choral ensemble (Perpetuum Jazzile) performs the Toto song "Africa", a cappella, complete with human-produced rain and thunder sound effects:

(via @tamarcita)

The Mac Bundles is almost over!

Last chance to get Caboodle and eight other apps for just $49.95!

This great bundle expires in just a couple of days, so if you've been thinking about it, wait no more!

Click here for more information.

Tweeting cats

As you may have read before, Dejal products are tweeting — posting updates via Twitter.

I also post a mix of Dejal news and personal events on my Twitter account, @dejal, though I don't tend to be overly chatty. My life isn't all that interesting, I guess. I do recommend that anyone interested in hearing about Dejal updates or me should follow that account, though.

But I was going to write about cats. We have three cats. The oldest is Pixel, a 9-year-old orange tabby, star of the Caboodle icon. He's a crotchety old man, so doesn't have much to say.

The younger two are littermates, Padmé and Pippin, both almost two years old.

Padmé is a royal princess, a petite dilute tortie. She is on Twitter as Princess Padme (@princess_padme), and posts about once a day, always in haiku. For example, one from a few days ago:

Fluttering insect/
On the cat tv today/
Must be food channel

Her brother Pippin is also on Twitter. He's not the brightest bulb; when we first met him at the cat shelter, he was stepping in his water dish, looking at his paw in a confused way (how did it get wet?), then repeating. He's a funny guy, who loves to jump and play. He's on Twitter as Pippin the meeper (@leapybobeepy), though doesn't post all that often.

There are actually a lot of cats on Twitter, including really popular ones like @sockington. So we felt it'd be fun to encourage our youngest two to join in too. Follow them for the occasional dose of humor from the cat perspective.

Caboodle 1.3.2 released

Caboodle has been updated again... just a couple of weeks after the previous release. This version includes some improvements to adding entries by dragging text and documents to the Dock, and an important safety fix thanks to a helpful customer.

This is a recommended update for everybody, especially people with slower machines.

Changes in version 1.3.2 include:

  • Dragging text to Caboodle's Dock icon now adds a new entry with that text (including rich text, e.g. from a word processing document or web page).
  • Dragging any document to Caboodle's Dock icon also adds a new entry with that document as an attachment, and the document's name as the Subject. Even easier to add entries!
  • Added a safety check to ensure the data has been fully loaded before handing a Services menu request, to avoid risk of data loss if Caboodle isn't running when adding an entry via the Services menu.

Download Caboodle 1.3.2 now!

Note, Caboodle is still available as part of the great bundle from TheMacBundles.com: 11 apps for just $49.95. Take advantage of this deal before it expires!

Caboodle in TheMacBundles!

I'm pleased to announce that Dejal Caboodle, my "lean, clean snippet machine" is included in the second TheMacBundles collection.

Caboodle is a handy tool to help collect and organize various bits of text, images, PDFs, and other information. It includes support for custom fields and freeform rich text and other content, plus can encrypt your entries to keep them secure, and import and export several formats. It is simple and easy to use. A full license is included in the bundle, not some cut-down version.

You can see more of it on the Caboodle page, or download it now to give it a try.

This bundle also includes 10 other fine apps, for only $49.95. A bargain!

The included apps are:

  • Caboodle (normally $19.95)
  • IPNetMonitorX (normally $60.00)
  • MailTags (normally $29.95)
  • PrintMagic (normally $29.95)
  • ShutterBug (normally $39.95)
  • Trampoline (normally $19.95)
  • Typinator (normally $28.00)
  • Voila (normally $39.95)
  • World Clock Deluxe (normally $19.95)

And for the next 14 days, these bonuses are also included:

  • Dock Gone (normally $14.95)
  • Smart Trash (normally $10.00)

11 apps for just $49.95 — a saving of over 80%!

Visit TheMacBundles.com to learn more, or to take advantage of this great deal.

Caboodle 1.3.1 released

Caboodle, my lean, clean snippet machine, has had a number of updates recently. This is a little bug-fix update to address some minor issues, but is a recommended update for everybody.

It includes:

  • Improved the handling of imports to use multi-threading only when appropriate.
  • Added exception handling and an alert when saving the data, in case something goes wrong, e.g. too much data being saved.
  • Prices increased slightly.

Tip: Caboodle will be included in the next edition of The Mac Bundles, coming in just a few days. Subscribe to their mailing list to be notified when the bundle is available.

Download Caboodle 1.3.1 now!

Simon 2.5.2 released

Simon, my essential website and server monitoring tool, has just been updated to version 2.5.2. It includes a number of fixes, and is a recommended update for everyone:

  • Added exception handling to the Web plug-in, to catch any low-level errors that occur there. Mac OS X 10.5.7 seemed to introduce a bug with URL connections that could sometimes get stuck when reading cookies.
  • Added a hidden preference to output debug information from the Web plug-in. It can be activated by entering "defaults write com.dejal.simon2 WebDebugMode YES" in Terminal.
  • Updated the Twitter plug-in to use the latest version of the MGTwitterEngine, which fixes issues related to the Twitpocalypse. Simon wasn't affected, as it always fetches the latest tweets, but good to be up-to-date anyway.
  • Changed the Report output to avoid making URLs lowercased when outputting the Location variable.
  • Fixed an issue that could prevent finding licenses in very rare circumstances.

Download Simon now!

Caboodle and BlogAssist price adjustments and specials

As you may have read from the recent version 2.2.2 release of BlogAssist, I increased the price by $5 to $14.95 for an Individual license, to better reflect its value. As discussed, it really should be higher, but I felt a small increment was better at this stage. I will likely bump up the price a bit more with the next major upgrade (no date announced for that yet).

I also indicated that you can still get it at the old price for a limited time, only via the Dejal Store.

Today, I'd like to announce that the price of Caboodle, my handy snippet organizer, is also going up by $5 to $19.95 for an Individual license. At $14.95, it is significantly under-priced, when competing apps are often around $50.

You can also get Caboodle at the old price via the Dejal Store for now. This offer is only available for a short time, though, so if you're interested in Caboodle, I recommend buying soon.

I have big plans for both of these apps: both will see significant enhancements within the next year. For Caboodle, I'd like to add a companion iPhone app to view and (hopefully) edit entries remotely — with full syncing between iPhone and Mac apps, and between multiple Macs. Along with a refactoring of the UI and data models, and more.

I don't plan on adjusting the prices of other apps at this stage; Simon and Narrator both seem priced about right.

As always, I welcome feedback about these changes, either via comments here or private feedback.

BlogAssist 2.2.2 released

Announcing an update to my handy HTML markup tool, BlogAssist.

This is technically a bug-fix release, but has some changes that have been much requested, and takes the unusual step of increasing the price slightly — but you can still buy it at the old price for a limited time via the Dejal Store. It also increased the minimum system requirements to Tiger, as per my standard policy for updates now: all apps will drop Panther support as they are updated. The previous version, that supports 10.3.9, is still available for those who have old machines, though.

I decided to bump up the price slightly mainly because it is way too cheap for what it does. Even at the new prices, it is really too cheap — it should be more like $25. But increasing prices too much in this economy doesn't seem like a sensible idea. :) Even at the new price, it's still a bargain, and I hope it won't cause any hesitation. I have lots of ideas for future enhancements, so a more sustainable price helps support future work.

Here are the changes in version 2.2.2:

  • Pressing Enter in the Services window will now always work as an equivalent for the OK button, instead of inserting a new line in the active field (pressing Return will still do so, though).
  • No longer always adds itself to the Login Items on launch. Still does so on the first launch (when running from the Applications folder), as a convenience, but not after that. You can toggle the preference off or on as desired.
  • Fixed an issue that could prevent finding licenses in very rare circumstances.
  • Removed the old crash reporter, since it doesn't support Leopard crash logs.
  • Prices increased slightly (get at the old price via the Dejal Store for a short time!).
  • Now requires a minimum of Mac OS X 10.4 (Tiger).

Download BlogAssist now!

Simon tip: watch MU Promo sales

As you may or may not know, MacUpdate Promo is having a fantastic bundle of 13 apps for just $49.99. Unfortunately, they somehow missed Dejal apps from the bundle, but maybe next time.

Anyway, Christian Owens, the mastermind behind another great series of bundles, Mac Bundle Box (which I have participated in previously, and will again for the next one), alerted me to a handy use of Simon: watching the sales figures for the MU Promo bundle.

I've long used Simon to watch download rates, reply counts, and other information, but this is another great example of how useful Simon can be. It looks at a specific portion of a page, and lists the new values when they change. By checking at a fixed interval, e.g. every 15 minutes or half an hour, you can see how fast it is selling, in this example.

[Simon Monitor]

Setting it up is simple: just enter the URL and the HTML source on either side of the interesting value. That's easy to find, too. While the Add Test window is open, click the Preview button to show the Preview window, Cmd-F to find the value, then select some distinctive text before it, and click the Copy to Test button to copy it to the Start text field. Repeat with text after the value, and Simon is smart enough to copy it to the End field. That's it!

[Simon Preview]
[Simon Edit Test]

Easy, and very useful.

Got a favorite trick with Simon? Let us know in the comments or Simon Forum.

Panic sale!

It may seem strange for a software developer to recommend buying from another developer... but that's what I'm doing now.

Panic Inc is a fellow Portland-based Mac software development company, albeit a larger one, run by a couple of great guys and their talented staff. They produce some great apps, including Coda, a highly-recommended single-window HTML and CSS editor app, which I use to edit the Dejal site. Plus Transmit, a handy FTP tool, which I also use regularly to manage my site. Along with Unison, a usenet reader, and CandyBar, an icon management tool.

From now until the end of May 29, they are having a great sale: 50% off all of their products. So if you're in the market for one of their apps, I urge you to check out their sale page and take advantage of this great discount.

Visit the Panic Half Price Sale page.

And no, they haven't asked me to promote their sale — I'm just a fan of their products, and want to help spread the word.

Edit: A great promo video (via Cabel, Panic's CEO):

Caboodle 1.3 released

Caboodle version 1.3 is now in general release:

  • Added an optional Save PDF to Caboodle item in the printing workflows (i.e. the menu in the PDF button in print panels), making it really easy to save any document to a new entry just by (effectively) printing it to Caboodle.
  • Added a menu command to the Caboodle menu to Install PDF Workflow..., so you can install it later if desired.
  • Added a PDF... option to the Import sub-menu. PDFs are imported as attachments in new entries.
  • The folder hierarchy is now preserved when importing; folders are imported as entries with a folder icon and no text content.
  • Added Web Archive and HTML options to the Export sub-menu. The Web Archive format is nice and tidy, and can be displayed in any modern web browser. The HTML export outputs the entries as folders of HTML files and images.
  • Improved the handling of exports to use multi-threading only when appropriate.
  • Added General Preferences to include or exclude the creation and modification dates, Subject, and/or custom fields when printing and exporting. They are all included by default.
  • Changed the format of the printed/exported dates to be the same as displayed in the window, and fixed a bug where it was outputting the creation date instead of the modification one.
  • Fixed a cosmetic bug where having an entry selected, doing a search and not selecting anything, then clearing the search would leave the selection without displaying the corresponding entry content.
  • Fixed an issue that could prevent finding licenses in very rare circumstances.
  • Updated the French and German localizations.
  • Added Dutch localization.

Download Caboodle 1.3 now!

Note that Caboodle will be featured on MacUpdate Promo tomorrow (Wednesday). A great opportunity to get it at a big discount, but for one day only!

Seeing upcoming breaks in Time Out 2

Time Out, my free break reminder tool, remains my most popular app, despite the slowness in getting the promised version 2 completed.

As I've bemoaned before, I have too much to do, and not enough time. But I keep trying. I will get Time Out 2 released eventually, though I can't say when.

Anyway, one of the most popular feature requests from the current versions is a way to see when upcoming breaks are due. Some people suggest an indicator on the Dock icon, others would like a display in the system menus (like the battery indicator on laptops). Some would prefer a floating window, or perhaps a Growl notification.

When I get such requests, I have the pleasure of telling those people that their wish will be granted: I currently plan to include all of those options in Time Out 2. You'll be able to see upcoming breaks in the Dock icon, in a system menu, in a floating window, and/or via a Growl notification... or any combination or none of those.

For the Dock icon, I'm thinking of drawing live clock hands and wedges indicating when the breaks are due, so you can see that you have a micro break in a few minutes, and a normal break in about half an hour, for example. But another much-requested feature will be that Time Out will continue without the icon in the Dock, so other indicators are also useful.

The system menu would display the number of minutes until the next break, or perhaps the time of the next break (as an option). The floating window would likely display a clock and wedges like the Dock icon. And Growl notifications could be added to alert you a specified number of minutes before a break is due, along with other kinds of notifications, like in Simon.

Those are just a few of the features planned... there's lots more too. Now I just need to find the time to implement them!

Thank you to all the kind people who have provided helpful feedback and donations to support this project. I appreciate it!

Caboodle 1.3b3 released

Thanks to a Caboodle forum post, this release fixes a issue with the new exports:

  • Fixed an issue with the new HTML and Web Archive exports, where it could have an exception due to performing it on a secondary thread.
  • Updated the French, German and Dutch localizations again.

If all is well, this should be about ready for general release.

Download 1.3b3 now!

Syndicate content