« Leo's Twitter Updates for 2008-02-09 | Main | Leo's Twitter Updates for 2008-02-08 »
Saturday
Feb092008

Hotclock

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.
Fullscreen.jpg
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

Reader Comments (6)

If people are just looking for a program to give timed breaks I suggest they take a look at Time Out. It's freeware.

http://www.dejal.com/timeout/

February 9, 2008 | Unregistered Commenterlaanba

laanba, I'll have to take a look at that.

February 9, 2008 | Unregistered CommenterJohn

Does anyone know of a way to do something similar in Linux?

February 9, 2008 | Unregistered Commenterjordan

I am working on an appropriate script leveraging the xosd library.

February 10, 2008 | Unregistered CommenterRob Gibson

Leo, looks like a neat script, but...
[viddler_comment=de6fceb5]

February 12, 2008 | Unregistered CommenterColin Devroe

Thanks Rob, I'm poking around with pyton-osd now.

February 16, 2008 | Unregistered Commenterjordan

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>