Posts tagged: C++

Gefangen, nicht gefunden! #18

Informatik und Anderes

  • Böser Bug. Böser Bug. *Sehr* böser Bug! Aber sehr lehrreich. Einmal, weil man hier deutlich sieht, wie wichtig das Testen ist und wie schnell man einen fatalen Fehler übersieht. Und zum zweiten zeigt das Beispiel recht schön, warum Haftungsfragen auch bei eigentlich nicht sicherheitskritischer Software eine Rolle spielen können. Ich bin ganz froh darüber, dass ich gerade eine passende Vorlesung zu dem Thema höre. Die Rechtsprechung ist hier teilweise *sehr* merkwürdig, was Software anbelangt. (via).
  • “The great thing about TCP jokes is that you always get them.” Zugegeben: Es hat ein bisschen gedauert, bis ich den verstanden hab (Das Problem bei TCP-Witzen ist ja auch, dass es ziemlich lang dauern kann, bis man anfängt, sie zu verstehen. :lol: ). Aber ich find den richtig gut. Und es gibt noch mehr von der Sorte. Die sind wohl irgendwie in Twitter entstanden. Noch ein paar gute:
    • @eigenrick: The problem with TCP jokes is that people keep retelling them slower until you get them. #protolol
    • @reconbot: WHO HAS ANY ARP JOKES? #protolol
    • @OhMeadhbh: the SYN flood attack #protolol: “knock knock. who’s there? knock knock. who’s there? knock knock. who’s there? …”
    • @yoz: order best is tell that The you thing can about jokes BitTorrent them in any. #protolol
    • @peter_tonoli: Chuck Norris has only one OSI level – Physical

    (via)

  • Per Zufall bin ich auf eine sehr interessante Seite gestoßen: ioexception.de. Das ist ein Blog von ein paar Informatik-Studenten der Uni Ulm. Und da gibts so einige interessante Inhalte zu entdecken:
  • Zustandsautomaten, State Pattern und Java Enums. Hinlänglich bekannt, aber nochmal schön zusammengefasst. Außerdem vielleicht ganz interessant für meine SEP-Studenten, die gerade einen Bot für ein Netzwerkkartenspiel schreiben dürfen. Und hier bietet sich eben das StatePattern und die genannte Umsetzung an. Das ist nicht die einzige Möglichkeit, Automaten in Code zu gießen. Bei Gelegenheit schreib ich da mal was dazu…
  • Eine interessante Idee: git als Update-Mechanismus verwenden.
  • Auch die anderen Posts lohnen sich. Einfach mal reingucken…
  • Martin Fowler hat einen sehr interessanten Artikel über Flags in Methoden. Dem kann ich eigentlich kaum noch etwas hinzufügen. Außer vielleicht, dass Methoden-Flags i.d.R. Kontrollkopplungen sind, also den Kontrollfluss der Methode beeinflussen, statt ein Datum darzustellen. Und Kontrollkopplungen sind starke Kopplungen, d.h. man sollte sie vermeiden.
  • Mein Vortrag auf den Delphi-Tagen ist wohl gesetzt. Zumindest verschickt Embarcadero schon Rundmails, in denen ich als Speaker genannt werde. Man darf sich also jetzt schon auf eine Stunde rund um Bugs und deren Vermeidung freuen oder sich wahlweise davor fürchten. ;-) Ich hab viel zu erzählen.
  • Per Zufall bin ich hierüber gestolpert: Wie man ein guter Java-Programmierer wird. Ich fürchte, da ist was Wahres dran. Gilt natürlich auch für andere Sprachen und Bereiche. Nun, was soll ich sagen? Ich bin 23 und hab vor knapp 10 Jahren angefangen zu programmieren. Und B.Sc. bin ich auch schon. Also weiter gehts…
  • Die aktuelle Liste der Top 25 Sicherheitslücken. Erschreckend, dass SQL-Injection immer noch ganz vorne ist.
  • In C# kann man Interfaces auf zwei Arten implementieren. Entweder implizit oder explizit, d.h. entweder man implementiert einfach passende Methoden oder man spezifiziert genau, dass die Implementierung ausschließlich für dieses Interface gedacht ist. Das bedeutet, es ist möglich, dass eine Methode von einem bestimmten Interface aus zugänglich ist, von der eigentlichen Klassenreferenz aber nicht. Das klingt erstmal sehr merkwürdig, hat aber seine Vorteile. Es bietet nämlich die Möglichkeit, Methoden, die nur für ein bestimmtes Interface relevant sind, vor anderen Benutzern zu verbergen. Das ist dann quasi eine weitere Möglichkeit der Kapselung. Nick Hodges zeigt in einem Blog-Post, dass das auch in Delphi möglich ist. Bei Delphi kommt noch ein weiterer Punkt dazu: Wenn man in Delphi Interfaces verwendet, sollte man diese nicht mit echten Objektreferenzen mischen (außer man weiß sehr genau, was man tut). Das hängt damit zusammen, dass Interface-Referenzen im Gegensatz zu normalen Referenzzählung implementieren. Mit diesem Ansatz kann man also quasi sicher stellen, dass man die Klassenreferenz nicht benutzt (auf der anderen Seite sollte man hier eh überlegen, ob man nicht lieber ne Factory-Methode einsetzt). Die Diskussion in den Kommentaren ist übrigens auch interessant. Darüber wie und ob man dieses Feature verwenden sollte, sind die Meinungen gespalten. Auf jeden Fall, sollte man sowas gut dokumentieren.

Gefangen, nicht gefunden! #9

Informatik… mehr oder weniger… oder weniger

  • Delphi-Treff wird 10. Anlässlich dieses Geburtstags gibt ein neues Design, ein Update der Forensoftware und ein Gewinnspiel.
  • Wer sich schon immer mal gefragt hat *wie* kompliziert C ist, sollte sich mal diesen Artikel über printf() ansehen (via). Da kann man manchmal nur noch den Kopf schütteln.
  • Eigentlich dachte ich zu wissen, was Thunderbird meint, wenn von “Komprimieren” die Rede ist. Dachte ich… Tz…

Anderes – hauptsächlich Typographie

Seit ich LaTeX gelernt hab, finde ich Typographie ganz interessant. Und achte seit dem auch (ein bisschen) darauf. Zumindest bei allem, was über einen Blog-Post hinausgeht. Hier ein paar interessante Links dazu:

Gefangen, nicht gefunden! #7

Informatik

  • Sieht jemand den Fehler in folgendem C++-Code? Was doch ein einzelnes Zeichen ausmachen kann…
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>

double foo(double a, double b = 0)
{
        return a * b;
}

int main()
{
        double var = foo(1. -3);
        std::cout << var << std::endl;
}
  • Kollisionserkennung mag ja in 2D recht trivial sein; in 3D wird das aber richtig kompliziert. Hätte das gar nicht gedacht. Nicht nur, dass sich z.B. Kugeln mit unterschiedlichen Massen und Geschwindigkeiten in unterschiedlichen Winkeln (im Vergleich zur Bewegungsrichtung) treffen können. Es gibt auch lustige Sonderfälle, die man beachten muss. Beispielsweise, wenn sich eine Kugel nicht bewegt und demnach ihr Bewegungsvektor der Nullvektor ist, kann man diesen nicht normieren. Im Physikunterricht muss man ja nur für einen konkreten Fall etwas berechnen. Will man das aber programmieren, so muss man jeden auch noch so seltenen Sonderfall beachten, weil der u.U. ne Exception auslöst. Wenn jemand mal zu viel zeit haben sollte, ist ne (einigermaßen) physikalisch korrekte Simulation eines Ballwurfs (mit Kollisionen an Wänden, anderen Bällen etc.) ne herausfordernde Aufgabe.
  • Ein Tutorial über Exceptions steht auch noch auf meiner Liste der noch zu schreibenden Tutorials. Die Idee ist insbesondere bei Anfängern noch nicht ganz erfasst. In diesem Post geb ich mal so einen kleinen Eindruck. Es gibt aber noch viel mehr zu sagen. Mal sehen, wann ich dazu komme…

Anderes

  • CiteSeer ist zwar ne tolle Seite, aber leider viel zu oft down…
  • Im Master-Studium gibts so viele interessante Vorlesungen, dass man sich kaum entscheiden kann. Und damit die Entscheidung auch ja nicht so leicht fällt, gibts Abhängigkeiten zwischen den Vorlesungen und manche Vorlesungen nur in unregelmäßigen Abständen angeboten. Allein die Planung ist da ja schon ne Wissenschaft für sich…

Boost:UTF und die Irrwege eines Linkers

Heute hab ich einen sehr merkwürdigen Bug gefixt. Ich benutze das Unit Testing Framework (UTF) der Boost-Library. Im Allgemeinen finde ich das Framework auch ganz gut, aber heute (bzw. eigentlich schon gestern) habe ich eine Merkwürdigkeit entdeckt.
weiter lesen »

Gefangen, nicht gefunden! #6

Informatik

  • So langsam gewöhne ich mich an git. Der Ansatz gefällt mir außerordentlich gut. Allein schon die Möglichkeiten von git log sind erstaunlich.
    1
    user@host:~/rep$ git log --since="2009-01-01" --until="two months ago"

    Es dauert allerdings etwas, bis man sich an git gewöhnt. Anfangs wird man fast von den vielen Möglichkeiten erschlagen und so kann ich noch lange nicht sagen, dass ich schon das meiste kann, aber die grundlegenden Sachen sind nicht viel schwerer als bei SVN

  • Wenn ich schon bei git bin, dann soll natürlich das Git-Buch nicht verschwiegen werden: book.git-scm.com Auch hier gibts dazugehörige Videos. Diese sind ein ganzes Stück ausführlicher als der Text und scheinen nachvertont zu sein. Das Video ist oftmals einen Tick schneller, sodass während über das eine Kommando gesprochen wird, schon das nächste da steht. Trotzdem sehr empfehlenswert.
  • Durch eines der Videos ist mir aufgefallen, dass ich ein interessantes bash builtin bisher noch nicht kannte. Mit pushd kann man wie mit cd in ein neues Verzeichnis wechseln, allerdings wird das alte auf einen Stack gelegt. Mit popd kann man es wieder vom Stack nehmen und dirs zeigt den Inhalt des Stacks an. Man page lesen lohnt sich.
  • Ich habe schon wieder in einem C++-Projekt vergessen einen virtuellen Destruktor zu vergeben und dadurch ein Speicherleck produziert. Warum erzeugt der doofe Compiler da keine Warnung? So schwer sollte das doch nicht sein…
  • Exceptions sind toll. Sie helfen ungemein Fehlerbehandlung und eigentlichen Code zu trennen und machen den Code lesbarer wartbarer und robuster. Ich benutze Exceptions sehr gerne. Aber wo Licht ist, ist auch Schatten: Exceptions sind manchmal nicht ganz einfach richtig zu verwenden. Ein interessanter Artikel über Exception Safety zeigt das.

powered by WordPress | QuickLaTeX | WordPress Themes