Smart spreadsheet reading with Ruby

28 01 2013

Ein schönes Beispiel zur Anwendung von Roo: https://gist.github.com/radaniba/4166025

Advertisements




iTunes 10.2.1.1

12 03 2011

Danke liebes Apple, daß man in iTunes 10.2.1.1 (Windows) bei der Info-Box zu einer Podcast-Folge keinen Text mehr auswählen und kopieren kann – hast du wirklich gut gemacht. Braucht ja auch kein Mensch. Die ganzen Links, die dort regelmäßig eingetragen werden, kann man sich ja ruhig per Hand abtippen …

Ach ja, und der jetzt kleinere Font sieht auch (zumindest auf meinem kleinen Netbook) ziemlich bescheiden aus.

Warum um Himmels Willen tut ihr so etwas?

 

 





Die Programmiersprache Eiffel – erst mal eine Enttäuschung

15 10 2010

Ich habe eine Open-Source Bibliothek in Ruby (dort Gem) genannt zum Auslesen von Spreadsheet-Dateien (Excel, Openoffice und Google-Spreadsheets) geschrieben.

Als Einstieg in die Programmiersprache Eiffel, wollte ich nun hergehen und diese Bibliothek auch nach Eiffel portieren.

Die Sprache Eiffel selbst, ist, wenn man sich erstmal an die etwas andere Syntax im Gegensatz zu anderen Sprachen gewöhnt hat, eigentlich recht hübsch und flexibel. Ich wollte mich also etwas näher mit Eiffel beschäftigen.

Die Installation auf einem kleinen Netbook mit Windows 7 Starter war unproblematisch. Eigene kleine Beispielprogramme ließen sich übersetzen und funktionierten auch.

Da ich gerne testgetrieben entwickle, habe ich mir das Tool Etest von Jim Weirich (richtig geschrieben?) geholt, welches automatisierte Tests, wie ich sie von Ruby her kenne, durchführen kann. Dazu geht man ähnlich wie bei Ruby vor. Man erstellt eine Klasse namens ‚TEST_‘ + Name der eigenen zu testenden Klasse. Dann ruft man das Kommando etest auf, welches temporäre Klassen erstellt, die dann kompiliert und ausgeführt werden (alles innerhalb des etest-Aufrufs). Als Ergebnis von etest erhält man die Anzahl der korrekten Testfälle und die fehlgeschlagenen Tests ausgegeben (wie auch bei Ruby Unittests).

Eine kleine Überraschung war, daß zum Erzeugen der temporären Testklassen tatsächlich Perl verwendet wurde (mußte ich dann auch noch installieren, machte aber auch keine Probleme). Warum um Himmels Willen Perl? Na ja – Hauptsache es funktioniert.

Funktionieren tat es dann doch nicht so ganz. Ich weiß nicht, auf welcher Basis bzw. welcher Version dieses Tool geschrieben wurde, mit meiner jetzigen SmartEiffel-Version (2.3) lief es nicht so ganz rund. Die assert_equal Methode kann man leider nicht verwenden, weil da in der etest-Methode der Parameter vom Typ ANY angegeben ist, ich dafür in meinem Test aber keine Integer-Zahl übergeben kann. Ich muß zugeben, ich verstehe noch zu wenig von Eiffel, um mit der Fehlermeldung etwas anfangen zu können. Nach meinem bisherigen naiven Verständnis sollte bei ANY dann doch beliebige Parameter angegeben werden können, oder nicht?

Was aber funktonierte war die Methode assert (die nur einen booleschen Wert verlangt). Ich mußte also meine Tests nur etwas umformulieren und konnte damit auf assert_equal verzichten und nur assert verwenden. Das sieht zwar nicht ganz so elegant aus, funktioniert aber.

So baute ich meine Klassen – testgetrieben – noch weiter aus.

Dann kam ich an den Punkt, wo ich XML-Files parsen mußte.

Halt – vorher noch etwas anderes. In Ruby gibt es fertige Libraries, um ZIP-gepackte Dateien zu entpacken bzw. auf die gepackten Daten wie auf ein Filesystem zugreifen zu können. In Eiffel: Fehlanzeige. Keine Library dazu gefunden, in de.comp.lang.misc nachgefragt – niemand wußte etwas darüber (genauer gesagt, habe ich noch nicht mal eine Antwort bekommen). Gut. Ich habe mir dann erst mal damit beholfen, daß ich ein unpack-Kommando extern aufrufe und dann innerhalb der entpackten Files auf meine benötigten Files zugreife.

Zurück zu XML. Es gibt in SmartEiffel ein tutorial-Verzeichnis, in dem zu vielen mitgelieferten Libraries Beispielprogramme enthalten sind, was natürlich eine gute Idee ist. Hier habe ich dann auch Beispiele für die Bearbeitung von XML-Dateien gefunden, sowohl für DOM als auch für SAX. Prima, dachte ich, ist ja alles da, was du brauchst. Ich habe also dieses Beispiel genommen und in mein eigenes Programm eingebaut. Versucht zu übersetzen – Peng. Der Compiler schmiert damit komplett ab. Nicht etwa, daß mir das Frontend einen Fehler in meinem Programm melden würde (was vielleicht noch erklärbar wäre), nein, der Compiler generiert C-Code, der nicht übersetzt werden kann. Daraufhin habe ich das originale Tutorial-Beispielprogramm übersetzt – wieder das gleiche Ergebnis. Es sind also noch nicht mal die eigenen Tutorial-Beispiele alle kompilierbar. Den gleichen Effekt habe ich auch bei dem curses (oder ncurses?) Tutorial-Programm bemerkt (obwohl es hier vielleicht auch an fehlenden externen curses-Libraries hätte liegen können, was ich aber nicht weiter untersucht habe.

Meine Vermutung ist, daß es vielleicht mit dem von mir verwendeten Betriebssystem Windows 7 Starter zu tun hat, worauf der SmartEiffel Compiler (bei mir Version 2.3) noch nicht angepaßt wurde, da SmartEiffel wohl seit einiger Zeit nicht mehr gewartet werden zu scheint (Mitte 2007). Anfragen an die Mailingliste wurden (man ahnt es schon fast) ignoriert. Beim Bugtracker zu SmartEiffel kann man überhaupt keine neuen Bugs eintragen (oder ich bin zu blöd dazu, eine diesbezügliche Anfrage an die Mailing-List wurden auch nicht beantwortet).

Ich finde das ein ziemlich schwaches Bild dafür, daß SmartEiffel das „offizielle“ Eiffel von GNU ist.

Mein vorläufiges Fazit: Eiffel ist in der Theorie eine schöne Sprache, aber wenn man damit praktische Aufgaben erledigen will, leider kaum zu gebrauchen. Ich spreche hier natürlich nur über SmartEiffel. Es gibt andere Compiler, aber die schienen mir persönlich nicht so passend:

Eiffelstudio: zu fette und komplexe IDE, die ich erstmal nicht haben wollte, in der freien Version von EiffelStudio darf man nur Open-Source Projekte entwickeln

tecomp: Ist so weit ich weiß nur ein Interpreter, und ich weiß nicht, wie ausgereift der mittlerweile ist.

Da ist leider noch so ein Punkt, der mit bei den existierenden Eiffel-Compilern extrem stört: Jeder scheint irgendwie sein eigenes Eiffel zu machen, Quelltexte des einen Compilers müssen zum Kompilieren mit einem anderen Compiler an einigen Stellen angepaßt werden – fast so wie bei den unterschiedlichen COBOL-Compilern früher in den Achtzigern.

Sollte mich doch noch jemand davon überzeugen können, daß Eiffel nicht nur in der Theorie toll ist, sondern man damit auch praktische Aufgaben lösen kann, bin ich gerne bereit mich wieder damit zu beschäftigen, aber ansonsten werde ich in der Kategorie der kompilierten Programme wieder eher auf Ada setzen (Halt! Da muß ich aber auch erst testen, ob das mit mit meinem Betrübssystem zusammen funktioniert – aber ich würde bei Ada eher ein Ja vermuten).





TestUnit 2.0 für Ruby

10 08 2009

Hier gibt es mal eine kurze Vorstellung der neuen Testunit Bibliothek Version 2.0,:





CERN, LHC, Schwarze Löcher, Nostradamus und Bibel-Code

8 12 2008

Klasse!

Heute folgendes gefunden

Es wird erklärt, warum durch den LHC ein schwarzes Loch entstehen und die ganze Erde (mindestens) vernichten könnte. Belegt wird das mit einer skurrilen Mischung aus Vorhersagen von Nostradamus, Zitaten aus der Bibel, kabbalistischen Zusammenhängen und Erkentnissen aus dem sogenannten Bibel-Code der auch Andeutungen enthalten soll. Echt skurril das ganze.

Aber was mich dann wieder interessiert hat, ist, daß es sogar eine Software für diese Bibel-Code Sache gibt – muß ich mir mal näher ansehen. Schade, das Programm ist leider keine Open-Source Software und kostet ca. 67 US-Dollar, das ist mir dann doch zu wenige interessant.

Um’s klarzustellen, ich persönlich glaube aber weder daran, daß es physikalisch zu einer Katastrophe kommen könnte, noch daran, was die obigen Quellen angeblich hergeben – das ist dann doch zu weit hergeholt.

Zugute halten muß man dem Video aber, daß es in astreinem klaren und langsam gesprochenen Englisch gesprochen ist, was es auch weniger geübten Zuhörern erlaubt, das zu verstehen.

Andererseits: Vielleicht haben wir ja deshalb noch nichts von außerirdischem intelligenten Leben mitbekommen, weil diese im Laufe ihrer Entwicklung ähnliche Experimente durchgeführt haben und auch daran gescheitert sind …





GNAT Ada und Ubuntu 8.04 Update

2 12 2008

Tja, kaum macht man ein Update auf eine neue Ubuntu-Linux Version, schon funktionieren die eigenen Programme nicht mehr richtig:

$ randomplay
randomplay: error while loading shared libraries: libgnarl-4.1.so.1: cannot open shared object file: No such file or directory

Was ist das für ’ne Library? Direkt mache ich damit in meinem Programm überhaupt nichts.

Gut, man kann das Problem durch einfaches Neucompilieren des Programms beheben. Aber sollte bei solchen Sachen nicht auf einen symbolischen Link verwiesen werden, der bei Bedarf dann auf neue Releases der entsprechenden Library verweist? Ich will mal zu GNATs Gunsten annehmen, daß nur bei meiner lokalen Installation irgendwas nicht richtig war – obwohl ich mir keiner Schuld bewußt bin, da irgend etwas großartig verbogen zu haben.





Flickr.com Kamerastatistik

1 12 2008

Grundsätzlich ja keine schlechte Idee, bei Flickr.com eine Statistik über alle Kameramodelle zu führen, die für die Bilder verwendet wurden.

Wenn man sich so eine Statistik aber mal anschaut, bekommt man folgendes:

Kamera-Statistik

Leute, was soll so eine Kindergarten-Statistik? Ich habe mal, bereits in der Realschule, gelernt, daß die beiden Achsen immer irgendwie beschriftet sein müssen, damit man etwas vernünftiges mit so einer Meßreihe anfangen kann.

Das einzige, was hier beschriftet ist (in obiger Grafik nicht zu sehen), ist die y-Achse, die wohl irgendwie die Anzahl der User (mit dieser Kamera) sein soll. Die x-Achse sollen wohl die letzten 12 Monate repräsentieren. Aber warum um himmelswillen, schreibt man da keine Monate hin? Soll ichs etwa jedesmal selbst per Hand abzählen?

Das einzige, was man aus dieser Kurve sehen kann, ist, daß es mal weniger waren, dann sind es wieder mehr und anschließend wieder weniger User geworden.
Aber wieviel mehr bzw. weniger? 10 User, 100 User, 1000 User? Ohne eine Beschriftung der Achsen kann man das leider nicht sagen.

Versteht ihr, worauf ich hinaus will? Wenn’s 10 User mehr sind, die diese Kamera verwenden, ist das nicht groß beachtenswert, wenns aber von einem Monat zum nächsten 5000 mehr sind, dann wäre so eine Statistik vielleicht interessant – so wie sie jetzt ist, ist diese Statistik leider ziemlich sinnlos.

Mein Vorschlag: Ganz weglassen oder gescheit machen!