Freitag, 25. Juni 2010

ocra statt rubyscript2exe

Ein weiteres Problem ist mir im Zusammenhang mit dem neuen RubyInstaller für Windows und rubyscript2exe aufgefallen. rubyscript2exe kann keine Module einbinden, die per rubygems geladen werden, da die mit dem neuen RubyInstaller ausgelieferte Version von rubygems nicht mit rubyscript2exe kompatibel ist.

Eine Lösung für rubyscript2exe habe ich diesmal nicht gefunden. Empfohlen wird der Umstieg auf zum Beispiel ocra. Das ist nicht schwer:

gem install ocra

Danach kann man folgendermaßen sein Programm packen:

ocra myscript.rb

Um eine Anwendung ohne Kommandofenster zu erzeugen (also eine, die über rubyw läuft), lautet das Kommando so:

ocra --windows myscript.rb

Von der oben verlinkten Seite aus gelangt man auch zur Dokumentation von ocra, die weitere Optionen erklärt.

Anzumerken ist, dass Programme, die auf wxRuby basieren, mit ocra sehr viel kleinere EXE-Dateien ergeben als mit rubyscript2exe. Schön!

Donnerstag, 17. Juni 2010

MP3-Infos in Ruby

Vor kurzem wollte ich aus MP3-Dateien programmatisch die Dauer des Musikstücks auslesen. Dazu habe ich eine Ruby-Bibliothek gefunden: ruby-mp3info (http://rubyforge.org/projects/ruby-mp3info/), auch verfügbar als Gem mit dem gleichen Namen.

Mithilfe dieser Bibliothek ist es ein Leichtes, die Spieldauer einer MP3-Datei zu ermitteln.

require 'rubygems'
require 'mp3info'
Mp3Info.open('test.mp3') { |mp3|
  p mp3.length
}

ruby-mp3info ist vollständig in Ruby geschrieben, sollte also auf jeder Plattform sofort lauffähig sein.

Mittwoch, 16. Juni 2010

rubyscript2exe-Problem

Die offizielle Version von rubyscript2exe läuft nicht ohne Weiteres unter Ruby 1.8.7. Es kommt ein TypeError, da das Skript $0 nicht modifizieren darf. Aber natürlich hat sich schon jemand des Problems angenommen und eine korrigierte Version von rubyscript2exe zur Verfügung gestellt: http://github.com/cowlibob/rubyscript2exe

Dienstag, 15. Juni 2010

Unicode-Umwandlungen auf der Kommandozeile

Manchmal habe ich UTF-8-kodierte Zeichen hexadezimal vor mir. Will ich dann das entsprechende Zeichen nachschlagen, ist das nicht so einfach, weil aus der UTF-8-Transformation die tatsächliche Zeichennummer nicht direkt ersichtlich ist. Aber mithilfe von Ruby lässt sich da was machen. So kann man die UTF-8-Darstellung in die entsprechende UTF-16-Fassung umwandeln:

ruby -rkconv -e "%|\xc2\xa0|.kconv(Kconv::UTF16, Kconv::UTF8).each_byte { |b| printf '%02X ', b }"

(Das gehört natürlich alles in eine Zeile.)

Vorne setze ich die UTF-8-Bytes ein (hier: \xc2\xa0), als Ergebnis erhalte ich die entsprechenden UTF-16-Bytes. Vertauscht man die Konstanten Kconv::UTF16 und Kconv::UTF8, so erhält man den umgekehrten Weg.

Das Ganze funktioniert so eventuell nur unter Ruby 1.8. Ruby 1.9 verarbeitet Zeichenketten jetzt mitsamt einer mitgeführten Kodierung, sodass die Beispiele vielleicht ganz anders aussehen müssten.

Samstag, 12. Juni 2010

RubyInstaller für Windows fertig

Die neue Version des RubyInstaller für Windows ist fertig (schon seit 6. Juni). So hat man auch unter Windows jetzt eine einfache Möglichkeit, an aktuelle Fassungen von Ruby 1.8.6, 1.8.7 und 1.9.1 zu kommen. Das sollte Ruby unter Windows neuen Auftrieb geben.

Freitag, 11. Juni 2010

Ausschnitte aus Zeichenketten

In Ruby kann man mit regulären Ausdrücken Teile aus Zeichenketten ausschneiden. Man setzt den regulären Ausdruck dazu in eckige Klammern. Nehmen wir folgendes Beispiel:

'Test123Test'[/\d+/]

Das Ergebnis ist die Zeichenkette '123', da der reguläre Ausdruck diesen Abschnitt selektiert. Mit diesem Konstrukt lassen sich manchmal sehr elegant Dinge erledigen.

Passt der reguläre Ausdruck nicht auf die Zeichenkette, so ist der Rückgabewert nil. So würde dieses Beispiel nil ergeben:

'Test'[/\d+/]