Skip to content

Instantly share code, notes, and snippets.

@eregon
Created August 19, 2011 18:27
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eregon/1157594 to your computer and use it in GitHub Desktop.
Save eregon/1157594 to your computer and use it in GitHub Desktop.
WhyDay 2011: A Binary Clock in Shoes

Binary Clock

A simple and concise (474 bytes minified, 1KB normal) binary clock in Shoes.

Compatible with Shoes 2 (Raisins) and 3 (Policeman).

Design inspired by The Game of Life on the ShoeBox.

Shoes.app(:title=>"Binary Clock",:width=>304,:height=>172,:resizable=>false){
on,off=rgb(0,0,255,0.45),gray(0,0);background rgb(6,6,89)
stroke gray(1.0,0.5);strokewidth 2.5;fill off
lights=Array.new(3){|i|Array.new(6){|j|next if j-i==5;x,y=250-j*44,30+i*44
para 2**j,:size=>'xx-small',:left=>x+20,:top=>y+20,:stroke=>gray;oval x,y,24}}
lights[0].pop;every(1){now=Time.now;[now.hour,now.min,now.sec].zip(lights){|v,r|
r.each_with_index{|l,j|l.style:fill=>(v[j]==1?on:off)}}}}
margin, space, width = 30, 20, 24
with_help = true
Shoes.app :title => "Binary Clock",
:width => 6*width+5*space+2*margin,
:height => 3*width+2*space+2*margin,
:resizable => false do
on, off = rgb(0, 0, 255, 0.45), gray(0,0)
if Shoes::VERSION == 'Policeman'
background rgb(6, 6, 89)
else
background gradient(rgb(0, 0, 128), rgb(12, 12, 50))
end
stroke gray(1.0, 0.5)
strokewidth 2.5
fill off
lights = Array.new(3) { |i|
Array.new(6) { |j|
next if i == 0 and j == 5 # The first light is not needed for hours
x, y = margin + (5-j)*(space+width), margin + i*(space+width)
para 2**j, :size => 'xx-small', :left => x+20, :top => y+20, :stroke => gray if with_help
oval x, y, width
}
} and lights.first.compact!
every 1 do
now = Time.now
[now.hour, now.min, now.sec].zip(lights) { |v, row|
row.each_with_index { |light, i|
light.style :fill => (v[i] == 1 ? on : off)
}
}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment