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 |
This comment has been minimized.
This comment has been minimized.
Hi @spyrnmr, thank you for your feedback! I noticed that too and recently changed the |
This comment has been minimized.
This comment has been minimized.
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! |
This comment has been minimized.
This comment has been minimized.
Haha, yeah, let's hope our scripts help us to get a ticket :) |
This comment has been minimized.
This comment has been minimized.
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
This comment has been minimized.
You need to account for the occasional 404 in your script. Just add an
&& title !~ /404/
should do it. :)