On 12/1/06, Lipper, Matthew <Mlipper / doitt.nyc.gov> wrote: > > > > On 12/1/06, ara.t.howard / noaa.gov <ara.t.howard / noaa.gov> wrote: > > > On Fri, 1 Dec 2006, Pit Capitain wrote: > > > > > > > ara.t.howard / noaa.gov schrieb: > > > >> how bout this as the time spec? > > > >> > > > >> http://runt.rubyforge.org/ > > > > > > > > Ara, this would be nice, but I think it's difficult to > > determine the time of > > > > the next event with Runt's temporal expressions. I'm sure > > you don't want to > > > > call Runt::TExpr#include? every n seconds. > > > > > > indeed. this is the only major design flaw. still, if one > > assumes a > > > granualrity of not more than 60s (ala cron) then this > > approach isn't too bad. > > > between the dates/include methods one can determine apriori > > if an event should > > > be scheduled for the next minute 'tick'. > > > > > > i'm assuming there is either a solution implied in the code > > or that one can be > > > added without too much trouble - the bulk of the work has > > already been done in > > > this lib, so even if it isn't there now, i'm sure a > > solution will present > > > itself. > > > > > > now. what do you suggest? > > > > > > > Runt looks nice. Another package is Chronic. It was part of the > > natural language processing presentation at RubyConf this year. All > > Chronic does, though, is take human "fuzzy" times and turns them into > > actual Time objects. > > > > Chronic.parse "next Thursday at seven am" #=> Time object > > > > http://rubyforge.org/projects/chronic/ > > > > What is needed to make Runt work for a scheduler is a next_time method > > that would return the next Time that this event should happen given > > Time.now. The scheduler then maintains a queue of the "next time" for > > all events and pulls them from the queue in order. When an event runs, > > the last thing it does is pulls the next_time from Runt and adds that > > to the queue (in the proper location). The scheduler thread then > > sleeps for N seconds where N is the time till the next event in the > > queue needs to happen. > > > > So, maybe a combination of Chronic (to get the nice human readable > > format) and Runt (to keep track of recurring events) would work? > > > > TwP > > > > > > I'm still catching up to this thread but FWIW I am always interested in > making Runt more useful and functional. If I understand the above > correctly, then you'd like a next_time method returning a > Date/DateTime/Time (or whatever) that indicates the next occurrence of > this expression? > Bingo! From the tutorial example ... last_thursday = DIMonth.new(Last_of,Thursday) august = REYear.new(8) expr = last_thursday & august expr.next_time #=> or some equally clever method name Here returns the Time object that represents the last Thursday in August -- probably midnight since that is when Thursday starts. mon_wed_fri = DIWeek.new(Mon) | DIWeek.new(Wed) | DIWeek.new(Fri) mon_wed_fri.next_time Since today is Friday, this example would return the Time object that represents the next Monday from today. Maybe just "next" instead of "next_time" ?? Any chance of getting Runt and Chronic to play nicely together? Blessings, TwP