1#! /usr/local/bin/ruby 2 3require "thread" 4require "observer" 5 6class Tick 7 include Observable 8 def initialize 9 Thread.start do 10 loop do 11 sleep 0.999 12 now = Time.now 13 changed 14 notify_observers(now.hour, now.min, now.sec) 15 end 16 end 17 end 18end 19 20class Clock 21 def initialize(tick) 22 @tick = tick 23 @tick.add_observer(self) 24 end 25 def update(h, m, s) 26 printf "\e[8D%02d:%02d:%02d", h, m, s 27 STDOUT.flush 28 end 29end 30 31clock = Clock.new(Tick.new) 32sleep 33