<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://blaulabs.de/</id>
  <title>blaulabs</title>
  <updated>2011-06-30T00:00:00+00:00</updated>
  <link href="http://blaulabs.de/" />
  
  <author>
    <name>blaulabs</name>
  </author>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blaulabs" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="blaulabs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title>Learning Rails Diary – 03 – Dies und Das</title>
    <id>http://blaulabs.de//2011/12/30/learning-rails-diary-03/</id>
    <updated>2011-12-30T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/12/30/learning-rails-diary-03/" />
    <content type="html">&lt;h2&gt;Tutorials &amp;amp; Beispiele&lt;/h2&gt;

&lt;p&gt;Die Website von &lt;a href="http://railsapps.github.com/"&gt;railsapps&lt;/a&gt; ist etwas unübersichtlich gestaltet, bietet aber gute Tutorials mit Beispielprojekten und hilfreichen Artikeln. Da gerade 3.1 die aktuelle Rails Version ist, sollte man sich gleich zum Start mal den Artikel &lt;a href="http://railsapps.github.com/installing-rails-3-1.html"&gt;installing-rails-3-1&lt;/a&gt; durchlesen. In diesem Artikel findet man unter anderem Hinweise für die Vorbereitung der gängigen Betriebsysteme. Der Autor dieser Website ist so nett und stellt eine umfangreiche Sammlung von &lt;a href="http://railsapps.github.com/best-recommended-learning-rails-books-resources.html"&gt;empfehlenswerten Ressourcen&lt;/a&gt; zur Verfügung.&lt;/p&gt;

&lt;h2&gt;HAML &amp;amp; SASS&lt;/h2&gt;

&lt;p&gt;Eine Philosophy von &lt;a href="http://rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; ist es, mit so wenig Aufwand wie möglich, so viel wie möglich zu erreichen. Die Verwendung von &lt;a href="http://haml-lang.com/"&gt;HAML&lt;/a&gt; folgt diesem Gedanken. Mit HAML ist es möglich mindestens 50% des Quelltextes gegenüber der von HTML einzusparen. HTML hat ein öffnendes und ein schließendes HTML-Element. HAML spart sich das schließende Element und definiert seine Kind-Element durch Einrückung.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sass-lang.com/"&gt;SASS&lt;/a&gt; ist ein Preprozessor der aus Styles in der SASS- oder SCSS-Syntax allseits bekanntes CSS generiert. Mit der Definition der Styles in SASS spart man ebenfalls einiges an Schreibarbeit und reduziert redundanten Quelltext. Möglich wird das durch den Aufbau einer Struktur, wie man sie von der objektorientierten Programmierung kennt.&lt;/p&gt;

&lt;h2&gt;Layout&lt;/h2&gt;

&lt;p&gt;Wer bereits mit Webseiten und Styles gearbeitet hat, merkt schnell wie schwierig es sein kann eine Webseite so zu erstellen, dass sie in allen gängigen Browsern gleich aussieht. Hilfreich dabei sind Bibliotheken, die bereits die gesammelten Problemlösungen beinhalten und bei ihrer Verwendung automatisch anwenden, ohne dass man selber an alles denken muss.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://compass-style.org/"&gt;Compass&lt;/a&gt; ist so eine Bibliothek. Sie bietet eine Menge von Styles, die den gesammelten Erfahrungen der Webentwickler-Gemeinde entsprechen. Ein Beispiel dafür ist das sogenannte Reset-Script, welches den Style der Applikation zunächst auf einen definierten Ausgangszustand bringt. Das hat unter anderem den Zweck, dass die Eigenarten einzelner Browser das Layout nicht verfälschen können. Desweiteren werden in diesem Script Styles gesetzt, die sich in der Praxis bewährt haben, die jedoch mit dem eigentlichen Layout der Webapplikation nichts zu tun haben. So zum Beispiel das grundsätzliche Einfügen einer Scrolbar auf der rechten Seite. Ohne das explizite Setzen ist diese im Browser nur dann vorhanden, wenn der Inhalt der Website größer als der vertikale, sichtbare Bereich ist. Durch das sporadische Erscheinen und verschwinden der Scrolbar, würde die Anzahl der nutzbaren Pixel in der Breite immer wieder um die Breite der Scrolbar schwanken. Das kann sich ungünstig auf die Platzierung der Elemente einer Website auswirken und zum ungewollten Verschieben der Elemente führen.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://compass-style.org/"&gt;Compass&lt;/a&gt; bietet zusätzlich ein vordefiniertes Layout mit &lt;a href="http://compass-style.org/reference/blueprint/"&gt;Blueprint&lt;/a&gt; in Form von &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#mixins"&gt;Mixins&lt;/a&gt; in SASS- oder SCSS-Syntax an. Man kann selber entscheiden, ob man von Blueprint nur bestimmte Mixins in seinem Layout verwenden oder gleich sämtliche Mixins als Styles integrieren möchte. Wenn man Blueprint komplett integriert, hat man gleich zum Start zwar ein etwas rustikales, aber brauchbares &lt;a href="http://blueprintcss.org/tests/parts/forms.html"&gt;Layout&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Compass kann jedoch noch mehr. Es bietet eine Fülle von Hilfmethoden für das Erstellen eigener Styles an. So kann man zum Beispiel über die bereitgestellten Mixins ein Raster zur Positionierung von Elementen aufbauen oder die Ecken eines Containers abrunden.&lt;/p&gt;

&lt;p&gt;Es gibt weitere Bibliotheken, die best practices sammeln und einem Entwickler in Form eines Gems zur Verfügung stellen.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://de.html5boilerplate.com/"&gt;HTML5Boilerplate&lt;/a&gt; ist so eine und kann durch &lt;a href="https://github.com/sporkd/compass-html5-boilerplate"&gt;compass-html5-boilerplate&lt;/a&gt; ebenfalls mit Compass in das Rails Projekt eingebunden werden.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.github.com/bootstrap/index.html#"&gt;Twitter Bootstrap&lt;/a&gt; bietet nicht nur ein Fundament, auf dem man seine eigenen Styles aufbauen kann, es bietet gleich ein komplettes Layout. Twitter Bootstrap basiert auf &lt;a href="http://markdotto.com/bootstrap/"&gt;Preboot&lt;/a&gt; und arbeitet daher nicht mit dem in Ruby implementierten Preprozessor SASS, sondern mit dem in JavaScript implementierten &lt;a href="http://lesscss.org/"&gt;LESS&lt;/a&gt;. Der SASS Preprozessor versteht die in LESS-Syntax verfassten Dateien nicht, sie sind also nicht kompatibel. Wer dennoch die tolle Arbeit der Twitter Entwickler nutzen möchte, findet in &lt;a href="http://rubysource.com/twitter-bootstrap-less-and-sass-understanding-your-options-for-rails-3-1/"&gt;diesem&lt;/a&gt; und in &lt;a href="http://rubysource.com/too-good-to-be-true-twitter-bootstrap-meets-formtastic-and-tabulous/"&gt;diesem&lt;/a&gt; Artikel interassante Informationen und Lösungsvorschläge.&lt;/p&gt;

&lt;h2&gt;Deployment &amp;amp; Continuous Integration&lt;/h2&gt;

&lt;p&gt;Wer seine Rails Applikation im Internet betrieben möchte, muss sich um das Hosting und die damit verbundene Administration kümmern. Mit der Plattform &lt;a href="http://www.heroku.com/"&gt;heroku&lt;/a&gt; kann man den Weg zu diesem Ziel abkürzen. Das bietet sich ganz besonders dann an, wenn man sich die Arbeit zunächst sparen und die Applikation schnell online bringen möchte. Alles kostenlos, so lange man die Applikation im Ramen des kostenfreien Accounts betreibt. &lt;a href="http://railsapps.github.com/"&gt;railsapps&lt;/a&gt; stellt für das Einrichten eine umfangreiche &lt;a href="http://railsapps.github.com/rails-heroku-tutorial.html"&gt;Anleitung&lt;/a&gt; zur Verfügung&lt;/p&gt;

&lt;p&gt;&lt;a href="http://de.wikipedia.org/wiki/Continuous_Integration"&gt;Continuous Integration&lt;/a&gt; ist für das eigene Rails Projekt schnell realisiert, wenn man &lt;a href="http://travis-ci.org/"&gt;Travis-CI&lt;/a&gt; zusammen mit seinem &lt;a href="https://github.com/"&gt;Github&lt;/a&gt; Account verwendet. Nach der Registrierung des Github Accounts bei Travis-CI, können die eigenen Github Repositories im Travis-CI Profil nach belieben aktiviert und deaktiviert werden.&lt;/p&gt;

&lt;p&gt;To be continued &amp;hellip;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/chlmwyI07dY" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <title>VIM Tipps für Ruby und Rails Projekte</title>
    <id>http://blaulabs.de//2011/12/29/vim-fuer-die-arbeit-mit-ruby-und-rails/</id>
    <updated>2011-12-29T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/12/29/vim-fuer-die-arbeit-mit-ruby-und-rails/" />
    <content type="html">&lt;p&gt;&lt;strong&gt;Update 1&lt;/strong&gt;: Die Funktion zum Setzen und Entfernen des lokalen Gem-Pfads habe ich durch eine &amp;quot;einfache&amp;quot; RegEx ersetzt.&lt;/p&gt;

&lt;h2&gt;VIM bei blau.de&lt;/h2&gt;

&lt;p&gt;Die Ruby Entwickler bei blau.de lieben VIM ... und hassen es gleichzeitig.&lt;/p&gt;

&lt;p&gt;VIM ist ja nicht gerade für eine sanft ansteigende Lernkurve bekannt :) 
&lt;img src="/images/vim.png" alt="VIM Learning Curve"&gt;&lt;/p&gt;

&lt;p&gt;Hat man sich aber erst einmal an die &lt;a href="http://www.devdaily.com/linux/vim-vi-mode-editor-command-insert-mode"&gt;drei VIM modes&lt;/a&gt; gewöhnt, so geht das Arbeiten sehr schnell von der Hand.
VIM unterstützt Ruby schon von Haus aus aber mit ein paar zusätzlichen plugins wird die Arbeit tatsächlich zum Vergnügen:&lt;/p&gt;

&lt;h3&gt;&lt;a href="https://github.com/tpope/vim-rails"&gt;rails.vim&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Erweitertes &lt;code&gt;gf&lt;/code&gt; (goto file) für Rails typische Elemente (z.B. Partials), zusammen mit der &lt;code&gt;:Rextract&lt;/code&gt; Funktion zum extrahieren von HTML in Partials machen das Plugin zu einem &amp;quot;Must-Have&amp;quot;.&lt;/p&gt;

&lt;h3&gt;&lt;a href="https://github.com/scrooloose/syntastic"&gt;syntastic&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Syntaxchecking für Ruby Files. Nuff said.&lt;/p&gt;

&lt;h3&gt;&lt;a href="https://github.com/tpope/vim-haml"&gt;vim-haml&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Syntax highlighting und Einrückungsregeln für SASS, HAML und SCSS Files.&lt;/p&gt;

&lt;h2&gt;Aber wir können auch selber ...&lt;/h2&gt;

&lt;p&gt;Im Laufe der Zeit haben wir auch ein Paar (mit grossem P) VIM Funktionen selber geschrieben.&lt;/p&gt;

&lt;h3&gt;Der Ruby 1.9 magic encoding comment&lt;/h3&gt;

&lt;p&gt;Mit grosser Macht kommt auch grosse Verantwortung. Ruby 1.9 mit seiner &lt;a href="http://nuclearsquid.com/writings/ruby-1-9-encodings/"&gt;Unicode Unterstützung&lt;/a&gt; macht es notwendig, in jeder &lt;code&gt;*.rb&lt;/code&gt; Datei einen Kommentar einzufügen, der Aussagen zum encoding des Inhaltes macht. 
Das wäre für &lt;code&gt;UTF-8&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;:::ruby
# encoding: utf-8
class InUtf8
...
&lt;/pre&gt;

&lt;p&gt;Wir haben dafür eine kleine Funktion geschrieben, die das automatisiert. Sie fügt in jede ruby-like Datei den Kommentar ein, wenn er fehlt:
&lt;script src="https://gist.github.com/1527916.js"&gt; &lt;/script&gt;&lt;/p&gt;

&lt;h3&gt;Lokales benutzen von gems&lt;/h3&gt;

&lt;p&gt;Oft will man in Projekten die lokal ausgecheckte version eines gems in dem &lt;code&gt;Gemfile&lt;/code&gt; benutzen:&lt;/p&gt;

&lt;pre&gt;:::ruby
 gem "snippr", "~&gt; 0.12.3", :path =&gt; "../snippr"
&lt;/pre&gt;

&lt;p&gt;Wenn man seine ausgecheckten gems und die anderen Projekte im selben Order ablegt, und das Verzeichnis des gems so heisst, wie das gem selber, kann folgendes helfen:
&lt;script src="https://gist.github.com/1524989.js"&gt; &lt;/script&gt;
Steht man auf der zeile mit dem &lt;code&gt;gem &amp;quot;...&amp;quot;&lt;/code&gt; und drückt &lt;code&gt;:Gp&lt;/code&gt; und dann Enter wird automatisch der lokale Pfad hinzugefügt.
Ein weiteres &lt;code&gt;:Gp&lt;/code&gt; entfernt die Verlinkung wieder.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/2JiDGRB59wQ" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <title>Muzungu</title>
    <id>http://blaulabs.de//2011/12/11/muzungu/</id>
    <updated>2011-12-11T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/12/11/muzungu/" />
    <content type="html">&lt;p&gt;Vom 26.11. bis zum 02.12. hatte ich die Möglichkeit gemeinsam mit &lt;a href="http://www.vivaconagua.org"&gt;Viva con Agua&lt;/a&gt; (VcA) und der &lt;a href="http://www.welthungerhilfe.de"&gt;Welthungerhilfe&lt;/a&gt; (WHH) nach Ruanda zu
reisen, um die dort finanzierten Projekte von Viva con Agua zu besuchen.  Unsere kleine Reisegruppe bestand aus Anke (WHH), Arne (Vorstand VcA),
Matthias (VcA München) und mir (VcA Hamburg).&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/muzungu_team.jpg" alt="Reisegruppe Ruanda"&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;v. l. Anke, Matthias, Timo, Arne&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An unserem ersten Tag haben wir das &lt;a href="http://www.kigalimemorialcentre.org/old/centre/index.html"&gt;Genocide Memorial Center&lt;/a&gt; besucht, welches an den Genozid in Ruanda von 1994 erinnert.
Die damaligen Ereignisse werden hier ungeschönt beschrieben und durch die Darstellung vieler persönlicher Schicksale lässt diese Ausstellung
keinen unberührt.&lt;/p&gt;

&lt;p&gt;In den darauffolgenden Tagen waren wir in der Südprovinz unterwegs. Unser erstes Ziel war das Base-Kirjango Tal, wo bereits vor 3 Jahren mehr
als 30 Quelleinfassungen gebaut wurden.&lt;/p&gt;

&lt;p&gt;Bei Quelleinfassungen wird eine bestehende Quelle am Berg freigelegt und der Quellort so gesichert, dass das Wasser nicht durch
Bodenerosionen oder andere Umstände verunreinigt werden kann. Über ein unterirdisch verlegtes Rohr wird das austretende Quellwasser einige
Meter weiter zu einer Entnahmestelle geleitet. Die Entnahmestelle ist so angelegt, dass nicht genutztes Quellwasser in die Bewässerungsgräben für
die Felder abfließen kann. So wird verhindert, dass sich stehendes Wasser im Bereich der Quelle sammelt, welches Auslöser für Krankheiten
sein kann.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/muzungu_quelle.jpg" alt="Quelleinfassung"&gt;&lt;/p&gt;

&lt;p&gt;Auf dem Weg zu unserer ersten Quelle wurde uns bewusst, wie außergewöhnlich es scheinbar ist, dass ein
hellhäutiger Europäer in diese Gegend kommt. Von den Kindern, die am Wegesrand vor den Häusern spielten wurden wir mit lauten “Muzungu!
Muzungu!” Rufen empfangen. Was laut unserem Fahrer soviel wie “Weißer” oder “Bleichgesicht” heißt. Bereits auf der Fahrt aus der Hauptstadt
hinaus auf das Land wurde uns des öfteren zur freundlichen Begrüßung zugewunken. Es war schön, so viele lebensfrohe Menschen zu sehen, selbst
wenn wir schnell einen lahmen Arm vom Zurückwinken bekommen sollten.&lt;/p&gt;

&lt;p&gt;Endlich an unserer ersten Quelle angekommen war es besonders erfreulich für uns von den Nutzern der Quelle zu hören, dass sich deren
Lebensqualität durch den Bau der Quelleinfassungen verbessert hat. Zum einen ist die Quelle das ganze Jahr über nutzbar und weil nicht mehr das
Oberflächenwasser abgeschöpft wird, ist die Anzahl von Erkrankungen zurückgegangen.&lt;/p&gt;

&lt;p&gt;Eine Quelle stellt Wasser für ca. 80–200 Personen zur
Verfügung. Geholt wird das Wasser ca. 3x am Tag in 5–20 Liter Kanister.  Je nachdem wer aus der Familie mit dem Wasserholen beauftragt wurde. Die
Laufzeit zwischen Haus und Quelle liegt zwischen 10 und 30 Minuten. Kein Zuckerschlecken, wie ich in einem Selbstexperiment mit einem 10 Liter
Kanister erfahren konnte, den ich einem Jungen abgenommen habe.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/muzungu_child.jpg" alt="Wasser holen"&gt;&lt;/p&gt;

&lt;p&gt;Neben den Quellen im Base-Kirjango Tal besuchten
wir noch gerade im Bau befindliche bzw. ein bis zwei Wochen zuvor freigegebene Quellen im Mwogo Tal. Der Bau der Quelleinfassungen wird
von einer lokalen Firma unter Mithilfe der Nutzer der Quelle ausgeführt.  Es war insgesamt sehr interessant zu sehen, wie die Quellen mit den
anderen Projekten der Welthungerhilfe in den Tälern ineinandergreifen.  Ehemaliges Sumpfgebiet wird für Reisfelder kultiviert. Das Wasser der
Quellen fließt in die Bewässungssystem der Reisfelder und in kleine Stauseen, die auch in Trockenzeiten eine Bewässerung möglich machen.
Eine Reismühle wurde vor kurzem eröffnet, in der der Reis der Bauern weiterverarbeitet wird und letztendlich als Nahrungsmittel für die
Bevölkerung zur Verfügung steht.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/muzungu_mwogo.jpg" alt="Mwogo Tal"&gt;&lt;/p&gt;

&lt;p&gt;Ebenfalls auf der Agenda standen Besuche beim Vizebürgermeister des Districts Ruhango, des
Vizegouverneurs der Südprovinz, dem Leiter der Wasserwerke und einem Berater des Infrastrukturministers. Alle mit dem Ziel Trinkwasser für
jeden Haushalt zur Verfügung zu stellen.&lt;/p&gt;

&lt;p&gt;Für mich eine sehr gelungene Reise, auf der ich das Gut Wasser noch einmal mehr schätzen lernen konnte und Motivation weiterhin für
sauberes Trinkwasser aktiv zu sein.&lt;/p&gt;

&lt;p&gt;P.S. &lt;a href="http://www.blau.de"&gt;blau.de&lt;/a&gt; unterstützt übrigens das &lt;a href="http://www.tramprennen.org"&gt;Tramprennen&lt;/a&gt;. Trampen für sauberes Trinkwasser.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/0f13Yz7UXvA" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <title>Neue Stellenanzeigen</title>
    <id>http://blaulabs.de//2011/12/06/neue-stellenanzeigen/</id>
    <updated>2011-12-06T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/12/06/neue-stellenanzeigen/" />
    <content type="html">&lt;p&gt;Zum Nikolaus gibt es zwei neue Stellenanzeigen! Wir suchen &lt;a href="http://www.blaulabs.de/jobs/"&gt;Java- und Ruby-Entwickler&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/walnuss.jpg" alt="Walnuss-Boote auf iMac"&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/QU7iX13Yg1A" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <title>Acceptance Testing with Responsive Layouts</title>
    <id>http://blaulabs.de//2011/11/22/acceptance-testing-with-responsive-layouts/</id>
    <updated>2011-11-22T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/11/22/acceptance-testing-with-responsive-layouts/" />
    <content type="html">&lt;h3&gt;What’s so special about &lt;a href="http://coding.smashingmagazine.com/2011/01/12/guidelines-for-responsive-web-design/"&gt;responsive layouts&lt;/a&gt; and acceptance testing?&lt;/h3&gt;

&lt;p&gt;At first one might think rearranging content and resizing images won’t break any acceptance tests because you’re testing functionality not
layout, don’t you? Well, this is right until the day you replace the wide navigation bar with a clickable dropdown for smaller screen sizes.
That’s the point when you get into trouble if you don’t set the browser window size for your tests. There are now two ways how a user navigates
through your website depending on the screen size and you want to make sure both ways keep working.&lt;/p&gt;

&lt;h4&gt;How did we resize the browser window until now?&lt;/h4&gt;

&lt;p&gt;A popular workaround until now was to execute some javascript:&lt;/p&gt;

&lt;pre&gt;:::ruby
def resize_window(screen_size)
  @browser.execute_script("window.resizeTo(screen_size[:width], screen_size[:height])
end
&lt;/pre&gt;

&lt;p&gt;But this always felt like hacking and &lt;a href="http://code.google.com/p/selenium/issues/detail?id=174"&gt;according to Jari Bakken&lt;/a&gt; this workaround is being
disabled in modern browsers. So he implemented a &lt;a href="http://code.google.com/p/selenium/source/detail?r=14578"&gt;Webdriver API&lt;/a&gt; for resizing the browser window.&lt;/p&gt;

&lt;h3&gt;How can you resize the browser window with Capybara/Selenium now?&lt;/h3&gt;

&lt;p&gt;You can access the new resize method trough Capybara like this:&lt;/p&gt;

&lt;pre&gt;:::ruby
Capybara.current_session.driver.browser.manage.window.resize_to(width, height)
&lt;/pre&gt;

&lt;p&gt;&lt;small&gt;(Disclaimer: This solution is still beta and only works with the latest selenium-webdriver (=&amp;gt; 2.12.2) and Firefox Browser.)&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;To integrate this method call smoothly into our test suite with RSpec, Selenium and Capybara we expanded our RSpec config to provide a
‘mobile’-filter. Examples that are being tagged with ‘mobile’ run in a small browser window and all other examples run in a desktop sized
browser window. Example:&lt;/p&gt;

&lt;pre&gt;:::ruby
it "can submit voucher", :mobile =&gt; true do
  login_user
  fill_in 'voucher_code', :with =&gt; "12345"
  click_button 'submit'
  page.should have_content 'Successful!'
end

module BlauIntegrationTest

  Capybara.default_driver = :selenium

  DESKTOP_SCREENSIZE = { :width =&gt; 1280, :height =&gt; 1024 }
  MOBILE_SCREENSIZE  = { :width =&gt; 320, :height =&gt; 480 }

  RSpec.configure do |config|
    config.before(:each) do
      if example.metadata[:mobile]
        BlauIntegrationTest.resize_browser_window(MOBILE_SCREENSIZE)
      else
        BlauIntegrationTest.resize_browser_window(DESKTOP_SCREENSIZE)
      end
    end
  end

  def self.resize_browser_window(size)
    Capybara.current_session.driver.browser.manage.window.resize_to(size[:width], size[:height])
  end

end
&lt;/pre&gt;

&lt;h3&gt;What about other drivers and browsers?&lt;/h3&gt;

&lt;p&gt;For Selenium it currently only works with Firefox. We haven’t tried other drivers like akephalos and capybara-webkit with websites with
responsive layout. Feel free to share your experience if you know more about it!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/47LIl3BU1lk" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <title>2 Klicks für mehr Datenschutz</title>
    <id>http://blaulabs.de//2011/11/18/zwei-klicks-fur-mehr-datenschutz/</id>
    <updated>2011-11-18T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/11/18/zwei-klicks-fur-mehr-datenschutz/" />
    <content type="html">&lt;p&gt;„Gefällt mir“ Buttons von Facebook werden auf immer mehr Webseiten eingebunden. Auch auf &lt;a href="http://www.blau.de"&gt;blau.de&lt;/a&gt; haben wir diese seit einiger
Zeit im Einsatz.&lt;/p&gt;

&lt;p&gt;Durch die Marketing-Brille sind sie ein voller Erfolg. In kurzer Zeit haben wir über 35.000 Fans gewonnen. Das jeder Aufruf unser
Homepage aber auch bei Facebook getrackt wird, störte nicht nur die Datenschützer unter uns.&lt;/p&gt;

&lt;p&gt;Einen erneuten Denkanstoß lieferte der heise-Artikel &lt;a href="http://heise.de/-1333879"&gt;„2 Klicks für mehr Datenschutz“&lt;/a&gt;. Nach einem kurzen Gespräch entschlossen
wir uns, die Daten unser Kunden nicht ungefragt an Facebook zu übertragen und ab sofort die „2 Klick Variante“ einzusetzen.&lt;/p&gt;

&lt;p&gt;Der Einbau war schnell erledigt, da das &lt;a href="http://www.heise.de/extras/socialshareprivacy/"&gt;jQuery-Plugin von heise&lt;/a&gt; gut dokumentiert und intuitiv zu verwenden ist.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/2LA7w5T5xUw" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <title>Play with your pair!</title>
    <id>http://blaulabs.de//2011/11/02/play-with-your-pair/</id>
    <updated>2011-11-02T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/11/02/play-with-your-pair/" />
    <content type="html">&lt;p&gt;&lt;a href="http://de.wikipedia.org/wiki/Pair_Programming"&gt;Pair Programming&lt;/a&gt; macht Spaß und führt bekanntermaßen zu einer besseren Codequalität. Durch kleine Spiele kann
man es aber noch interessanter gestalten und gleichzeitig &lt;a href="http://agileinaflash.blogspot.com/2009/02/pair-programming-smells.html"&gt;schlechtes Pairing&lt;/a&gt; vermeiden! Ausprobiert habe ich das auf den letzten &lt;a href="http://coderetreat.com/"&gt;Code
Retreats&lt;/a&gt; und es hat eine Menge Spaß gemacht. Ein paar davon möchte ich hier kurz vorstellen:&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/pairing.jpg" alt="Pair Programming"&gt;&lt;/p&gt;

&lt;h3&gt;Ping Pong&lt;/h3&gt;

&lt;p&gt;Eine sehr gut Möglichkeit zu vehindern, dass der eine Entwickler in einen Schlafmodus verfällt, während der andere sich die letzten Ideen
aus den Fingern saugt. Ziel ist es, häufig die Tastatur zu wechseln.  Zunächst schreibt einer einen roten Test und gibt die Tastatur an den
anderen weiter. Der muss dann den Test fixen, einen neuen roten Test schreiben und die Tastatur wieder zurückgeben. Hat sich bei uns bewährt
und sorgt dafür, dass beide Entwickler bei der Sache bleiben. Persönlich mein Favorit.&lt;/p&gt;

&lt;h3&gt;Farsighted Navigator&lt;/h3&gt;

&lt;p&gt;In diesem Spiel gibt es einen “Driver”(sitzt an der Tastatur) und einen “Navigator”(sitzt daneben). Der Navigator hat dabei die Rolle,
strategisch vorauszudenken und das auf einer abstrakteren Ebene als auf Methoden und Klassen. Hier geht es besonders um die explizite
Rollenverteilung: einer soll entwickeln bzw. vorauschauend denken, was gut sein kann wenn einer der Beteiligten häufig nur in der einen Rolle
steckt. Hat auch etwas mit Vertrauen zu tun.&lt;/p&gt;

&lt;h3&gt;Silent Programming&lt;/h3&gt;

&lt;p&gt;Lasse deinen Code sprechen. Die Entwickler dürfen es jetzt nicht. Es wird allein über den Code kommuniziert. (Kommentare schreiben zählt
natürlich nicht) Finde ich ganz gut, um mal zu sehen wie gut &lt;em&gt;sprechender&lt;/em&gt; Code sein muss. Interessant wird es, wenn man nicht
versteht was der andere vorhat. Meine Ideen dazu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tastatur zurückgeben: Signal den Code verständlicher zu machen&lt;/li&gt;
&lt;li&gt;Code löschen: ziemlich hart, aber vielleicht war es das wert&lt;/li&gt;
&lt;li&gt;Code ändern: gemeinsam zum Ziel?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Ask beginner Questions&lt;/h3&gt;

&lt;p&gt;Nun geht es darum, &lt;strong&gt;alles&lt;/strong&gt; zu hinterfragen. Was ist eine Methode? Was ist ein Integer? Warum hast du die Methode so genannt? Hier entwickelt
sich eine ganz neue Fragekultur, denn zu häufig werden Dinge einfach hingenommen, die sich bei mehrfachen &lt;a href="http://en.wikipedia.org/wiki/5_Whys"&gt;Nachfragen&lt;/a&gt; als wirkliches
Problem entpuppen.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/VnbIpoJlWGs" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <title>Railscamp-Poster</title>
    <id>http://blaulabs.de//2011/10/31/railscamp-poster/</id>
    <updated>2011-10-31T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/10/31/railscamp-poster/" />
    <content type="html">&lt;p&gt;&lt;img src="/images/railscamp11_poster.png" alt="Railscamp-Poster"&gt;&lt;/p&gt;

&lt;p&gt;Unser Poster vom Railscamp 2011.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/w3o-x1kUVxQ" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <title>ZOMG!</title>
    <id>http://blaulabs.de//2011/10/30/zomg/</id>
    <updated>2011-10-30T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/10/30/zomg/" />
    <content type="html">&lt;p&gt;Der zweite Tag des &lt;a href="http://railscamp-hamburg.de"&gt;Railscamp Hamburg&lt;/a&gt; bricht an und wir freuen uns dabei zu sein.&lt;br&gt;
Vielen Dank für die geile Zeit!&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/rchh11.jpg" alt="Railscamp Hamburg 2011"&gt;&lt;/p&gt;

&lt;p&gt;Wie versprochen, hier die Folien zum &lt;a href="/files/endtoend.pdf"&gt;“End-To-End Tests”&lt;/a&gt; Vortrag von Fabian und Meike.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/ChvyoTmo9cs" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <title>Get your hands dirty - ein Code Retreat!</title>
    <id>http://blaulabs.de//2011/10/25/get-your-hands-dirty-ein-code-retreat/</id>
    <updated>2011-10-25T00:00:00+00:00</updated>
    <link href="http://blaulabs.de/2011/10/25/get-your-hands-dirty-ein-code-retreat/" />
    <content type="html">&lt;p&gt;Am 08. Oktober fand das erste Code Retreat bei blau statt! Code Retreat? Äh? Was ist denn das?&lt;/p&gt;

&lt;p&gt;Ein &lt;a href="http://coderetreat.com/"&gt;Code Retreat&lt;/a&gt; ist eine eintägige Veranstaltung, auf der Entwickler an Ihren grundlegensten
Fähigkeiten arbeiten können. Quasi ein Trainingsraum für Entwickler. Toll ist, das man keinen
Zeitdruck hat Features schnell entwickeln zu müssen - es kann sich ganz bewusst auf das Lernen
konzentriert werden.&lt;/p&gt;

&lt;p&gt;Es gilt eine Aufgabe - hier: &lt;a href="http://de.wikipedia.org/wiki/Conways_Spiel_des_Lebens"&gt;Conways Game of Life&lt;/a&gt; - zu lösen. Es gibt nur wenige Regeln:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Es wird in &lt;a href="http://de.wikipedia.org/wiki/Paarprogrammierung"&gt;Paaren&lt;/a&gt; gearbeit&lt;/li&gt;
&lt;li&gt;Nach jeder Session (hier: 45 Minuten) muss der Code gelöscht werden&lt;/li&gt;
&lt;li&gt;Nach jeder Session muss das Paar gewechselt werden&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Die Sprache ist egal - wichtig ist nur, dass beide Partner genügend Erfahrung haben, um gleich
loslegen zu können. Wir hatten eine erfrischende Mischung aus Java, Scala, Ruby und PHP Entwicklern
an Board.&lt;/p&gt;

&lt;p&gt;Großen Dank zunächst an alle, die es am Samstag in aller Frühe (ca. 08:15) zu blau geschafft haben.
Belohnt wurde das mit belegten Brötchen(super Service der &lt;a href="http://www.broetchenschmiede.de/"&gt;Brötchenschmiede&lt;/a&gt;) und jeder Menge Kaffee.
Geleitet hat das Retreat &lt;a href="http://twitter.com/#!/adibolb"&gt;Adrian Bolboaca&lt;/a&gt;. Er organisiert Retreats u.A. in Frankreich, Belgien,
Rumänien und Deutschland und bringt eine Menge Erfahrung mit.&lt;/p&gt;

&lt;p&gt;Nach einer kurzen Einleitung von Adrian ging es um kurz nach 9 mit der ersten Session los.&lt;/p&gt;

&lt;p&gt;Zunächst gab es keine Auflagen, jedes Pärchen konnte munter drauf los entwickeln. Doch die ersten
Aufgaben folgten schon bald: in der nächsten Runde sollten die &lt;a href="http://thomassundberg.wordpress.com/2011/04/06/four-rules-of-simple-design/"&gt;4 Regeln des einfachen Designs&lt;/a&gt;
beachtet werden. Adrian machte aber auch nochmal klar, das ein Code Retreat nicht zwangsläufig
etwas mit &lt;a href="http://de.wikipedia.org/wiki/Testgetriebene_Entwicklung"&gt;TDD&lt;/a&gt; zu tun hat, vielmehr geht es darum zu lernen und neue Denkweisen auszuprobieren.
TDD kann eben ein Teil davon sein.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/code_retreat_session.jpg" alt="Projektabschluss-Buttons"&gt;&lt;/p&gt;

&lt;p&gt;In der letzen Runde vor dem verdienten Mittagessen hat dann &lt;a href="http://gojko.net/2009/08/02/tdd-as-if-you-meant-it-revisited/"&gt;TDD as if you meant it&lt;/a&gt; uns wieder
wach gemacht. Die Implementation wird erst im Test erstellt und neue Klassen/Methoden entstehen
nur durch Refactorings! Uiuiu, ganz schön holprig am Anfang, leitet aber dazu an, extrem kleine
Entwicklungsschritte zu machen und macht klar, das oft schon viel zu weit gedacht wird.&lt;/p&gt;

&lt;p&gt;Beim gemeinsamen Lunch konnten sich alle stärken und das eben gelernte inkl. der &lt;a href="http://www.bagelbrothers.de/"&gt;Bagels&lt;/a&gt; verdauen
und ordentlich Networking betreiben.&lt;/p&gt;

&lt;p&gt;Es geht weiter! Wir waren angehalten keine&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if Statements&lt;/li&gt;
&lt;li&gt;primitiven Datentypen (ich zähle mal die Wrapperklassen in Java dazu)&lt;/li&gt;
&lt;li&gt;for/while loops&lt;/li&gt;
&lt;li&gt;Arrays&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;zu verwenden. Hört sich zunächst ziemlich seltsam an. Ziel war es, neue Denkansätze zu schaffen
(ist auch ganz gut wenn man die Aufgabe zum 4. Male versucht zu lösen) und zu einem möglichst
objektorierentierten Design zu kommen. Viel zu kurz war die Session, als Adrians Sound
“DELETE YOU CODE NOW!” uns abbrechen ließ und sämtlicher Code sich in heiße Luft auflöste
(oder auflösen sollte!).&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/code_retreat_next_session.jpg" alt="Intro to a next session"&gt;&lt;/p&gt;

&lt;p&gt;In der 5. Session: Know you editor! Wir sollten versuchen unsere IDE, Editor ohne Maus zu benutzen,
um dadurch noch schneller zu werden. (&lt;a href="http://www.google.com/+1/button/"&gt;+1&lt;/a&gt;) übrigens für VIM Nutzer mit einer exotischen Tastaturbelegung.
Außerdem haben wir verschiedene &lt;a href="http://www.thehackerchickblog.com/2010/08/pair-programming-games.html"&gt;Pairingspiele&lt;/a&gt; ausprobiert, persönlich macht mir das ja am meisten Spaß.&lt;/p&gt;

&lt;p&gt;In der letzten Session haben wir uns nochmal ausgetobt und alle gelernten Dinge ausprobiert.
Nach ein paar kleinen Bierchen bei blau haben wir der &lt;a href="http://www.qype.com/place/295479-Katze-Hamburg"&gt;Katze&lt;/a&gt; einen Besuch abgestattet.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/code_retreat_beer.jpg" alt="Beer!"&gt;&lt;/p&gt;

&lt;p&gt;Für mich persönlich ein super Event, ich freue mich das alles so gut geklappt hat und viele
motivierte Enwickler dabei waren. Es wird mit Sicherheit nicht das letzte Retreat seiner Art bei
blau gewesen sein. Danke auch an Adrian, der das Event geleitet und uns immer wieder neue Denkanstöße
gegeben hat. Der &lt;a href="http://blog.coderetreat.com/global-day-of-coderetreat"&gt;Global Day of Code Retreat&lt;/a&gt; in Hamburg findet übrigens bei &lt;a href="http://www.it-agile.de/"&gt;IT Agile&lt;/a&gt; am
03. Dezember statt. Schnell &lt;a href="https://www.xing.com/events/global-day-of-code-retreat-hamburg-818053"&gt;anmelden&lt;/a&gt;!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/blaulabs/~4/rCjegyxxTdo" height="1" width="1"/&gt;</content>
  </entry>
</feed>

