NaN und -ffast-math

C/C++ relevanter Post:

Wer die Optimierung -ffast-math beim gcc-Compiler eingeschaltet hat, wird irgendwann feststellen, dass der isnan-Vergleich nicht mehr möglich ist.

Ursache

Das Problem ist das gcc-Compiler-Flag -ffinite-math-only. Diese Optimierung lässt nämlich explizit die Annahme zu, dass alle Gleitkommaberechnungen weder NaN noch +-Inf sind. Und genau diese Annahme ist es, welche jede Vergleiche mit nan sofort als fehlgeschlagen abstempelt.

Behebung

Entweder -ffast-math abschalten, oder explitzit noch den Flag -fno-finite-math-only dazugeben. Beispiel:

Alternativ kann man auch eine alternative nan-Routine verwenden, die im Beispielprogramm erklärt sind.

Beispielprogramm

[Download]

Das Programm erstellt ein NaN als Variable x und lässt danach einige Vergleiche zu. Auf Stackoverflow werden drei verschiedene Lösungen angeboten. Bei mir (gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2) funktionieren Lösungen 2 und drei, ich empfehle ausdrücklich Lösung zwei, weil sie mir als die "sauberere" der beiden Möglichkeiten erscheint

Wichtig: Nicht float durch double ersetzen, auch wenn man ein double vergleichen möchte. Einfach so benutzen!

 

Anmerkung am Schluss

-ffast-math niemals leichtsinnig verwenden. Vor allem nicht mit Optimierungs-Flags. Schaut euch mal die Manpage zu -ffast-math an

-ffast-math
Sets -fno-math-errno, -funsafe-math-optimizations,
-ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and
-fcx-limited-range.

This option causes the preprocessor macro "__FAST_MATH__" to be
defined.

This option is not turned on by any -O option besides -Ofast since
it can result in incorrect output for programs that depend on an
exact implementation of IEEE or ISO rules/specifications for math
functions. It may, however, yield faster code for programs that do
not require the guarantees of these specifications.

Google wertet Seiten ohne mobil-Unterstützung ab

Seit gestern (Dienstag 21. April) wertet Google alle Webseiten ohne mobil-Unterstützung ab. Google benutzt damit zweifelsohne seine Machtmonopolstellung aus, und wird da auch schon gehörig torpediert. Zurecht, obgleich ich diese Entwicklung sehr spannend finde. Die Sichtweise eines Nerds.

Google "benutzt" Marktmonopolstellung

Obwohl riesengroßer Datenkrake, ist Google nach wie vor DIE Suchmaschine und für viele auch die Startseite fürs Internet. Wer nicht auf Google's Seite 1 der Treffer landet, existiert höchstens als periphere Randinstanz. Und genau davor haben nun viele Internetseitenbetreiber Angst.

Screenshot_2015-04-25-10-23-18
tt.com auf meinem Android. So sollen mobile-friendly Seiten sein: Schlicht, einfach, übersichtlich.

Begründet wird die Entscheidung pauschal damit, dass immer mehr Benutzer Mobilgeräte verwenden. Nur konsequent wenn nun auch die mobile-friendly Seiten für Anfragen von Mobilgeräten gepushed werden. Ich will als User ja auch nicht ein kaputtes Javascript-verseuchtes großkotziges Werk vor mir haben mit mehr Web 2.0 Effekten als Inhalten auf meinen kleinen Display. Denn genau das erwarte ich von meinen Smartphone: Kompakte, schnelle Informationen.

Ich mag für die Minderheit der Smartphone-Benutzer sprechen, aber ein schlichtes Design ohne visuellen Effekte ist bei den meisten Seiten genau das, was der Benutzer möchte. Ich benutze meine Datentafel mehr als Informationsquelle und Kommunikationsgerät denn als Entertainment-Gerät.

Google hat seinen Status dadurch erhalten, dass es den Werdegang des Internets wesentlich mitbestimmt. Innovation ist Google's Geschäftskonzept, die Leute leben von Veränderung und Erfindungen. Keine Veränderung bringt nur Gutes und natürlich steckt hinter jeder Entscheidung Google's die Sichtweise eines Konzerns. Genauso einseitig ist es jedoch auch, mit dem Argument der Markmonopolstellung jeden Diskurs vom Tisch zu watschen. Immerhin sind wir, die User, diejenigen, die den Status Google aufrechterhalten.

Und es ist nicht das erste Gerichtsverfahren gegen Google, weil wir es nicht schaffen, eine europäische Konkurrenzsuchmaschine aufzubauen.

Ich bin übrigens dafür, auch noch die folgenden Features eingebaut werden:

  • Abwertung von Seiten mit Paywall
  • Aufwertung von Robot-Friendly API
  • Aufwertung von RSS
  • Benchmarks und Seiten mit übertrieben viel CPU-intensiven Javascript auch als mobile-unfriendly einzustufen

Webseiten anstatt Apps

Vielleicht haben manche Seiten auch Angst vor einer möglichen ungerechtfertigen Abwertung, weil sie der Meinung sind, ja schon alle Mobilgerät-Endbenutzer mit Apps zu erreichen.
Viele Betreiber bräuchten jedoch nur eine aufpolierte Webseite und keine Spezial-App mit integrierter Schnüffelfunktion, permanenter Hintergrundverbindung und lästigen Benachrichtigungen.

Eine App ersetzt keine Webseite. Eine App installiere ich nur, wenn es einen triftigen Grund dafür gibt, wie etwa

  • Offline Inhalte
    (Seriously people, eine App ist ein Programm und keine Webseite!)
  • Rechenintensive Berechnungen, die ich nicht in Javascript haben will
  • Programme die ich nicht als Webseite haben will (Chats, Podcasts, ecc.)

Liste unvollständig, gibt jedoch eine Idee was ich damit meine.

 

PS. Mit diesem Beitrag gibt es nun auch 'Google' als Tag auf dem Blog. Schlimm genug 😉

Hochbeet

Mit den Umzug vom Heim in eine Wohnung sind auch einige Träume realisierbar geworden. Wie z.B. ein eigener Gemüsegarten.
Vorweg: Ich bin kein Profigärtner - maximal beginnender Hobbygärtner, also bitte nehmt alles was ihr hier lest nicht als in Stein gemeiselte Wahrheit.

Hochbeet

Diverse Leute und Bücher empfehlen immer wieder dein Einsatz eines Hochbeets. Zum einen soll die Temperatur um einige Grad höher sein als am Boden und überschüssiges Wasser kann leichter abfließen, was vor allem in den kalten Frühjahrsmonaten die Effizienz des Beetes steigern soll. Wie gesagt - ich bin kein Profi, ich mache das zum ersten Mal.

Im Grunde ist ein Hochbeet nichts anderes als irgendeine offene Schachtel/Box/Ikea-fertig-Containment das mit Erde befüllt wird. Klingt einfach, daher hab' ich mich auch dazu überreden lassen.

Los gehts!

Für den Anfang habe ich im Baumarkt 4 1,2m und 30-40cm hohe Bretter geholt. Diese sollen die Wände meines Beetes bilden.
Ich habe darauf geachtet, dass die Bretter unlackiert sind: Lackstoffe haben im Gemüsebeet nichts zu suchen. Um die Bretter miteinander zu verzimmern verwende ich Nägel und je eine 30cm Latte zur Verstärkung der Nagelseite.

wpid-wp-1428063849638.jpg
Der Garten ist umgestocken, die ersten Bretter eingesetzt

Ich steche den Garten mit den altbekannten Coldsteel Special Forces Shovel (tm) um. Eine ganz normale Schaufel reicht auch, aufgrund des höheren Effizienzgrades der normalen Schaufel gegenüber dem Daypack-tauglichen Feldspaten ist dem sportlichen Gärtner die Wahl seiner Werkzeuge selbst überlassen 😉

Ich vergrabe die Bretter etwa halb-tief und fülle beide Seiten wieder mit Erde auf.

wpid-wp-1428063840327.jpg
Das ist kein Feldspaten sondern ein Präzisionswerkzeug. Glatte Ränder sind im Hochbeet willkommen, da sie die Kräfte des emsigen Gärtners schonen (und als Foto schön ausschauen)

Der nächste Schritt besteht damit, die Bretter miteinander zu verbinden. Ich habe mich für die Variante mit Hammer und Nagel entschieden - Einfach, schnell und für den Einsatz mehr als ausreichend.
Nachdem ich also die Bretter halb vergraben habe werden sie alle passend eingesetzt und miteinder vernagelt.

IMG_20150403_104600
Die Bretter werden so ausgelegt, wie sie letztendlich verbunden werden sollen und halb-tief vergraben.

Urban search and rescue im Gemüsegarten!

Das zusammen-zimmern gestaltet sich als einfach und problemlos.  Als USAR-geschädigter Katastrophenhelfer gehe ich bei den Verbindungen streng nach dem erlernten Nagelmuster vor. Wenn schon Hochbeet, dann auch Erdbeben-sicher 😉

preview.png
USAR-ready Nagelmuster im Hochbeet. So macht man das!

Okay, wieder zurück zum Hochbeet

Die letzten Schritte

Nachdem alle Bretter fest miteinander verbunden sind, wird die Erde gleichmäßig verteilt.
Tipp: Wer verhindern möchte, dass Gras und Unkraut von hier aus nachwachsen kann der deckt die Erde jetzt mit Zeitungspapier aus. Ich meine Schwarz-Weißes, einfaches Zeitungspapier, nicht die farbige Illustrierte mit wasserfesten Seiten.

wpid-wp-1428063820505.jpg
Das fertig gezimmerte Hochbeet. Schaut doch schon ganz gut aus!

Das Beet wird jetzt noch mit Erde gefüllt. Da ich (noch) keinen Kompost habe, muss ich leider auf teure Erde vom Baumarkt zurückgreifen. Ich verwende 2 x 70l von der billigsten Pflanzenerde für je etwa 9 Euro.

Sobald das Beet damit gefüllt ist, kann man es auch schon bepflanzen.

Fertig :-)
Fertig 🙂

Und fertig ist der eigene kleine Gemüsegarten. Ich habe in den letzten Wochen Setzlinge gezüchtet, die in nächster Zeit noch eingepflanzt werden. Sobald das verdammte Aprilwetter sich entschließt Richtung Frühling zu gehen - kein Schnee auf meinen Tomaten -