Notes
0.7 Planning
Content Model Work
- clean up and rationalize content types
- guidelines for the content model
- especially around mixins, stamping, annotation, bidirectional references, use of collections
- examine Tag, Project, and Group Kinds, ensure they are consistent w/ the vision
- review existing app kinds
- Beef up Contact type
Scripting Work/Notes
Katie asked me to write up some of the ways that I use scripting.
I use various kinds of scripting in different ways. On my Powerbook there are two classes of scripting systems: 1) unix style scripting systems, includin shell scripts, perl, ruby, and python scripts. These systems do not understand GUI applications and generally don't talk to them while the GUI applications are running. This is changing with the advent of systems like
pyobjc and the
RubyCocoa. This kind of scripting system interacts with applications by munging their data files, or perhaps by being embedded inside of the application as some kind of extension system. 2) application scripting system -- this is the
AppleScript? system which provides a way for applications to expose their internals to a scripting language. That language can be
AppleScript? or another language which obeys the right protocol. Scripts at this level can execute application commands, extract data from the running application and so forth. These scripts can be triggered from within the application, from a menu in the System menu bar, or via a command line tool. The command line tool provides a way for the application scripting system and the unix scripting system to communicate and pass data to each other.
What follows is an explanation of some of my own personal scripting workflows.
- Kinkless GTD - This is a set of AppleScripts which mainpulate OmniOutliner commands to create a reasonably useful Getting Things Done kind of system. This is basically an application written in AppleScript which reuses OmniOutliner's functionality to get its job done
- NetNewWire script subscriptions - NetNewWire will allow you to subscribe to the output of a unix style script. So I have a few subscriptions to python scripts which screenscape web apps and produce RSS feeds as output. I also have a script that combines a Python script and an AppleScript script. This script is run against a set of RSS feeds for podcasts. It downloads new podcasts and puts them into iTunes. Once it places them into iTunes, it places them into one of two playlist based on the length of the podcasts. Since the ferry commute to my home is 35 minutes long, there one playlist for podcasts less than 35 minutes and another one for the longer ones. This way I can quickly work through my podcast backlog and do it efficiently when commuting on the ferry. I have a companion AppleScript? which finds podcasts that I have listened to and archives them onto an external hard disk, removing them from iTunes along the way.
- "Regular" NetNewsWire scripts -- I also use some AppleScripts from inside NetNewsWire in order to achieve integration with other apps. I have one script which posts the currently displayed URL to del.icious. Another one archives papers of interest from the citeulike RSS feed.
- comment spam killing -- Every time that someone leaves a comment on my weblog, I get a piece of e-mail. Now a days I get a decent number of comments which are spam, and deleting them by hand is a pain. Fortunately, each e-mail for a comment contains enough information to allow scripts to be used to kill them. It works roughly like this. In Mail.app, I select all the e-mails corresponding to the spam comments. Then I execute the comment killing script. This script asks Mail.app for the selected messages and extracts the id's needed to identify the comments. These ideas are written to a temporary file. The script then invokes ssh to tell the weblogging software, on the weblog server, to remove the offending comments. This workflow is faster than any web-based UI that I have seen for deleting comments.
- I have a number of python scripts that run over the data files of various applications. These scripts extract data, provide statistics, etc.
- Questions/Issues/Ideas:
- scripts that execute when events happen
- scripts as a way for external apps to drive / interact w/ chandler
- requires AEOM or DOM like access to parts of app - has implications for commands, selections, and so forth
- how do parcels add to the Chandler DOM