Samstag, 1. Januar 2011 | Autor: Nico
Ich schreibe diesen Artikel heute, am 31.12.2010, an einem geradezu obszön leistungsfähigen 4-Kern-Rechner mit 4GB RAM, über ein Internet, in dem Live-Video-Streaming in HD-Qualität möglich ist, das jedermann Zugriff auf das Wissen der Welt erlaubt, das Meinungsfreiheit vom Papier in die Realität befördert hat!
Die Geschwindigkeit, mit der uns die technische Entwicklung in Richtung Zukunft katapultiert ist immer noch atemberaubend
und ich habe das unglaubliche Glück, diese Entwicklung mitzuerleben.
Thema: Informatik, Internet, Leben und Erlebnisse, Tagesgeschehen | 2 Kommentare
Montag, 27. Dezember 2010 | Autor: Nico
Ein neuer Tag, eine neue Fehlermeldung:
/home/nico/code/FAnToM/src/visAlgos/IntegralLines/../../math/src/ODESolver/StreakLine.hh:76:2: error: no matching function for call to ‘Tracer<2, (FLineType)0u>::Tracer(std::vector<MeshNode>, boost::shared_ptr<const FTimeDependentTensorField>&, FPosition&, double&, const double&, const double&, int)’
/home/nico/code/FAnToM/src/visAlgos/IntegralLines/../../math/src/ODESolver/Tracer.hh:392:3: note: candidates are:
[... (diverse Vorschläge ausgelassen)]
/home/nico/code/FAnToM/src/visAlgos/IntegralLines/../../math/src/ODESolver/Tracer.hh:886:1: note: Tracer<DIM, lineT>::Tracer(std::vector<MeshNode>&, Tracer<DIM, lineT>::Fieldtype, const FPosition&, double, double, double, unsigned int) [with int DIM = 2, FLineType lineT = (FLineType)0u, Tracer<DIM, lineT>::Fieldtype = boost::shared_ptr<const FTimeDependentTensorField>, FPosition = FArray]
Diese Meldung ist aus einem ganz bestimmten Grund fies, der aber nicht offensichtlich ist. Die Meldung suggeriert, man habe beim Funktionsaufruf etwas falschgemacht. Oft stimmt das auch und die Gründe sind dann solche:
- Parameter der Funktion vergessen
- bei einem (oder mehreren!) Parametern den falschen Typ benutzt
- const ignoriert
- Tippfehler
Ich habe überlegt, was davon es sein könnte. Gegrübelt und getestet. Man fängt ja nach ner Weile an, die unmöglichsten Dinge zu vermuten. Zum Beispiel, dass es vielleicht daran, dass ein Parameter const oder eine Reference ist? Habe ich Templates falsch benutzt? Gerade für Anfänger, die mit constness, Referenzen und Templates noch nicht so firm sind, der Super-Gau!
Aber auch mir ist es heute passiert.
Es lag daran, dass ich die Datei, in der die Funktion deklariert/definiert ist, nicht includet habe.
Thema: Sezierte C++-Käfer | Beitrag kommentieren
Mittwoch, 22. Dezember 2010 | Autor: Nico
Die Uni-Braunschweig gibt auf ihrer Website Beispiele für eine Finanzierung des Studiums. Ein solches Beispiel ist Hendrik.
Man beachte mal den vorletzten Satz 😉
Von seinem Verdienst legt er jeden Monat 130,00 Euro beiseite auf ein Sparkonto.
Von den 80€, die er monatlich verdient, spart er 130 - sehr löblich! Aber halt.. insgesamt bleiben ja jeden Monat nur 560-520 = 40€ übrig. Also spart Hendrik jeden Monat von diesen 40€ 130?
Aber an der Uni BS fallen ja auch noch 500€ Studienbeitrag an und 226,91€ Semesterbeitrag an. Macht monatlich 120 €.
Zusammengefasst macht Hendrik jeden Monat 80€ Schulden und spart von dem nicht vorhandenen übriggebliebenen Geld noch 130€.
Thema: Studium | Beitrag kommentieren
Dienstag, 30. November 2010 | Autor: Nico
Linker-Error sind aus zwei Gründen ekelhaft:
Erstens: Sie sind kryptisch sind, viel kryptischer als Compilerfehler (ja, das geht).
Zweitens: Sie treten unter Umständen erst zur Laufzeit auf.
Beispiel:
could not load plugin './algoStore/visAlgoslibStreakSurface.so' :./algoStore/visAlgoslibStreakSurface.so: undefined symbol: _ZN23FStreakSurfaceAlgorithm10split_edgeESt4pairI6FArrayS1_E
Okay, undefined symbol -
da haben wir wohl irgendetwas deklariert, aber nicht definiert. Aber was genau haben wir nicht definiert?
_ZN23FStreakSurfaceAlgorithm10split_edgeESt4pairI6FArrayS1_E
?
Manchmal kann man erraten, was gemeint ist, da die Namen der involvierten Funktionen, Klassen, Variablen in dem Wust irgendwo drin stehen. Aber eben nur manchmal. Die Lösung dieses Problems lautet c++filt!
c++filt ist ein kleines Tool, das einem die Symbolnamen entziffert! („demangled”). So wird’s benutzt:
> c++filt _ZN23FStreakSurfaceAlgorithm10split_edgeESt4pairI6FArrayS1_E
FStreakSurfaceAlgorithm::split_edge(std::pair<FArray, FArray>)
>
und schon kennen wir den Klarnamen des Symbols! Einfach toll - ich wünschte, ich hätte dieses Tool schon früher gekannt!
Thema: Programmieren | 4 Kommentare
Montag, 22. November 2010 | Autor: Nico
Debugger sind Programme, die einem bei der Fehlersuche helfen sollen. Mit einem Debugger kann man das Programm quasi bei der Arbeit beobachten: Welche Codezeile wird als nächstes ausgeführt? Was enthält diese und jene Variable momentan? Wie sieht der Call-Stack/Backtrace momentan aus? An welcher Stelle stürzt das Programm genau ab? und vieles anderes mehr.
Für C++ (und jede Menge anderer Sprachen) gibt es den GNU-Debugger, kurz GDB. weiter…
Thema: Programmieren, Sezierte C++-Käfer | Beitrag kommentieren
Freitag, 29. Oktober 2010 | Autor: Nico
In meinem vorigen Post habe ich versucht, aus den Inhalts- und Nährwertangaben von Mondamin Muffins eine passende Zutatenliste zu schlussfolgern. Heute war es soweit und ich habe das Rezept ausprobiert. weiter…
Thema: Allgemein | 2 Kommentare
Montag, 25. Oktober 2010 | Autor: Nico
Beim letzten Einkauf habe ich spontan so eine „Mondamin Muffins”-Flasche gekauft.
Der Gebrauch ist simpel: Milch reinkippen, schütteln, in Muffinformen füllen, backen. Eine sehr unkomplizierte und saubere Angelegenheit!
Schmeckt auch ganz gut! Im Vergleich zu den Schokoladenbomben in der Mensa vergleichsweise dezent, aber ansonsten gut und fluffig.
Thema: Reviews | Ein Kommentar
Samstag, 23. Oktober 2010 | Autor: Nico
Was machen Informatiker, wenn sie nachts am Rechner hocken? Webseiten hacken? Programme schreiben?
Nö - ihr verdammtes Linux reparieren.
Für die Nachwelt, hier einige der Probleme, die ich in den letzten Tagen lösen musste. weiter…
Thema: Informatik | Beitrag kommentieren
Freitag, 22. Oktober 2010 | Autor: Nico
Neulich bin ich auf einen Fehler gestoßen, der erstmal so schlimm gar nicht aussieht:
interpolate(double, const P&, const P&) [with P = FVector]: Assertion `t >= 0.0 && t <= 1.0' failed.
Die Fehlermeldung sagt uns, dass eine Assertion fehlgeschlagen ist. Offenbar ist der Parameter t
nicht zwischen 0 und 1. Aber das ist noch längst nicht alles.. weiter…
Thema: Sezierte C++-Käfer | Beitrag kommentieren
Dienstag, 28. September 2010 | Autor: Nico
Die Wikipedia ist immer für eine Diskussion gut. Eine ganze Weile lang stand die Frage nach der enzyklopädischen Zuverlässigkeit im Vordergrund. Diese Feuerprobe hat Wikipedia mit links bestanden und dabei Papierenzyklopädien in die Bedeutungslosigkeit gedrängt.
Nun gibt es aber seit einiger Zeit neue Diskussionen. Diskussionen, die sich um Vorgänge innerhalb der Wikipedia drehen. Wann ist ein Artikel relevant? Wer entscheidet das? Sind diese Entscheidungsprozesse transparent genug? weiter…
Thema: Gedanken zu Dingen, Internet | Beitrag kommentieren