Samstag, 5. September 2009
Frankencamera
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
$ 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
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
Samstag, 25. Juli 2009
Reguläre Ausdrücke interaktiv ausprobieren
Donnerstag, 16. Juli 2009
Dvorak Keyboard
dragongoserver 0.4.0
Mittwoch, 15. Juli 2009
irb und Cursor-Tasten
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
Installation mit
gem install dragongoserver
Mittwoch, 8. Juli 2009
multistockphoto 0.9.0
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
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:
- die normale mysql-ruby....tar.gz Datei downloaden
- Patchdatei downloaden
- tar.gz Datei auspacken
- ins gerade extrahiere Directory wechseln
- Patchdatei in das oberstes Verzeichnis reinkopieren
- Aufruf patch <diesepatchdatei
- Aufruf ruby extconf.rb
- Aufruf make
- Aufruf sudo make install
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
$ 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
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.