Just Dropped In
Posted by Morten Just Wed, 17 May 2006 11:06:00 GMT
(Can’t see the clip?)Yep, it’s the Just Dropped In Script 2.0 that prepares a Keynote slideshow just for you, and just because it’s good to see you(r Bluetooth phone). Nice, eh?
What your Mac does seconds after you enter your home
- Displays a bright splash image to make monitor act as lamp
- Gives you a random compliment
- Plays a random song from an iTunes playlist
- Asks a music quiz question while it
- Prepares a Keynote slideshow that
- Comments on the actual weather outside and
- Gives a forecast for tomorrow
- Checks your GMail
- Synchronizes your mobile phone over Bluetooth
- And your iCal calendar
- Opens Gmail, movie listings, tv listings, feed reader
To do
Display and say iCal appointments for the rest of the dayFirst slide should be so bright that the Mac works like a lamp in a dark appartment- Script should not be able to run twice within one hour (save time of last run)
- Code clean-up (it’s messy in a ‘wow, he’s not even a script kidde’ kind of way)
- Latest news from RSS sources
- Any other functionality, really
What you’ll need
- Bluetooth proximity applescript trigger, such as BluePhoneElite, Salling Clicker or Romeo (free, Sony/Ericsson only)
- A Bluetooth device
- OS X Tiger
- Keynote 2
- Keynote scripting plugin (free)
- A Keynote template
- A splash screen image (Illustrator format, could be any format really)
applescript, ical, bluetooth, phone, smarthome, home automationIf you have an unsaved Keynote presentation while running this script, you will lose it. Forever.
The script is here
set volume to 5 set pathtofiles to “Macintosh HD:Users:mortenjust:Documents:” set maxmention to 5—how many email senders should we mention? set dosaysongtitle to true set dovideo to true property dospeak : true set dolistings to true set doshowimage to true set doshowkeynote to true —set myPlaylist to “Most listened to in the past month” set myPlaylist to “demo” set myCompliments to {“You look great.”, “I like your hair.”, “Nice clothes.”} set myName to “Morten” set theHour to hours of (current date) set theMinutes to minutes of (current date) set i to 0set rando to random number from 1 to (count of (myCompliments)) as integer set thisCompliment to item rando of myCompliments
—Yahoo/Weather Channel RSS. This is Copenhagen, Denmark —http://developer.yahoo.com/weather/ property RSSURL : “http://xml.weather.yahoo.com/forecastrss?p=DAXX0009&u=c”
if not (theHour > 0 and theHour < 9) then—human sleep protection sid=62bf1d6c41b9dcbdd3cf42be3523f342 set now to current date set thisMorning to now – (time of now) set thisEvening to thisMorning + 1 * days – 1 set foundOne to false set myAppointments to ”” set myTimestring to ”” set myappo to 0
try tell application "iCal" -- Catch events that start today or that started before today, but have not yet ended. repeat with thisCalendar in calendars repeat with thisEvent in ((every event of thisCalendar) whose ((start date ≥ thisMorning and start date ≤ thisEvening) or (end date ≥ now and start date ≤ thisMorning))) end tryset foundOne to true tell thisEvent set theDate to start date if hours of theDate ≥ hours of now as integer then -- i know, this is even more dirty set myappo to myappo + 1 if (count of events of thisCalendar) > 1 and myappo is not 1 then set myAppointments to myAppointments & " and " end if set myMinutes to minutes of (theDate) if myMinutes = 0 then set myMinutes to "" set myHowlong to hours of (theDate) & " " & myMinutes set myTimestring to " at " & myHowlong set theEventSummary to (summary & myTimestring) try set theEventDescription to description log theEventDescription on error set theEventDescription to "something" end try set myAppointments to myAppointments & theEventSummary end if --if hours.. end tell end tellend repeat end repeat--display dialog myAppointments-- Get mail set mySenders to "" tell application "Gmail Notifier" check for new mail set myNewmails to (count of entries) end tellrepeat with i from 1 to count of entries if i is (count of entry) or i is maxmention then set mySenders to mySenders & " and " else if i is not 1 then set mySenders to mySenders & ", " end if end repeatset mySenders to mySenders & (author name of entry i as string)if i is maxmention then exit repeat end ifmy EditSlide(1, "What a " & theWeatherNow & " day! ", " (" & theWeatherNowTemp & " degrees if you must know)")my EditSlide(2, theForecast, "up to " & theForecastTempHigh & " degreesmy EditSlide(3, cur_artist, cur_track)set myTime to (theHour as text) & & (theMinutes as text) my EditSlide(4, myTime, myDate & " " & myAppointments)my EditSlide(5, (myNewmails as text) & " new mails", mySenders)my startSlideshow()if (doshowimage) then tell application "QuickTime Player" to quitmy skru_ned() saythis("It's " & theWeatherNow & " outside, isn't it? ")my NextSlide() saythis("Tomorrow is going to be " & theForecast & " and up to " & theForecastTempHigh & " degrees.") my skru_op()delay 2my skru_ned() saythis("this is")my NextSlide()saythis(cur_artist & " and their song " & cur_track)my skru_op()-- timedelay 1my skru_ned() saythis("it's now")my NextSlide()if (dospeak) then saythis(((theMinutes as text) & " past " & theHour as text) & " and you have " & myappo & " appointments left for today") end ifmy skru_op()--synchronize mobile (or what ever is in isync)tell application "iSync" to synchronizemy NextSlide()my skru_ned() tell application "Gmail Notifier" check for new mail set gmails to count of items of entries my saythis("You have" & gmails & " new mails.") if (count of entries) > maxmention then my saythis("The newest ones are from") else if not (count of entries) > maxmention then my saythis("from") end tellend ifrepeat with i from 1 to count of entries if i is (count of entry) or i is maxmention then my saythis("and") end if end repeatmy saythis(author name of entry i as string)if i is maxmention then exit repeat end ifmy skru_op()--Exit Keynote. No need to save. Hope you don't have any open documents.tell application "Keynote" quit saving no end tell--åbn bio, tv, feeds og mail aka stik mig lige avisenif (dolistings) then end if --dolistingstell application "Safari" activate my new_tab() set the URL of document 1 to "http://www.gmail.com" my new_tab() set the URL of document 1 to "http://www.scope.dk/bioliste.php?id=alle&postnummer=1000" my new_tab() set the URL of document 1 to "http://www.tvidag.dk" my new_tab() set the URL of document 1 to "http://www.bloglines.com/myblogs"end tellif (dolistings) then my skru_ned() saythis("I have synchronized your phone's calendar and opened your listings and your mail. It's a great day!") my skru_op() end iftell me to activatedisplay dialog "Would you like to see the listings and your mail?" buttons {"Sure", "No"} giving up after 300 with title "Good to see you"if gave up of the result is true or the button returned of the result is "No" then tell application "Safari" to close document 1 else if the button returned of the result is "Sure" then tell application "Safari" to activate end ifend if—human sleep protection
———————subs on new_tab() tell application “Safari” to activate tell application “System Events” tell process “Safari” click menu item “New Tab” of menu “File” of menu bar 1 end tell end tell end new_tab
on skru_ned() tell application “iTunes” copy 75 to units if the volume adjustment of the current track is greater than -255 then set the volume adjustment of the current track to the (volume adjustment of the current track) – units end if end tell end skru_ned
on skru_op() delay 1 tell application “iTunes” copy 75 to units if the volume adjustment of the current track is greater than -255 then set the volume adjustment of the current track to the (volume adjustment of the current track) + units end if end tell end skru_op
on EditSlide(s_no, s_title, s_subtitle) tell application “Keynote” set the_slide to slide s_no of front slideshow set the_title to title of the_slide set the_subtitle to bullet 1 of body of the_slide set the content of the_title to s_title set the content of the_subtitle to s_subtitle end tell end EditSlide—nextslide
on NextSlide() try tell application “Keynote” activate end tell tell application “System Events” tell process “Keynote” keystroke “n” end tell end tell on error beep end try end NextSlide
on startSlideshow() try tell application “Keynote” activate end tell tell application “System Events” tell process “Keynote” tell menu bar 1 click menu item “Play Slideshow” of menu “View” end tell end tell end tell on error beep end try end startSlideshow
on saythis(thewords) if (dospeak) then say thewords end saythis
