Was ist eigentlich statistische Signifikanz?

Statistische … was?

Wenn etwas statistisch signifikant ist, sagen wir, dass das Ergebnis einer Untersuchung (z.B. der Wirkung eines Medikamentes) nicht zufällig gewesen sein kann.

Die statistisch Signifikanz (der sog. p-Wert) gibt an wie unwahrscheinlich es ist, dass das Ergebnis einer Untersuchung zufällig passiert ist. Je kleiner er ist, desto unwahrscheinlicher, dass der Zufall am Werk war. Umgekehrt halten wir ein statistsiches signifikantes Untersuchungsergebnis für ein Ergebnis, dass nicht zufällig passiert ist.

Was?!

Schauen wir uns dazu ein einfaches Beispiel an.

Ein einfaches Beispiel: Kinder beim Zähneputzen.

Kinder sollen sich abends vor dem Schlafengehen die Zähne putzen. Bei mir war das so und bei den meisten Kindern, die ich kenne, ist das auch heute noch so. Und, es hat sich nicht viel geändert, seit ich klein war: Kinder haben noch immer nicht so große Lust dazu. Also muss man sie immer wieder daran erinnern. Sagen wir eine Mutter erinnert ihre Tochter Jule, sie soll sich die  Zähne putzen. Jule entgegnet nun aber: „Ich habe mir schon die Zähne geputzt!“ Allerdings ist ihre Zahnbürste noch trocken.

Unsere Schlussfolgerung ist: da die Zahnpürste noch trocken ist, ist es unwahrscheinlich, dass sich Jule schon die Zähne geputzt hat. Ihre Mutter wird also davon ausgehen, dass Jule die Zähne noch nicht geputzt hat und sie nochmals ins Bad schicken.

Aus Sicht des Statistikers sieht die Situation so aus:

  • Daten: die Zahnbürste ist trocken
  • Hypothese: Jule hat sich die Zähne schon geputzt
  • Folgerung: falls die Hypothese wirklich wahr wäre, wären die Daten außergewöhnlich, daher verwerfen wir diese Hyothese und nehmen die stattdessen ihr Gegenteil (Jule hat ihre Zähne noch nicht geputzt) als wahr an

Wie bereits am Anfang gesagt: die statistische Signifikanz gibt an wie wahrscheinlich es ist, dass das Ergebnis einer Untersuchung zufällig ist.

Probleme bei statischen Tests

Interessant ist auch folgendes: nur, weil wir ein Test aussagt, dass eine Untersuchung statistische signifikant wahr, heißt das noch lange nicht, dass sie auch notwendigerweise wahr ist. Beispielsweise hätte Jule auch so vor dem Zähneputzen drücken können, indem sie die Zahnbürste einfach eine Sekunde unter laufendes Wasser hält. Dann ist sie nass und es erscheint so, als ob sie sich die Zähne geputzt hätte – zumindest, wenn wir die Trockenheit bzw. Nassheit der Zahnbürste als alleiniges Kritierum für die Untersuchung heranziehen. Um also sicher zu gehen müssten noch weitere Faktoren untersucht werden: z.B. Füllstand der Zahnpastatube oder die Menge Wasser, die durch den Wasserhahn gelaufen ist, als sie im Bad war. Man könnte auch ihren älteren Bruder befragen usw. Auch diese Messwerte könnten ihre Probleme haben, geben uns aber zunehmend mehr Sicherheit für das Für und Wider der Hypthese.

Ein weiterer Punkt: wir können uns nie 100% sicher sein. Wenn ihre Mutte Jule z.B. um 18:00 daran erinnert hat Zähne zu putzen und Jule das sofort gemacht hat, der Tag warm war und im Bad die Heizung voll aufgedreht, weil es nachts noch kalt gewesen war, dann ist es nicht ausgeschlossen, dass die Zahnbürste 2 Stunden später schon wieder außen trocken ist und die Mutter, die die Zahnbürste nur äußerlich kontrolliert hat nun zu der Schlussfolgerung gekommen ist, die Zahnbürste wäre trocken.

Die Resultate solcher Untesuchungen sind immer nur mit einer bestimmten Wahrscheinlichkeit zutreffend oder unzutreffend.

Akzeptable Irrtumswahrscheinlichkeit

Häufig fordern Experimente oder Untersuchung ein sog. Signifikanzniveau. Oft liegt das bei 5%. In Formeln sagt man: p < 0.05 muss erfüllt sein. p ist der sog. Wahrscheinlichkeitswert. Und wir akzeptieren Untersuchungen dann, wenn Fehler in weniger als einem von 20 Fallen auftreten – bzw. in weniger als 5% der Fälle. Daher spricht man von einem 5%-Signifikanzniveau.

Beispiel: Wirkt das Medikament?

Betrachten wir z.B. die Wirksamkeit eines Medikaments. Ein Signifikanzniveau von 5% heißt nun, dass sofern wir sehen, dass ein Medikament statistisch signifikant wirksam ist, die Wahrscheinlichkeit, dafür, dass das reiner Zufall ist bei 5% liegt.

Zwar wird ein Wert von 5% oft verwendet, ist aber willkürlich. Gerade bei Medikamententest möchten wir vielleicht lieber ein Signifikanzniveau von 1% oder sogar 0,1%. Wir wollen also, dass die Irrtumswahrscheinlichkeit für die Wirksamkeit des Medikaments geringer ist.

Ergibt ein Signifikanztest beim Vergleich von zwei Gruppen von Patienten – eine mit und eine ohne Medikament – eine Heilungsdifferenz von 10% zugunsten der Gruppe mit Medikament und ergibt sich ferner dafür ein p-Wert von 0,0005, dann bedeutet das: die Wahrscheinlichkeit dafür, dass die Gruppe mit Medikament 10% schneller geheilt ist, ist mit einer Wahrscheinlichkeit von 0.05% auf den Zufall zurückzuführen. Also sehr unwahrscheinlich zufällig und daher sehr wahrscheinlich auf das Medikament zurückzuführen!

Wobei natürlich auch für diese Untersuchung ähnlich wie für die Betrachtung von Jule beim Zähneputzen gilt: auch, wenn die Untersuchung sehr für das Medikament spricht, kann es immer noch sein, dass wir nicht richtig oder nicht genug messen. Es könnte z.B. sein, dass die Gruppe mit Medikament im Mittel 20 Jahre jünger war, als die Gruppe ohne Medikament oder die Gruppe mit Medikament könnte sich jeden Tag Blaubeeren reinhauen, die entweder unabhängig vom und gemeinsam mit dem Medikament die Heilung positiv beeinfluss haben könnte. Daher ist es wichtig wie wir die Patienten für Studien oder allgemeiner die Attribute für unsere Untersuchung auswählen und zudem die Zusammenhänge zwischen den Attributen und dem Ergebnis untersuchen. Für Experimente, deren Ergebnis möglichst zweifelsfrei auf die Maßnahme (hier: das Medikament) zurückgeführt werden kann, müssen wir die Auswahl der Stichproble (hier: der Patienten) randomisieren, also zufällig gestalten und zusätzlich für wichtige Attribute kontrollieren: z.B. Alter, Ernährungsgewohnheiten, andere Erkrankungen, bestimmte Genausprägungen usw., wovon wir wissen, dass es die Untersuchungsergebnisse verfälschen könnte.

Im nächsten Artikel möchte ich zeigen wie man für einen konrekten Fall einen p-Wert berechnen kann.

Udacity – Deep Learning Nanodegree: Was ist Deep Learning?

Seit November 2017 nehme ich am Deep Learning Nanodegree von Udacity teil. Deep Learning ist ein Machine Learning Ansatz, der auf künstlichen neuronalen Netzwerken (KNN) aufbaut. Inspiriert wurde dieser Ansatz von natürlichen Neuronensystemen, aus denen Nervengewebe und vor allem das Gehirn besteht. Im Gegensatz zum „Shallow Learning“, in dem nur eine Schicht künstlicher Neuronen zur Datenanalyse verwendet werde, verwenden „Deep Nets“ („tiefe oder besser: vielschichte Netzwerke) mehrere übereinander gestapelte Schichten aus Neuronen. So können, die Informationen – z.B. die eines Bildes, dessen Inhalt erkannt werden soll – auf der einen Seite als Pixel in das Netzwerk eingegeben werden und von Schicht so zu Schicht können so aus abstrakteren Einheiten konkreter Bildelemente erkannt werden. Im Beispiel können das z.B. in der ersten Ebene die groben Pixel, in der zweiten Ebene, Kanten und Ecken sein, in der zweiten Ebene einfache Formen wie Kreise, Ovale, Rechtecke und Trapeze und noch eine Ebene höher konkrete Bildeinheiten wie Haare, Stuhllehnen, Knöpfe, Wangen und Nasen und noch eine ebene höher, dann z.B. ein Hund von einem Huhn unterschieden werden. Die Vielschichtigkeit ist das Geheimnis und die Innovation von Deep Learning.

Heute gehören die diversten KNN-Verfahren – darunter Convolutional neural networks, rekurrente neuronale Netzwerke, Generative adversarial networks oder Deep reinforcement learning zu den Go-To-Methoden für die Lösung verschiedenster Probleme: darunter Spracherkennung, Spracherzeugung, Texterkennung, automatische Textübersetzung, Bilderkennung, Computer-KI-Systeme für Computerspiele, selbstfahrende Autos u.v.m. – konkret sind das Sprachassistenten wie Googles Assistent oder Amazons Echo oder die automatische Erkennung von Stimmungen in Chattexten oder Rezensionen (sog. Sentiment Analyse), in Bildern können Hunde, Hunderassen erkannt aber auch bösartige Tumore entdeckt werden, in Computerspielen haben zunehmend die Computer die Hosen an: die Schachtrophäe ging ja bereits 1998 von Kasparov an Deep Blue über, seit 2015 triumphieren aber auch Computer im intuitiven Spiel Go über Fähigkeiten menschlicher Weltmeister, auch sind autonome Fahrzeuge auf den Vormarsch – z.B. in den Logistikzentren und Lagerhallen großer Online-Versandhäuser.

Die Theorie neuronaler Netzwerke (KNN) beginnt  im Jahr 1943 mit Warren McCulloch und Walter Pitts. Sie berschreiben, das KNN theoretisch beliebige Berechnungen anstellen könnten. Trotz erster Erfolge – beispielsweise die kommerzielle Anwendung erster KNN zur automatischen Echofilterung in Telefonaten im Jahr 1960, die auf Arbeiten von Bernard Widrow und Marcian E. Hoff das ADALINE (ADAptive LInear NEuron) zurückgingen, geriet die Forschung um KNN zunächst in Stocken. Grund dafür waren mathematische Probleme, die Seymour Papert und Marvin Minsky 1969 identifizierten: darunter die Unmöglichkeit der damals zur Verfügung stehenden Netzkwerke, den recht einfachen logischen Operator XOR abzubilden. Infolgedessen wurden zunächst die meisten Forschungsgelder gestrichen. Wenn auch gebremst, ging die Forschung weiter. 1974 beschrieb Paul Werbos das heute wichtige Backpropagation oder Fehlerrückführungsverfahren. Seine Renaissance erlebten die KNN jedoch erst wieder ab 1985, als man entdeckte, dass mehrschichtige KNN, paralell via Backprogation trainiert werden konnten, und mit diesen das Problem der linearen Separierbarkeit gelöst und das XOR- Gatter simuliert konnte. Damit waren Papert und Minsky wiederlegt.

Als Data Scientist bin ich zwar ebenfalls diverse Male mit neuronalen Netzwerken in Berührung gekommen, aber einen umfassenden Überblick konnte ich mir noch nicht verschaffen. Das ist mein Ziel für die Teilnahme am Deep Learning Kurs von Udacity. Der Kurs ist mit 600 EUR zwar nicht billig, ich versprach und verspreche mir davon aber eine Aktualisierung und Erweiterung meines aktuellen Wissens zum Thema Deep Learning sowie eine vertiefte Anwendung in meinen Arbeitskontext. Ich habe mittlerweile den ersten Teil abgeschlossen. Neu waren für mich in dem Zusammenhang u.a. die beiden Python Bibliotheken Keras und Tensorflow, die den Bau von mehrlagigen neuronalen Netzwerken (=deep neural nets) ermöglichen. Ich habe bislang mit der MLLIB von Scala neuronale Netzwerke trainiert. Auch habe ich bisher keine Regression mit KNNs gemacht, das hat sich im Wege der ersten Projekts im Rahmen des Kurs geändert. Dafür mussten wir Daten eines Jahres analysieren und den Bedarf eines bestimmten Produktes an bestimmten Standorten in Abhängigkeit diverster Faktoren vorhersagen. Das hat mit wenigen Ausnahmen sehr gut geklappt. Ein weitere schöne Sache war die Sentiment-Analyes in Texten mit NLTK. Das ist auch ein sehr schönes Kit, um Texte zu minen. Im nächsten Teil, an dem ich bereits arbeite geht es um convoluted neuronale Netzwerke und hauptsächlich Bilderkennung. Ich bin schon sehr gespannt!

Schule ohne Fächer – in Finnland ab 2020

Statt traditioneller Fächer wie Physik, Mathematik, Geschichte oder Literatur wird es in Finnland ab 2020 nur noch den sogenannten Phänomen-basierten Lehr- und Lernansatz geben. Dazu werden nicht einzelne Aspekte – wie z.b. die Schnecke in der Biologie oder die Gravitation in der Physik betrachtet, sondern Phänomene aus der Welt ganzheitlich in ihrem realen Kontext betrachtet und analysiert. Solche Phänomene können der Mensch, die Europäische Union, Wasser oder Energie sein. Das Thema Energie beispielsweise könnte dann aus theoretischer physikalischer, praktisch technischer aber auch gesellschaftlicher Sicht betrachtet werden.

Link zum Text.

Ich finde, dass passt gut in unsere Zeit. Isolierte Informationen nützen weniger und können außerdem jederzeit bei Google nachgeschaut werden. Wichtiger ist es Inhalte im Kontext zu bewerten und so zu intelligenten Entscheidungen oder auf neue Ideen zu kommen.

Patreon – eine andere Art kreative Arbeit zu finanzieren und zu fördern

Patreon ist eine Plattform aus den USA, die es jedem ermöglicht Künstler, Autoren, Musiker, Podcaster, YouTuber usw. seiner Wahl mit einer kleinen oder größere regelmäßigen spende zu versorgen.

Dadurch ist es eine gute Möglichkeit sich für alle Arten von Künstlern sich ohne der Werbung zu unterwerfen zu finanzieren. Ich habe mir dort auch ein Profil für mein Projekt genughaben.de eingerichtet und habe seitdem dort auch keine automatische Werbung mehr. Sofern euch meine Seite gefällt und ihr mich unterstützen könnt, würde ich mich darüber freuen! Mein Profil findet ihr hier:

 

 

Seid ihr selbst Künstler, Autor, Musiker, Podcaster, YouTuber o.ä.? Dann meldet euch doch selbst auf Patreon an und schreibt euren Fans, dass sie euch darüber unterstützen könnt! Patreon bietet dazu viel und gute Unterstützung an, damit ihr damit auch Erfolg habt und ihr in Zukunft weniger von Werbung abhängig seid!

Viel Spaß und Erfolg mit eurem Projekt und danke für eure Unterstützung!

Frank

Was ich gerade lese – Kalenderwoche 19

  • Joel on Software. Joel Spolsky ist der Gründer von StackOverflow und aus dessen Inkubator – Fog Creek Software – ist unter anderem auch Trello hervorgegangen, dass ja sicher auch einige von euch benutzen. Falls nicht: schaut es euch einmal an. Cooles Tool zum Planen und Durchführen von Projekten. Jedenfalls schreibt Joel auch schon seit 1999 einen Blog mit genialen Posts über Software, Unternehmertum, Starups, was ihr nicht tun solltet u.v.m.. Das ganze Archiv findet ihr hier.
  • Glück. Von Matthieu Ricard. Ricard ist mit nach Abschluss seiner Promotion am Pasteur-Institut in Molekulargenetik unter dem Nobelpreisträge François Jacob buddhistischer Mönch geworden und ist dies nach mehr als 50 Jahren jetzt immer noch. Er gehört zu den ersten Mönchen, die sich zur Erforschung der Meditation in einen Kernspintomographen gelegt haben und legte damit mit das Fundament für die sich heute sehr dynamisch entwickelnde Meditationsforschung. In Glück untersucht Ricard das Phänomen Glück aus psychologischer, sozialer, kultureller und spiritueller Sicht. Ich bin jetzt 10% durch und bisher finde ich es großartig. Wenn das Thema interessiert, der schaue sich auch unbedingt das Interview mit ihm auf Sternstunde Philosophie an. Großartig! Ricard gehört auch zu denen, die mich dazu inspiriert haben jeden Tag zu meditieren – was für mich ein großer Gewinn ist. Ich selbst möchte damit weitermachen und selbst ein glücklicherer Menschen werden, auch, um mit anderen bessere Beziehungen führen zu können.

WordPress – Mehr Traffic durch eine optimierte Seitengeschwindigkeit

Eine schnellere Seite ist weniger nervig oder wirkt sich auf euer Ranking aus. Genau lässt sich das schwer sagen, jedenfalls kann ich euch sagen, dass mein Traffic in einer Woche um 15% hochging, nachdem ich meine Seite optimiert habe.

 

Wie ich das gemacht habe, fasse ich hier kurz zusammen.

Macht als erstes mal einen Speedtest auf Google PageSpeed. Einfach hier eure Domain eingeben und los. Ihr erhaltet dann als Ergebnis eine Auflistung mit Mängeln und Optimierungsempfehlungen. Was davon macht man aber nun wie?

Caching

Installiert euch das Plugin WP Super Cache, aktiviert es und stellt es unter Einstellungen -> WP Super Cache -> Easy ein, indem ihr den Radio-Button auf Caching An setzt.

Minifying

Wenn ihr Plugins installiert, dann bringen diese alle ihren eigenen, z. T. in verschiedene Dateien aufgeteilten Code mit. Dieser enthält dann auch noch sowas wie Kommentare und ist sehr hübsch formatiert. Das interessiert letztlich aber nur den Entwickler, dem User, also eure Leser, die nur eure Seite im Netz abschauen wollen, denen ist es herzlich egal wie schön der Javascript-Code formatiert ist. Im Zweifel schluckt das Platz. Mit dem Plugin „Minify HTML“ könnt ihr verschiedene Dateitypen (HTML, Javascript und CSS) minifyen, was verkleinern heißt. Ihr könnt euch dabei vorstellen, dass alles, was nur möglich ist abgekürzt wird. Wenn z.B eine Funktion im Code „macheDas“ heißt, so kürzt das minify-Plugin diese Funktion zu „mD“ ab. Auch wenn ihr vielleicht nicht wisst, was eine Funktion im Code sein soll, so seht ihr dennoch direkt, dass „mD“ mit nur zwei Buchstaben nur 1/4 so lang ist wie das Wort „macheDas“. Wenn man nun alles im Code so abkürzt wird dieser kleiner und damit etwas schneller.

Nachdem ihr das Plugin installiert habt, könnt ihr unter Einstellungen -> Minify HTML folgendes einstellen:

Bilder verkleinern

Bilder sind mit das speicheraufwändigste im Netz. Ein Handybild hat heute schon leicht 4 Megabyte. Das ist für Websites, vor alle, wenn diese auf dem Smartphone via 4G angeschaut werden oder mit noch weniger Speed total nervig. Mit dem Plugin EWWW Image Optimizer könnt ihr eure Bilder komprimieren. In der free Version bekommt man zwar nicht alle Verkleinerungsmethoden geboten, aber man kann schon etwas erreichen. Nachdem ihr das Plugin aktiviert habt, erhaltet ihr unter Medien einen neuen Reiter „Massenoptimierung“. Dort könnt ihr nach unoptimierten Bildern scannen und einen Optimierungsvorgang ausführen. Sofern ihr euch etwas mit Komprimierung, könnt ihr unter Einstellungen -> EWWW Image Optimizer Einstellungen vornehmen. In der free Version könnt ihr u.a. die png-Komprimierung konfigurieren, d.h. ihr könnt unter Grundeinstellungen statt der verlustfreien auch die verlustbehaftete Komprimierung auswählen und unter Erweiterte Einstellungen noch den Grad der Komprimierung wählen. Das kann den Komprimierungsvorgang allerdings deutlich verlängern. Zusätzlich könnt ihr in den Erweiterten Einstellungen noch die Bildergrößen wählen, auf die die Komprimierung jeweils zutrifft.

Ihr müsst in jedem Fall bei einer ersten Optimierung je nach der Anzahl Bilder, die ihr schon hochgeladen habt und welche erweiterten Einstellungen ihr vorgenommen habt schon eine ganze Zeit warten, bis die Komprimierung durch ist! Bei mir haben circa 1500 Bilder gut 45 Minuten gebraucht. Also plant das mit ein! Währenddessen solltet ihr an dem Fenster, indem der Prozess läuft nicht herumwerkeln!

.htaccess Einträge

Das ist jetzt schon eher was für Fortgeschrittene, allerdings, wer mal fortgeschritten sein will, muss sich das auch irgendwann ansehen. Also, warum nicht heute, denn so schwer ist es auch nicht. Es reicht zur Not, dass ihr eine Verbindung zu eurem Webserver herstellt und Copy & Paste von hier macht.

Der Reihe nach:

htaccess steht für Hypertext Access. In dieser Datei werden Verhaltensregeln für euren Server zusammengefasst. Diese können z.B. die Komprimierung von Daten umfassen. Also das, was wir brauchen, wenn wir eine schnellere Webseite haben wollen.

Die .htaccess-Datei, die im Wurzelverzeichnis eures WordPress auf eurem Server liegt. Je nachdem, was ihr für einen Provider habt, könnt ihr diesen Folder entweder über einen Web-Dateimanager finden, wenn ihr euch bei eurem Provider einloggt. Eine andere Möglichkeit ist es euren Webspace via FTP zu erreichen. Dafür könnt ihr z.B. das Programm FileZilla benutzen.  Wie man eine FTP-Verbindung zu eurem Webspace oder Server herstellt, müsste auf der Seite eures Hosters stehen. Ihr könnt den ggf. auch anrufen.

Wenn ihr die Verbindung hergestellt habt, dann könnt ihr euch in dem Ordner, der euren WordPress Ordner beeinhaltet die .htaccess-Datei anschauen. Dort steht ggf. schon etwas drin.

Nun schaut ihr euch die Datei hier an. Wenn ihr euch etwas auskennt oder auskennen lernen wollt, dann lest euch dort die Kommentare durch oder seht euch zusätzlich hier um.

Für die Geschwindigkeit sind vor allem die Blöcke

# ----------------------------------------------------------------------
# | Compression |
# ----------------------------------------------------------------------

und

# ----------------------------------------------------------------------
# | ETags |
# ----------------------------------------------------------------------

und

# ----------------------------------------------------------------------
# | Expires headers |
# ----------------------------------------------------------------------

relevant.

Wenn ihr nur die reinkopieren wollt, dann kopiert euch einfach folgenden Teil nach allem, was bei euch eh schon in der .htaccess-Datei steht. Kopiert euch:

# ----------------------------------------------------------------------
# | Compression |
# ----------------------------------------------------------------------

<IfModule mod_deflate.c>

 # Force compression for mangled `Accept-Encoding` request headers
 # https://developer.yahoo.com/blogs/ydn/pushing-beyond-gzipping-25601.html

 <IfModule mod_setenvif.c>
 <IfModule mod_headers.c>
 SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
 RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
 </IfModule>
 </IfModule>

 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 # Compress all output labeled with one of the following media types.
 #
 # (!) For Apache versions below version 2.3.7 you don't need to
 # enable `mod_filter` and can remove the `<IfModule mod_filter.c>`
 # and `</IfModule>` lines as `AddOutputFilterByType` is still in
 # the core directives.
 #
 # https://httpd.apache.org/docs/current/mod/mod_filter.html#addoutputfilterbytype

 <IfModule mod_filter.c>
 AddOutputFilterByType DEFLATE "application/atom+xml" \
 "application/javascript" \
 "application/json" \
 "application/ld+json" \
 "application/manifest+json" \
 "application/rdf+xml" \
 "application/rss+xml" \
 "application/schema+json" \
 "application/vnd.geo+json" \
 "application/vnd.ms-fontobject" \
 "application/x-font-ttf" \
 "application/x-javascript" \
 "application/x-web-app-manifest+json" \
 "application/xhtml+xml" \
 "application/xml" \
 "font/eot" \
 "font/opentype" \
 "image/bmp" \
 "image/svg+xml" \
 "image/vnd.microsoft.icon" \
 "image/x-icon" \
 "text/cache-manifest" \
 "text/css" \
 "text/html" \
 "text/javascript" \
 "text/plain" \
 "text/vcard" \
 "text/vnd.rim.location.xloc" \
 "text/vtt" \
 "text/x-component" \
 "text/x-cross-domain-policy" \
 "text/xml"

 </IfModule>

 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


# ----------------------------------------------------------------------
# | ETags |
# ----------------------------------------------------------------------

# Remove `ETags` as resources are sent with far-future expires headers.
#
# https://developer.yahoo.com/performance/rules.html#etags
# https://tools.ietf.org/html/rfc7232#section-2.3

# `FileETag None` doesn't work in all cases.
<IfModule mod_headers.c>
 Header unset ETag
</IfModule>

FileETag None

# ----------------------------------------------------------------------
# | Expires headers |
# ----------------------------------------------------------------------

# Serve resources with far-future expires headers.
#
# (!) If you don't control versioning with filename-based
# cache busting, you should consider lowering the cache times
# to something like one week.
#
# https://httpd.apache.org/docs/current/mod/mod_expires.html

<IfModule mod_expires.c>

 ExpiresActive on
 ExpiresDefault "access plus 1 month"

 # CSS

 ExpiresByType text/css "access plus 1 year"


 # Data interchange

 ExpiresByType application/atom+xml "access plus 1 hour"
 ExpiresByType application/rdf+xml "access plus 1 hour"
 ExpiresByType application/rss+xml "access plus 1 hour"

 ExpiresByType application/json "access plus 0 seconds"
 ExpiresByType application/ld+json "access plus 0 seconds"
 ExpiresByType application/schema+json "access plus 0 seconds"
 ExpiresByType application/vnd.geo+json "access plus 0 seconds"
 ExpiresByType application/xml "access plus 0 seconds"
 ExpiresByType text/xml "access plus 0 seconds"


 # Favicon (cannot be renamed!) and cursor images

 ExpiresByType image/vnd.microsoft.icon "access plus 1 week"
 ExpiresByType image/x-icon "access plus 1 week"

 # HTML

 ExpiresByType text/html "access plus 0 seconds"


 # JavaScript

 ExpiresByType application/javascript "access plus 1 year"
 ExpiresByType application/x-javascript "access plus 1 year"
 ExpiresByType text/javascript "access plus 1 year"


 # Manifest files

 ExpiresByType application/manifest+json "access plus 1 week"
 ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
 ExpiresByType text/cache-manifest "access plus 0 seconds"


 # Media files

 ExpiresByType audio/ogg "access plus 1 month"
 ExpiresByType image/bmp "access plus 1 month"
 ExpiresByType image/gif "access plus 1 month"
 ExpiresByType image/jpeg "access plus 1 month"
 ExpiresByType image/png "access plus 1 month"
 ExpiresByType image/svg+xml "access plus 1 month"
 ExpiresByType image/webp "access plus 1 month"
 ExpiresByType video/mp4 "access plus 1 month"
 ExpiresByType video/ogg "access plus 1 month"
 ExpiresByType video/webm "access plus 1 month"


 # Web fonts

 # Embedded OpenType (EOT)
 ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
 ExpiresByType font/eot "access plus 1 month"

 # OpenType
 ExpiresByType font/opentype "access plus 1 month"

 # TrueType
 ExpiresByType application/x-font-ttf "access plus 1 month"

 # Web Open Font Format (WOFF) 1.0
 ExpiresByType application/font-woff "access plus 1 month"
 ExpiresByType application/x-font-woff "access plus 1 month"
 ExpiresByType font/woff "access plus 1 month"

 # Web Open Font Format (WOFF) 2.0
 ExpiresByType application/font-woff2 "access plus 1 month"


 # Other

 ExpiresByType text/x-cross-domain-policy "access plus 1 week"

</IfModule>


 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Speichert die Datei ab und ladet sie ggf. auf euren Server.

Nun sollte eure Seite schon ein ganzes Stück besser beim Google PageSpeed-Test abschneiden.

Und mit etwas Glück verbessert sich dadurch euer Traffic auch um 15% oder mehr.

Viel Erfolg mit eurer Webseite!

Euer

Frank

Probleme mit Bildern in WordPress

Solltet ihr einmal wie ich seit einigen Tagen Probleme mit Bildern – beim Hochladen oder fehlenden Vorschaubilder – in WordPress haben, dann schaut euch dazu diese beiden Quellen an.

und diesen Artikel

https://www.iocreed.com/wordpress-http-error-uploading-images/

Letztlich gibt es für das Problem leider sehr viele unterschiedliche mögliche Ursachen. Mich hat schon allein dar recherchieren nach Lösungen bestimmt einen halben Tag gekostet. Die besten Quellen waren diese zwei. Hoffentlich kommt ihr damit schneller zu einer Lösung als ich!

Ich habe vor nicht allzu langer Zeit meine Multisite umgezogen. Letztlich war bei mir die Lösung einmal die Ordner Rechte auf 744 und die Bildrechte auf 644 umzustellen. Verwendet habe ich dafür FileZilla. Als zweites musste ich für weitere Bilder unter Einstellungen -> Permalinks einmal auf „einfach“ zurückstellen und dann wieder auf „Tag und Name“. Was dabei passiert, wird im oberen Video erklärt.

Viel Erfolg!

Lange Artikel

Artikel über Meditation für genughaben.de. Seit zwei Tagen arbeite ich jetzt an einem langen Artikel zum Thema Meditation. Es ist schon eine etwas andere Herausforderung als nur einen Artikel von 1-3 Seiten zu schreiben. Ich habe dazu heute Vormittag den Vortrag Waking Up von Sam Harris, den ich bei Vimeo gekauft habe angehört. Das Hörbuch habe ich auch eine Stunde gehört. Nachdem ich gestern viele Stunden Paper zum Thema recherchiert habe, war das ein ganz angenehmer Ausgleich. Ein paar meiner Artikel vorher haben natürlich auch schon viel Zeit gekostet. Darunter z.B. der Artikel über Wim Hof. Ich muss aber auch sagen, dass meine längeren Artikel schon eher Evergreen-Artikel sind als kürzere. Wobei meine Artikel zum Thema Bohnen und Kohl eher weniger gut ankamen – bisher. Ich denke schon, dass ich für den Artikel insgesamt 4-5 Tage benötigen werden. Na klar, es sind natürlich auch diverse Zeichnungen drin, das ist ja neu.

Kalenderprojekt. Heute Abend haben wir am 3-Jahreskalender weitergearbeitet. Wir haben ein Prozedere für die Wochenauswertung basierend auf den Tageseinträgen überlegt und uns ein Design überlegt wie dann die Wochen und Monate zusammengefasst werden können. Ich denke man kann darauf basierend ein weiteres Design entwerfen.

Permakultur-Praktisch.de. Ich habe heute Gartenplanung – Teil 2 veröffentlich.

Sport. Gestern waren wir 18km durch den Wiener Wald spazieren. Dort habe ich u.a. „meinen Baum“ gefunden: die Hainbuche.

Mein Buch die Heinbuche

Dann sind wir noch an Hippieland vorbeigelaufen.

Hippieland

Und das hier. Man beachte den Stacheldraht und den Gartenzwerg oben ohne. Sowas. Echt schräg.

?!

Heute waren wir im Park laufen. Ich habe mal gemessen. Es sind nur 1,90km. Also nicht viel. Allerdings habe ich auch 4 Sprints eingebaut und auf der Mitte der Woche – wie in den letzten zwei Wochen jedesmal, wenn wir laufen waren (also insgesamt 8 Mal jetzt) Intensive-Übungen gemacht: Kniebeugen, Trizeps, Liegestütze und ganz wichtig Burpees. Das waren heute, 40, 40, 40 und 20.

Graphik-Design Software, Tablet und was ich lese

Neue Programme, die ich gerne benutzte: Affinity Designer.

Das ist ein Vector Zeichenprogramm. So ähnlich wie Inkscape. Da Inkscape aber auf Mac einfach überhaupt nicht ordentlich funktioniert, habe ich mir vor circa eine Woche die Trail des Affinity Designers geholt und bin mir ziemlich sicher, dass ich mir das Programm kaufen werden in drei Tagen, wenn die Trail ausläuft. Ich verwende das Programm zusammen mit dem Intuos 4 Medium. Wenn ich etwas mehr Geld hätte, würde ich mir aber das Intuos Pro Medium oder sogar ein Cintiq 13HD holen. Das mache ich sobald sich bewährt hat, dass ich meine Artikel für genughaben, permakultur-praktisch und genugschlafen regelmäßig illustriere, wie ich es z.B. hier erstmals getan habe. Absolut genial, gute Shortcut-Funktionen für das Programm, etwas weniger für mein, besser für die teureren Grafiktablets. Vieleicht probiert ihr es ja auch mal aus.

Was ich lese.

Ich versuche mir jetzt jeden Vormittag 1-2 Stunden Zeit zum Lesen zu nehmen. Gestern war das:

Heute habe ich The Age of the Essay von Paul Graham gelesen. Wieder. Er kommt darauf, das moderne Essays sich an die Streitschriften anlehnen, die man in Gerichtssälen benötigt und daher zu wenig mit Wahrheitsfindung zu tun haben, das will er anders machen. Er will, dass seine Essays im Sinne Montaignes der Wahrheitsfindung dienen. Er notiert alles ihn überraschende und denkt dann schreibend darüber nach, diskutiert die Ergebnisse mit Freunden und schreibt dort um, wo es zu langweilig oder nicht überzeugend ist. Er beginnt anders als mit modernen Texten nicht mit einer initialen These, das ist aus seiner Sicht Sophismus. Ich kann ihm da nur zustimmen. Hier ein paar Zitate aus dem Text.

    • Zitat: Whatever you study, include history– but social and economic history, not political history. History seems to me so important that it’s misleading to treat it as a mere field of study. Another way to describe it is all the data we have so far.
    • Zitat: Swords evolved during the Bronze Age out of daggers, which (like their flint predecessors) had a hilt separate from the blade. Because swords are longer the hilts kept breaking off. But it took five hundred years before someone thought of casting hilt and blade as one piece.
    • Zitat. Über Ungehorsam: Above all, make a habit of paying attention to things you’re not supposed to, either because they’re „inappropriate,“ or not important, or not what you’re supposed to be working on. If you’re curious about something, trust your instincts. Follow the threads that attract your attention.
    • Zitat: Gradualness is very powerful. And that power can be used for constructive purposes too: … you can trick yourself into creating something so grand that you would never have dared to plan such a thing. Indeed, this is just how most good software gets created. … Hence the next leap: could you do the same thing in painting, or in a novel?
    • Zitat: If there’s one piece of advice I would give about writing essays, it would be: don’t do as you’re told. Don’t believe what you’re supposed to. Don’t write the essay readers expect; one learns nothing from what one expects. And don’t write the way they taught you to in school.