The Pennyworth Project

Just another WordPress site

AppleScript Manager

I’ve recently put the finishing touches on a new Pennyworth feature: the AppleScript Manager.

AppleScript Manager

This is an within-application interface for finding and deploying new Pennyworth AppleScripts with a minimum of fuss. New sensors and actions can be uploaded to the Pennyworth website. These new scripts will show up in the interface above, allowing you to install them with one click.

Once the scripts are installed, you can edit them by double-clicking them in the table view to invoke Script Editor. It’s a minor feature, but one that should save you some trips hunting for these files within your Library folder.

This feature will be out in 1.0b8.

Posted by admin at 7:59 pm on April 28, 2008 . Filed under Pennyworth.

Pennyworth 1.0b7

Pennyworth 1.0b7 is now available for download.

This release includes some minor bug fixes and a new power source observer. I expect that this new observer will be useful for laptop-based road warriors.

I also want to use this as an opportunity to draw attention to the new Pennyworth website. The new Pennyworth website will replace this one as the primary distribution point for Pennyworth. The new site is intended to be a fairly static site with information about the application for users and developers. I’m still tweaking the site – so send me your comments and thoughts – but I needed to “ship” some time.

In addition to the new site, I set up a Pennyworth Google Group in order to foster a freer conversation about the program than exists now. If have any interest in the application and would like to talk about it, this group is the place for you.

Finally, with this new version, the Pennyworth appcast has been moved to

http://pennyworth.aetherial.net/appcast.xml

so update your bookmarks accordingly.

Prerequisites

MacOS X 10.5 “Leopard”

Growl (Recommended): Pennyworth can be used without the Growl notification system by viewing the current predictions, but this occupies precious screen real estate and you attention. In order to receive visual notifications of updated predictions, I recommend that you install and configure the Growl notification system before running Pennyworth.

Source

There is not a source distribution available yet, but if you’d like the source code, it is available via Subversion at

http://context-macosx.googlecode.com/svn/trunk/Tools/Applications/Pennyworth/

The source requires Xcode 3 to build.

Bugs, suggestions, or comments?

Please post any feedback in the comments below or send it to pennyworth@aetherial.net. This is early release software, so there will be bugs, and the application will only improve when problems are identified and submitted.

Posted by admin at 10:14 am on April 20, 2008 . Filed under Pennyworth.

Pennyworth update, Growl tweaks, and context-aware notification systems

I wanted to post an entry documenting where Pennyworth is now and some of the next steps I am taking with respect to its development and my own research.

Pennyworth

The C4.5 decision tree implemented in the last release has proven itself to be a much better “brain” than the previous machine learner. I’ve been running Pennyworth fairly constantly for the past week and it’s picking up the context as it should and I find myself training it only on the rare occasion to correct the model when it’s seeing something new. I’m quite pleased with how this has worked out.

That said, I’m contemplating at the moment removing the “interrupt me every X seconds” training mode. This is a fairly standard practice to use in evaluating machine learners (collect a representative sample of features to label and evaluate). However, in the context of this particular machine learner and the user’s interaction with it, I think that this method is unnecessarily burdensome and doesn’t really help the learner. In any case, if a time-based training mode remains in Pennyworth, I’ll be advocating the “train it when it’s wrong” approach in the documentation (that I need to write).

Growl

Pennyworth is designed to work with the Growl notification system, and I’ve been refining both programs so that they can operate in a more harmonious manner. Pennyworth now has a “Suppress Growl notifications” preference in the development build. This is intended for those of you who become annoyed by all of the notifications Pennyworth emits on context change.

I’ve also contributed a patch to the Growl developers that adds support for choosing an appropriate notification style or sound effect through AppleScript. Combined with Pennyworth’s AppleScript-based action-taking component (I need a better name for this), Pennyworth can control Growl and its notifications. This leads us to…

Context-aware notification systems

Last summer when I began working on a context-sensing platform for MacOS X, my goal was to build a context-aware notification system that changed its behavior in order to present the best style of notification, given the user’s state. The fundamental premise underlying this idea is that not all notification styles are appropriate for all situations. For example, a low-interruption notification style is appropriate for “unrelated” information when the user is heavily focused on a specific task. (See “Attuning Notification Design to User Goals and Attention Costs” by McCrickard & Chewar for more details.)

With the modifications to Growl, I can now use Pennyworth+Growl to begin exploring this space. I implemented an example of this over the weekend that worked quite well in my own tests. My specific problem was that I don’t like getting frequent notifications when I am gaming. Due to the MacOS X display system, overlaying a notification on an OpenGL canvas flickers the display and reduces the frames drawn per second (FPS). So, I wanted to change the notification style of two applications when I’m playing Warcraft: Pennyworth and Cidney.

I wanted to eliminate Pennyworth notifications because they are a frequent offender when I temporarily switch out of WoW to check mail or the web while I’m playing. When I do one or the other, I get this rapid sequence of “Activity: E-Mail”, “Activity: Web Browsing”, “Activity: World of Warcraft” messages when I’m multitasking this way. They don’t do me any good and just end up annoying me.

Likewise, when I’m playing WoW, I’m often not interruptible because I’m playing the Battlegrounds. So, when I receive an incoming phone call and notifications from Cidney (a desktop-based virtual Caller ID program), I’d rather listen for the custom ringtones that I’ve assigned to important people rather than be interrupted with a visual notification.

Given these constraints, I put together a script that implements the following pseudocode to deal with this contextual situation:

    if Activity is “Playing World of Warcraft”:

      tell Growl:

        Use the Null notification style for World of Warcraft
        Use the Null notification style for Cidney
    else if World of Warcraft is not running:

      tell Growl:

        Use the Smoke notification style for World of Warcraft
        Use the Smoke notification style for Cidney

Basically, this script tells Growl to use an invisible notification style the first time it detects me playing World of Warcraft. When I switch activities, it checks if WoW is still running before re-enabling the notifications for the two applications. Since I will probably be coming back to Warcraft if it’s still running, it doesn’t re-enable the notifications until I quit the program.

In an ideal world, I’d be able to refine this script a bit more by having it detect when I’m within an attention/focus-heavy context within World of Warcraft. When I’m playing the battlegrounds, interruptions are not okay. However, when I’m scanning the auction house or traveling from one zone to another, interruptions are acceptable. Unfortunately, until I am able to poke within the WoW process to determine what I’m doing in-game, this fine-grained, within-application context sensing probably isn’t possible. (Though, as I type this, a birdie in my head is whispering “make an add-on”.)

The example above is just one instance of how we can use context-aware notifications within our computing environments. “World of Warcraft” may be substituted with “Writing Novel” or other attention-heavy tasks. As long as users are okay writing AppleScript to define the relationships between context and notifications, the current system will be adequate and useful. I hope that it’s clear how a user could add other specialized configurations by simply adding conditions to the if/else statement above (e.g. “else if Activity is ‘Watching Film’ then turn off all notifications”).

I’ll be packaging up the various parts of this system with the next release of Pennyworth for those interested in defining their own context-aware notification configurations and replicating the above.

In a future post, I may think about the potential of adding a machine learner that determines the right combinations of styles and contexts for the user. The script above could easily be intuited by a decision tree, given access to information such as the current notification styles. I also haven’t touched on the idea of taking action on context changes (“play some opera when I’m reading, play some trashy Euro-techno when I’m programing”). I’ll be bringing this idea up in a later post when my thoughts become a bit more organized on the topic of the types of context-aware applications that may be built in addition to notification and home automation systems.

Posted by admin at 8:00 am on April 13, 2008 . Filed under Pennyworth.

Pennyworth 1.0b6

Pennyworth 1.0b6 is now available for download.

This release includes the smarter C4.5 decision tree, the label management interface, and a new network observer that determines the IP networks your computer currently belongs to.

Prerequisites

MacOS X 10.5 “Leopard”

Growl (Recommended): Pennyworth can be used without the Growl notification system by viewing the current predictions, but this occupies precious screen real estate and you attention. In order to receive visual notifications of updated predictions, I recommend that you install and configure the Growl notification system before running Pennyworth.

Source

There is not a source distribution available yet, but if you’d like the source code, it is available via Subversion at

http://context-macosx.googlecode.com/svn/trunk/Tools/Applications/Pennyworth/

The source requires Xcode 3 to build.

Bugs, suggestions, or comments?

Please post any feedback in the comments below or send it to context@aetherial.net. This is early release software, so there will be bugs, and the application will only improve when problems are identified and submitted.

Posted by admin at 12:02 pm on April 3, 2008 . Filed under Meta.

Coming soon: label management

Another new feature coming in Pennyworth is the ability to rename or delete labels you have applied to training examples:

Label Management

This interface is located in the Preferences and can be used to correct misspellings, merge labels, or delete irrelevant training cases. The way that it works is that it creates an operation (delete or rename) and applies that operation to the appropriate machine learner.

In deletion cases, the examples labeled the same as the one specified are simply deleted from the training cases and the learner generates a new model. In the renaming operation, matching cases have their labels replaced with the new one and the learner generates a new model.

I’m hoping to finish testing this release in the next few days and do a proper release this weekend.

Posted by admin at 12:54 pm on April 2, 2008 . Filed under Pennyworth.