Monthly Archive for July, 2010

HTML For Email Newsletters & Image Links

Recently I’ve made some minor adjustments on newsletter bound HTML documents. One particular document was made in the iContact WYSIWYG editor and as you can expect the HTML markup was horrendous. Even worse than the markup was the various ways the email displayed in different email viewing environments. Hotmail, Outlook, and Gmail all displayed this same email differently.

The main issue I was experiencing was a mysterious 3px bottom ‘padding’ given to all img elements wrapped in an anchor tag and lined up horizontally using tds (apparently tables are still the norm for email marketing). No actual CSS padding or margin was being applied to the img or any of its container elements. I’m still not entirely sure what was causing the 3px ‘padding’ but adding style=”display:block” to each img element fixed the problem.

AppleScript Tips & Tricks

I’ve done a fair amount of applescript work (mostly automation & UI scripting related projects) over the last couple months and – although very frustrating – applescript can allow you to achieve some incredible automation tasks. I’ve compiled a disjointed lists of tips, tricks, and source code that some trying to wade through applescript (specifically ui scripting which can be especially tricky) might find useful.

Enable Access for Assistive Devices

tell application "System Events"
set UI elements enabled to true
end tell

When “set value of text field” Won’t Work

set value of attribute "AXValue" of text field 1 to "String"

How To Iterate Through Rows in a Table

repeat with r in rows of table 1 of window 1
log r
end repeat

Retrieve Every UI Element Available in a Window

tell application "System Events"
tell process "Process Name"
set visible to true
return every UI element of front window
return name of every UI element of front window
end tell
end tell

Get a List of the Children of a UI Element

return value of attribute "AXChildren" of UI element 1

Create / Update / Connect Network Preferences VPN Services

Although since OS X 10.5 we have been given better applescript access to network preference settings, it still isn’t possible to create / update services / interfaces through applescript. With some tricky UI scripting and the help of the UI Element Inspector (or the advanced UI Browser) it is possible to create and update VPN service information. I also wrote a couple functions that allow you to check the existence of a VPN service and the connection status. You can check out the source code here. Note that although the code is VPN service specific it wouldn’t be terribly hard to modify the code for use in automating the creation of aiport, ethernet, etc services.

Take a Screenshot of a SWF

This is a bit more complex that one would expect. Because the Flash Player isn’t built using cocoa it doesn’t support alot of native applescript methods and getting a screenshot of the actual content (not containing the title bar!) of the swf is actually pretty challenging. The script will take a screenshot of only the content of the actual swf. This is useful if you have a flash app that has loadable swf components that the user should be able to preview through a thumbnail. Coupling the script with the following bash script allows you to easily generate thumbnails for all the swfs in the specified directory.

#!/bin/bash

function normalize_path() {
eval "NORMALIZED_PATH=$1"
NORMALIZED_PATH=`php -r "echo realpath('$NORMALIZED_PATH');"`
}

find ../path/to/swfdirectory -name "*.swf" | while read line; do
# remove the relative reference
normalize_path "$line"
line=$NORMALIZED_PATH

# open the flas
open -a "Flash Player" "$line"

sleep 1

thumbnailPath=${line/.swf/.jpg}
osascript slide_preview.scpt "$thumbnailPath"

killall "Flash Player"
done

exit 0

Other Applescript Code Snippets:

Helpful Applescript Articles