Als ich heute meine beiden neusten Bücher der Pragmatic Programmers ausgepackt habe, viel mir auf, dass beide ziemlich viele Seiten haben. Auch mein aktuelles Buch ist nicht allzu dünn. Könnte es sein, dass ihre Bücher immer dicker werden? Fände ich schade, denn ich lese eigentlich lieber kleine, kompakte Bücher.

Wie finde ich das jetzt am schnellsten heraus? Auf der Webseite gibt es eine schöne Liste aller Bücher, die sich ausserdem nach Release Date sortieren lässt. Perfekt! Also rasch eine Konsole mit irb gestartet, und das Dokument geöffnet:

require 'open-uri'; require 'hpricot'
doc = Hpricot(\
  open("http://pragprog.com/categories/all?sort=pubdate"))

Die Links zu den Detailseiten aller Bücher (”a”s in einem div mit class=”thumbnail” Attribut) fand ich mit Hilfe folgender Query:

books = \
  (doc/"div[@class=thumbnail]/a").collect \
    {|link| link.attributes["href"] }

Es hilft natürlich extrem, wenn die Webseite vernünftig aufgebaut ist und vieles in divs mit css-Klassen unterteilt. Die Anzahl Seiten aller Bücher findet man mit:

pages = books.collect {|book|
  doc = Hpricot(open(book))
  (doc/"div[@class=stats]").collect {|stat|
    stat.inner_html.strip.split(' ').first unless stat.inner_html =~ /friday/
  }}.flatten.compact.reverse

Mich interessieren nur die echten Bücher, deshalb habe ich die PDFs der Friday-Serie ausgelassen.

Nun haben wir also ein Array mit den Seitenzahlen aller Bücher. Sehr viel nützt das noch nicht, wir sollten das ganze vielleicht mit Gnuplot visualisieren:

Gnuplot.open do |gp|
  Gnuplot::Plot.new( gp ) do |plot|

    plot.ylabel "Seiten"

    y = pages.collect{|y| y.to_i }
    x = (1..y.length).to_a

    plot.data << Gnuplot::DataSet.new([x,y]) do |ds|
      ds.with = "lines"
    end
  end
end

Und das schönste daran? Es hat nur eine halbe Stunde gedauert (inkl. Gnuplot kompilieren ;) ), genau so lange wie ich währenddessen meine Blutwurst gekocht habe :-)

Ach ja, das Resultat:

pragprog_seiten.png

Man könnte das wohl noch schöner machen, aber es reicht mir eigentlich, denn man sieht, dass die Seitenzahlen eher zunehmen...