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!
Freitag, 25. Juni 2010
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.
ruby-mp3info ist vollständig in Ruby geschrieben, sollte also auf jeder Plattform sofort lauffähig sein.
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.
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+/]
'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+/]
Abonnieren
Posts (Atom)