Sebastians Blog Neues aus den Softwareminen…

Neuste Beiträge

Formtastics I18n-Cache abschalten

Formtastic ist ein wahrer Segen, da es die Erzeugung und Lokalisierungen von Formularen in Rails dramatisch vereinfacht. Nervig ist nur, dass Änderungen an der Lokalisierungsdatei während der Entwicklung nicht übernommen werden. Grund hierfür ist ein Cache, der die recht komplexen Suchanfragen nach passenden Übersetzungen minimieren soll.

Um im Entwicklungsbetrieb nicht ständig den Server neustarten zu müssen, ergänzt man in config/initializers/formtastic.rb die folgende Zeile:

Formtastic::FormBuilder.i18n_cache_lookups = Rails.env != "development"
Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Ruby, Currying und Block-Vereinfachung

Der für mich faszinierendste Aspekt funktionaler Programmierung ist das Currying. Es erlaubt das Erzeugen neuer Funktionen, indem ein oder mehrere Argumente einer Ausgangsfunktion vorbelegt werden. Auch in der objektorientierten Entwicklung bieten sich solche Ansätze an. Mir fällt dies immer dann auf, wenn ich in Ruby bei einem Array#map einen Block angeben muss und das Gefühl habe, dass das auch einfacher sein könnte. Ein Stück weit kommt Ruby mir dabei entgegen.

Symbol#to_proc

Ein einfacher Fall: Auf jedem Element einer Liste soll eine argumentlose Methode aufgerufen werden:

labels = [ 'Home', 'Gallery', 'Contact' ]
puts labels.map { |label| label.upcase }.join(', ') 
# => HOME, GALLERY, CONTACT

Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

RSpec durch Parallelisierung beschleunigen

Mit der testgetriebenen Entwicklung gibt es vor allem ein großes Problem:

Finished in 2 minutes 32.8 seconds
547 examples, 0 failures, 4 pending

Schon in einem frühen Stadium läuft die Testsuite locker zwei Minuten. Parallel Tests will die Dauer verkürzen, indem es Tests auf mehreren Prozessorkernen gleichzeitig ausführt.

Ein wesentlicher Aspekt bei der Parallelisierung ist der gleichzeitige Zugriff unterschiedlicher Prozesse auf eine Datenbank. Das Gem behebt die auftretenden Konflikte, indem es jedem Prozess seine eigene Datenbank zuweist. Die Anzahl der Prozesse richtet sich dabei nach den verfügbaren Kernen. Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Vim Surround, Zeilennummern, Coffeescript und Probleme mit dem Mausmodus

Teil 3 meiner Erfahrungen vom Umstieg von Sublime zu Vim.

vim.surround

cd ~/.vim/bundle
git clone git://github.com/tpope/vim-surround.git

Dieses Plugin erlaubt es (unter anderem), bestimmte umschließende Zeichen der aktuellen Position zu ersetzen. So lassen sich die umschließenden doppelten Anführungszeichen mittels cs"' („change surrounding double quotes to single quotes“) ersetzen. Surround unterstützt Anführungszeichen, Klammern und auch HTML.
Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Rspec: Arrayvergleich ohne Reihenfolge

Um zwei Arrays auf Gleichheit der Elemente zu testen, ohne dabei die Reihenfolge zu beachten, kann der Rspec-Matcher match_array verwendet werden:

expect([1, 2, 3]).to match_array([1, 2, 3]) 
expect([1, 2, 3]).to match_array([3, 2, 1]) 
expect([1, 2, 3]).to match_array([1, 2, 4]) 
Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

:s/sublime/vim/ – Mäuse, Speichern, Zeilenschieben und mehr

Nach den kosmetischen Details des ersten Artikels geht es heute um einige Standardaktionen, die mich als Entwickler begleiten.

vim-wombat-airline
Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar
vim-wombat-airline

Von Sublime zu Vim? Ein Um- und Einstiegsversuch

Vim ist so einiges, aber sicher nicht einsteigerfreundlich. Dennoch bin ich immer wieder fasziniert, wie sich erfahrene Anwender durch ihren Code navigieren und in der kleinen Kommandozeile Aktionen auslösen, für die die meisten erstmal ein anderes Programm starten müssen. Zudem ist alles frei konfigurierbar und vor allem freie Software.

Mal sehen, wie ich meinen auf Sublime aufbauenden Entwickleralltag übertragen kann.
Weiterlesen

Veröffentlicht unter , | Verschlagwortet mit , , , | 8 Kommentare

PHP: Output-Buffer ist schachtelbar

Bei der Entwicklung des Wordpress-Caching-Plugins Staticly kam die Frage auf, wie man die Output-Buffer ob_start und Co. nutzen könne, während Plugins und andere Code-Teile selbst davon Gebrauch machen. Und tatsächlich macht es PHP dem Nutzer recht einfach, wie das Manual bestätigt:

Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active.

Die Ausgabe-Puffer sind als Stack realisiert, so dass man sie schachteln kann:

ob_start();
  ob_start();
    echo "Hello world!";
  ob_end_flush();
ob_end_flush();

Schön, wenn es auch mal einfach geht.

Veröffentlicht unter | Verschlagwortet mit , | Hinterlasse einen Kommentar

Javascript: Klick außerhalb eines Bereiches

Folgendes Beispiel überwacht ein Dokument auf einen beliebigen Klick, außer wenn dieser in einem bestimmten Element (.container) liegt:

$(document).on 'click', (ev) ->
    if $('.container').has(ev.target).length == 0
      # ...

Dies ist beispielsweise hilfreich um ein Popup oder Dropdown-Menü schließen möchte, wenn der Nutzer „irgendwo“ außer auf das Widget selbst klickt.

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

RSpec und PostgreSQL: Insufficient Privilege

Bei einem rake spec erhielt ich den folgenden Fehler:

PG::InsufficientPrivilege: ERROR:  permission denied to create database
[...]

Es mag eine falsche Einstellung sein (ein einfaches rspec verursacht das Problem nicht), aber offensichtlich benötigt der Datenbanknutzer in meiner Konfiguration das Recht, neue Datenbanken zu erstellen. Auf meiner lokalen Maschine, wo die Tests laufen, kann ich das verantworten.

Postgres-Kommandozeile aufrufen:

sudo su - postgres
psql

Recht zum Erstellen der Datenbank an Nutzer vergeben:

ALTER USER "my-db-user" CREATEDB;
Veröffentlicht unter | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar