Shashin Error:

Invalid data property __get for imageDisplay
Zum Inhalt springen

150103-Lernturm-01

Damit der oder die kleine endlich auch mal in der Küche helfen kann und deswegen nicht mehr quengelnd durch die Küche rennt, gibt es einen speziellen Hochstuhl auf dem das Kind sicher stehen kann. Einen solchen kann man sich ganz leicht selbst bauen – vorausgesetzt man ist nicht völlig ungeschickt.

Nach etwas Betteln seitens meiner Frau, habe ich mich dann doch bereit erklärt einen solchen Stuhl zu bauen – und Spaß hat es auch noch gemacht 🙂

Die sieben Arbeitsschritte habe ich hier zusammengeschrieben… weiter lesen…

Obwohl es Exceptions im C++ Standard schon etliche Jahre gibt, werden diese in größeren Projekten oft nicht eingesetzt. Im folgenden Artikel möchte ich das Für und Wider erörtern und mit gängigen Vorurteilen aufräumen.

try {
    funktion();
   ...
} catch (const std::invalid_argument& e) {
    std::cerr < < "Falsches Argument:"  << e.what() << std::endl;
} catch (const std::range_error& e) {
    std::cerr << "Ungültiger Bereich:" << e.what() << std::endl;
} catch (...) {
    std::cerr << "Sonstiger Fehler" << std::endl;
}

Gängige Vorurteile

  1. Die Behandlung von Ausnahmen ist codeintensiver (mehr Schreibarbeit)
    Falsch. Ein sinnvolles try/catch braucht ist sogar weniger Code als ein sinnvolles if/else if/elsefür alle möglichen Fehlercodes. Fehlercodes werden aber oft nicht vollständig überprüft oder gar ganz weggelassen, was der Qualität des Codes nicht gerade zuträglich ist. Exceptions dagegen zwingen zu einer durchdachten Fehlerbehandlung.
  2. Exceptions machen den Code langsam
    Falsch. Wenn Exceptions richtig eingesetzt werden, sollten sie für Ausnahmen im Programmablauf verwendet werden. Die Ausführungsgeschwindigkeit des „Gut“-Pfades (in dem keine Ausnahmen geworfen werden) leidet nicht darunter. Wenn also die Exception die Ausnahme und nicht die Regel ist, hat man nichts zu befürchten. weiter lesen…
#pragma comment( lib, "version" )
struct FileVersion
{
	DWORD dwLeftMost;
	DWORD dwSecondLeft;
	DWORD dwSecondRight;
	DWORD dwRightMost;
	bool IsLower( const FileVersion&amp; ver )
	{
		return dwLeftMost &lt; ver.dwLeftMost ? true :
			dwSecondLeft &lt; ver.dwSecondLeft ? true :
			dwSecondRight &lt; ver.dwSecondRight ? true :
			dwRightMost &lt; ver.dwRightMost ? true : false;
	}
};
 
static void GetFileVersion( const CString&amp; fileNameWithPath, FileVersion&amp; fileVersion )
{
	DWORD dwDummy;
	DWORD dwFVISize = GetFileVersionInfoSize( fileNameWithPath , &amp;dwDummy );
	LPBYTE lpVersionInfo = new BYTE[dwFVISize];
	::GetFileVersionInfo( fileNameWithPath , 0 , dwFVISize , lpVersionInfo );
	UINT uLen;
	VS_FIXEDFILEINFO* lpFfi;
	::VerQueryValue( lpVersionInfo , _T("\\") , (LPVOID *)&amp;lpFfi , &amp;uLen );
	DWORD dwFileVersionMS = lpFfi-&gt;dwFileVersionMS;
	DWORD dwFileVersionLS = lpFfi-&gt;dwFileVersionLS;
	delete[] lpVersionInfo;
	fileVersion.dwLeftMost = HIWORD(dwFileVersionMS);
	fileVersion.dwSecondLeft = LOWORD(dwFileVersionMS);
	fileVersion.dwSecondRight = HIWORD(dwFileVersionLS);
	fileVersion.dwRightMost = LOWORD(dwFileVersionLS);
}

Da ich mein jetziges Stativ damals einfach für den Camcorder gekauft hatte und es jetzt meinen wachsenden Ansprüchen für die Fotographie nicht mehr genügt, habe ich mir (nach Lektüre diverser Tests) zwei potentielle Nachfolger mit Kugelköpfen zum Vergleich bestellt:

Ich hatte das Problem, dass bei Serienaufnahmen immer wieder Bilder dabei waren, bei denen der Blitz nicht ausgelöst hatte.

Ich habe mich mit folgenem Text an den Metz-Kundendiesnt gewandt (und prompt auch Antwort erhalten): weiter lesen…

[simage=69,160,n,left,]Die Bilder von unserer Hochzeit am 22. Mai 2010 sind jetzt auf dieser Seite verfügbar. Darunter die Bilder vom Foto-Shooting im Botanischen Garten, die Bilder vom vor dem Standesamt in Friedberg und die Bilder der Trauungsfeier in Stadtbergen. Auch haben wir es uns nicht nehmen lassen, etwas bewegtes Bildmaterial von der Hochzeit mit einzubringen.

Hier geht’s zu den Bildern…

Es sieht so aus, als wäre eines der wichtigsten noch offenen Rätsel der Informatik gelöst worden. Vinay Deolalikar von den HP Reseach Labs scheint jetzt endlich bewiesen zu haben, dass die Komplexitätsklasse P ungleich der Komplexitätsklase NP ist. Die Lösung dieses Millennium-Problems ist mit 1 Million Dollar dotiert und behandelt im wesentlichen die Fragestellung „Wenn es für ein Problem einen einfachen Weg gibt, eine Lösung zu verifizieren, gibt es dann auch eine einfache Lösung?“. Mit P ≠ NP ist jetzt endlich der Beweis für die bislang allgemeine Annahme, dass dies nicht so ist, erbracht.

Ein Beispiel für ein solches Problem ist das Problem des Handlungsreisenden (Traveling Salesman Problem), bei dem es darum geht, eine bestimmte Anzahl von Städten so zu besuchen, dass ein möglichst kurzer Weg zurückgelegt wird, jedoch keine Stadt mehrmals besucht wird.

Weiterführende Links:

Auf unserer Hochzeitsreise haben wir in einem schönen Lokal am Hafen Sangría zum Essen getrunken – und der war ganz anders als ich bisher Sangría kannte – um längen besser.

Es war waren nur Zitronenscheiben und Orangenscheiben und jede Menge Eiswürfel und Zucker darin. Einfach wahnsinnig erfrischend.

Ein Rezept das diesem nahe kommt ist hier zu finden: Alles über Sangria

Oder man macht es wie folgt (Catalanische Variante):

Zutaten für vier Personen:

  • 1 Flasche spanischer Rotwein (vorzugsweise RIOJA, kann aber auch ein günstigerer sein)
  • Saft von mindestens zwei Orangen (ca. 100ml)
  • 100ml weißer Rum
  • 1 unbehandelte Zitrone
  • 1 unbehandelte Orange
  • 5 Eßlöffel Zucker
  • 1 Zimtstange
  • Eiswürfel

Zubereitung:

  1. Zitrone und Orange unter heißem Wasser abwaschen und dann in (halbe) Scheiben schneiden.
  2. Obststücke, Zucker, Rum und Orangensaft in eine Karaffe oder große Schüssel geben und dann ab damit zum Durchziehen in den Kühlschrank (mind. 1 Stunde).
  3. Dann den Rotwein drüber, die Zimtstange hinein und das ganze umrühren. Die Sangría eine weitere Stunde kalt stellen.
  4. Jetzt kommen noch ordentlich Eiswürfel dazu und die Sangría ist fertig zum servieren (am besten in großen Gläsern).

Um die x64-Libs von boost zu erzeugen muss man folgendes im boost Verzeichnis aufrufen:

bjam --toolset=msvc --address-model=64 --stagedir=stage64 stage

Zusätzliche Parameter

  • -jX um das Erstellen mit X Prozessen parallel zu starten
  • --build-type=complete baut alle libs (static, shared, mutithreaded,…)
  • --with-serialization baut nur die serialization Bibliotheken

Serialization weigert sich in 1.36.0 allerdings (in 1.40 gibt’s dieses Problem nicht mehr). Hierzu ist in der libs/serialization/build/Jamfile.v2 folgende Ersetzung vorzunehmen:

: requirements ../../config/test/all//BOOST_NO_STD_LOCALE

in

: requirements

sowie
../../config/test/all//BOOST_NO_STD_WSTREAMBUF am Ende der Datei auskommentieren (‚#‘).

bjam gibt’s hier: http://www.boost.org/users/download/

Danach sollten ein paar libs in stage64/lib liegen.

Ok, ich wollte nur mal eben bei meinem Projekt eine Klasse in ein XML dumpen und wieder einlesen. Hab ich ja mit boost::serialization schon öfter gemacht. Leider hab ich die Klasse aber unter Qt entworfen und daher Basistypen wie QString verwendet. Dieser hat sich allerdings zunächst geweigert…
weiter lesen…