software1987 Tech-Blog

30Okt/110

Ruby BitField C Extension

Angetrieben durch die Vorlesung "Evolutionäre Algorithmen" an der Technischen Hochschule Mittelhessen habe ich eine Ruby Extension entwickelt mit der sich Bitfelder performant und speichersparend abbilden lassen. In der Vorlesung betrachtet man als Bitfelder abgebildete "Gene" (die bis auf die Idee der Mutation, Crossover, Selektion nichts mit Ihren biologischen Vorbildern zutun haben). Da man in Ruby nicht direkt einzelne Bits ansprechen kann (man kann sie natürlich über Integers mit Bitshifts abbilden) und ein Array von Integern bei entsprechenden Bitfeldgrößen viel Speicher benötigt (4 Byte * Anzahl Bits) leidet die Performance des gesamten Algorithmus' darunter.

Die von C++ stammende Boost Bibliothek stellt einen Datentypen dynamic_bitset zur Verfügung mit dem Bitfelder nahezu beliebiger Größe effizient verwaltet werden können. Daher habe ich eine Ruby-Extension in C/C++ geschrieben, die diesen Datentypen in Ruby zur Verfügung stellt. Das Ergebnis lässt sich durchaus sehen: Im Vergleich zu meiner vorherigen Implementierung in der ein Bitfeld als Integer-Array abgebildet wurde hat sich die Performance um den Faktor 15 verbessert.

Die Extension ist als Gem verfügbar und lässt sich mit:

gem install bitfield

installieren.

Quellcode: https://github.com/halfdan/ruby-bitfield
Rubygem:  https://rubygems.org/gems/bitfield

3Okt/110

PHP 5.4: Built-In Webserver

Die aktuell im Beta Status befindliche Version 5.4 von PHP wartet mit einigen neuen Features auf. Eines davon ist ein integrierter Webserver mit dem sich Skripte direkt ausführen und im Browser anzeigen lassen.

  -S <addr>:<port> Run with built-in web server.
  -t <docroot>     Specify document root <docroot> for built-in
                   web server.

Wenn man nach dem Start des Webservers phpinfo() aufruft erhält man im Feld "Server API" die Anzeigt "Built-in HTTP server".

PHP 5.4 Alpha2 - phpinfo()

PHP 5.4 Alpha2 - phpinfo()

Mit dem Kommando "php -S localhost:8080 -t /srv/www/" lässt sich der Webserver auf Port 8080 starten, der Document Root liegt dabei auf /srv/www. Dieser Webserver ermöglicht es Entwicklern ihre Anwendung zu testen ohne zusätzlich einen Webserver wie Apache, Nginx, Lighttpd aufzusetzen. Es ist nur eine Frage der Zeit bis Entwicklungsumgebungen dieses Feature nutzen werden.