David Sinclair's blog

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!

Caboodle 1.3b2 released

Caboodle version 1.3b2 now asks before adding the PDF workflow, just in case someone doesn't want this very handy feature. If you install it and don't want it, you can simply delete the alias file from the PDF Services folder; see the Caboodle FAQ for more information.

  • Added an alert panel to ask if you want to install the print PDF workflow, since some people might not want it (e.g. if only trying Caboodle). Only appears once.
  • Added a menu command to the Caboodle menu to Install PDF Workflow..., so you can install it later if desired.
  • Updated the French, German and Dutch localizations.

Download Caboodle 1.3b2 now!

This space intentionally left blank

I don't like to be too repetitive on my blog, and have had a few releases in a row, and another on Monday... so wanted to post something non-release-related.

But I couldn't think of any topic.

So enjoy this blank space....

 
 
 
 
 
 

Oh... you might enjoy following our cat Padmé on Twitter: @princess_padme. For some reason, she always posts in haiku. Must be a princessly thing.

Time Out 1.5.4 released

Announcing an update to my popular (and free!) break reminder tool, Time Out.

Version 1.5.4 has the following changes:

  • Replaced the use of an undocumented routine to check the idle time with an approved one, to fix compatibility with the upcoming Mac OS X 10.6 (Snow Leopard) operating system.
  • Updated the bundled Adium scripts to support the current versions of the Adium instant messaging client, thanks to Nic Munroe. Note: if you used a previous version of Time Out, the scripts won't be replaced, in case you've customized them. You can download the updated scripts from the Time Out Extras site.
  • Fixed an issue with the Preferences window, where edits might not be saved when quitting with the window still open (specifically when an edit is still active).
  • Removed the old crash reporter, since it doesn't support Leopard crash logs.
  • Now requires a minimum of Mac OS X 10.4 (Tiger).

If you are still using Panther (or, horrors, earlier), you should skip this update until you get around to upgrading your OS. The minimum requirement change was necessary for the Snow Leopard fix (and is a general policy for all updates now anyway).

I haven't actually tested Time Out under Snow Leopard — I don't have that installed yet. But I heard from an Apple guy that the previous version didn't work with that OS, and that this was the reason. So I'm confident that this update will fix this (if you use a Snow Leopard seed, please let me know).

Download Time Out now... did I mention it's completely free?!

(Though I do encourage donations... and everyone who donates before Time Out 2 is released will get a license for that at no further cost. Unfortunately, version 2 is still several months away....)

Caboodle User Guide updated

Just a quick note to say that I've updated the online Caboodle User Guide for the version 1.3 release.

Updated pages include:

  • Getting Stuff Into Caboodle: Added a paragraph describing the new Save PDF to Caboodle print workflow.
  • File Menu: Mentioned the new General preferences when printing.
  • Import Menu: Updated to list the new PDF import format.
  • Export Menu: Updated to describe the new Web Archive and HTML export options.
  • General Preferences: Updated to describe the new preferences to include/exclude the date, Subject and custom field headers when printing and exporting.

I also updated the main Caboodle product page, too.

Caboodle 1.3b1 released

Caboodle, my handy snippet keeper, has a beta release of version 1.3.

Version 1.3b1 includes a number of much-requested improvements to importing, exporting and printing:

  • Added a Save PDF to Caboodle option to 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 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.
  • 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.

Download Caboodle 1.3b1 now!

Happy Earth Day!

Everyone grab yourself a copy of Time Out, to help remind you to look up from your computer occasionally.

Take a look out the window, stretch a bit, perhaps go for a little walk. Your body will thank you.

And hey, it's free!

Download Time Out now.

Not enough time!

I'm feeling vexed. I have several projects I'd like to work on, but just don't have the time at present.

I have big plans for Simon, Time Out, Caboodle, and my other apps. Each has a long list of great feature enhancements for the next several versions.

Plus I'm working on a semi-secret new project that includes an iPhone app and Mac app that sync via a web app. That is somewhat vexing in itself; it takes time to develop quality software, so that time delays updates to my other products. (I do plan on sneaking in some updates soon, though.)

To top it off, I also do contract work for a client in New Zealand, and am currently working on a major update for that, with a fixed deadline that pushes other work aside. I might do an iPhone app for them, too.

I work seven days a week, doing Dejal customer support mostly in the mornings and development in the afternoons and evenings. But I wish I had more hours in the day so I could do more — or more precisely, get things done more quickly. I'll get to everything eventually, but just not as quickly as I'd like.

I have a really high-tech scheduling system, consisting of printed pages for each quarter of the year, and Post-It notes of different colors for each project:

Schedule

(The gaps are reserved for safety margins, if things take longer than expected, as they often do, and for bug-fix updates.)

This is mounted near the ceiling on the wall in front of me, so I can easily see it whenever desired. It is frustrating when I have to move the Post-Its around due to things taking longer than expected, though... and more so when I have to push a project off the end of the year.

It should be noted that these Post-Its only represent significant updates and new projects; bug-fix updates and very minor updates can be snuck in at any time, as needed.

But enough moaning... I've got work to do!

Developers should iPhone-optimize their sites

A while ago I wrote how the Dejal site is iPhone-optimized: when you view it on an iPhone or iPod touch, the website content is reformatted to fit neatly in the 320-pixel-wide display:

I would suggest that any developers who write iPhone software should do this too. So here's some technical info on what I did. This isn't necessarily the best solution, but it works for me, and isn't very difficult.

Firstly, of course, you need to be able to detect whether you're running on an iPhone or elsewhere. The standard way to do this is by looking at the "user agent" value of the HTTP session. In PHP, you can simply look at the $_SERVER['HTTP_USER_AGENT'] global variable. I have the following function in a utility PHP file included on every page (via the header code):

    function getIsIPhonePlatform()
    {
        global $private_is_iphone_platform;
        
        if (isset($private_is_iphone_platform))
            return $private_is_iphone_platform;
        
        $user_agent = $_SERVER['HTTP_USER_AGENT'];
        $private_is_iphone_platform = stristr($user_agent, 'iPhone') || 
            stristr($user_agent, 'iPod') ||
            stristr($_GET['platform'], 'iPhone');
        
        return $private_is_iphone_platform;
    }

This function returns whether or not the user agent is an iPhone or iPod touch, either by returning the state if already known, or determining it if not. It also allows testing the iPhone-optimized pages from your Mac by adding "platform=iphone" to a page's URL parameters (try it; it's fun!).

Not everyone would want the pages optimized, though: a great thing about the iPhone is MobileSafari does an excellent job of rendering "real" web pages. So I also added a checkbox at the bottom of every page to toggle iPhone-optimized mode off and on. The state is recorded in cookie. So I have another function to read that, on the iPhone platform:

    function getIsIPhoneOptimized()
    {
        global $private_is_iphone_optimized;
        
        if (isset($private_is_iphone_optimized))
            return $private_is_iphone_optimized;
        
        $private_is_iphone_optimized = getIsIPhonePlatform();
        
        if ($private_is_iphone_optimized && isset($_COOKIE['iphone_optimized']))
            $private_is_iphone_optimized = $_COOKIE['iphone_optimized'];
       
        return $private_is_iphone_optimized;
    }
Then the checkbox is actually output (in the footer's include file) via somewhat messy code that uses PHP to output the JavaScript to set the cookie and reload the page when the checkbox is toggled, and the checkbox itself:
    function outputIPhoneOptimizationCheckbox()
    {
        if (getIsIPhonePlatform())
        {
            $query_params = $_SERVER['QUERY_STRING'];
            
            if ($query_params != '')
                $query_params = '?' . $query_params;
            
            echo('<script type="text/javascript">' . "\n");
            echo('<!--' . "\n\n");
            echo('function iphoneOptimizedToggled()' . "\n");
            echo('{' . "\n");
            echo('  document.cookie=\'iphone_optimized=' .
                !getIsIPhoneOptimized() . '; path=/\';' . "\n");
            echo('  window.location.reload(true);' . "\n");
            echo('}' . "\n\n");
            echo('-->' . "\n");
            echo('</script>' . "\n\n");
            
            echo('<p><input type="checkbox" id="iphone_optimized_checkbox"
                onclick="iphoneOptimizedToggled()"');
            
            if (getIsIPhoneOptimized())
                echo(' checked="checked"');
            
            echo(' /><span id="iphone_optimized_label"
                onclick="iphoneOptimizedToggled()">
                Display site optimized for iPhone</span></input>' . "\n");
            echo('</p>');
        }
    }
And finally, the getIsIPhoneOptimized() function is called in the header to use iPhone-optimized or normal style sheets. This is actually a simplification; it actually uses several style sheets, including some common ones and some platform-dependent ones. It also sets the viewport appropriately for each platform — that is a key aspect for iPhone optimization:
    if (getIsIPhoneOptimized())
    {
        echo('<link rel="stylesheet" href="/iphone/header.css"
            type="text/css" media="all" />' . "\n");
        echo('<meta name="viewport"
            content="width=device-width, user-scalable=no" />' . "\n");
    }
    else
    {
        echo('<link rel="stylesheet" href="/mac/header.css"
            type="text/css" media="all" />' . "\n");
        echo('<meta name="viewport" content="width=900" />' . "\n");
    }
Of course, configuring the CSS appropriately is another story, but not too difficult... and very site-specific. Feel free to explore my CSS files if desired: I hope this is helpful. There are a number of other aspects, like fitting images in the available space, supporting movies that can play on the iPhone, and more. If there's interest, I might write more about this in the future.

Dejal products are tweeting!

If you haven't been living under a rock, you've probably heard of Twitter, the service where you can post updates on what you are doing in 140 characters or less, and follow "tweets" from whomever interests you.

If you've been following this blog for a while, you probably also know that Dejal is on Twitter — I post tweets about company topics, product releases, and personal events — pretty much any topic, though typically not very often.

Well, it seems that three Dejal products have developed some personality of their own, and have snuck onto Twitter! You can follow them to learn about releases, usage tips, and whatever else they have to say. Probably best not to ask them for support (the Dejal Forums remain the best avenue for that), but hopefully they'll be worth a follow. You never know, they might just drop hints about updates and future ideas on occasion.

There are a couple of other Twitter accounts, too:

Apple, please support iPhone trial apps

iPhone App StoreThe new in-app purchasing feature in iPhone OS 3.0, as discussed in the keynote, promises to be a great addition. But it seems one of the most popular uses of this feature has been deliberately blocked: a shareware-like trial model.

They said in the keynote that "free apps will always be free"... which sounds good on the surface, but eliminates one of the most popular software distribution models.

It would be great if users could download an app for free, try it for a while to evaluate (perhaps with feature restrictions or a time limit), then use in-app purchasing to buy the full edition.

Apple and developers would still get paid, but users would be able to better evaluate whether or not they want to purchase the product. With high quality products, that would lead to more overall sales — and people would vote with their dollars to encourage quality apps.

Without such a mechanism, the only way to let users try a product before buying is to release two editions, e.g. a free Lite edition and a paid Pro edition. While that has some merit in itself, it adds additional hassles for the users (e.g. transferring data between the two apps, since each app sandboxes its own data) and having to find the Pro edition, buy and download it, re-configure it, and probably delete the Lite edition.

With in-app purchasing available, there should be no technical barrier to allowing free trial apps that can be purchased after trying them out.

Developers, if you want this option, please tell Apple — file a bug report duplicating mine, rdar://problem/6699761 (this link only works for Apple employees).

App Store Reviews Now Distinguish Versions

TidBITS just published an article discussing how App Store Reviews Now Distinguish Versions. A recommended read.

I was quoted for this article. My full comment was:

I think that is a most welcome enhancement. Often, reviews mention deficiencies that are addressed in subsequent versions, but without a version number (and to a lesser extent, a date), potential customers have no real way of knowing if that comment is still relevant. For example, for my SmileDial Pro app, I had two reviews for version 1.0 saying it was a little slow to navigate, so I addressed that in version 1.1. Now, it is clear that those issues were with an older version.

(You can check out SmileDial via its product page.)

Syndicate content