Posts mit dem Label Coding werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Coding werden angezeigt. Alle Posts anzeigen

Mittwoch, 8. September 2010

Von Sternen, Vektoren und der boolschen Variable mit drei Zuständen

Etwas das ich heute erfahren musste: Wenn man in C++ ein multidimensionales Array von unbekannter Größe allokieren will ist von folgendem Konstrukt komplett abzuraten:
int ***ptr = new int[a][b][c];

Die Benutzung ist hakelig und das Löschen problematisch. Weitere Gründe das zu vermeiden findet man hier. Nach zwei Fehlschlägen habe ich endlich den logisch und politisch korrekten Weg gefunden:
vector<> > > matrix;
Abseits von C++ habe ich heute bemerkt, dass es in C# eine boolsche Variable gibt, die drei Zustände hat: Laut Dokumentation kann man dem Typ bool? den Wert NULL zuweisen, da diese Variable Nullable ist. Glücklicherweise ist der normale bool Typ nicht nullable. Diesen Tristate verdeutlicht folgender Codeschnipsel:
bool? btest;
btest = null;
if (btest == true) { Console.WriteLine("null == true"); }
if (btest == false) { Console.WriteLine("null == false"); }
if (btest == null) { Console.WriteLine("null == null"); }

AUSGABE: null == null
Danke an AtiX fürs Testen.

Montag, 6. September 2010

Emacs, make und tote Bäume

Seit dem 31. August bin ich dabei mit einem Teamkollegen am 29. Bundeswettbewerb Informatik teilzunehmen. Eigentlich sollte dieser am 1.9 beginnen, doch aus irgendwelchen Gründen konnte man die Aufgaben schon am Vorabend um 19:00 herunterladen. Dafür muss man jedoch bis Mitte September auf Material für eine Aufgabe warten.
Für diesen Wettbewerb habe ich mir vorgenommen auf meine bisherigen IDEs für C++ Code::Blocks und Qt Creator zu verzichten und Emacs mit makefiles zu nutzen, da ich ihn von Lisp her schon ausreichend gut kenne (vorallem M-x butterfly hat mich schon bei so manchem Bug rausgehauen). Vermissen tue ich nur die Autocompletion von Qt Creator, die man aber offensichtlich nachrüsten kann (vielleicht hiermit?).
Was ich aber vor allem brauche ist momentan Papier. Bisher habe ich für Aufgabe 5 des Wettbewerbs 10 Seiten vollgeschrieben, was weit über meinen normalen Planungsaufwand hinausgeht (ein gutes Zeichen?). Mein Ansatz für das Umlagern einer Pyramide (in besagter Aufgabe) funktioniert auf Papier für Pyramiden mit bis zu 5 Schichten, ob es für größere hinhaut muss dann doch die Simulation zeigen.
Für eine Pyramide mit N = 1000000 Schichten hagelte es jedoch schon Integerüberläufe.

Sonntag, 27. Juni 2010

Ideen für wahres Cloud Computing

Ein Kubikmeter Wasserdampf enthält 3,34*10^28 Wassermoleküle, das ergibt 1115560000000000000000000000000000000000000000000000000000 ((3,34*10^28)*(3,34*10^28)) Kombinationsmöglichkeiten; das ist 2.1*10^7 mal soviel ist wie alle möglichen Schachspielkombinationen. Damit könnte man alle Schachgroßmeister dieser Welt in einem Berechnungstakt (sofern Wolken getaktet sind) schlagen.
Nun muss nurnoch das Problem der Wolkenprogrammierung gelöst werden, sodass alle Wassermoleküle tatsächlich geordnet miteinander interagieren. Der Output kann über Regen gelöst werden, macht die Wolke aber gegebenenfalls zur weiteren Benutzung unbrauchbar.

Samstag, 1. Mai 2010

Mal wieder Code zwischen die Zähne bekommen

Endlich neigen sich alle größeren und zeitfressenden Schulprojekte dem Ende zu; Zeit also mal wieder etwas zu programmieren. Was war mir nach ca. 3(?) Wochen "Entzug" fast egal, ich hab einfach mal in der Schublade gestöbert, in die sämtliche Ideen wandern, die erdacht, aufgeschrieben und auf undefinierte Zeit verschoben werden.
Heute Mittag habe ich z.B. an einem Common Lisp IRC Bot gebastelt. Mein Fazit: Keine Bibliothek wie cl-irc nutzen, sie ist zu schlecht bis garnicht dokumentiert. Es geht fast besser das ganze Protokoll selbst über socket-streams ablaufen zu lassen.
Wild springend habe ich jetzt angefangen eine ""Lebenssimulation"" in C++ zu schreiben, in der Pflanzen, Pflanzenfresser und Fleischfresser sich gegenseitig verspeisen und auf andere Arten ein abstrahiertes Leben führen.
Mal schauen wann der nächste Sprung kommt. Oder wie lange es dauert, bis sich hier Dramen wie this->eat(map->getLifeformAt(xPos, yPos)) abspielen. Oder ob ein Bot mit Klammern um sich werfend im IRC erscheint. Oder ob wieder ein anderes wildes Projekt erscheint. Bis dahin verbleibe ich leicht angegriffen,

bad_alloc

Dienstag, 6. April 2010

Von erhofften Erfolgen, Inverslogik und Suchen

Der Blog lag still, wie sooft lag das an Zeitmangel in den Ferien. Ganz schön anstrengend sind diese, es wird mal wieder Zeit für die Schule. Ich habe in dieser "Ferienzeit" unter anderem ein Praktikum gehabt, am BWInf Runde Zwei teilgenommen und etwas an einer vermurksten Jahresarbeit gebastelt.
Das Praktikum lief eine Woche lang bei der Firma Exorbyte, einer Firma die auf Suchen spezialisiert ist. Zu tun war einiges; einen HTTP Proxy in Python zu schreiben, sich mit dem Produkt MatchMaker vertraut machen und ein C++ Programm mit der hauseigenen API zu schreiben. Dazu gab es längere Besuche bei (sehr netten) Mitarbeitern, um sich ein Berufsfeld direkt anzusehen. Um mir es jedoch anzugewöhnen, die anderen im Betrieb zu duzen hat eine Woche leider nicht gereicht. Ein für mich sehr erfreuliches Ende des Praktikums war das Angebot einen Ferienjob zu erhalten, was wirklich überraschend kam.
Der Bundeswettbewerb Informatik war weniger erfreulich: Nach längerer Beschäftigung mit den (wie ich fand) recht happigen Aufgaben und abschließender Dokumentation hat man doch eine gewisse Abneigung gegenüber Anagrammen und Fragmentierungsvermeidung entwickelt.
Dann ist da noch die Jahresarbeit; ich hatte die geniale Idee einen Addierer aus TTL Logik zu bauen. Man muss ja nur ein Paar Chips verkabeln - denkste. Momentan schwirren mir mehr undefinierte Potentiale, merkwürdige Verhaltensweisen und unerklärliche Ergebnisse durch die Schaltung als ich hier beschreiben kann. Eine Warnung an die Nachwelt: TTL Logik ist kein Steckbausatz und ein Multimeter erreicht beim Debuggen bei Weitem nicht die Leistung von Programmen wie gdb (wobei man der Schaltung zu Gute halten muss, dass sie nur selten mit SIGSEGV abstürzt)
Nunja jetzt ist jedenfalls wieder Zeit zum freien Coden (Lisp!), zum Basteln und zum Blogschreiben. In diesem Sinne,

bloggend (bzw in Zeichen 12,5 nicht mehr),
bad_alloc

Freitag, 22. Januar 2010

So little time, so much to blog.

So wenig Zeit, so viel zu tun und dementsprechend so wenig Zeit zum Bloggen. das beschriebt etwa weshalb in letzter Zeit so wenig vernünftiges rauskam. IRL hat sich das Arbeiten aber gelohnt:
Die viele Beschäftigung mit Bwinf hat z.B darin gefruchtet, dass ich zum IT Jugenforum in Bad Liebenzell eingeladen wurde, welches in der Burg Liebenzell veranstaltet werden wird. Momentan hoffe ich, dass derjenige, mit dem ich an der ersten Runde teilgenommen habe (und bei der er die, wie ich finde, bessere Arbeit geleistet hat), ebenfalls mitkommen kann.
Abgesehen von den Folgen der ersten Runde komme ich auch gut mit der zweiten voran (ich scheine sehr auf den Wettbewerb fixiert zu sein), eine Aufgabe, bezüglich der Anagrammbildung ist bis auf einen merkwürdigen Fehler beim Einlesen von Wortlisten mit Python fast gelöst. Bei der anderen, die die optimale Verteilung von Gruppen in Restaurants (aber eigentlich Fragmentierung) behandelt, muss ich mich momentan selber besiegen: Es war zuerst ein Algorithmus zu entwickeln, der Gruppen optimal verteilt. Diesen habe ich, aber nun muss einer entwickelt werden, der dem ersten Programm Werte zuspielt, die ihn dazu bringen, die sitze suboptimal zu verteilen. Schaffe ich dies, beweise ich, dass mein erster Ansatz fehlerhaft ist; scheitere ich, zeige ich zwar, dass mein bisheriges Programm gut funktioniert, kriege aber keine Punkte. Eine lose-lose Situation. (Die Aufgaben gibt es hier nebenbei)
Abgesehen vom Bwinf gibt es nicht blogwürdiges, außer das Entdecken von emacs als bessere Python IDE. Vielleicht blogge ich später mal darüber?

Freitag, 18. Dezember 2009

Bundeswettbewerb Informatik Runde zwei!

Geschafft! Ich und mein Teamkollege haben es geschafft die zweite Runde des Bwinf zu erreichen. Ich muss gestehen, dass er den größten Teil dazu beigetragen hat, aber durch ist durch. Jetzt gilt es sich an die neuen Aufgaben zu machen, die glücklicherweise weniger grafiklastig sind als die der ersten Runde. Hier geht es nurnoch um die Entwicklung von Algorithmen. Ich hoffe, dass mir die Bände 1-3 von The Art Of Computer Programming, die es zu Weihnachten gibt da helfen können, da bei mir solches Grundlagenwissen eher dünn ist.
Interessant war auch der beigelegte Schlüsselanhänger mit den Zahlen 281bzw. 185 bzw. 182 bzw. 582. Weshalb sooft beziehungsweise? Nun es sind Digitalzahlen und je nachdem wie man den durchsichtigen anhänger hält, erscheinen andere Zahlen, in Anspielung auf die Juniorenaufgabe des ersten Runde. Hier wurde mir zum ersten mal klar, dass ich in dieser Aufgabe eine Drehrichtung vergessen hatte; ich habe die Zahlen nur auf der X- und nicht der Y-Achse rotiert. Da sind also die Punkte versackt :(

Montag, 2. November 2009

Update

Da ich schon länger den Blog vernachlässigt habe berichte ich an dieser Stelle mal über Ereignisse der letzten Zeit:
Im Frühjahr nächsten Jahres findet bei uns an der Schule das so genannte "Praktikum des berufsorientierten Gymnasiums" statt und ich habe mir schon mal frühzeitig eine "Stelle" besorgt; bei Exorbyte, einer IT Firma, die auf Suchmaschinen spezialisiert ist. Man stellte sogar in Aussicht, dass ich in Python etwas für den Produktiveinsatz schreiben werde, da man "schließlich keine Beschäftigungstherapie" mache. Diese Einstellung gefällt mir sehr, allerdings habe ich schon mal angefangen Python zu vertiefen.
Nebenbei bin ich auf Nerdcore Hip Hop gestoßen; mal schauen, was diese Musikrichtung so zu bieten hat. MC Frontalot erscheint mir insofern interessant, da mal nicht über Tötungsdelikte und Drogenkonsum gerappt wird sondern über technische Themen.
Schließlich habe ich mir noch das Buch "The Pragmatic Programmer" angeschafft, welches ich nur weiterempfehlen kann. Ich habe es zwar erst zu ~80% durchgelesen, aber bisher ist der Gesamteindruck durchweg positiv: Gut zu lesen, hilfreiche Tipps und eine Zusammenfassung aller Hinweise als Schnellreferenz.

Donnerstag, 22. Oktober 2009

1024 Bytes pro Stunde Übertragungsgeschwindigkeit

Diese Rate habe ich heute erreicht:
Heute wollten ich und ein Freund im Rahmen von Jugend Forscht in der Schule einen Mikrocontroller programmieren; zu Anfangs nur ein kurzes Testprogramm. Nun standen wir aber vor dem Problem, dass einer der zwei vorhandenen Computer zwar internetfähig war, aber nicht für die Programmierung des MCs geeignet war, mangels serieller Schnittstelle. Ein anderer war zwar geeignet, hatte aber keinen Internetzugang. Ein Datenaustausch über einen USB Stick war wegen der Schulsoftware ebenfalls nicht möglich. Was bleibt also über?
Richtig die manuelle Methode: Diktieren.
Ich durfte also 512 Bytes eingeben die mit diktiert wurden und das ist kein Vergnügen; ich sehe jetzt noch Zahlen vor mir schwirren. In einer halben Stunde lief das ganze ab. Wir waren zwar fertig mit dem Übertragen, aber zum Test kam es aus Zeitmangel nicht.

Freitag, 9. Oktober 2009

Über Java

Ich habe kürzlich lang und intensiv mit einem Java Programmierer diskutiert, ob Java nun eine """gute""" Programmiersprache ist oder nicht. Herausgekommen ist natürlich keine Antwort; ich habe nur eine kurze Begründung für meine Abneigung gegenüber Java gefunden:
In Java gibt es einfach nichts besonderes, cleveres oder in irgendeiner anderen Form bemerkenswertes außer einer ebenso wenig bemerkenswerten Standardbibliothek.
(Das Oxymoron ist ein bewusst gewähltes Stilmittel)
Als ich z.B das Buch "Java ist auch eine Insel" (7. Auflage) gelesen habe, fiel mir folgendes auf: Ein erster, kurzer Teil beschäftigte sich mit der trivialen Syntax der Sprache. Danach folgte nur eine Übersicht über die mitgelieferte Bibliothek. Das wars. Ebenso verhält es sich meiner Erfahrung nach mit der Sprache: Man lernt schnell das Grundgerüst, aber bis man endlich die Bibliothek durchschaut hat vergehen Ewigkeiten. In anderen Sprachen, wie z.B Lisp oder C legt man eventuell selber mehr Hand an, aber das Erlernen von vielen Standardfunktionen entfällt, was manchmal viel mehr Zeit kostet und die erwartete Zeitersparnis durch Nutzen der Vorarbeit am Anfang der Beschäftigung mit der Sprache zunichte macht.
Später, wenn man eventuell einen Job in der Javaentwicklung hat und sämtliche Features bekannt sind trifft dies natürlich nicht zu, aber ich rede hier noch als "Jungprogrammierer".
Anzumerken ist noch, dass sich meine Beschäftigung mit Java in Grenzen hält, eventuell habe ich ja die große Erleuchtung verpasst; sollte dies so sein, so möge mich der nächste Javafan darauf aufmerksam machen!

Dienstag, 8. September 2009

Vom Staate diskriminiert

Als ich mir die Seite des Bundeswettbewerbs für Informatik angesehen habe stieß ich auf diese Beleidigung für alle Lisper. Informationen über Lisp und Scheme? Fehlanzeige, nicht mal ein 404 sind sie wert. Greift hier §1 des AGG? Ich fürchte nein.
Scherz bei Seite: Die "Programmieren" Sektion ist sehr schluderig gemacht. Infos fehlen, offensichtliche Hilfen wie Eclipse für Java werde angeboten, die Links unter "Skriptsammlung" weisen alle auf das selbe Dokument und so weiter. Eine große Hilfe ist das nicht

Donnerstag, 16. Juli 2009

Zwischen Sinn und Unsinn

Ich bin soeben über die esoterische Programmiersprache Piet gestolpert. Die Programme sind in Bildern codiert und jede Farbe steht für einen Befehl, Weiß und Schwarz sind "Steuerelemente". Ist einem mal nach einer Kopfnuss, kann man sich solch ein Programm ansehen, da selbst Entwickler ihren Code nicht verstehen:
Don't ask me how it works, I have no idea!
In dem Sinne: Happy Hacking! (oder doch drawing?)

Sonntag, 21. Juni 2009

Start in Common Lisp

Da der Start in Common Lisp vielen schwerfällt, wie man in diversen Foren lesen kann, dachte ich, dass ich nach meinem, ebenfalls problematischem Einsteig, hier ein kleines Tutorial dazu schreibe:

1)IDE:
Am einfachsten einzurichten ist wohl Lisp in a Box. Man kriegt ohne großes Gefummel Emacs21.3 (mit grafischer Oberfläche), SLIME und einen Lisp Interpreter/Compiler.
Darüber hinaus gibt es drei Alternativen, falls einem der Emacs missfällt: Alle setzen eine funktionierende Lispimplementierung vorraus. Unter Ubuntu 8.10 reicht gcl nicht aus, man braucht das Programm clisp.
  1. ABLE (A Basic Lisp Editor) Ein einfach gestricktes Frontend für den REPL (Read - Eval - Print - Loop), welches für den Anfang geeignet ist..
  2. Diverse Eclipse Plugins, die mir persönlich zum größten Teil missfallen, da Eclipse einfach nicht zu Lisp passt.
  3. Möglich ist es auch einen Texteditor wie gedit mit Syntaxhighlighting für Lisp zu versehen. Dann muss man die Quelldatei dem Interpreter übergeben. Der haken an der Sache ist, dass man so auf den REPL verzichten muss, der erst ein effektives Arbeiten mit Lisp ermöglicht.
2)Lektüre:
  • Hier gibts ein kostenloses eBook auf Englisch, welches einen praktischen Einstieg bietet
  • Ein Wiki zu sämtlichen Common Lisp Themen
  • The Common Lisp Directory sammelt Ressourcen rund um Lisp.
  • Eine etwas theoretischere Einführung in CLisp, als im eBook findet man hier.
  • Zum Schluss möchte ich noch auf #lisp auf irc.freenode.net verweisen. In diesem IRC - Channel wird einem (bei nicht zu basischen Fragen) gut geholfen.
Das sollte für den Anfang reichen. Und zum Abschluss will ich noch SLIME zitieren: "Happy Hacking!"

Donnerstag, 11. Juni 2009

Von Basteleien, Schleim und Common Lisp

Nach langen Basteleien an Emacs und Slime, während derer ich mir 2 Emacs Installationen zerschossen hatte, habe ich es dank dieses Blogeintrags doch geschafft. Bzw mithilfe des Kommentars:

I had the same error but fixed it with: sudo apt-get install clisp

d’oh

Ich hatte Bisher damit gerechnet, dass gcl (der mit emacs installiert wurde) ausreicht.

Manchmal liegt das Gute doch so nah.

Montag, 9. März 2009

Lisp Odyssee

Ich habe mir ja schon seit längerem eine Lisp IDE gewünscht, aber SLIME unter Emacs lief magels Konfigurationsdatei nicht (ein XEmacs, der mit gcl mitgeliefert wurde und deshalb wohl Probleme machte) und verschiede Eclipse Plugins erwiesen sich als Einrichtungsalptraum.
Jetzt ist meine Irrfahrt jedoch vorbei: Ich bin auf ABLE gestoßen. Für alle die es benutzen wollen ein Rat: Dieses Programm darf unter Linux (oder nur unter Gnome?) nicht über die grafische Oberfläche beendet werden. Tut man dies erntet man endlose Fehlermeldungen über "broken Pipes". Daher sollte man immer Ctrl + Q benutzen.

Donnerstag, 25. Dezember 2008

Python

Seitdem ich zu Weihnachten das Buch Python bekommen habe hat sich meine Stimmung wesentlich verbessert:
Endlich eine Sprache in der alles einfach, schnell und dank IDLE auch spontan sei kann. Kein langes Planen , keine Segfaults und keine low-level DIY Stringmanipulation (man sehe von Boost ab). Python scheint toll zu sein.
Allerdings ist es ein Problem, dass ich Eclipse mit Python 3 benutze, die Fehleranzeige, jedoch für Python 2.5 gilt. Auch das Buch ist für Python 2.5 geschrieben und nicht für 3. Die Versionsprobleme gibt es unter C++ zum Glück (noch) nicht.

bad_alloc