Computerspiele 2020

Meine großen Gamer-Zeiten sind wohl bis auf Weiteres vorbei, aber trotzdem versuche ich nicht vollkommen den Anschluss zu verlieren, was es in dem Bereich an Entwicklungen gibt.

Auf Gamasutra.com fand ein interessanter Wettbewerb mit dem Titel „Games of 2020“ statt. Ich finde es interessant, darüber nachzudenken, wie die Spiele der Zukunft aussehen könnten – Auch weil Computerspiele oft die Vorreiter für technische Innovationen sind, die sich dann später auch in anderen Bereichen bemerkbar machen.

Gamasutra – Games of 2020

Erste Eindrücke zu Ruby

rubyVor einem Jahr habe ich Why the Lucky Stiffs‘ poignant guide to ruby mal recht oberflächlich überflogen, mich aber ansonsten nicht weiter mit Ruby beschäftigt. Nachdem ich mir vor kurzem Perl angesehen habe, was durch die vielen globalen Funktionen und Ausnahmen zu Sonderregeln keinen besonders guten Eindruck auf mich machte, will ich mich jetzt doch wieder mit der moderneren, vollständig objektorientierten und vielleicht auch in absehbarer Zukunft relevanteren Variante aus Japan beschäftigen. Ich will gar nicht leugnen, dass Steve Yegges‘ gemeine Abrechnung mit Perl auch eine Rolle dabei gespielt hat, mich von Perl (vorerst) sehr schnell wieder abzuwenden.

Ruby ist eine „Scriptsprache“, genauso wie Perl oder Python. Das heißt vor allem, dass sie interpretiert und nicht kompiliert wird, und dass dynamische Typisierung verwendet wird. Dadurch eignen sich Scriptsprachen gut dazu, schnell kleine Programme zu entwickeln, sind aber prinzipiell weniger geeignet für große Projekte mit vielen Abhängigkeiten (weil das Sicherheitsnetz der statischen Typisierung nicht gegeben ist) und performance-kritische Anwendungen (weil das Programm zur Laufzeit in Maschinencode umgewandelt werden muss). Wobei es mittlerweile riesige Projekte in Perl und Ruby gibt, und auch Computerspiele mittlerweile in Python programmiert werden können. Allgemein scheinen dynamisch typisierte Sprachen im Kommen zu sein, wobei man allerdings dynamische Typisierung nicht mit schwacher Typisierung verwechseln sollte: In Ruby etwa werden die Typen zwar erst zur Laufzeit, beim Aufruf der entsprechenden Stelle im Code, überprüft. Aber sie werden halt überprüft, und wenn der Typ des übergebenen Objekts unpassend ist, dann wird das Programm abgebrochen. In PHP und Perl würde in vielen Fällen einfach weitergemacht, was zu schwer nachvollziehbaren Fehlern im Programm führen kann.

Als Ruby-Version habe ich mich für das normale Ruby 1.8.6 für Windows entschieden. Jruby, XRuby, Groovy, IronRuby usw hören sich auch interessant an, aber erstmal wollte ich mit der Standard-Variante anfangen. Im Gegensatz zu perl, das sich unter Windows zu fühlen scheint wie ein Tiger im Zoo, ist die Installation bei Ruby wirklich kinderleicht und man kann sofort anfangen, Programme zu schreiben und die Konsole zu nutzen:
Ein Ruby Programm kann man einfach ausführen, in dem man eine *.rb-Datei doppelklickt, und die interaktive Ruby-Shell erreicht man durch den Befehl irb in der Windows-Kommandozeile. Auch sehr praktisch:
y:\ruby\projects>irb
irb: load "hello.rb"
=> true
irb: hello("World")
helloWorld

Man kann also Ruby-Quellcode mit dem load-Befehl in irb laden und dann die dort definierten Klassen und Methoden nutzen. Sowas kann beim Debuggen natürlich sehr nützlich sein.

Nach einiger Zeit mit Notepad++ habe ich natürlich nach einer echte IDE verlangt, da ich ein verwöhntes Eclipse-Kind bin. aptana

Ich versuche es mal mit Aptana als Standalone-Produkt. Das Programm basiert auf Eclipse, konzentriert sich aber auf Webentwicklung und ist open source sowie in der Standard-Version auch kostenlos.

Stackoverflow.com

stackoverflowDie Entstehung der Seite verfolge ich bereits seit über einem halben Jahr als Abonnent des Stackoverflow Podcasts, aber selbst angemeldet habe ich mich erst später. In der Seite geht es um nichts als das Stellen und Beantworten von Programmierfragen. An sich nichts weltbewegend neues, aber die unheimliche Dichte von Experten stellt sicher, dass sogar schwierige Fragen meist schnell beantwortet werden könnten. Und durch das motivierende Punkte und Auszeichnungen-System nehmen sich die Experten auch tatsächlich die Zeit, die Fragen tatsächlich zu beantworten. Etwas frustrierend ist, dass man als Anfänger (bevor man 50 Punkte hat) sogut wie gar nichts auf der Seite machen darf. Heute habe ich diese Grenze endlich überschritten, und werde versuchen die Seite in Zukunft noch öfter zu nutzen, sowohl um Fragen zu stellen, als auch um mich am Beantworten anderer Leute Fragen zu beteiligen.

Ich würde behaupten, dass jeder Softwareentwickler oder Informatiker sich die Stackoverflow zumindest mal angesehen haben sollte.

Ode an mein iPhone

Das iPhoneMittlerweile besitze ich mein iPhone seit etwa einem halben Jahr, und ich muss sagen, es ist den Preis (den mein Vater berappt hat:P) vielfach wert, zumindest für mich.

Das Gerät ist schon recht nah dran an den Systemen, die ich aus Science-Fiction Büchern kenne. Ich nutze es zum Telefonieren (selten und knapp, wie es meine Art ist^^), gelegentliches E-Mail lesen und Websurfen (nur wenn kein PC erreichbar ist allerdings), zum Spielen, zum Musik-, Literatur- und Podcast-Hören. Die Map-Funktion samt GPS sorgt dafür, dass ich mich deutlich seltener verlaufe oder verfahre, ich kann jederzeit dringend benötigte Infos im Netz suchen, und obwohl die Foto-Qualität recht mäßig ist, mache ich auch meine Fotos damit.

Kein Wunder, dass ich nicht einmal daran denken möchte, mein iPhone zu verlieren oder kaputt zu machen. Gestern abend hatte ich einen Schockmoment, als es mir weggerutscht und aus etwa 1,30 Meter auf den Steinboden gefallen ist. Beindruckenderweise hat es nicht einmal eine Delle davongetragen. Ich werde das trotzdem nicht zur Angewohnheit werden lassen;)

Die Bindung an T-Mobile und an iTunes, und die Unfähigkeit, Ogg-Vorbis- und insbesondere WMA-Dateien abzuspielen, mögen einige Leute abschrecken, aber ich nehme das in diesem Fall gern in Kauf. Über die genial-intuitive Bedienbarkeit des Touch-Displays wurde ja schon geschrieben, ich kann mich dem nur anschließen;)

Periodic.csv

periodicAls Nebenprodukt der Entwicklung des Molrechners ist eine CSV (Comma separated values, die einfachste Methode, Tabelleninhalte in leicht zu parsenden Textdateien zu speichern)-Datei des Periodensystems der Elemente entstanden, die ich aus einer deutlich umfangreicheren XML-Datei gewonnen habe. Die Tabelle hat nur vier Spalten:

Name, Masse, Ordnungszahl, Symbol

Also zum Beispiel:

Oxygen,15.9994, 8, O

Vielleicht kann ja irgendwer das irgendwann noch mal gebrauchen:
periodic.csv

Molrechner

Da die „Kluge Bücher lesen“-Variante zum Lernen von C++ mir nicht wirklich viel Spass gemacht hat, wollte ich mich trotz meiner lückenhaften Kenntnisse doch einfach mal in ein kleines Projekt stürzen. Wenn ich eine Sache gut kann, dann ist das trivial winzige Programme zu konzeptionieren. In diesem Fall hat das Programm genau ein einziges Feature;)

Man tippt ein Molekül in der Symbol-Schreibweise in eine Maske ein und bekommt (wenn die richtigen Symbole verwendet wurden) die molare Masse des Moleküls oder einfach der Summe aller Atome zurück. Und das wars auch schon.
molrechner

Das Programm checkt auch nicht, ob die eingegebenen Moleküle so möglich sein könnten, wie die folgende Kreation zeigt:
molrechner2

Trotz der Einfachheit musste ich schon ein paar Zeilen programmieren, um die Idee umzusetzen. Folgende Teilaufgaben muss der „Molrechner“ also erfüllen:

  • Die Information zu den Namen und Gewichten der Atome kommt aus einer einfachen Textdatei, die zu Beginn des Programms ausgelesen wird.
  • Das Molekül wird auseinandergenommen(also die Zeichenkette, die das Molekül repräsentiert, ich habe mich für die Programmvariante ohne physische Simulation entschieden^^) und die einzelnen beteiligten Atome ermittelt. Dabei wird die Annahme getroffen, dass das erste Zeichen und NUR das erste Zeichen eines Symbols in Großschreibung ist, dass es keine Leer-oder Sonderzeichen gibt, und dass die Anzahl der Atome eines Elements immer direkt auf das Symbol folgt. Nach meinen mageren Chemie-Kentnissen ist das in der Regel der Fall
  • Das Fenster und die Buttons müssen erzeugt werden und die Widgets auf Aktionen reagieren. Bei der GUI (Graphical User Interface)-Gestaltung war Visual Studio aber recht hilfreich, weswegen das kaum Aufwand für mich war

Das Programm sollte eigentlich bei allen Windows Vista Usern und allen XP-Benutzern mit der .NET Runtime funktionieren.

Download Molrechner (0,5MB)
Ich habe den (nicht zum Vorbild geeigneten) Source-Code mal dazugepackt.

C++ in Visual Studio

Joel Spolsky, den ich wohl als einen meiner Vorbilder bezeichnen würde, hat mehr als einmal geschrieben, dass er das Sich-Herumplagen mit Pointern und Speicherverwaltung und dem ganzen Low-Level Zeug, mit dem ich mich als verwöhntes Java-Kid nicht wirklich beschäftigen muss, für eine gute Methode hält, Computer besser zu verstehen. Wer will das nicht? 😉

Also habe ich mich mit dem Kerningham-Ritchie-Klassiker The C Programming Language beschäftigt, so wie ich es meistens tue: Voller Ungeduld die Seiten überfliegend, alle Übungsaufgaben auslassen und dann in der Mitte des Buches ganz die Motivation verlieren und nur noch die ersten Zeilen jedes Kapitels lesen. Weil es so schön war, und ich noch ein paar weitere komplizierte Konzepte oberflächlich ankratzen wollte, habe ich die gleiche Strategie bei Bruce Eckels „Thinking in C++“ angewandt. Ich glaube schon, dass ein paar Fetzen hängengeblieben sind, aber noch mehr ist sicherlich an mir vorbeigerauscht.

Ich lerne wahrscheinlich besser, wenn ich selber machen kann. Herumspielen mit dem Compiler ohne klares Ziel will ich aber auch nicht, schließlich will ich ja total produktiv sein. Also habe ich mir ein winziges Projekt vorgenommen habe, um ein bisschen zu üben. Und um nachher sagen zu können, eine Anwendung in C++ geschrieben zu haben. Dazu später mehr.

Als Entwicklungsumgebung habe ich mich für Microssofts Visual Studio Express entschieden. Es ist natürlich ungerecht, weil ich Eclipse schon seit Jahren benutze und ich damit mittlerweile wirklich gut umgehen kann, aber Eclipse ist IMO einfach die bessere IDE. Und Java mag ich definitiv lieber als C++. Alleine das man beim C/C++-Entwickeln ständig manuell den Compiler anschmeißen muss, um simpelste Syntax-Fehler zu entdecken, nervt schon etwas. Und ich mache (noch) wahnsinnig viele Syntax-Fehler;)

Auch wenn es also wahrscheinlich nicht die große Liebe wird, möchte ich doch zumindest ein paar weitere oberflächliche Eindrücke sammeln und darüber schreiben, bevor ich mich wieder in das warme Java-Nest lege;)

Derivate

Frankfurt Skyline aus OstenDa ich ja immerhin bei einem Beratungsunternehmen für Banken arbeite, wäre es schon ganz gut, wenn ich eine grobe Vorstellung davon habe, was die eigentlich machen. Also habe ich mir „Einführung in Futures- und Optionsmärkte“ von John C. Hull ausgeliehen, was offenbar als Standard-Werk in der Branche akzeptiert ist. Ich versuche tapfer darin zu lesen, aber wie mein Kollege Matthias Ewald richtig erkannt hat, bringt das Lesen von Wikipedia-Artikeln und ähnlichen kompakten Quellen den größten Wissen/Zeit Quotienten;)

Derivate sind Verträge, die das Recht garantieren zu einem fixen Preis zu kaufen oder zu verkaufen. Die Preisbildung basiert auf einer marktabhängigen Bezugsgröße (Basiswert oder Underlying)

http://de.wikipedia.org/wiki/Derivat_(Wirtschaft)

Derivate kann es auf verschiedenste Vermögenswerte geben: Landwirtschaftliche Produkte, Rohstoffe, Aktien oder auch Geld in verschiedenen Währungen.

Offenbar gibt es vier wesentliche Arten von Derivaten und etliche weitere Formen, die sich aber als Abwandlungen oder Kombinationen dieser vier Varianten verstehen lassen. Als da wären:

  • Futures
  • Forwards
  • Swaps
  • Optionen

Zu diesen Finanzprodukten sind in Zukunft noch weitere Posts geplant.

Die Motivation zum Handel mit diesen Werten kann ganz unterschiedlich sein. Hull [Hull1998] unterscheidet zwischen drei Arten von Marktteilnehmern:

  • Arbitrageure sind auf risikofreien Gewinn aus. Das ist unter Umständen möglich, wenn z.B. in der NY-Börse rote Kugelschreiber deutlich höher gehandelt werden als in Frankfurt. Theoretisch könnte man rote-Kugelschreiber-Futures in Frankfurt kaufen und mit Gewinn in New York verkaufen. Da das selbstverständlich jeder gerne machen würde, ergeben sich in der Praxis aber selten Gelegenheiten, solche Arbitrage-Gewinne zu erzielen.
  • Hedger sind an einer Reduzierung des Risikos interessiert. Wenn ein Pharao beispielsweise den Bau einer Pyramide in einem Jahr beginnen lassen möchte, könnte er sich eine Option kaufen, die sicherstellt, dass er 1000 Sklaven zum Preis von je 10 Kilo Salz bekommen kann. Dadurch umgeht er das Risiko, dass der Preis durch unvorhergesehene alttestamentische Ereignisse in die Höhe schnellt.
  • Spekulanten auf der Gegenseite suchen das Risiko, und versuchen aus dem für sie günstigen Verlauf der Kurse Gewinn zu schlagen. Sie werden nur dann in einen Vermögenswert investieren, wenn sie daran glauben, dass diese Investition Gewinn abwerfen wird. Im oben beschriebenen Szenario könnte ein Spekulant, der voller Zuversicht in Frösche investiert hat, allerdings ganz schön „im Regen“ stehen.

Namen von Member-Variablen

Wenn man mal über einige Coding-Konventionen nachdenkt, die sich in den letzten 40 Jahren so etabliert haben, wird man feststellen, dass einige davon sich in Zeiten leistungsfähiger IDEs wie Eclipse wohl einfach überlebt haben. Zum Beispiel ist es in der OOP(Objekt-oprientierten Programmierung) in C++ wohl üblich, Member-Variablen (Also Variablen, die einer Instanz einer Klasse „gehören“, und folglich nicht nur innerhalb einer Methode, sondern in allen Methoden der Klasse genutzt werden können) mit einem führenden Unterstrich oder m_ zu beginnen.

private String _name;

In Java gibt es diese Coding-Convention nicht. Dort wird von der Verwendung von Underscores in Namen mit Ausnahme von Konstanten, die ja ganz in Großbuchstaben geschrieben werden sollten und wo camelCase deswegen nicht möglich ist, eher abgeraten. Und dem Programmierer gehen trotzdem keine Informationen verloren, da die Variablen in Eclipse einfach durch die farbliche Hervorhebung zugeordnet werden können. Ähnlich ist es bei den typischenZeilenFüllendenJavaVariablenNamensBezeichnernMitHoffentlich-DesktiptivemNamenKommaDieManSoWohlEherVermeidenWuerde-WennEsKeinCodeCompletionUndStaendigeCompileChecksGaebe. Gibt es aber. Also warum sollte man sich mit kryptischen Abkürzungen abgeben. Wer weiß schon wirklich, was tzfjvnbmhdnkdmswevwwekccusccg bedeuten soll?

Die Möglichkeit guten IDE-Support zu ermöglichen, ist meiner Meinung nach eines der wichtigsten Charakteristika von Programmiersprachen. Und hier steht Java im Vergleich zu fast allen anderen Sprachen sehr gut da, was meiner Meinung nach ein unterschätzter Grund für die Popularität der Sprache ist.

Zurück zum Thema: Ich werde jedenfalls in Zukunft solche Namenspräfixe nur nutzen, wenn es durch Guidelines im Projekt vorgeschrieben wird. Am Wichtigsten ist in der Hinsicht natürlich Konsistenz. Lieber ein schlechter Coding-Standard als gar keiner. Und wenn wir schon dabei sind: Lieber kein Coding-Standard als kein lauffähiges Programm;)

Was für wirres, unverständliches Zeug. Naja über sowelche Themen denke ich dann nach, lasse alle Zwischenschritte zum Verständnis weg und übrig bleiben wirre, zusammenhanglose Statements. Aber es kommt auch wieder leichtere Kost 😉

USB-Stick partitionieren

Nachdem ich versucht hatte, Linux auf einem USB-Stick zu installieren (ohne Erfolg T_T), konnte ich den Großteil des Speicherplatzes unter Windows nicht mehr nutzen, da der Großteil des Speichers einer Linux-Partition zugeordnet war, mit der Windows nichts anfangen kann. Nach einigem Kopfzerbrechen und Fluchen hat schließlich dieser Artikel geholfen: http://www.lancelhoff.com/2008/05/01/multi-partition-a-usb-flash-drive-in-windows/

Jetzt stehen mir endlich wieder die vollen 8 GB zur Verfügung. Knorke!