Video transcript & code
Captains log, star date 2013.6.4. Something is wrong with my neutronic tea kettle. It no longer makes Earl Grey tea, and as a result I have lost my commanding English accent. I have instructed commander LaForge to look into the matter. He is being assisted by Lieutenant Barclay, who is monitoring sensor readings. I have further instructed them to use the ship's log to record every aspect of the procedure, so that future crews can learn from this exercise.
require 'logger' class Picard def make_it_so(log=Logger.new($stdout)) log.info "I have instructed engineering to fix my tea kettle" Geordi.new(log).fix_it end end class Geordi def initialize(log) @log = log end def fix_it @log.info "Reversing the flux phase capacitance!" @log.info "Bounding a tachyon particle beam off of Data's cat!" Barclay.new(@log).monitor_sensors end end class Barclay def initialize(log) @log = log end def monitor_sensors @log.warn "Warning, bogon levels are rising!" end end Picard.new.make_it_so # >> I, [2013-06-04T16:10:03.056063 #11351] INFO -- : I have instructed engineering to fix my tea kettle # >> I, [2013-06-04T16:10:03.056286 #11351] INFO -- : Reversing the flux phase capacitance! # >> I, [2013-06-04T16:10:03.056336 #11351] INFO -- : Bounding a tachyon particle beam off of Data's cat! # >> W, [2013-06-04T16:10:03.056393 #11351] WARN -- : Warning, bogon levels are rising!
Captain's log, supplemental: Per starfleet regulations, our logs are routinely broadcast over the subspace standard output channel. We have been informed by Starfleet that logs of minor personal appliance repair is, quote, "not efficient use of available subspace bandwidth". I have misgivings about Starfleet's opinion of the importance tea to the smooth operation of this vessel, however I have decided to comply.
Unfortunately, my crew is so in the habit of keeping detailed logs that despite my orders to discontinue logging, they keep forgetting to pass the word down the chain of command. As a result, their entries are being recorded and sent out anyway. Nearby vessels have started to complain about all the subspace message traffic.
class Picard def make_it_so(log=Logger.new($stdout)) log.info "I have instructed engineering to fix my tea kettle" Geordi.new(log, quiet: true).fix_it end end class Geordi def initialize(log, quiet: true) @log = log end # ...
Just in the nick of time, ensign Crusher appears to have come up with a solution. While researching ancient earth programming manuscripts he ran across something called the "Null Object pattern". Based on his research, he has constructed a "null logger" device. This device mimics the protocols of our usual ship's log subsystem, but simply discards its input unused.
class NullLogger def debug(*); end def info(*); end def warn(*); end def error(*); end def fatal(*); end end log = NullLogger.new puts "before" Picard.new.make_it_so(log) puts "after" # >> before # >> after
We have installed the unit into our primary computer core. I have high hopes that this will resolve our overcommunication problem with minimal inconvenience to the crew. If this works, this may be the last you hear from me for a while. So to all the life-forms out there: live long and prosper… and happy hacking!