Scripting LittleSnapper… Slight Return
Less then a week after writing [*this*][sls] AppleScript — which launches [LittleSnapper][ls] and snaps the website currently in view in Safari — the boys at Realmac Software come out with [*this bookmarklet*][bml] that does exactly the same thing, only with a mouse-click instead of a hot-key combination… unless you’re me.
I loath the mouse and if I can avoid ever using it I will go to great lengths to make sure my hands stay firmly atop my keyboard. Perhaps you’re the same way, so for kicks I turned Realmac Software’s bookmarklet into an executable AppleScript that I can assign a hot-key to.
## What’s a bookmarklet? ##
First you have to understand what a bookmarklet does. A bookmarklet is nothing more then a bit of javascript (in many cases) that when clicked performs a basic task. It’s like a mini application… like an applet… in fact, it *is* an applet, hence the name “bookmark”-”let”. In the case of the LittleSnapper bookmarklet, clicking the bookmark (or URL) tells your browser (in javascript) to change the URL in the address bar from `http://example.com` to `littlesnapper://snap/http://example.com`. You’re just adding `littlesnapper://snap/` to the front of any URL! You can actually do this yourself, provided you have LittleSnapper. Try going your favorite website, click the address field, type `littlesnapper://snap/` in front of the URL and hit return… ta-da!
## Make one-click easier? ##
So let’s go back to actually using the bookmarklet… you have to click on it and that’s no fun. It’s time to turn it into AppleScript!
The bookmarklet, if you look at it in your bookmarks folder, looks like this:
javascript:location.href=’littlesnapper://snap/’+location.href;
The quick and dirty way to turn this into an executable AppleScript would be to use Safari’s built in `do JavaScript` method, like this:
tell application “Safari”
do JavaScript “location.href=’littlesnapper://snap/’\n
+location.href;” in document 1
end tell
But that would leave you pretty much locked into using the script with Safari when using hot-keys, while *clicking* the bookmarklet will work in any browser. So `do JavaScript` is too limiting.
Since we only need to pass in the string `littlesnapper://snap/` before the URL, why not just write a method that does that:
tell application “Safari”
set currentURL to URL of front document
open location “littlesnapper://snap/” & currentURL
end tell
This works, but if you want to apply it to all other browsers — Opera, Camino, Firefox, etc — you have a lot of work ahead of you as you discover the various degrees of scriptability each app has. To grab the URL in some of these apps you have to jump through hoops:
* in safari it’s `URL of front document`
* for Firefox `«class curl» of window 1` will sometimes work
* Camino is `URL of browser window 1` and so on…
Some apps need to use System Events to access them, others don’t. And then try and tell each one that you want to `open location`, again with or without System Events… it turns into argument soup very quickly.
A good rule of thumb when trying to script anything is to simplify the number of tasks you assign to any given process. In this case, for each browser I am trying to do two things; get the current URL and then open a new, modified URL.
## LittleSnapper is a browser too! ##
Then it got me thinking — LittleSnapper uses webkit as it’s rendering engine and therefor it should share a lot of the same scripting dictionary that Safari uses. So I thought I would test something out; I attempted to `open location “littlesnapper://snap…` with LittleSnapper itself:
set currentURL to “http://www.google.ca”
tell application “LittleSnapper”
open location “littlesnapper://snap/” & currentURL
end tell
Viola! Without opening a “browser”, I just snapped a web shot of Google.ca, right in LittleSnapper. This now cuts the workload of running unique scripts for each browser in half since I can now tell LittleSnapper to open the URL… once I have it.
## Scripting a common thread ##
So now to get the URL from the browser — any browser — without making a code spaghetti like this mess:
if application “Firefox”is running then
tell application “Firefox”
set currentURL to «class curl» of window 1
end tell
else if application “Safari”is running then
tell application “Safari”
set currentURL to URL of front document
end tell
else if application “Opera”is running then
tell application “Opera”
set props to GetWindowInfo of window 1
set currentURL to item 1 of props
end tell
else if application “Camino”is running then
tell application “Camino”
set currentURL to URL of window 1
end tell
end if
There has to be a better way… and there is. Here comes System Events to the rescue with a couple of keystroke executions like so:
tell application “System Events”
– highlight address field with ⌘L
keystroke “l” using {command down}
– copy to clipboard with ⌘C
keystroke “c” using {command down}
end tell
This will allow us to access any browser the same way, with global hot-keys as executed by AppleScript.
Now we just need to talk to those browsers to find out which one is in use. We can do this with an if statement, like this:
if application “Safari” is running then
tell application “System Events”
keystroke “l” using {command down}
keystroke “c” using {command down}
end tell
end if
But with four or more browsers this would be a bit much.
## The full deal ##
So let’s make an array out of our favorite browsers, run that array through a loop, mash in our System Event keystrokes, and finish it all off with a variable passed into LittleSnapper and this is what we get:
– let’s define our array
set appArray to {“Safari”, “Firefox”, “Opera”, “Camino”}
– then run that array through a loop
repeat with appName in appArray
if application appName is running then
tell application appName to activate
tell application “System Events”
keystroke “l” using {command down}
keystroke “c” using {command down}
end tell
delay 0.5
– make a variable from the clipboard
set currentURL to the clipboard
end if
end repeat
– pass that variable in to LittleSnapper
tell application “LittleSnapper”
activate
open location “littlesnapper://snap/” & currentURL
end tell
Is this overkill to get a hot-key combo that does what a bookmarklet does in one click? Depends on who you ask I guess. I think it’s a pretty good solution in fact. Now instead of copying a bookmarklet to the toolbar of every browser I use, I have a script that I can assign a global hot-key to (via [FastScripts][fs] or some such tool) and use it across any browser I set in my array.
Yes, I am *that* much of a geek.
## Download ##
[Get it fresh from CodeCollector.net][ccdn2]
[tags]applescript,littlesnapper,realmac,software,safari,firefox,opera,camino,browser,bookmarklet,hot-key[/tags]
[sls]: http://www.seydoggy.com/2009/09/30/scripting-littlesnapper/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”
[ls]: http://www.realmacsoftware.com/littlesnapper/ “LittleSnapper – Screenshot and Website Capture for Mac OS X Leopard”
[bml]: http://www.realmacsoftware.com/blog/index_files/littlesnapper-bookmarklet.php “Realmac Software Blog – RapidWeaver and LittleSnapper News”
[fs]: http://www.red-sweater.com/fastscripts/ “FastScripts”
[ccdn2]: http://www.codecollector.net/view/E8CE65D6-67B3-45DF-A3E5-745F9616F1B3 “Download from CodeCollector.net”
FastScripts; My Favorite New Trick
[
](http://www.red-sweater.com/fastscripts/ “FastScripts”)I know it’s pricey for what it does and it’s definitely a tad on the geeky side but I absolutely had to support [Red Sweater Software's](http://www.red-sweater.com/ “Red Sweater – Amazing Mac Software”) efforts for their little gem of an app, [FastScripts](http://www.red-sweater.com/fastscripts/ “FastScripts”). At first glance it’s little more then a way to organize, access and instigate your AppleScripts but it’s only once you tap into what that truly means that you start to realize what FastScripts is allowing you to tap into.
I first came to FastScripts when a blogger (who and for what blog I cannot remember) mentioned that it might help solve a problem I was having, issuing a hot-key combination to an AppleScript I wrote[*](http://www.seydoggy.com/2009/09/07/fastscripts-my-favorite-new-trick/#note1) to open a selected item (RapidWeaver theme package, project, php file, whatever…) in TextMate from my favorite file browser, [Path Finder](http://cocoatech.com/ “Path Finder 5 by Cocoatech”). You see this sort of thing used to be dead easy in QuickSilver (triggers, we used to call them), you enable proxy’s, grab the item, do what you want with it. But in my long struggle to ween myself off QuickSilver and all that it made it mighty, if not temper-mental, I found myself needing to script the things that QuickSilver took for granted. I actually enjoy this hands on dig through what makes Apple tick though.
So it was then that I discovered the magic of FastScripts and what it brought to the AppleScripting platform. It did what I needed, allowed me to assign an application specific hot-key combo to my Open-in-TextMate script. But it does more then the AppleScript menu ever allowed. It makes more sense, completely accessible with hot-keys and keyboard navigation, both global and application-specific shortcuts can be defined… It runs scripts fast and effectively, ties in exceedingly well with any app I’ve used it for, runs AppleScript, Perl, Automator workflows, etc… It just makes a lot of sense to me.
I might be a little script happy these days, but for as many hot-key combo’s as I can remember, I will gladly write AppleScripts for to help automate my day. Like this one for mounting and un-mounting hard disks when needed; instead of opening up DiskUtility and selecting a disk to mount or writing a few commands Terminal.app, I simply use a hot-key shortcut to run this script:
set diskname to "MyDisk"
do shell script "diskutil mount `diskutil list | awk '/ " & diskname & " / {print $NF}'`"
* In the end I just ended up using Allan Craig’s Open-in-TextMate script as there was little point in reinventing the wheel… and his worked better.
A better way to CMS with RapidWeaver
There are some tools that come along and everyone just sighs, “How did we ever get along without this?”
Stacks from [YourHead Software](http://www.yourhead.com/ “YourHead Software”) is one of those tools that made RapidWeaver more complete then we ever knew it needed to be. What makes Stacks so amazing is that it *is* what ever it *needs* to be to *whoever* needs it. So far it’s been a power layout tool of endless shapes and sizes, an ExtraContent device, and RSS scraper, a Twitter badge, a media player… and now, thanks to Joe Workman, a CMS.
A Content Management System (CMS) allows clients to edit their content after their web design/development staff has published the site. So far there have been only a handful of attempts to bring CMS to the RapidWeaver platform; WebYep and PlusKit’s @gdoc(()) implementation. The former requires site licensing and the latter rely’s on Google ever changing Google Docs API.
Now there is a [CushyCMS](http://www.cushycms.com/ “Free and simple CMS » CushyCMS”)(free) implementation built into a Stacks Library item (or Stacks plugin) available from [Joe Workman](http://www.joeworkman.net/products/ “Joe Workman | CushyCMS Stacks Plug-in for Rapidweaver”). By simple dragging a CushyCMS stack onto your stacks page, anything you drop into that CushyCMS stack will be editable on the client side.
Brilliant!
[tags]CushyCMS, Stacks, YourHead Software, RapidWeaver[/tags]
LittleSnapper Touch Is Soon to Hit Realmac Lineup
[
](http://www.realmacsoftware.com/blog/index_files/littlesnapper_touch_iphone.php#unique-entry-id-35 “Realmac Software Blog – RapidWeaver News”)[This looks interesting](http://www.realmacsoftware.com/blog/index_files/littlesnapper_touch_iphone.php#unique-entry-id-35 “Realmac Software Blog – RapidWeaver News”), a companion iPhone application to [LittleSnapper](http://www.realmacsoftware.com/littlesnapper/ “LittleSnapper – Screen and Web Snapping for Mac OS X Leopard”) (desktop Mac app) and [QuickSnapper](http://www.quicksnapper.com/ “Welcome to QuickSnapper image hosting | QuickSnapper.com”) (web based snapshot sharing). It’s yet to be released but the new app, dubbed *LittleSnapper Touch* promises to allow the user to snap photos and webpages (or parts of them) and then post them to QuickSnapper.
Anyone familiar with QuickSnapper will be aware that you will, in turn, be able to pull down those snaps into the desktop version of LittleSnapper with a simple click of the “Send to LittleSnapper” button. It’s not clear yet whether there will be any syncing option that will negate this step. I guess we’ll have to wait and see.
Enabling Double Arrows in the Scroll Bar
Ohh, ohh, ohh, I can’t forget this one! This is one of those options you forgot you enabled with a utility like [Onyx](http://www.titanium.free.fr/pgs/english.html “Titanium Software”). So when you go and do your clean install of OS X and realize that some things are just not the same as they were, it’s the the little things like having double arrows at the top and bottom (or left and right) of a scroll bar that you miss.
Having vowed to take matters into my own hands with this install and being acutely aware of every system hack I make, I am documenting everything I do (on this blog) and I am making sure it’s something I can control via the terminal. So, instead of using Onyx, here is the terminal hack for enabling double arrows in your scroll bars:
defaults write "Apple Global Domain" AppleScrollBarVariant DoubleBoth
If you ever need to go back you just open the System Preferences (`/Applications/System Preferences.app`), click on appearance and choose one of the two defaults from “Place scroll arrows:”; “Together” or “At top and bottom”.
Auto mount/unmount your Mac volumes when required
Earlier this month you might recall the solution I gave you for [keeping unused volumes unmounted](http://www.seydoggy.com/2009/02/12/keeping-unused-hard-disks-unmounted/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”) on your mac. The next part of the equation, automatically mounting those volumes when needed to run my backup scheme, took me a little longer to sort out. In fact I wasn’t able to write a solution on my own, try as I might, so I finally went searching for one.
I needed a script of some sort that would mount my unmounted volumes when it was time for [ChronoSync](http://www.econtechnologies.com/pages/cs/chrono_overview.html “ChronoSync | Perform File and Folder Synchronizations and Backups Like Clockwork | Econ Technologies”) to run and then unmount my volumes when ChronoSync was finished. After several IRC queries, forum posts here and there and countless Google searches I finally stumbled upon [this post](http://www.macosxhints.com/article.php?story=20060308154312630 “macosxhints.com – A script to mount/unmount a volume on app launch”) at Mac OS X Hints. This solution was the answer I needed and it works perfectly. I won’t recap the whole thing here, but I will give you the bits that were most important to me.
Copy the following script into *Script Editor.app* (`/Applications/AppleScript/Script Editor.app`), changing the `diskname` and `appname` to suite your needs:
property diskname : "MyDisk"
property appname : "ChronoSync"
on idle
tell application "System Events"
set x to the name of every process
if appname is not in x then
if (exists the disk diskname) then
do shell script "disktool -l | egrep -i "Mountpoint = '/Volumes/" & diskname & "" | cut -d\' -f2 | xargs -n1 disktool -p"
end if
else
do shell script "disktool -l | egrep -i "Mountpoint = '', fsType = 'hfs', volName = '" & diskname & "" | cut -d\' -f2 | xargs -n1 disktool -m"
end if
end tell
end idle
Next you need to save it as a bundled app and select “*Stay Open*”, give it a useful name and save it where you will be able to find it. In my case I chose `/Library/Scripts/ChronoSync/`:

Then you have to make it run in the background. To do this, find your newly created app, right click on it, “*Show Package Contents*”, find the Info.plist and open that in your favorite plain text editor. Above the key that says `CFBundleAllowMixedLocalizations` you want to add the following:
<key>LSBackgroundOnly</key>
<string>1</string>
Get out of the package and find your app again and double click on it. It should launch in the background but not show in the dock. You can see that it’s running by opening *Activity Monitor.app* (`/Applications/Utilities/Activity Monitor.app`):

Now to truly make this process automated, you need this app to be on when your computer is on, so it needs to launch when you login. So open your Accounts preference pane in System Preferences.app (`/Applications/System Preferences.app`), select the *Login Items* tab, select the  button and add your newly created app:

And that’s it! Next time your backup program fires up to do it’s regularly scheduled backups, your disk mounting app will mount your volume, wait for your backup app to finish and then quietly tuck your volume back up for the night.
##Other references
1. [A Script to mount/unmount a volume on app launch](http://www.macosxhints.com/article.php?story=20060308154312630 “macosxhints.com – A script to mount/unmount a volume on app launch”)
2. [An AppleScript to mount, run, unmount a disk image](http://www.macosxhints.com/article.php?story=20040905112951299 “macosxhints.com – An AppleScript to mount, run, unmount a disk image”)
3. [MountPart](http://www.well.com/~jfw/software/mountpart/ “John F. Whitehead – MountPart – Mount/Unmount Individual Partitions”)
I Give Apples New Safari 4 Beta a Spin
Apple announced today the launch of their [Safari 4 beta program](http://www.apple.com/safari/ “Apple – Safari – Introducing Safari 4 – See the web in a whole new way”) that claims to lead the way with innovation. I had to test this claim so I immediately downloaded it and gave it a spin. Here are my findings:
* On initial launch you are presented with the “Top Sites” window in which it appears that Safari scours your history for the most frequently visited sites in your recent cache and then throws up their thumbnails in a Core Animation like black gallery for you to pick from. Selecting the edit button allows you to remove items and make others sticky. I presume you can also add others that might actually be more indicative of your “Top Sites”. Again, in true Apple form, Apple seems to be hinging the success of a product on visual wow factor, but admittedly I could see myself making use of this.
* My next reaction was when I created a new tab and found that, a la Google Chrome, the tabs are on top. Why? While I will most certainly get used to it, what is the actual reason for this? I can’t find and difference in their functionality apart from the fact that you can only drag them about from their corner. Aside from that you can still drag them, move them from window to window, create a new window with each tab… there is one option I hadn’t noticed in previous version, “Add bookmark for these X tabs”. Is that new?
* Coverflow in Safari… there have been a few plugins to address this in the past. I guess they are history now. Do I need Cover Flow in Safari? I don’t need it iTunes or Finder so I probably won’t use it here either. But that said, it must be a popular enough technology if they keep throwing it in to their software.
* History search. Now *that* I like! I have always found searching the the history in the bookmarks folder to be painful and unproductive. This history search is insanely fast and (in Cover Flow form) even shows you screen shots of the sites that match your search terms.
* It claims to be faster, using the Nitro Engine. It could be but browsers and web technology today is getting so fast I would be hard pressed to notice the difference. It does seem to be faster overall but am I reacting to the guts of a finely tuned OS X Cocoa application or the page load? One note I will make about making browsers faster (and Safari 3 is already guilty of this), they cache things… unnaturally so which can make web development a nightmare. Safari 3 already caches it’s javascript and images in ways that cause web developers to have to reset their browsers all too often just to get an accurate response on their new projects. And faster also means pre-load, again which Safari 3 is bad for. Safari 3 will scour your main CSS file in search of things to load (like background images), whether or not that _thing_ is actually needed or even being used. I hope Safari 4 handles this a little better.
* The newish developer tools are nice (if your weren’t already playing with them in webkit), but I don’t know… it’s still not FireBug. You still can’t select code in the element window! How good is debuggin if I can’t edit what’s there or even copy and past it to a text editor? Seriously? As far as developer tools, these will give a glimpse into how your page is working, but they’re not much good for anything else.
* The full page zoom could be useful (hopefully not for a few years for me yet), but wow does it ever slow things down. Zoom in once and try page scrolling… not so fast now.
* I love, love, love the new address bar! If I am going to interface with browser in any way, it’s through the address bar so this improvement is quite welcome. Basically when you start typing in the address bar you are presented with much the same information your were before, but it’s clearly defined in two categories; history and bookmarks. In both cases it presents you with the site title followed by the URL which makes it very easy to get your bearings.
* The search field is now really slick too. It’s along the lines of Inquisitor, offering you suggestions and previous search queries. Very nice!
* CSS Animation, CSS Effects, CSS 3 Web Fonts… just more things to tease us web developers with. Stuff we won’t be able to use in the real world until all other browsers catch up. We can always dream though…
Overall, I think this is two things combined; a promising look at where web browsers should be and a sobering reminder of how much waiting for other browsers to get there will suck.
Stacks plus ExtraContent; it's a new Stacks Library item
So did you here the news? Possibly the most exciting thing to happen to themes, plugins and RapidWeaver all at one time! Back a couple of months ago we introduced you to ExtraContent, the new way of getting more out of the available RapidWeaver content areas. And a little while ago, YourHead Software introduced Stacks, a new way of building your page layouts in RapidWeaver. Then recently YourHead Software announced the the API that goes along with Stacks so that developer can build custom stacks to add to your Stacks Library. Are you with me here?
So what do you get when you put it all together? A custom stack made for ExtraContent enabled themes! Now you can access your ExtraContent areas of your ExtraContent enabled themes from the comfort of the Stacks interface. Utilize the layout power and elegance of Stacks to build exceptional ExtraContent layouts without having to so much look at a snippet or piece of code.
Here is the best part, the ExtraContent Stacks plugin is free. All you need is Stacks, and ExtraContent enabled theme and this custom ExtraContent stack and you have a world of possibilities in your hands.
Learn more about the [ExtraContent Stacks plugin here](http://extracontent.info/2009/02/add-extracontent-to-your-stacks-library/ “ExtraContent Tutorials”), watch the [tutorial here](http://extracontent.info/2009/02/working-with-stacks-and-the-ec-stacks-plugin/ “ExtraContent Tutorials”), download the [ExtraContent Stacks plugin here](http://extracontent.info/downloads/ “ExtraContent Downloads – snippets, Stacks plugins…”) and get YourHead Softwares [Stacks for RapidWeaver](http://www.yourhead.com/stacks/ “Stacks”).
YourHead launches Stacks 1.0
Fellow RapidWeaver developer, Isaiah of [YourHead Software](http://www.yourhead.com/ “YourHead Software”) announced today that [Stacks](http://www.yourhead.com/stacks “Stacks”), a fluid layout plugin for [RapidWeaver](http://www.realmacsoftware.com/rapidweaver/ “RapidWeaver 4 – Powerful Web Design Software for Mac OS X”), is now official, hitting the big version 1.0. Those of you familiar with YourHead’s previous heavy hitting page layout tool, [Blocks](http://www.yourhead.com/blocks/ “Blocks”), will immediately recognize what this RapidWeaver plugin is all about, but the two are as different as night and day.
Don’t get me wrong, Blocks is a brilliant feat of plugin engineering and is the life blood of literally throngs of RapidWeaver users unable to do such layouts on their own. But it’s not a plugin that ever fit my web design sensibilities. The web is fluid, ever changing, growing, shrinking… for me, Blocks was too rigid.
Enter Stacks; a completely fluid, flexible, drag’n'drop all about layout tool for RapidWeaver that can generate oodles stacked up, blocked up, split up, embedded here and there kind of page layouts that only a pocket full of hand coded snippets could achieve perviously. Just like Blocks, Stacks allows to drop in text, HTML, images and whatnot, but then it allows to stacks onto stacks and those onto more stacks. You can make columns, columns in columns, columns where one column is an image, one is some code, one is some text, etc… drag that under some more columns… before you know it, you’ve got your very own [960 Grid System](http://960.gs/ “960 Grid System”) built into a RapidWeaver plugin.
If you are looking for the ultimate in flexible page layout with RapidWeaver, go [check out Stacks](http://www.yourhead.com/stacks/ “Stacks”). There are some great movies demonstrating the raw power of it and there is also and [Stacks API](http://www.yourhead.com/wikiwiki/index.php?title=Stacks_Library_API “Stacks Library API – YourHead”) if you’re interested in creating a custom Stacks library or two.
Life As a Theme Developer
Have you ever wondered what a day in the life of a professional RapidWeaver theme developer is like? Wonder no more because I am about to tell you.
**02-18-09 07:22** – started writing this which will end up being a blog post on seyDoggy.com
**02-18-09 07:23** – opening up [Mailplane.app](http://mailplaneapp.com/ “Mailplane brings Gmail to your Mac desktop”) to have a gander at what support has crawled in overnight.
**02-18-09 07:28** – popping in the the Realmac Software forum to respond to a thread I was notified about… nothing for me to add.
**02-18-09 07:40** – helped potting training daughter go to the potty.
**02-18-09 07:52** – responded to an email from the [seyDesign Member Group](http://www.seydesign.com/support/membership/ “membership | support | seyDesign Professional RapidWeaver themes”).
**02-18-09 07:53** – reacted to a [Twitter](http://twitter.com/ “Twitter: What are you doing?”) follow request… followed.
**02-18-09 07:56** – Twittering.
**02-18-09 08:02** – responding to another Realmac Software forum thread.
**02-18-09 08:04** – sifting through a bunch of press releases that I subscribe to.
**02-18-09 08:18** – responded to a comment on seyDoggy.com blog.
**02-18-09 08:19** – moving over to the support email account now. Checking the spam box since Google seems to deem all of my real support requests as Spam.
**02-18-09 08:21** – yup, 7 messages caught in the spam box.
**02-18-09 08:22** – opening up [Parallels](http://www.parallels.com/ “Mac Virtual Machines and Virtual PC. Automation and Virtualization Software for Desktops, Servers, Hosting, SaaS – Parallels”) to confirm one users report of an IE bug with one of my themes.
**02-18-09 08:24** – realizing that their complaint has more to do with screen size than anything else. It’s not a bug, me thinks. Keep testing.
**02-18-09 08:28** – just got a wrong number on the support line. “seyDoggy who? I’m trying to call my sister.”
**02-18-09 08:38** – yup, IE6 issue was just the end users window size. I like that kind of support.
**02-18-09 08:50** – support taking longer then I hoped. Need some tunes.
**02-18-09 08:59** – support is done.
**02-18-09 09:00** – opening my calendar (a [Fluid.app SSB](http://fluidapp.com/ “Fluid – Free Site Specific Browser for Mac OS X Leopard”) of Google Calendar) to see what’s on the plate. My calendar is my mental mapping tool.
**02-18-09 09:19** – more forum posting.
**02-18-09 09:20** – back to calendar, deciding how long it’s been since I invoiced this one client before deciding to do more work for them. Have to be extra cautious in todays economy, not to get into too deep with any one client.
**02-18-09 09:21** – going to do some site updates (in [TextMate](http://macromates.com/ “TextMate — The Missing Editor for Mac OS X”)) for said client.
**02-18-09 10:27** – just answered someones questions about [M Cubed Softwares](http://www.mcubedsw.com/ “M Cubed Software – Yummy software for the Mac”) [Code Collector Pro](http://www.mcubedsw.com/software/codecollectorpro “M Cubed Software – Code Collector Pro”).
**02-18-09 10:48** – syncing client changes via [Panics Transmit](http://www.panic.com/transmit/ “Panic – Transmit 3 – The next-generation Mac OS X FTP client!”).
**02-18-09 10:57** – hmm… forgot to update the sitemap… and all the french `
**02-18-09 11:06** – sitemap updated, french `
**02-18-09 11:26** – fresh coffee, looking at my calendar… what next…
**02-18-09 11:28** – checking my @bugs tags in [TaskPaper](http://www.hogbaysoftware.com/products/taskpaper “TaskPaper — Simple to-do list software”) to see if there are any pressing bugs I should tackle… one in [seyDoggy bloop!](http://www.seydesign.com/themes/bloop/ “bloop | themes | seyDesign Professional RapidWeaver themes”) but it’s going to have to wait until I have the time for some extensive rewriting. It’s only an issue with one plugin so it’s not really a bug as much as it’s a compatibility issue. Moving on…
**02-18-09 11:33** – continuing with Med Designs Bubblegum.rwtheme update. Adding some really cool new features to it. Checking my todo list within the theme to pick up where I left off on Monday.
**02-18-09 11:54** – force quitting [RapidWeaver](http://www.realmacsoftware.com/rapidweaver/ “RapidWeaver 4 – Powerful Web Design Software for Mac OS X”) after I jammed it up with a tricky Theme.plist move.
**02-18-09 12:22** – commit current set of changes to the rwtheme package go make lunch.
**02-18-09 12:54** – exercise… it’s important to get away from the office chair for a bit so you don’t develop [deep vein thrombosis](http://en.wikipedia.org/wiki/Deep_vein_thrombosis “Deep vein thrombosis – Wikipedia, the free encyclopedia”), but getting and walking about is boring. So I exercise; 50 pushups, 25 crunches, 20 lying-on-my-back-leg-lift-thingies, 20 of the same, but lying on my side, and then again, but on my tummy. Not only is it good for preventing DVT, but it helps my core compensate for slouching at my desk for hours at a time.
**02-18-09 13:17** – back to Bubblegum.rwtheme update.
**02-18-09 16:04** – committed a whole whack of changes to the Bubblegum.rwtheme. Time to wonder about the house for a stretch and maybe splash some cold water on my face.
**02-18-09 16:08** – scheduled in two custom jobs, one for Friday and one for Monday… *sigh*.
**02-18-09 16:23** – feeling refreshed. Time to get back at it. But it’s time for 10 minutes of fun; time to read a chapter of [*jQuery in Action*](http://www.manning.com/bibeault/ “Manning: jQuery in Action”).
**02-18-09 16:45** – Well it’s time to call it a day and go embrace the inner chef in me. I hope you’ve enjoyed peering into a day in the life of a professional RapidWeaver theme developer.

