Samstag, 13. November 2010

MD5-Summen in Free Pascal

Free Pascal bringt eine Bibliothek mit, die das Erstellen von MD5-Summen sehr einfach macht. Man bindet die Unit MD5 ein und kann dann folgendes schreiben:

s := MD5Print(MD5String('Hallo, Welt!'));

s ist dabei ein String. MD5String erzeugt aus einem Eingabe-String (hier »Hallo, Welt!«) einen Wert vom Typ TMD5Digest. Dieser wird dann von MD5Print in den Ausgabe-String umgewandelt. Möchte man die MD5-Summe über eine ganze Datei bilden, so steht statt MD5String auch MD5File zur Verfügung.

Samstag, 30. Oktober 2010

Viele Fenster in der Lazarus-IDE

Unter Ubuntu (und vermutlich auch anderen Linux-Distributionen) öffnet Lazarus viele eigenständige Fenster. Jedes hat einen Eintrag in der Leiste am unteren Bildschirmrand, das die laufenden Applikationen listet. Da kann es dann schon mal eng werden. Abhilfe schafft es hier, Lazarus einfach auf einer eigenen Arbeitsfläche (Desktop) zu starten. Standardmäßig öffnet Ubuntu ja gleich zwei davon – einen, auf dem ich normalerweise arbeite, und einen zweiten, den ich für Lazarus nutzen kann.

Dienstag, 13. Juli 2010

wxRuby unter Ubuntu 10.04

Unter Ubuntu 10.04 funktioniert das normale wxRuby-Gem in der Version 2.0.1 leider nicht. Es lässt sich zwar installieren, aber es lässt sich dann nicht laden. Man kann aber hier eine Version herunterladen, die für Ubuntu kompiliert wurde. Man wechselt dann in das Verzeichnis, in dem man die gem-Datei abgespeichert hat, und gibt ein:

sudo gem install wxruby-2.0.1-x86-linux -l

Auf diese Weise erreicht man die Installation der lokal vorgehaltenen gem-Datei.

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+/]

Samstag, 16. Januar 2010

Hexadezimale Darstellung von Zahlen

Um in Free Pascal Zahlen hexadezimal darzustellen, kann man die HexStr-Funktion nutzen. Zum Beispiel ergibt folgende Anweisung

WriteLn(HexStr(24, 2));

die Ausgabe 18. Dabei gibt der zweite Parameter die Zahl der Stellen an, die die erzeugte Zeichenkette haben soll. Wenn die Hexadezimalzahl weniger Stellen ergibt, so wird links mit 0 aufgefüllt. HexStr(7, 2) würde also '07' als Ergebnis liefern.

HexStr befindet sich in der Unit System.

Samstag, 9. Januar 2010

Separatoren in Lazarus-Menüs

Um in Lazarus in einem Menü einen Trennstrich (Separator) unterzubringen, erzeugt man einfach einen normalen Menüeintrag und trägt als Caption ein Minuszeichen ein. Dieser Eintrag wird dann zur Laufzeit als Separator angezeigt.