I use a program on my Macintosh during the radio show to remind me when to take a commercial break - the network is pretty finicky about getting out on time. The program warns me a minute before I need to break, then counts me down 10 seconds before and says "Break!" when I'm supposed to stop talking. It mostly works.
A number of people who noticed the alerts on my Ustream stream have asked me for the source, so here it is, one year to the day after I wrote it.
A couple of caveats: it's in Applescript, requires
Quicksilver (for the really big text), and must be saved as a "
Run On Idle" script. The main "on idle" loop needs to be called again and again - if the program quits after "on run" nothing will happen.
If you want to actually use this (instead of just looking at it and mocking me) you'll probably want to change the break times.
I'm posting this as is and without support, mostly so that I can point people here who want to know "how I do that?"
-- Application to warn host when it's time to take a break
-- in the last minute before the break post word "wrap"
-- do a ten second countdown to end then show "break"
-- Requires Quicksilver!
-- Leo Laporte, 8 February 2007
-- v 1.0
property wraps : {"16:35", "27:35", "44:35", "56:25"}
property breaks : {"17:35", "28:35", "45:35", "57:25"}
property countdown : {"10", "9", "8", "7", "6", "5", "4", "3", "2", "1", "Break!"}
global currentSegment, breakTime, wrapTime
on run
-- find current segment
set now to getTime()
set currentSegment to 1
set wrapTime to item currentSegment of wraps
repeat until now is less than wrapTime
-- keep going until the next segment
if currentSegment is greater than or equal to (length of wraps) then
set currentSegment to 1
else
set currentSegment to currentSegment + 1
end if
set wrapTime to item currentSegment of wraps
end repeat
end run
on idle
-- runs until applet is quit
set now to getTime()
set wrapTime to item currentSegment of wraps
if now is greater than or equal to wrapTime then
-- there's a minute (or less) left
tellHost("Wrap...")
set breakTime to item currentSegment of breaks
repeat until now is greater than or equal to breakTime
set now to getTime()
end repeat
-- in final ten seconds, display countdown
repeat with msg in countdown
tellHost(msg)
-- delay 1
end repeat
-- go to next break time
if currentSegment is greater than or equal to (length of breaks) then
set currentSegment to 1
else
set currentSegment to currentSegment + 1
end if
set waitTime to (10 * minutes) -- don't come back for 10 minutes
else
set waitTime to 5 -- check every five seconds so as not to use cycles unnecessarily
end if
return waitTime
end idle
-- subroutines
on tellHost(message)
tell application "Quicksilver"
show large type message as text
end tell
end tellHost
on getTime()
set timeStr to time string of (current date)
-- Get the "hour"
set Pos to offset of ":" in timeStr
set theHour to characters 1 thru (Pos - 1) of timeStr as string
set timeStr to characters (Pos + 1) through end of timeStr as string
-- Get the "minute"
set Pos to offset of ":" in timeStr
set theMin to characters 1 thru (Pos - 1) of timeStr as string
set timeStr to characters (Pos + 1) through end of timeStr as string
--Get the "second"
set Pos to offset of " " in timeStr
set theSec to characters 1 thru (Pos - 1) of timeStr as string
return (theMin & ":" & theSec) as string
end getTime