Sebastians Blog http://sgaul.de Neues aus den Softwareminen... Fri, 06 Mar 2015 14:24:59 +0000 de-DE hourly 1 http://wordpress.org/?v=4.1.1 Konkatenation von Ruby-String-Literalen http://sgaul.de/2015/03/06/konkatenation-von-ruby-string-literalen/ http://sgaul.de/2015/03/06/konkatenation-von-ruby-string-literalen/#comments Fri, 06 Mar 2015 14:24:59 +0000 http://sgaul.de/?p=2745 Weiterlesen ]]> Ich bin gerade über folgende Code-Zeile gestolpert und dachte schon etwas hilfreichem auf der Spur zu sein:

irb
2.1.3 :010 > "aaa" "bbb"
 => "aaabbb"

Es wirkt, als füge Ruby aufeinanderfolgende Strings automatisch zusammen. Leider ist diese Funktion auf reine Stringliterale beschränkt,  so dass sie in der Praxis leider kaum einen Nutzen haben dürfte:

2.1.3 :018 > "aaa" 3.to_s
SyntaxError: (irb):18: syntax error, unexpected tINTEGER, expecting end-of-input
"aaa" 3.to_s
       ^
       from ~/.rvm/rubies/ruby-2.1.3/bin/irb:11:in `<main>'

Schade drum, dennoch interessant zu wissen.

]]>
http://sgaul.de/2015/03/06/konkatenation-von-ruby-string-literalen/feed/ 1
Deponia startet nur noch im Fenster http://sgaul.de/2015/03/05/deponia-startet-nur-noch-im-fenster/ http://sgaul.de/2015/03/05/deponia-startet-nur-noch-im-fenster/#comments Thu, 05 Mar 2015 19:17:39 +0000 http://sgaul.de/?p=2740 Weiterlesen ]]> Am Wochenende haben ich mir bei gog.com das Begrüßungsangebot Deponia für 50 Cent gesichert. Spiel und Humor gefallen mir sehr, doch schon am zweiten Tag wollte es nicht mehr im Vollbild starten. Grund war wohl die viel zu hohe Auflösung, die meinen Laptopbildschirm übertraf und deshalb in einem nur halb sichtbarem Fenster endete.

vim .local/share/Daedalic\ Entertainment/Deponia/config.ini

RESOLUTION = 1600x900

Nach der entsprechenden Korrektur startet es wieder im Vollbild. Mal hoffen dass es so bleibt…

]]>
http://sgaul.de/2015/03/05/deponia-startet-nur-noch-im-fenster/feed/ 0
Kreative Rails-Environments http://sgaul.de/2015/03/05/kreative-rails-environments/ http://sgaul.de/2015/03/05/kreative-rails-environments/#comments Thu, 05 Mar 2015 18:59:00 +0000 http://sgaul.de/?p=2738 Weiterlesen ]]> Rails-Environments sind mächtig, einfach einzurichten und schnell zu wechseln. Fast zu schade sich auf die Klassiker Test, Development und Production zu beschränken. Auch nach zehnmaligem Ändern der Mail-Einstellungen kam bei uns niemand auf die Idee, dass hier eine zweite Development-Umgebung nach Aufmerksamkeit schreit.

Mit erweitertem Horizont sind viele mehr oder weniger nützliche Umgebungen denkbar:

  • Development mit Mail-Versand um Mails im Mailprogramm zu testen
  • Development mit präkompilierten Assets
  • Development mit Production-Datenbank für Notfall-Debugging
  • Testing ohne Class-Cache um in einer Capybara-Session etwas anzupassen
]]>
http://sgaul.de/2015/03/05/kreative-rails-environments/feed/ 0
Pub-/Sub-System Faye: Ein kleiner Test http://sgaul.de/2015/02/18/pub-sub-system-faye-ein-kleiner-test/ http://sgaul.de/2015/02/18/pub-sub-system-faye-ein-kleiner-test/#comments Wed, 18 Feb 2015 16:04:36 +0000 http://sgaul.de/?p=2732 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}]
]]>
http://sgaul.de/2015/02/18/pub-sub-system-faye-ein-kleiner-test/feed/ 0
Docker ohne sudo http://sgaul.de/2015/02/17/docker-ohne-sudo/ http://sgaul.de/2015/02/17/docker-ohne-sudo/#comments Tue, 17 Feb 2015 20:32:56 +0000 http://sgaul.de/?p=2728 Weiterlesen ]]> 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.

]]>
http://sgaul.de/2015/02/17/docker-ohne-sudo/feed/ 0
Datenbanken im Home-Verzeichnis speichern http://sgaul.de/2015/01/18/datenbanken-im-home-verzeichnis-speichern/ http://sgaul.de/2015/01/18/datenbanken-im-home-verzeichnis-speichern/#comments Sun, 18 Jan 2015 16:44:35 +0000 http://sgaul.de/?p=2725 Weiterlesen ]]> 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

Es gehört dem Nutzer postgres und ist unter /var/lib beheimatet. Beides ist auf meiner Entwicklungsmachine nicht erste Wahl. Ich droppe daher den Cluster und erstelle einen neuen, den ich meinem eigenen Nutzer zuordne:

sudo pg_dropcluster --stop 9.3 main
sudo pg_createcluster --user sg -d /home/sg/.postgresqldata 9.3 main

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

Abschließend muss die Datenbank ggf. noch gestartet werden und man kann mit dem Standardnutzer ganz normal arbeiten:

sudo service postgresql start
createuser -dPER my-project-db-user
]]>
http://sgaul.de/2015/01/18/datenbanken-im-home-verzeichnis-speichern/feed/ 0
Bundler is using a binstub that was created for a different gem? http://sgaul.de/2014/12/04/bundler-is-using-a-binstub-that-was-created-for-a-different-gem/ http://sgaul.de/2014/12/04/bundler-is-using-a-binstub-that-was-created-for-a-different-gem/#comments Thu, 04 Dec 2014 14:45:23 +0000 http://sgaul.de/?p=2718 Weiterlesen ]]> 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
]]>
http://sgaul.de/2014/12/04/bundler-is-using-a-binstub-that-was-created-for-a-different-gem/feed/ 0
Bracket-Balancing in Ruby http://sgaul.de/2014/11/29/bracket-balancing-in-ruby/ http://sgaul.de/2014/11/29/bracket-balancing-in-ruby/#comments Sat, 29 Nov 2014 20:35:44 +0000 http://sgaul.de/?p=2712 Weiterlesen ]]> 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.

require 'test/unit/assertions'
extend MiniTest::Assertions

class String

  BRACKETS = {
    "(" => ")",
    "[" => "]",
    "{" => "}",
  }

  def balanced?
    stack = []
    each_char do |char|
      if BRACKETS.keys.include? char
        stack.push char
      elsif BRACKETS.values.include? char
        return false if BRACKETS[stack.pop] != char
      end
    end
    stack.empty?
  end

end

assert "".balanced?
assert "([Hell{} T(h(e[r]e))]boom)".balanced?
assert not("(a[b{c)d]e}".balanced?)
assert not("([{".balanced?)
assert not("}])".balanced?)
]]>
http://sgaul.de/2014/11/29/bracket-balancing-in-ruby/feed/ 0
Spring ohne Bin-Präfix nutzen http://sgaul.de/2014/11/18/spring-ohne-bin-praefix-nutzen/ http://sgaul.de/2014/11/18/spring-ohne-bin-praefix-nutzen/#comments Tue, 18 Nov 2014 15:05:00 +0000 http://sgaul.de/?p=2707 Weiterlesen ]]> 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.

Um die ursprünglichen Varianten ohne Spring zu nutzen kann command verwendet werden:

command rake routes
]]>
http://sgaul.de/2014/11/18/spring-ohne-bin-praefix-nutzen/feed/ 0
Eleganterer Stringvergleich mit StringInquirer http://sgaul.de/2014/10/18/eleganterer-stringvergleich-mit-stringinquirer/ http://sgaul.de/2014/10/18/eleganterer-stringvergleich-mit-stringinquirer/#comments Sat, 18 Oct 2014 10:14:08 +0000 http://sgaul.de/?p=2703 Weiterlesen ]]> 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.

]]>
http://sgaul.de/2014/10/18/eleganterer-stringvergleich-mit-stringinquirer/feed/ 2