Active::Record Logger zu STDOUT mit pry

Ich habe lange gesucht, wie ich das ohne das pry-rails gem hinbekomme. Hier nun die Lösung: Packt das einfach in eure ~/.pryrc:

Pry.config.hooks.add_hook(:before_session, :rails) do
  if defined?(Rails)
    ActiveRecord::Base.logger = Logger.new(STDOUT)
  end
end

Tomatensuppe - lycopene to the rescue!

Tomatensuppe

Wer in dieser Jahreszeit nicht die Tomaten aus Nordafrika kaufen möchte (weil es einfach total verrückt ist), trotzdem aber, wie ich, nicht auf seine wöchentliche Dosis an Lycopin verzichten kann, sollte auf jeden Fall auf Tomaten aus Glas und Dose zurückgreifen.

Für diese Tomatensuppe habe ich einfach eine halbe Flasche passierte Tomaten, eine Dose ganze geschälte Tomaten, Olivenöl, eine Chili-Schote, Knoblauch und Oregano eine halbe Stunde lang kochen lassen. Danach die Chili-Schote entfernen, alles andere pürieren und mit Salz, Pfeffer und Apfelessig abgeschmecken. Kurz vorm servieren saure Sahne, Käse, Pfeffer und Olivenöl draufpacken und fertig. Damit es vegan wird, können natürlich alle Toppings mit ihrem rein pflanzlichen Äquivalent ausgetauscht werden.

Wer gleich einen größeren Topf kocht und ihn im Kühlschrank oder auf dem Balkon lagert, kann sich ein paar Tage lang ohne Aufwand nach der Kälte draußen schön von innen aufwärmen, wenn er/sie nach Hause kommt.

instagram

SQLite3: LIKE-Operator is faster than datetime functions

Recently I saw some code where an archive table was queried for specific time spans. For example, sum up all records for a specific month or year. The WHERE-clause looked like this:

SELECT ... FROM archiv WHERE `date` LIKE '2012-12-% %:%:%'

My first intention was to refactor this with the documented sqlite datetime functions but wanted to test how much faster it is. So I wrote two small Ruby scripts and benchmarked it with time ruby bench.rb (Tested on my Macbook Pro).

# bench.rb with LIKE
require 'sqlite3'

db  = SQLite3::Database.new '/Users/ben/Downloads/solar.sqlite'

20.times do
  # day span
  db.execute("SELECT (MAX(`E-Total`) - MIN(`E-Total`)) FROM archiv WHERE `date` LIKE '2012-12-30 %:%:%'")
  # month span
  db.execute("SELECT (MAX(`E-Total`) - MIN(`E-Total`)) FROM archiv WHERE `date` LIKE '2012-12-% %:%:%'")
  # year span
  db.execute("SELECT (MAX(`E-Total`) - MIN(`E-Total`)) FROM archiv WHERE `date` LIKE '2012-%-% %:%:%'")
end
# bench.rb with strftime
require 'sqlite3'

db  = SQLite3::Database.new '/Users/ben/Downloads/solar.sqlite'

20.times do
  # day span
  db.execute("SELECT (MAX(`E-Total`) - MIN(`E-Total`)) FROM archiv WHERE strftime('%Y-%m-%d', `date`) = '2012-12-30'")
  # month span
  db.execute("SELECT (MAX(`E-Total`) - MIN(`E-Total`)) FROM archiv WHERE strftime('%Y-%m', `date`) = '2012-12'")
  # year span
  db.execute("SELECT (MAX(`E-Total`) - MIN(`E-Total`)) FROM archiv WHERE strftime('%Y', `date`) = '2012'")
end

I ran all benchmarks three times and calculated the average.

     | LIKE     | strftime
-----+----------+-----------
real | 0m9.865s | 0m16.130s
user | 0m7.145s | 0m12.828s
sys  | 0m2.691s |  0m3.246s

Surprisingly the LIKE-Operator is much faster then the strftime function. I don't know why it is, but I will keep the code as it is.

Selbstkochender Topf EveryCook

EveryCook

Es gibt jetzt einen Topf, der einfache Sachen wie Suppe o.ä. kochen kann. Der Prototyp wurde auf der gerade stattfindenden 29C3 vorgestellt.

SPIEGEL Online Artikel

Website von EveryCook

Quelle des Bildes: http://everycook.org/cms/images/startpage/121115everycookprinzip.png