Samstag, 5. September 2009

Frankencamera

In eine ähnliche Richtung wie Bug-Labs geht folgendes Projekt einer Open-Source Kamera namens "Frankencamera". Ziel ist, eine Art Entwicklungsplattform für interessierte Entwickler zu schaffen.

Artikel bei Golem: http://www.golem.de/0909/69594.html
Artikel bei der Stanford-Universität: http://news.stanford.edu/news/2009/august31/levoy-opensource-camera-090109.html

Freitag, 4. September 2009

gem update - string contains null byte

Ich wollte heute mal wieder 'gem update' starten und bekomme folgende Probleme. Anscheinend gibt es neue Versionen von gems, die zu Rails gehören. So weit erst mal nichts Schlechtes - aber:


$ sudo gem update
Updating installed gems
Updating activesupport
ERROR: While executing gem ... (ArgumentError)
string contains null byte


WTF?

Das passiert, so wie ich das erkennen konnte, mit allen Gems, die zu Rails gehören.
Gut, ich habe dann mal, immer wenn ich auf so ein Gem traf, dieses testhalber mal deinstalliert.


$ sudo gem update
Updating installed gems
Updating net-ssh
Successfully installed net-ssh-2.0.15
Updating treetop
Successfully installed treetop-1.4.1
Gems updated: net-ssh, treetop


Und wie man sieht, laufen andere Gems (die nichts mit Rails zu tun haben) anstandslos durch.

Hat irgend jemand ein Erklärung dafür?

$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.4
- RUBY VERSION: 1.9.2 (2009-09-03 patchlevel -1) [i686-linux]
- INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE: /usr/local/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-linux
- GEM PATHS:
- /usr/local/lib/ruby/gems/1.9.1
- /home/tp/.gem/ruby/1.9.1
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- :sources => ["http://gems.rubyforge.org/", "http://gems.github.com"]
- "rdoc" => "--inline-source --line-numbers --format=html --template=hanna"
- REMOTE SOURCES:
- http://gems.rubyforge.org/
- http://gems.github.com

Sonntag, 9. August 2009

XML Dateien mit nokogiri parsen

Edit: Entweder ich bin zu doof, oder blogger.com ist zu doof, als daß man XML-Dateien hier vernünftig einfügen kann, ohne daß es umformatiert wird.

Nokogiri ist ein Gem für die Programmiersprache Ruby. Um damit XML-Dateien zu verarbeiten, geht man folgendermaßen vor.

Angenommen, wir haben folgende XML-Datei


<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Edited by XMLSpy® -->

<CATALOG>

<CD>

<TITLE>Empire Burlesque</TITLE>

<ARTIST>Bob Dylan</ARTIST>

<COUNTRY>USA</COUNTRY>

<COMPANY>Columbia</COMPANY>

<PRICE>10.90</PRICE>

<YEAR>1985</YEAR>

</CD>

<CD>

<TITLE>Hide your heart</TITLE>

<ARTIST>Bonnie Tyler</ARTIST>

<COUNTRY>UK</COUNTRY>

<COMPANY>CBS Records</COMPANY>

<PRICE>9.90</PRICE>

<YEAR>1988</YEAR>

</CD>

<CD>

<TITLE>Greatest Hits</TITLE>

<ARTIST>Dolly Parton</ARTIST>

<COUNTRY>USA</COUNTRY>

<COMPANY>RCA</COMPANY>

<PRICE>9.90</PRICE>

<YEAR>1982</YEAR>

</CD>

</CATALOG>




Angenommen, wir möchten jetzt alle Titel erhalten, dann gehen wir folgendermaßen vor:


require 'rubygems'
require 'nokogiri'

doc = Nokogiri::XML(File.open('cd_catalog.xml'))

doc.xpath('//TITLE').each do |e|
puts e.text
end


Anstatt einer Datei kann man bei Nokogiri::XML auch eine String angeben, wenn man die XML-Dateien bereits irgendwie als String vorliegen hat:


doc = Nokogiri::XML(mein_string_mit_xml_daten)


Als Ausgabe wird Folgendes geliefert:


Empire Burlesque
Hide your heart
Greatest Hits

Mittwoch, 5. August 2009

rubyberlin.wordpress.com

Wir haben jetzt mal unter http://rubyberlin.wordpress.com/ Seiten für unsere Ruby und Ruby on Rails in Berlin Kurse eingerichtet

Samstag, 25. Juli 2009

Reguläre Ausdrücke interaktiv ausprobieren

Auf der Seite http://www.rubular.com/ kann man reguläre Ausdrücke in Ruby prima interaktiv ausprobieren. Sehr schön gemacht.

Donnerstag, 16. Juli 2009

Dvorak Keyboard

Und weil man ja gelegentlich mal etwas Neues ausprobieren sollte, habe ich mich dazu entschlossen, ab jetzt mit dem Dvorak Keyboard-Layout zu tippen. Das geht z. Z. noch recht mühsam, aber ich hoffe, ich mache schnell Fortschritte.

dragongoserver 0.4.0

Eine neue Version meines dragongoserver gems veröffentlicht. Die wesentliche Neuerung ist, daß man damit jetzt auch neue Spiel im Warteraum anlegen kann.

Mittwoch, 15. Juli 2009

irb und Cursor-Tasten

Ich kompiliere gerade immer von der Trunk-Version. Leider hat damit immer das Zurückblättern mit Cursor-Up innerhalb der irb nicht funktioniert.

Hier habe ich nun die Lösung dafür gefunden: http://depth-first.com/articles/tag/irb

Wie der Autor schon geschrieben hat, ist auch mir nicht klar, warum das nicht automatisch passiert.

Samstag, 11. Juli 2009

dragongoserver 0.3.1

Mein Dragongoserver gem läuft nun auch mit Ruby 1.9

Installation mit

gem install dragongoserver

Mittwoch, 8. Juli 2009

multistockphoto 0.9.0

Nachdem ich die letzten Wochen mit Vorbereitung von Kursmaterial beschäftigt war, habe ich mich mal wieder meinen Gems gewidmet.

Mein Ziel ist ja immer noch, alle mit Ruby 1.9 lauffähig zu machen. Dies alleine wäre nun nicht so schlimm, da ich, so weit ich das überblicke wenig Features verwende, die nur mit Ruby 1.8 laufen. Die Änderungen an meinen Programmen selbst halten sich eher in Grenzen. Was mich derzeit aber viel mehr aufhält, ist die Tatsache, daß andere Gems noch nicht unter Ruby 1.9 funktionieren. Ausgerechnet das Gem 'newgem' ist da auch mit dabei. Mit newgem wiederum hatte ich bisher meine Gems für die Veröffentlichung bei Rubyforge.net fertig gemacht und hochgeladen. Ich bin jetzt wieder dazu übergegangen, eine einfachere Form zum Erstellen der Gems zu verwenden. Das ist zwar nicht so schön wie newgem, aber ich kann zumindest Gems erstellen.

Das neueste Release von multistockphoto behebt ein paar Probleme, die sich ergaben, weil sich die Webseiten der Bilder-Hoster geändert haben. Und als wichtigstes Feature: diese Release läuft auch mit Ruby 1.9 (falls ich nicht noch etwas übersehen habe).

Installation erfolgt wie üblich mit

gem install multistockphoto

Montag, 16. März 2009

Ruby 1.9 und mysql und rails

Da Rails in den neueren Versionen keine mysql-Unterstützung per se eingebaut hat, ist man gezwungen, ein separates gem zu installieren.
So weit so gut. Allerdings ist das mysql gem (gem install mysql) in der Version 2.8.1 (auf die ich mich hier beziehe), leider nicht unter Ruby 1.9 installierbar (ich verwende zur Zeit Ruby 1.9.2dev).

Bisher dachte ich, das geht alles nicht und man müsse auf eine neue Version des gems warten.
Gut versteckt, gibt es allerdings noch die folgende Möglichkeit:
Innerhalb des Bug-Trackers ist hier http://rubyforge.org/tracker/index.php?func=detail&aid=23763&group_id=4550&atid=17562
eine Patchdatei angehängt, mittels derer die Installation dann doch funktioniert.

Vorgehensweise:
  1. die normale mysql-ruby....tar.gz Datei downloaden
  2. Patchdatei downloaden
  3. tar.gz Datei auspacken
  4. ins gerade extrahiere Directory wechseln
  5. Patchdatei in das oberstes Verzeichnis reinkopieren
  6. Aufruf patch <diesepatchdatei
  7. Aufruf ruby extconf.rb
  8. Aufruf make
  9. Aufruf sudo make install
und danach scheint alles zu funktionieren. Zumindest soweit, daß sich Rails zum Starten mit einer MySQL-Datenbank bewegen läßt. Für Langzeiterfahrungen werde ich mich wieder hier melden, falls Probleme auftreten.

Bleibt zu hoffen, daß der Autor des mysql-gems bald eine Version veröffentlicht, die auch durch ein simples Tippen von 'sudo gem install mysql' auf der Kommandozeile richtig funktioniert.
Ich benutze Ubuntu-Linux und habe das damit ausprobiert. Für andere Betriebssystem kann ich leider nichts ausprobieren.

Samstag, 10. Januar 2009

Beim Installieren des Ruby Gems 'mysql' habe ich folgende Fehlermeldung bekommen (unter Ubuntu Linux):

$ sudo gem install mysql
sudo: unable to resolve host tp-compaqnx7300-laptop@thopre.com
[sudo] password for tp:
Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

/usr/local/bin/ruby extconf.rb install mysql
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/usr/local/bin/ruby
--with-mysql-config
--without-mysql-config
--with-mysql-dir
--without-mysql-dir
--with-mysql-include
--without-mysql-include=${mysql-dir}/include
--with-mysql-lib
--without-mysql-lib=${mysql-dir}/lib
--with-mysqlclientlib
--without-mysqlclientlib
--with-mlib
--without-mlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-zlib
--without-zlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-socketlib
--without-socketlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-nsllib
--without-nsllib
--with-mysqlclientlib
--without-mysqlclientlib


Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection.
Results logged to /usr/local/lib/ruby/gems/

Abhilfe: Das Paket libmysqlclient15-dev zusätzlich installieren,

Samstag, 3. Januar 2009

Ruby Gems mit Ada

Ich dachte mir, warum soll man eigentlich den enormen Schatz an guten verfügbaren Gems für Ruby nicht auch in Ada (oder anderen Sprachen nutzen)?

Für diejenigen, die mit dem Begriff Gems nichts anfangen können: Das sind Zusatzmodule oder Libraries, die man sich bei Bedarf aus dem Netz (typischerweise von www.rubyforge.net) herunterladen und verwenden kann.

Ein Beispiel mit einem von mir geschriebenen Gem:

Angenommen, man will auf Excel- oder Openoffice-Spreadsheets zugreifen, möchte sich jedoch nicht alles von Grund auf selbst schreiben.

Stattdessen gibt man auf der Kommandozeile ein:

'gem install roo' (roo ist der Name des Gems, und steht in diesem Fall für Ruby OpenOffice)

Daraufhin wird das Gem von rubyforge.net geholt und lokal installiert.

Anschließend kann man es in eigenen Ruby-Programmen folgendermaßen verwenden:

require 'rubygems'

require 'roo'

spreadsheet = Openoffice.new("meinespreadsheetdatei.ods")

spreadsheet.default_sheet = spreadsheet.sheets.first

puts spreadsheet.cell('A',1)

...

Mit Gems kann man also auf eine Vielzahl von Funktionen zugreifen, die andere Leute in Pakete verpackt und öffentlich zur Verfügung gestellt haben. Meiner Meinung nach hat auch das Vorhandensein eines derartigen zentralen Repositories zu der Beliebtheit von Ruby beigetragen, weil der Austausch von Libraries sehr leicht möglich ist. Leider gibt es so etwas in der Ada-Welt überhaupt nicht.

Weiter mit unserem Anliegen. Schön wäre es jetzt, wenn man dieses Gem auch in eigenen Ada-Programmen verwenden könnte.

Das könnte in etwas so aussehen:

procedure AdaRoo is

begin

require_rubygems;

require_rubygem ('roo');

spreadsheet := OpenOffice.new("meinespeadsheetdatei.ods");

Set_Default_Sheet(spreadsheet, speadsheet.sheets(1));

cell := spreadsheet.cell('A',1);

Put_Line (cell);

...

end AdaRoo;

Die Syntax könnte sich noch ändern, aber so ungefähr sollte man ein derartiges Gem verwenden können.

Mehr dazu dazu im nächsten Teil, der bald veröffentlicht wird.