Sebastians Blog Neues aus den Softwareminen…

Neuste Beiträge

Pub-/Sub-System Faye: Ein kleiner Test

Faye-Server aufsetzen und starten:

docker run -d -p 127.0.0.1:8000:8000 cravler/faye-app

Ein Browsertest auf localhost:8000/pub-sub bescheinigt mir einen Bad Request. Scheint zu laufen.

Auf einen Post-Request gibt es eine bessere Antwort:

curl http://localhost:8000/pub-sub -d 'message={"channel":"/moin", "data":"Moin!"}'
[{"channel":"/moin","successful":true}]
Veröffentlicht unter | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Docker ohne sudo

Wie wohl alle Docker-Pakete erfordert auch das PPA von Dotcloud Root-Rechte für alle Aktionen:

me ~ docker ps
 FATA[0000] Get http:///var/run/docker.sock/v1.17/containers/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?

Um dies zu umgehen, kann man den eigenen Nutzer in die Gruppe docker aufnehmen:

sudo gpasswd -a ${USER} docker
sudo service docker restart

Durch die Gruppenänderung muss man sich noch einmal ab- und anmelden, anschließend läuft Docker sudofrei.

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

Datenbanken im Home-Verzeichnis speichern

Mit PostgreSQL ist es sehr einfach einen Datenbank-Cluster im Home-Verzeichnis eines Nutzers anzulegen. Dies kann sehr hilfreich sein, wenn beispielsweise nur das Home-Verzeichnis verschlüsselt wird und die Datenbank nicht offen herumliegen soll.

Unter Ubuntu 14.10 installieren wir Postgre und betrachten das automatisch angelegte Standard-Cluster:

sudo apt-get install postgresql

pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
9.3 main 5432 online postgres /var/lib/postgresql/9.3/main /var/log/postgresql/postgresql-9.3-main.log

Weiterlesen

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

Bundler is using a binstub that was created for a different gem?

In regelmäßigen Abständen wirft unsere Konfiguration aus Bundler 1.7, Rails 4.1, Rspec 2.14 und Spring 1.1 bei jedem Rails-, Rake- oder Rspec-Befehl die folgende Warnung:

Bundler is using a binstub that was created for a different gem.
This is deprecated, in future versions you may need to `bundle binstub rspec` to work around a system/bundle conflict.

Auch andere Nutzer scheinen davon verwirrt zu sein, eine klare Erklärung des Problems und seiner Lösung konnte ich bisher nicht finden. Folgender Reset der Binstubs funktioniert für mich als Workaround:

rm -rf bin/*
bundle exec spring binstub --all
bundle binstub rspec-core --force
Veröffentlicht unter | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

Bracket-Balancing in Ruby

Ich kann mir nicht helfen, nach zwei Jahren Ruby sieht Java manchmal nur noch umständlich aus. Gerade bei kleinen, in sich geschlossenen Programmen sollte man die Sprache mit Bedacht wählen. Wie aufwendig kann es sein herauszufinden, ob die verschiedenen Klammerarten in einem String ausbalanciert sind? Diese Frage stellte sich auch Code Corner und lieferte diese Lösung in Java:

http://www.corejavainterviewquestions.com/code-corner-bracket-balancing/

http://www.corejavainterviewquestions.com/code-corner-bracket-balancing/

Als Rubyist juckt es da in den Fingern, das muss doch schneller gehen.

Weiterlesen

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

Spring ohne Bin-Präfix nutzen

Spring lässt sich sehr einfach installieren: Gem eintragen und die Binstubs erzeugen:

bundle exec spring binstub --all

Um nun rake routes oder rails generate statt bin/rake routes oder bin/rails generate nutzen zu können, einfach die folgenden Funktionen in beispielsweise die bash_aliases eintragen:

rake() { if [ -f bin/rake ]; then bin/rake "$@"; else bundle exec rake "$@"; fi }
rails() { if [ -f bin/rails ]; then bin/rails "$@"; else bundle exec rails "$@"; fi }
rspec() { if [ -f bin/rspec ]; then bin/rspec "$@"; else bundle exec rspec "$@"; fi }

Mein Dankeschön für den Ansatz geht an Arne.

Weiterlesen

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

Eleganterer Stringvergleich mit StringInquirer

Unschön:

if user.role == "admin" or user.role == "guest"

Lösung:

class User
  def role
    ActiveSupport::StringInquirer.new(super)
  end
end
if user.role.admin? or user.role.guest?

Der ActiveSupport::StringInquirer ergänzt einen String um beliebige Testmethoden, welche die Gleichheit von String und Methodenname (ohne Fragezeichen) überprüfen. Ein prominenter Anwendungsfalls ist die Environment-Variable Rails.env von Rails, die sich auch in der Form Rails.env.production? prüfen lässt.

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

Methoden für Active-Record-Relationen definieren

Ein Scope in Active Record ist nichts anderes als syntaktischer Zucker für das Definieren einer Klassenmethode. Die folgenden User-Models führen zum selben Ergebnis:

class User < ActiveRecord::Base
  scope :admins, -> { where(role: "admin") }
end
class User < ActiveRecord::Base
  def self.admins
    where(role: "admin")
  end
end

Da man Scopes verketten kann drängt sich der (berechtigte) Verdacht auf, dass dies mit jeder Form von Klassenmethode möglich ist.

Weiterlesen

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

Pakyows Ansatz für Views in Web-Applikationen

Auch wenn die Vertreter der Client-Seite den Kampf um die Frage, wo Views künftiger Web-Applikationen gerendert werden, schon lange gewonnen haben, so bleiben doch einige Diskussionspunkte offen. Was wird aus Suchmaschinen, Javascript-Verweigerern und den Nutzern von schwacher Hardware oder alter Browser? Der Schritt zur Client-Side-Web-Application ist an Konsequenzen geknüpft, die nicht jeder in Kauf nehmen möchte. Ich halte immer die Augen nach Projekten offen, die das Rendern sowohl auf Server als auch Client mit möglichst wenig Overhead ermöglichen. Weiterlesen

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

Ruby: Testvollständigkeit testen

Eine Wissenschaft für sich im Test-Driven Development ist die Frage, wie jede einzelne Funktion getestet werden muss: Sind die Tests vollständig, hat man jeden Spezialfall bedacht? Hat man es zu gut gemeint und eine schwer überschaubare, redundante Testsuite geschaffen?

Einen recht ungewöhnlichen Weg zur Beantwortung der ersten Frage geht Markus Schirp. Sein Gem Mutant betrachtet Code und die zugehörigen, grünen Tests. Es verändert nun immer wieder bestimmte Teile des Applikations-Codes (nicht die Tests) und prüft, ob die Tests dadurch fehlschlagen. Tun sie dies nicht lässt sich schlussfolgern, dass diese Stellen des Codes nicht vollständig durch Tests abgedeckt oder tot sind. Weiterlesen

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