Blogs

Pack 1.1.1 released

Quickly following the 1.1 update, which introduced the Watch app, here's version 1.1.1 with an important fix:

  • All items are now selected by default, so you can begin packing immediately.
  • Fixed a crash when adding a new item.

Learn more about Pack, or download for free on the App Store.

Simon tip: enable PHP for scripts

Simon is a very powerful server monitoring tool. One of the reasons for this power is the ability to create custom services, filters and notifiers using a variety of scripting languages.

While languages like AppleScript, Perl, Python, Ruby and shell scripts work out of the box, many people are more comfortable with PHP, commonly used server-side for web pages. But that is not enabled by default in OS X.

It's not too difficult to make it available for Simon scripts, though... if you feel comfortable using Terminal.

Fire up Terminal and enter this command to edit the Apache configuration:

sudo nano /etc/apache2/httpd.conf

You'll be prompted for your password (for the sudo command), then presented with an editor screen.

Press Control-W to search for php. This will move the cursor to this line:

#LoadModule php5_module libexec/apache2/libphp5.so

Delete the leading # to uncomment this line.

Then press Control-O to save the change, then Control-X to exit the editor.

Finally, for good measure, tell the Apache web server to restart:

sudo apachectl restart

That's it! You should now be able to run PHP scripts in Simon.

Pack 1.1 (with Watch app) released

The Apple Watch is available for pre-order and in-store tryout today, and will be delivered starting April 24 for those who stayed up late enough to get their order in quickly. Did you order yours? What did you get? Let me know in the comments.

Personally, I ordered two Watches: a 42 mm for myself and a 38 mm for my wife, Jenn:

Also available today is an update to my Pack iPhone app, to include an Apple Watch extension to help you even more quickly and easily pack for trips.

The Watch app for Pack is very simple: the idea is that you choose what to pack on your iPhone, then you can put the phone in your pocket while actually stuffing your clothes etc into your suitcase, and just tap on your Watch to mark things as packed.

This will be much more convenient. I've used Pack for my own travel for several years (as a pre-release prototype), and while it is quite easy to mark things as packed, having to take my iPhone out of my pocket while I have my hands full of clothing can be a little inconvenient. Being able to just tap my watch will be so much easier.

Since I don't have a Watch yet, I've only been able to test this in the simulator, but Apple has tested and approved it (after a couple iterations of fixes and clarifications), so I'm confident that it'll work well. I'm sure I'll add further features in a future version, based on my and others usage. If you already have a Watch, please try it and let me know what you think!

Here's a brief looping demo of the Watch app in action:


Learn more about Pack, or download for free on the App Store.

About Simon Express and Simon Free

Did you use Simon Express or Simon Free for the Mac App Store? As you have probably seen by now, they are no longer available. I was unable to update them, so announced back in October last year that I'd remove them, which I did when Simon 4.0 was released.

I thought I'd go into this in a bit more depth today.

So, why wasn't I able to update them?

When the Mac App Store was introduced back in 2011, apps could be included without too many modifications or special requirements. So I was happy to provide special editions of my Simon app, which I called Simon Express and Simon Free. The Express edition enabled unlimited tests (at a time when the standard edition had license limits on the number of tests, which is no longer true), but was streamlined to only provide a basic set of services, filters and notifiers, without the ability to add or edit them. Simon Express sold for $59.99. Simon Free was the same, but was limited to only a few tests, and available at no cost. These seemed like useful editions for people who didn't need the full power of the standard edition, and preferred the convenience of the Mac App Store.

But as of June 2012, Apple threw a spanner in the works: they required that all apps in the Mac App Store be “sandboxed” — where the apps can only access their own private folder, among other restrictions.

Since Simon is a powerful tool, capable to monitoring arbitrary folders, accessing network services, running customizable scripts, etc, it wasn't feasible to sandbox Simon without cutting out a lot of functionality, which I didn't want to do. Even the cut-down Express and Free editions would have had to be severely restricted. So it just wasn't doable.

For a couple of years, I left the Express and Free editions on the store, without updates, but I felt bad about them falling behind the standard edition, and so when version 4 came along, it was time to retire those editions.

But where does that leave people who bought the Express edition?

If that's you, you are of course welcome to continue using it (or the Free edition) for as long as you like. But to take advantage of the attractive new user interface and enhanced features of version 4, you'll need a Simon 4 license.

I didn't want to make you have to buy a full license, though. So in version 4 I added support for treating Simon Express as a full version 3 license. If you have Simon Express installed (or have previously used it with your Mac), a “Simon Express” item will automatically appear in Simon's Licenses window. So all you need to buy is a Simon Upgrade license.

Furthermore, if you don't already have data for the standard edition, Simon 4 will automatically recognize and import your Simon Express data, enabling a smooth transition from the old app.

In the months since removing the Mac App Store editions, I don't recall having received any negative feedback about this move. I think most people understand... and frankly the Mac App Store editions were never huge sellers; most people preferred the power and flexibility of the standard edition.

The Mac App Store is a useful tool for discovery of apps that fit within Apple's rulebook, but some apps like Simon, and other third-party ones like BBEdit, Coda and more don't fit in that model. And that's fine.

I will continue to include my apps in the Mac App Store when I can... while also selling directly from the Dejal site.

20th wedding anniversary

Today marks the 20th anniversary of marrying my wife, Jennifer. My how time flies... it seems only yesterday when I posted about our 15th wedding anniversary — read that post from five years ago for the story of how we met, got married, and more.

I wanted to do something special to mark this milestone, so a couple of weeks ago I did something I've been meaning to do for decades: I edited the videotape footage of our wedding into a short movie (about 5 minutes).

It begins with part of a TV news report that aired shortly after our wedding. As that previous blog post described, we met via the internet in an age when that was new and rare, so we were interviewed by local TV and newspaper reporters.

The movie then has clips from the ceremony and reception, which were both held near the beach at one of our favorite spots, Long Bay Beach in Auckland, New Zealand. It concludes with some scenes from our honeymoon in the credits.

Take a look:

20 happy years, full of love and adventures. Happy anniversary Jenn; I love you!

Simon tip: reorder filters, notifiers & more

One of the many enhancements in Simon 4 is the ability to rearrange the order of filters, notifiers, reports and auto pause times while editing a test.

Before, the only way to reorder them after adding was to remove and re-add, but now you can change the order very easily. Simply click and drag anywhere outside a control to move a filter etc to a new position.

Here's a looping video example:

$Cashtag

This morning I saw a blog post by Casey Liss (of ATP and Analog(ue) fame) about the new Square Cash service.

The general idea is to reduce the friction on making payments. You've probably seen or used the Square card reader in indie coffee shops etc. This new service appears to take it to the next level, only requiring a link (similar to a hashtag, hence the wacky name) to initiate a payment. When you go to a $Cashtag page, you're presented with a big field to enter a dollar amount, and fields for a debit card number and an optional note.

It's easy to sign up to receive money, too, via an Square Cash app for iOS or Android. You can then claim your own $Cashtag.

I have, of course, signed up as $dejal. So if you want to send me some money, feel free to use this. It isn't suitable for buying licenses for Dejal products, but as an extra donation of appreciation, this could be a good option.

It'll be interesting to see if this becomes a popular service.

Thoughts on the Apple event last week

As you may have noticed, Apple held a "Spring Forward" event last week, where they covered a number of topics, including the introduction of HBO Now, ResearchKit, a new MacBook, and provided more information about the forthcoming Apple Watch.

If you missed it, you can watch the event on Apple's site, or see an excellent live-blog summary below the video. (From where I obtained most of the images in this post; credit to Apple.)

It's been a week, and I'd like to share some thoughts.

HBO NOW

The first news that caught my attention was the announcement of HBO NOW.

My wife and I are "cord cutters" — we don't have a cable or satellite TV subscription, and rely on Apple TV for most of our TV content, along with Netflix streaming and such. As such, we have long bemoaned the fact that HBO didn't offer a way to pay for their excellent content without a cable subscription. HBO NOW is the answer we've been waiting for: the ability to get HBO shows without a cable subscription, right on our Apple TV.

This is an excellent deal for Apple, too, with a three month exclusive period, that should drive many more people to consider an Apple TV... helped along by a price drop to just $69 for the hardware. I am a little disappointed that they didn't bring out a new version of the Apple TV yet, but the current unit is okay, if getting a bit long in the tooth.

Apple Pay

Next was some talk about the iPhone, and Apple Pay. I only recently upgraded to an iPhone 6, and haven't encountered anywhere that accepts it in the wild (I don't tend to frequent such places), so haven't yet tried it. It does seem like an excellent feature, though, and I'm glad more and more retailers are gearing up to accept Apple Pay.

ResearchKit

A big surprise announcement was ResearchKit, a framework for collecting information to help with medical research. They spent about 15 minutes talking about this, and while it may not have a significant impact on Apple's bottom line, this is yet another sign of the new Apple under Tim Cook: more focused on improving the world, not just through great customer-focused products, but in improving life and health for humanity in general.

It's impressive that it has already had a big impact, with signups for a ResearchKit-powered study vastly outstripping the usual approach.

MacBook

Before the event, there had been rumors circling for quite a while about a new MacBook, and they proved pretty accurate. This new MacBook is clearly a sign of things to come — the logical evolution of taking the iPad technology and bringing it "back to the Mac" once again.

This new computer has several significant changes. It is of course thinner and lighter than existing Air models, as is Apple's wont... perhaps to a fault. It also has a retina display, which is a welcome addition in such a tiny laptop. I use a several-years-old iMac as my desktop machine, and last year's MacBook Air as my laptop, neither of which has retina. My eyesight perhaps isn't good enough to tell the difference, but I certainly do enjoy retina displays on my iOS devices, so look forward to upgrading a retina Mac one day. I won't be getting this edition, though, since I just bought my Air last year.

The new MacBook also features a new keyboard, with a new switch mechanism and better LED backlighting. I haven't tried the new keyboard, so I don't know whether I'll prefer it over the previous ones, but I hear that it doesn't take long to get used to it.

Also on the input, there's an impressive new Force Touch trackpad, that does away with the physical clicking, replacing it with a taptic feedback that apparently feels just like a click, while offering more customizable options.

I don't want to reiterate all of the changes, so I'll just briefly mention the impressively shrunken logic board, without a fan, and layered batteries. It really seems like an iPad inside a Mac.

Another way it's like an iPad is the reduction of ports: just a headphone jack and a single USB-C port. This was perhaps the main focus of rumors before the event, with lots of discussion on the likes of the Accidental Tech Podcast and elsewhere. Many people were skeptical, and critical of the product after the introduction, but I'm not one of them. As I mentioned, I have a MacBook Air, but it is purely a secondary machine — I use it when traveling (sometimes; often an iPad is enough) or when working on the couch some evenings... or from a hammock in summer.

I almost never plug in anything to this machine, other than power when I stop using it. The battery lasts longer than I typically use it, so rarely need to plug in to recharge, and I don't need to connect an external keyboard, screen, or other devices. I can certainly understand that people who use it as their primary machine in a desktop situation might have issues with only having one port... but for those people I don't think it's unreasonable to plug in a hub like Apple's new one (albeit overpriced) or the inevitable third-party ones. That seems like it'd be more convenient, instead of having to deal with multiple plugs every time you want to take the computer away.

But what do I know... that isn't my use-case, and I suspect that Apple envisions people using a laptop as their primary machine to go with the Pro edition instead. I do have some experience with this scenario, though: before I got my iMac, I did use a MacBook Pro 17" as my primary machine, along with an external display... but I preferred to use the built-in keyboard and trackpad, so still didn't have all that much plugged in.

Apple Watch

Was there anything else? Oh yeah, some watch gadget.

The coverage of the new Apple Watch seemed almost like an afterthought... almost an hour into the show, and only taking about half an hour. But that's not unreasonable, since this served mainly as a reminder of the introduction, and an update to answer some questions. Little details like pricing and availability.

Prior to this event, Apple had only announced the "starting" price of $349. There were wide-ranging guesses on where the other models would end up, with John Gruber of Daring Fireball making what many people thought were wildly high predictions on the gold Edition model pricing, initially around $5,000 then later predicting $10,000 and up to $20,000. Which turned out to be very accurate, with the Edition models priced between $10,000 and $17,000. I'm not a watch guy, so those prices seem way more than I'd ever pay for a watch, but I certainly understand that in the high-end luxury market, those prices are very reasonable.

For the middle model, confusingly just called Apple Watch, there was perhaps less of a range of expectations, and the pricing that eventuated seems reasonable, given the $349 starting point for the Sport model: $549 for a sport band up to $1,099 for a black link bracelet.

I'm definitely excited about the Apple Watch. I plan to get one, if only so I can test the Watch app for my Pack packing list app (business expense!). I haven't worn a watch in years, but I think that will be changing soon, as it no doubt will for many people.

I'm not sure which exact model I'll get. Definitely a 42 mm Sport model, though — 42 as I have large hands, so the 38 mm wouldn't fit me, and Sport because I'm budget-constrained, and not really a fashion person. I'm leaning towards the Space Gray case, but might be okay with the silver aluminum case with green band, too. The other colors don't really do it for me. I'd like to try on some of the other band options as a future expansion option... particularly the Milanese Loop and Leather Loop. But I think I'll be happy with the rubber (excuse me, "fluoroelastomer") band.

Simon tip: check notifiers

I've recently had a couple of queries (via email and the Simon Forum) about checking if a notifier is working, so that seemed like a good blog topic.

Simon is a powerful app. One of its many features is the ability to create custom notifiers, the mechanism for informing you of changes or failures on the tests. Naturally, when you configure a new notifier, or edit an existing one, you want to make sure that it is set up correctly.

This can be done very easily. When showing the Notifiers list, you can simply select the notifier you want to check (as you probably already have if you're editing one), and click the Reload button in the toolbar, or choose the File ▶ Notify Now menu command.

The selected notifier will then be used, just like when used with a test, except that placeholder values will be used for any variables (since there isn't a test in this case).

For example, here's a Notification Center notification, showing placeholder values (click to see full-sized... and yes, I do have rather a lot of system menus!):

Pack for Apple Watch

The Apple Watch will be available soon... how soon we should learn on Monday with their special event. So lots of developers have been announcing apps to run on the Watch — see WatchAware's excellent site for a good showcase.

I don't want to be left out from the fun. So a few weeks ago I spent a few hours over a weekend adding an Apple Watch extension to my latest iPhone app, Pack — a simple app to help you quickly and easily pack for trips.

Apple isn't accepting Apple Watch apps yet, but I'll be ready when they do. The Watch app for Pack is very simple: the idea is that you choose what to pack on your iPhone, then you can put the phone in your pocket while actually stuffing your clothes etc into your suitcase, and just tap on your Watch to mark things as packed.

This will be much more convenient. I've used Pack for my own travel for several years (as a pre-release prototype), and while it is quite easy to mark things as packed, having to take my iPhone out of my pocket while I have my hands full of clothing can be a little inconvenient. Being able to just tap my watch will be so much easier. And yes, you can bet that I'll get my order in for an Apple Watch as soon as pre-ordering is open. (I haven't finally decided which one, but probably the Space Gray Sport model, or maybe one with the green sport band, since green is good.)

Here's a brief demo of the Watch app in action:


Want to try Pack? You can download it for free from the App Store.

Simon 4.0.3 released

Another small update of Simon, to version 4.0.3.

This update is notable as the first to be delivered via the Sparkle update framework, for people on 4.0.2 (where that was introduced). Hopefully it'll work properly. :) (Yes, seems fine; I just tested it.)

Changes in this release include:

  • When the Show the Simon icon in the Dock preference is turned on, its status is now immediately updated.
  • If a password has been set to access Simon, the unlock panel is now shown without the Monitor window.
  • Fixed a hang in the Twitter notifier when typing in the message text area.
  • Fixed some cosmetic Console warnings with the notifier options editor.
  • Fixed an issue that prevented the MySQL helper from starting.
  • Fixed the helper to launch Simon on login.

If you have Simon installed already, you can get the update via the SimonCheck for Updates... command in the app, which will install it for you; no more need to download manually. You can even check the box to have future updates installed automatically if you wish.

If you don't have Simon yet, you can download Simon 4.0.3 now!

SmileDial & Valentines discontinued

I don't like to discontinue apps, but sometimes it's necessary, or just a matter of accepting the inevitable.

My first two iPhone apps, SmileDial (written in 2008) and Valentines (written in 2009) haven't been updated for years. They did what they were designed to do, so didn't really need updates. Though to be frank, they never made much money or had many downloads, so I simply couldn't justify the time to update them.

I haven't even run them myself in ages, but I assume they still work, albeit not using the modern appearance and screen sizes.

So today I officially discontinued them, and made them free on the App Store. I'm not going to remove them from there or my site: if you find them useful, you're welcome to download and use them at no cost. Just be aware that they won't get any updates, and I can't really provide any support for them (though if you ask, I'll certainly try to answer).

DejalIntervalPicker: a custom Mac control similar to NSDatePicker, but for time intervals or ranges

Another open source project for developers.

DejalIntervalPicker is a custom Mac control similar to NSDatePicker, but for time intervals or ranges.

This project was started several years ago for Time Out 2, but got put aside while I worked on contract projects. I've just finished it off and released it for others to enjoy. It will be making an appearance in Time Out 2 as of the next alpha release.

Requirements

  • OS X 10.10 or later recommended, but should work back to 10.7.
  • Objective-C language.
  • ARC.
  • Dependency: the DejalObject project.

Features

  • A custom control with an amount or amount range, units, and stepper.
  • Like NSDatePicker, editing components separately, with a stepper.
  • Can set minimum and maximum amounts.
  • Can get/set the interval as a DejalInterval, as individual values, or as a NSTimeInterval.
  • Can have either a single amount or a range of amounts.
  • Can optionally filter the range to ensure the first amount is smaller (or equal to) the second one, or vice versa.
  • Can control which units to include.
  • Can navigate between components via Tab and Shift-Tab and left/right arrow keys, or clicking.
  • Can type amounts just like in the date picker, and units with auto-completion.
  • Can increment and decrement amounts and units via up/down arrow keys, +/- keys, or the stepper.
  • Can increment/decrement in steps of 5 via Shift/Option/Ctrl and up/down arrow keys, or Page Up/Down.
  • Can go to the first/last valid values via Home/End.
  • Can display a drop-down menu of suggested legal amounts or units via the spacebar or clicking on the selected value.
  • Supports regular, small and mini sizes.
  • Supports properties, key-value coding, and bindings.
  • Supports IB_DESIGNABLE and IBInspectable, so the picker can be configured in IB.
  • A demo project is included.

Usage

  1. Include the DejalIntervalPicker.h and DejalIntervalPicker.m files in your project. Also include at least DejalObject.h, DejalObject.m, DejalInterval.h and DejalInterval.m from the DejalObject project.
  2. In Interface Builder for your xib or storyboard, drag a custom view to your view or window.
  3. In the Identity inspector, change the Custom Class of the view to DejalIntervalPicker.
  4. In the Size inspector, add a Placeholder Intrinsic Size of 150 width and 22 height if using Auto Layout, or set the view to that size for auto-resizing.
  5. In the Attributes, configure the desired attributes like the using range, initial amounts, and which units to include.
  6. In your controller, you can also configure the picker via methods like usingRange, includeForever, firstAmount, and others; see the demo project for examples.
  7. Populate the picker value by setting the amount(s) and units, or setting the interval from a DejalInterval instance.
  8. Get the picker value via the same properties: either amounts(s) and units directly, or the interval instance.
  9. See DejalInterval for several useful methods and properties, e.g. to get a string representation of the interval.

You can get the code and more information from the Dejal Open Source page.

DejalObject: an abstract data model class that can represent subclasses as dictionary or JSON data

DejalObject is an abstract data model class that can represent subclasses as dictionary or JSON data for saving to disk or over the network.

Included are DejalColor, DejalDate and DejalInterval concrete subclasses.

They work on both OS X and iOS.

Features

  • DejalObject: This is an abstract subclass of NSObject that adds methods to represent the receiver as a dictionary or JSON data, load default values, track changes, enumerate an array of DejalObject instances, and more.
  • DejalColor: A concrete subclass of DejalObject to represent a color (for OS X or iOS), enabling it to be stored in a DejalObject subclass.
  • DejalDate: Another concrete subclass to represent a date, primarily so it can automatically be represented as JSON.
  • DejalInterval: A subclass to represent a time interval or a range of intervals, including an amount and units, with methods to represent the interval or range in various ways, including as human-readable strings (see also the DejalIntervalPicker project for OS X).

A demo project is included, showing a subclass of DejalObject to store various data types.

Usage

Include at least DejalObject.h and DejalObject.m in your project. Include the DejalColor, DejalDate and/or DejalInterval files if those are needed.

Add a new class that inherits from DejalObject.

In the header, you only need to define properties to store, e.g.:

@interface Demo : DejalObject

@property (nonatomic, strong) NSString *text;  
@property (nonatomic) NSInteger number;  
@property (nonatomic, strong) DejalColor *label;  
@property (nonatomic, strong) DejalDate *when;

@end

In the implementation, override -initWithCoder: and -encodeWithCoder: if you need to support coding (secure coding is supported in DejalObject).

Override -loadDefaultValues to populate default values to each of the properties. A version number can be assigned (via DejalObject’s version property) to enable upgrading later, e.g.:

- (void)loadDefaultValues;  
{
    [super loadDefaultValues];

    self.version = DemoVersion;  
    self.text = @"Foo";  
    self.number = 12345;  
    self.label = [DejalColor colorWithColor:[NSColor blueColor]];  
    self.when = [DejalDate dateWithNow];  
}

Finally, override -savedKeys to indicate which properties should be automatically included in the dictionary or JSON representation, e.g.:

- (NSArray *)savedKeys;  
{
    return [[super savedKeys] arrayByAddingObjectsFromArray:@[@"text", @"number", @"label", @"when"]];  
}

A DejalObject subclass can be represented as a NSDictionary simply by invoking the dictionary property on it, or as JSON via the json property. That can then be saved to disk or the user defaults, or passed over the network.

Those properties can also be set, or a new instance can be created via +objectWithDictionary: or +objectWithJSON:, or an instance with default values via +object.

DejalObject instances automatically track changes, with a hasChanges BOOL property indicating that something has changed (so may need to be saved). There is also a hasAnyChanges property that recursively enumerates the properties and any other DejalObject instances in them, e.g. if the color is changed in the above example.

After saving, you should invoke -clearChanges to reset the change flag.

You can get the code and more information from the Dejal Open Source page.

The importance of a good backup strategy

Today I received a support email from a Simon customer who had a hard drive failure, and lost their data. Worse still, they were in the process of recreating their Time Machine backup at the time, so didn't have a backup.

That prompted me to post about my backup strategy. When you live your life and make your living on computers, there is little more valuable than the data they contain. So it is critical to protect it from a loss that could set you back years.

Fortunately nowadays most important data is in the cloud... various remote servers. For example, if you use iTunes Match, your music collection is safely on Apple's servers (well, hopefully safely). Photos are still at risk, but Apple is rolling out the iCloud Photos service that will keep them offsite. And other services like Dropbox help protect important documents... if you put them in there.

For myself, I have a multi-pronged data management and backup strategy.

In terms of data management, I use cloud services to sync my data between my iMac and MacBook Air, which has the added benefit of keeping offsite copies of the important data:

  • My documents are all stored in Dropbox.
  • My app source code is managed by Subversion (for my app-specific code) and Git (for my open source code).
  • My music, (soon) photos and other data are stored in iCloud.

In fact, I replaced the Documents folder in my home directory with a symbolic link to a Documents folder within the Dropbox folder, so all of my documents are safely in Dropbox. It's not necessary, but you can easily do this via a couple of simple Terminal commands:

sudo mv ~/Documents ~/Dropbox/Documents
sudo ln -s ~/Dropbox/Documents ~/Documents

The first command moves the Documents folder to within Dropbox, and the second one makes a symbolic link to that folder where the old Documents folder was. The sudo is needed as the OS will normally prevent moving the Documents folder; Terminal will prompt you for your password.

But that doesn't mean that backups aren't important too. Backups are useful to get back earlier versions of documents (via Time Machine), or provide redundancy in case a cloud service loses something, or just as a quick way to get back up-and-running. Plus, of course, protecting data like preferences that aren't included in Dropbox or other cloud syncing.

I use multiple services for backups, too:

  • I use Time Machine via a Time Capsule in a different part of the house to do hourly incremental backups of the most important files. Useful to get back earlier versions of documents.
  • I use SuperDuper! to make nightly exact clones of my SSD main drive and spinning media drive onto backup disks. Useful to quickly get back up-to-speed if a hard drive fails, or I need to revert an obscure file.
  • I use Backblaze to make nightly offsite backups of pretty much all of my files. Useful in case of a major disaster like my house burning down, or failure of one of the other backups.

(Full disclosure, if you use the Dropbox link to sign up I'll get more space, not that I need it, and you'll get 500 MB bonus space. And similarly that Backblaze link will give both you and I a free month of service.)

Your data is valuable — don't risk losing it when it is so easy to protect it!

Simon tip: groups

One feature request that I received many times for Simon was the ability to organize tests into folders or groups — especially useful for people with lots of tests, or simply want to collect all tests relating to a particular server or client together.

Previously, the closest you could get to this was to use a common prefix on the name, and sort by name. But that is cumbersome, and loses the benefit of being able to sort by something more useful, like last event date — so recently changed or failed tests appear at the top.

Simon 4 solves this with the new groups feature.

Now, tests can be grouped together however you wish. It's easy to create a group: simply choose the New Group command in the File menu or the + pop-up menu, then drag the tests into the new group. Even easier, you can just select some tests and choose the New Group with Selection command to make a group and move those tests into it in one step.

Groups appear with disclosure triangles, enabling them to be collapsed. The group row shows a summary of the contents, with any common values displayed for easy reference. And similarly, the info pane shows a summary of the contained tests.

Groups can even be nested, if desired — you can have an unlimited number of groups within other groups, if that helps organize them.

But wait, there's more! While grouping tests is perhaps one of the most-requested features, I didn't stop there: you can also group services, filters, notifiers and reports in the same way!

When these items are grouped, they appear indented in the Kind pop-up menu in the test editor, so you can keep related items together:

I hope you enjoy this new feature.

20 years of contract work, looking forward to the next 20 years

Today marks a milestone in my career. 20 years ago today, I started working for the company that would eventually become Intrahealth. Technically, the start date was February 7, 1995, but it was in New Zealand, which is a day ahead of the US, so it counts as today.

I actually started Dejal as a company back in September 20, 1991; see my previous 20 years of Dejal shareware blog post for a retrospective on that.

But 20 years ago today I started working for Mark Matthews, now CEO of Intrahealth, taking over development of his MMAS application: the Macintosh Medical Administration System. It was a pair of server/client apps written in MPW Pascal for classic Mac OS, used by hundreds of medical clinics around New Zealand to manage their practices: everything from appointments, billing, patient medical records, and more. My first assignment was rewriting the prescriptions windows.

An early memory was that Mark actually printed the wedding invites for Jenn and me on his LaserWriter.

A few years later, around April 1997, I converted the project to CodeWarrior Pascal, and 10 years later it moved to Free Pascal (FPC). Being such an ancient product, it has gone through many iterations, but still exists today.

When I started, I was working out of my home office, in a tiny 2-bedroom flat (or apartment as we'd call it in the US). And I mean really tiny — our bed touched three walls of the bedroom.

Later, about a year after the company established the Intrahealth name in 1997, I started working in their office. By that time it had several more employees, but I remained the lead developer of their Mac apps, with part-time coding by another company founder, Andrew Hall, and for about a year another developer. A few years later, in 1999, MMAS was renamed as Profile for Mac, to bring it in line with their new product for the Windows operating system, Profile for Windows.

Big changes

Big changes in 2001: on April 1 my wife and I moved to the US. So at that time I became a contractor again (an international employee would be tricky), and continued working on Profile for Mac, mostly part-time — about half of my time on that, half on Dejal apps, including my first Mac OS X apps, Narrator (since sold to Mariner Software), Simon (which was recently updated to version 4), and others.

I also spent some time on other contract projects, including iData and MindFortress, both snippet utilities similar to Caboodle. But Intrahealth was a big part of my career.

Intrahealth changed countries too: in 2005 they moved their head office to Vancouver, BC, Canada.

After the iPhone was introduced, I created some Dejal apps for it. Naturally, when Intrahealth wanted a mobile edition of Profile, they turned to me. In January 2011 I started work on Profile for iOS, an app designed to sync with the Profile for Windows server, fetch patient information, appointments, tasks, etc from the server, and work offline until the device has a connection again, when it would sync changes back to the server and get updates.

I worked on Profile for iOS mostly full-time since then, as its sole developer, which did mean Dejal suffered a bit — astute readers of my traditional year-end summary blog posts for 2012, 2013 and 2014 will have noticed that I didn't have many releases, and mentioned that I spent most of my time on Profile.

All good things....

This period of my life drifted to an end late last year. Intrahealth has continued to expand, from one employee (me) in 1995 to around 100 staff in four countries today. A few months ago they decided to bring Profile for iOS development in-house, and as I had no interest in moving to Canada, they took on another iOS developer to take over the project. After providing guidance and mentoring to get him up-to-speed for a few months, my Intrahealth hours decreased to practically nothing. Since then, I have just provided occasional advice on issues with the Mac and iOS products. That may continue for quite some time, but it's effectively a negligible amount of time now.

So, ignoring the past few months, I count my time with Intrahealth as about 19 years. I'm a little sad that it didn't make it to 20 years, but even 19 years is an amazingly long length of time to work with one company, even if it was in various employment/contracting capacities, and sometimes part-time. So I thought it was worth taking some time to mark this milestone.

So, what's next?

What's the plan for the next 20 years? Sometimes I wish I could see into the future, so I knew what was ahead.

I know what I want: to continue doing what I've been doing for the past few months — working on Dejal full-time.

After stopping Intrahealth work, I started work on Simon version 4.0. That took a few months, and was released in December as its biggest upgrade ever. Sales of Simon jumped up, thanks in large part to upgrades, which has certainly helped cover the lack of Intrahealth income, though not quite enough to be sustainable; I really need to double my income to be able to afford to do this full-time.

I am currently back working on Time Out version 2.0, which has been in the works for years, but kept getting sidelined by Intrahealth work. It has progressed significantly, and I'm looking forward to releasing it sometime in the coming months. And hoping that I can survive until then, and that it'll do well enough to let me continue.

I've also released a new iPhone app, Pack, to help with packing lists, released several open source projects for other developers, and published many blog posts, including a series of Simon tips.

I am also open to working on contract projects for others, to help refill the coffers. If you know anyone who needs an experienced iOS or Mac developer, please send them to my Consulting page for more information.

And recently I produced a custom build of Simon for a customer who wanted to install it on their clients' machines under their own name. I'm certainly open to doing that for others too, or adding custom features to Simon as paid work.

The upshot of all this is that after about 20 years, I am keen to take Dejal from a part-time, hobby-like business to full-time operation. The Dejal apps are mature, high quality, and useful, and I'm sure could fully support me and enable me to accelerate the rate of improvements, and maybe even release more new apps. I just need to get better at getting the word out about them.

Please help!

If you've read this far, congratulations! You must be sufficiently interested in me and my apps, so can I ask you for a favor? Please tell everyone you know about them! Tweet about the apps, post on Facebook, tell your friends, email bloggers, etc etc. Anything you can do to help others learn about the apps will help me grow Dejal to a full-time, sustainable software business. Which will benefit everybody. Thank you.

Simon tip: hide the Dock icon

Simon 4 added a surprise new feature that many people have asked for over the years: the ability to hide the app from the Dock.

In the past, Simon's app icon was always displayed in the Dock. Now, with version 4, there is a new General preference to control this. By default, it is on (so the icon is shown, as before).

Why might you want to hide it? Maybe you want to keep your Dock as sparse as possible. Simon's Dock icon can display the most interesting status, but maybe you don't need to see that all the time, or you're satisfied with seeing that only in the status menu. Since you'd probably want to keep Simon running all the time, treating it as a background-only app can make a lot of sense. Now you can!

If you turn off the Show the Simon icon in the Dock checkbox, the app icon vanishes from the Dock, and also from the Cmd-Tab app switcher. Note that if you have chosen the Keep in Dock option in the Dock menu, the icon will linger, in an inactive state; you can disable that or drag the icon out of the Dock to remove it.

When Simon is hidden from the Dock, you can still activate the app via the status menu, if you have that enabled — and the app will automatically turn it on when you turn off the Dock icon, as a convenience. If you don't want the status menu, you can turn it off again... in which case the only way to activate the app will be to click on one of its windows, if any are visible, or open it from the Finder.

One thing to note is that as a necessary side-effect of hiding the Dock icon, Simon will no longer have a menubar. It'll truly be a background-only app. When you display the Simon Monitor window, the menus won't change from whatever other app you were using. This isn't a problem for most functions, as the toolbar buttons and sort drop-down menu options cover most menu commands. But for app functions like checking for updates, accessing preferences, etc, when the Dock icon is disabled a special action menu is added to the toolbar. For power users, the keyboard equivalents still work, too — so you can press Ctrl-Cmd-1 to switch to Preview mode, for example.

I know that this is an exciting enhancement for many customers. For anyone who wants Simon to "disappear" into the background, try turning off the Dock icon. You can always turn it back on again. No restart required. What do you think? Do you prefer the Dock icon visible or hidden? Let me know in the comments below.

Simon 4.0.2 released

Here are a bunch of fixes for Simon 4, plus one exciting change: Simon now uses the Sparkle framework, like many other non-App Store apps do, to make updating the app easier. I've resisted using Sparkle for years, as it had various issues that made it incompatible with my apps, but those have been resolved in recent updates.

So it's time to sparkle, finally.

After this update, you should no longer need to download the app from here when there's a new version; Simon will be able to update itself in place, and even do so completely automatically if you wish.

Edit: Note that the update checkbox will be off initially, but the app will ask you if you want to automatically check for updates on the second launch.

Here are the changes in this version:

  • Simon now uses the popular Sparkle framework for app updates, so it can finally download and install updates itself.
  • Changed the Updates preferences for the Sparkle framework, and to add a handy button to show the release notes.
  • Fixed the New pop-up menu being disabled when in full-screen mode.
  • Fixed the app not resuming full-screen mode on launch if it was in full-screen when quit.
  • Fixed a too small icon in the status menu and Dock when a Wi-Fi hotspot is detected.
  • Fixed the auto-pause function, which sometimes wasn't engaging when it should.
  • Fixed the Find filter with regular expressions when not finding a match should be a failure.

Download Simon 4.0.2 now!

DejaUIKitCategories: an open source collection of UIKit-level categories for iOS

The final batch of open source categories: DejalUIKitCategories.

DejalUIKitCategories is a collection of categories for UIKit on iOS, to add useful methods to classes like UIBarButtonItem, UIColor, UIView, and others. The categories include:

  • UIApplication+Dejal: Adds methods to get the first responder and keyboard view of the app.
  • UIBarButtonItem+Dejal: Convenience initializers to make UIBarButton instances based on and image, title, system item, custom view, spacer, or segmented control.
  • UIButton+Dejal: A more convenient title property, and a method to add a gloss effect.
  • UIColor+Dejal: Convenience initializers for more standard colors, or based on a platform-specific image or hex value.
  • UIImage+Dejal: Convenience initializers for tinted images, methods to overlay images with colors, and scaling methods.
  • UIImageView+Dejal: Make a white-background image view, and adjust the background color based on the highlighted state.
  • UILabel+Dejal: Convenience initializers for labels with various text, font, width etc attributes, and sizing methods.
  • UISegmentedControl+Dejal: Convenience initializer for a segmented control with specified items, target, action, and initial selection.
  • UITextField+Dejal: A selected range property, and support for gestures to move the insertion point by swiping.
  • UITextView+Dejal: Attributes of the selection or insertion point, and support for the insertion point swiping gestures.
  • UIView+Dejal: Properties for frame and bounds components and an image representation, methods to hide, add to and remove from the superview with animation.

You can get the code and more information from the Dejal Open Source page.

(Looking for an iOS or Mac developer? I'm available for contract or full-time work. Learn more about me.)

Syndicate content