Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Ruby Script to check whether WWDC 2013 has been announced.
# in 2013 by Johannes Fahrenkrug, http://springenwerk.com
# See you at WWDC!
require 'rubygems'
require 'open-uri'
class WWDC2013
def self.announced?
begin
indicator_line = open('https://developer.apple.com/wwdc/') do |f|
f.detect { |line| line =~ /wwdc2012-june-11-15.jpg/ }
end
rescue Exception => e
#system("say -v \"Bad News\" \"Error: #{e.message}\"")
print "Error: #{e.message}\n"
end
indicator_line == nil
end
def self.speak
line = "Rejoice, all you people: WWDC 2013 has been announced!"
if defined? NSSpeechSynthesizer
ns = NSSpeechSynthesizer.new
ns.voice = "com.apple.speech.synthesis.voice.GoodNews"
ns.startSpeakingString(line)
else
system("say -v \"Good News\" \"#{line}\"")
end
end
end
if defined? NSObject
begin
# for OSX 10.8
framework 'CoreGraphics'
rescue
end
require 'hotcocoa'
class Application
include HotCocoa
def start
@firstrun = true
application(:name => "WWDC 2013") do |app|
app.delegate = self
window(:frame => [100, 100, 300, 200], :title => "WWDC 2013 - springenwerk.com", :background_color => color(:name => :black)) do |win|
win << result_field
win << last_checked_field
win << label(:text => "Has WWDC 2013 been announced yet?", :text_color => color(:name => :white))
win.will_close { exit }
end
start_polling(0.5, false)
end
end
private
def start_polling(seconds = 10, should_repeat = true)
# so MRI doesn't complain
eval("NSTimer.scheduledTimerWithTimeInterval(seconds, target:self, selector:'update:', userInfo:nil, repeats:should_repeat)")
end
def result_field
@result_field ||= label(:text => "Nope.", :font => font(:name => "Tahoma", :size => 90), :text_color => color(:name => :red), :text_align => :left)
end
def last_checked_field
@last_checkd_field ||= label(:text => "Checking... ", :font => font(:name => "Tahoma", :size => 10), :text_color => color(:name => :gray), :text_align => :left)
end
def update(timer = nil)
timestr = Time.now.localtime.strftime("at %I:%M:%S%p")
if WWDC2013.announced?
timer.invalidate if timer
result_field.text = 'YES!'
result_field.textColor = color(:name => :green)
last_checked_field.text = timestr
WWDC2013.speak
else
result_field.text = 'Nope.'
result_field.textColor = color(:name => :red)
last_checked_field.text = timestr
if @firstrun
@firstrun = false
timer.invalidate if timer
start_polling
end
end
end
end
Application.new.start
else
while true
print Time.now.localtime.strftime("At %I:%M:%S%p WWDC 2013 has...")
if WWDC2013.announced?
print " BEEN ANNOUNCED!!!\n"
WWDC2013.speak
break
else
print " not been announced yet :(\n"
end
sleep 10
end
end
@sprynmr

This comment has been minimized.

Copy link

sprynmr commented Apr 8, 2012

You need to account for the occasional 404 in your script. Just add an && title !~ /404/ should do it. :)

@jfahrenkrug

This comment has been minimized.

Copy link
Owner Author

jfahrenkrug commented Apr 8, 2012

Hi @spyrnmr, thank you for your feedback! I noticed that too and recently changed the announced? method to handle exceptions. In my experience that covers the 404 problem. Or does it still occur?

@sprynmr

This comment has been minimized.

Copy link

sprynmr commented Apr 8, 2012

Ah. Nope that should do it. Wasn't actually using your script, just my own bash script. Was curious what others had built. Didn't realize your exception captured 404's. See you there!

@jfahrenkrug

This comment has been minimized.

Copy link
Owner Author

jfahrenkrug commented Apr 9, 2012

Haha, yeah, let's hope our scripts help us to get a ticket :)

@sebastato

This comment has been minimized.

Copy link

sebastato commented Apr 8, 2013

Thanks, @jfahrenkrug. Really nice. Hopefully see you in SFO.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.