PageSpeed von 68 auf 91 in 5 Minuten

Google PageSpeed ist ja nach wie vor eine wichtige Messlatte, wenn es um Seitenoptimierung geht. Auf gute Werte zu kommen, ist gar nicht so schwierig – es dauert nur ein paar Minuten, um zumindest in den grünen Bereich zu kommen.

Ich habe es mal auf einer Demoseite (WP 4.9.1) mit einem Standardtheme (twentyseventeen) ausprobiert und konnte tatsächlich nach ein paar Minuten deutlich gesteigerte Bewertungen sehen:
Mobil „ab Werk“ 68%, gesteigert auf 91%
Desktop „ab Werk“ 74%, gesteigert auf 97%

Ohne Plugins geht es nicht, ich habe folgende Plugins verwendet:

  • Autoptimize
    optimiert lediglich HTML und CSS (auch inline)
  • Responsify WP
    läuft mit den Standardeinstellungen
  • WP Super Cache
    läuft mit Experteneinstellungen (Seiten komprimieren, Header cachen), der Cache wurde manuell vorgeladen

Zusätzlich habe ich in der .htaccess nochmal explizit die Komprimierung aktiviert und das Ablaufdatum erhöht:

# BEGIN browser caching
<FilesMatch "\.(html|htm)$">
  FileETag None
  <ifModule mod_headers.c>
    Header unset ETag
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "Mon, 29 Oct 1923 20:30:00 GMT"
  </ifModule>
</FilesMatch>

# BEGIN Gzip
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/ico
  AddOutputFilterByType DEFLATE image/x-icon
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  AddOutputFilterByType DEFLATE font/opentype font/ttf font/eot font/otf
</IfModule>
# END Gzip
# BEGIN LBC
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|x-html|css|xml|js|woff|woff2|ttf|svg|eot)(\.gz)?$">
  <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault A0
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/ico "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 month"
	ExpiresByType image/vnd.microsoft.icon "access plus 1 month"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType text/javascript "access plus 1 month"
	ExpiresByType text/html "access plus 1 month"
	ExpiresByType text/plain "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"
    ExpiresByType application/ico "access plus 1 month"
    ExpiresByType application/x-icon "access plus 1 month"
	ExpiresByType application/x-shockwave-flash "access plus 1 month"
	ExpiresByType application/xhtml-xml "access plus 600 seconds"
  </IfModule>
  <IfModule mod_headers.c>
    Header set Expires "max-age=2592000, public"
    Header unset ETag
    Header set Connection keep-alive
  </IfModule>
  FileETag None
</FilesMatch>
# END LBC
# END browser caching

<IfModule mod_headers.c>
  <FilesMatch "\.(js|css|xml|gz)$">
    Header append Vary: Accept-Encoding
  </FilesMatch>
</IfModule>

Das war schon alles

Ja wirklich.

Autoptimize brachte mobil 70%, Desktop 77%.
WP Super Cache brachte mobil 85%, Desktop 93%
Cache vorgeladen brachte dann die letzten Punkte: mobil 91%, Desktop 97%

11 Rules of Life

Someone gave a speech at a High School about eleven things they did not and will not learn in school.
He talks about how feel-good, politically correct teachings created a generation of kids with no concept of reality and how this concept set them up for failure in the real world.

  1. Life is not fair – get used to it!
  2. The world doesn’t care about your self-esteem.
    The world will expect you to accomplish something BEFORE you feel good about yourself.
  3. You will NOT make $60,000 a year right out of high school.
    You won’t be a vice-president with a car phone until you earn both.
  4. If you think your teacher is tough, wait till you get a boss.
  5. Flipping burgers is not beneath your dignity.
    Your Grandparents had a different word for burger flipping: They called it opportunity.
  6. If you mess up, it’s not your parents‘ fault, so don’t whine about your mistakes, learn from them.
  7. Before you were born, your parents weren’t as boring as they are now. They got that way from paying your bills, cleaning your clothes and listening to you talk about how cool you thought you were: So before you save the rain forest from the parasites of your parent’s generation, try delousing the closet in your own room.
  8. Your school may have done away with winners and losers, but life HAS NOT. In some schools, they have abolished failing grades and they’ll give you as MANY TIMES as you want to get the right answer.
    This doesn’t bear the slightest resemblance to ANYTHING in real life.
  9. Life is not divided into semesters.
    You don’t get summers off and very few employers are interested in helping you FIND YOURSELF. (Do that on your own time.)
  10. Television is NOT real life.
    In real life, people actually have to leave the coffee shop and go to jobs.
  11. Be nice to nerds. Chances are you’ll end up working for one.

(found it on Facebook and worth keeping)

Responsive Images im Eigenbau

Bei den Performance-Messungen im Zuge meines Wechsels von Yoko zu Catch Evolution bekam ich immer wieder den Optimierungshinweis, auch im Header doch angepasste Grafiken („responsive images“) auszuliefern, statt standardmäßig immer das gleiche Bild mit 1600×400 Pixeln in voller Größe auch auf die kleinsten Endgeräte zu schicken.

Die Idee ist nicht schlecht, auch wenn sich der Effekt durch Smartphones mit immer höheren Auflösungen wahrscheinlich immer weniger auswirken wird. Aber egal, es ist eine nette kleine Fingerübung und bringt wieder ein paar zusätzliche Punkte in der Bewertung – die kann man ja en passant mitnehmen. Auch auf einer so wenig besuchten Website wie dieser hier.

Falls es mal jemand nachbauen möchte steht hier mein Lösungsansatz. Bilder innerhalb der Beiträge habe ich mit Responsify WP umgestellt, nur beim Header musste ich selbst Hand anlegen.

Schritt 1:
Media Breakpoints festlegen bzw. finden

Das Catch Evolution Theme ist ja schon responsive ausgelegt und reagiert auf unterschiedliche Bildschirmauflösungen. Also werfen wir mal einen Blick ins css, genauer gesagt in die wp-content/themes/catch-evolution/css/responsive.css und suchen nach @media, um die „Umschaltpunkte“ zu finden:

[css gutter=“0″]@media screen and (max-width: 960px) {
@media screen and (max-width: 767px) {
@media screen and (max-width: 479px) {
@media screen and (max-width: 320px) {
@media screen and (max-width: 1224px) {
@media screen and (max-width: 1060px) {[/css]

Und schon wissen wir, ab welcher Auflösung sich das Layout ändert und wir ein kleineres Titelbild ausliefern lassen könnten. Der Einfachheit halber geben wir jedesmal ein anderes Bild aus.
WordPress kennt standardmäßig nur drei Bildgrößen (festgelegt unter Einstellungen – Medien): Thumbnail, Mittel, Groß. Das ist schonmal ein Anfang, diese Größen legen wir wie folgt fest: Thumbnail 150, Mittel 468, Groß 680px breit, jeweils mit proportionaler Höhe.
media_settings
Da wir hier noch ein paar Zwischengrößen brauchen, definieren wir uns einfach welche mit add_image_size(). Das Titelbild wird immer in voller Breite ohne irgendwelche Ränder ausgegeben, deswegen übernehmen wir einfach die Umschaltpunkte von oben. Konkret fügen wir in die functions.php unseres Child Themes folgende Zeilen ein:

[php title=“>>> functions.php“ padlines=“1″]// headers are 1600×400 or a fraction thereof, so all must be hard cropped
add_image_size(‚resp-head-full‘, 1600, 400, true); //this is the maximum size we want for header images
add_image_size(‚resp-head-xlarge‘, 1224, 306, true);
add_image_size(‚resp-head-large‘, 1059, 264, true);
add_image_size(‚resp-head-medium‘, 960, 240, true);
add_image_size(‚resp-head-small‘, 767, 191, true);
add_image_size(‚resp-head-xsmall‘, 467, 116, true);
add_image_size(‚resp-head-mini‘, 320, 80, true);

// others are just restricted in width
add_image_size(‚resp-large‘, 592, 9999);
add_image_size(‚resp-small‘, 320, 9999);
add_image_size(‚resp-mini‘, 278, 9999);[/php]

So ist sichergestellt, dass die Titelbilder alle auf jeden Fall im richtigen Seitenverhältnis vorliegen, auch wenn das Artikelbild („featured image“) automatisch in den Titel übernommen wird. Diese Funktionalität ist im Catch Evoltion schon enthalten (in Yoko übrigens auch). Die Funktion hat vier Parameter: add_image_size( $name, $width, $height, $crop )

  • $name ist der Name, unter dem das Format gezielt angesprochen werden kann
  • $width, $height sind die Abmessungen; ein Wert muss angegeben werden, wenn das Bild proportional verkleinert werden soll, wird der andere mit 9999 angegeben
  • $crop legt fest, ob proportional verkleinert oder absolut beschnitten werden soll.

Für das Format „resp-header-full“ wird ein Bild also immer auf 1600x400px beschnitten, für „resp-mini“ wird das Bild proportional auf eine Breite von 278px verkleinert. (Die drei proportionalen Breiten 278, 320 und 592px verwende ich mit Responsify-WP im Textteil, für die Titelbilder werden sie nicht genutzt)

Alternativ kann man sich natürlich auch an den gängigsten Bildschirmauflösungen seiner Besucher orientieren und die Bildgrößen darauf optimieren

[php title=“>>> functions.php“ padlines=“1″]// headers are 1600×400 or a fraction thereof, so all must be hard cropped
add_image_size(‚resp-head-full‘, 1600, 400, true); //this is the maximum size we want for header images
add_image_size(‚resp-head-1440‘, 1440, 360, true);
add_image_size(‚resp-head-1366‘, 1366, 341, true);
add_image_size(‚resp-head-sxga‘, 1280, 320, true);
add_image_size(‚resp-head-xga‘, 1024, 256, true);
add_image_size(‚resp-head-medium‘, 960, 240, true);
add_image_size(‚resp-head-720‘, 720, 180, true);
add_image_size(‚resp-head-xsmall‘, 467, 116, true);
add_image_size(‚resp-head-mini‘, 320, 80, true);[/php]

Mit dem Plugin Regenerate Thumbnails können dann für alle Bilder in der Mediathek die neuen Bildgrößen mit ein paar Klicks automatisch erzeugt werden; neu hochgeladene Bilder werden sofort automatisch in alle Größen konvertiert.

Schritt 2:
picturefill.js einbinden

Eine Anmerkung vorab: solange das Plugin Responsify WP aktiv ist, kann dieser Schritt übersprungen werden; das Plugin bindet die picturefill.js selbst ein.

Ich habe mich für die alte Version 1.2 entschieden, da sie auf jeden Fall auch mit älteren Browsern kompatibel ist, die das neue picture Element noch nicht verstehen. Runterladen kann man das Skript direkt bei Github; Archiv entpacken und die picturefill.js aus dem Verzeichnis dist in den (Child-)Theme Ordner hochladen. Wenn man es ganz elegant machen will, erzeugt man sich vorher noch einen Unterordner /js und lädt die Datei dort hoch.

Damit die Datei auch geladen wird und verwendet werden kann, muss sie in WordPress eingehängt werden. Das ist ebenfalls wieder mit ein paar Zeilen Code in der functions.php erledigt (ggf. den Pfad anpassen!):

[php padlines=“1″ title=“>>> functions.php“]function add_picturefill(){
wp_enqueue_script( ‚picturefill_header‘, get_stylesheet_directory_uri() . ‚/js/picturefill.js‘, array(), ‚1‘ );
}

add_action(‚wp_enqueue_scripts‘, ‚add_picturefill‘);[/php]

Schritt 3:
statische Titelbilder austauschen

Zuerst die alles entscheidende Frage: Wo und wie genau wird das Titelbild eingebunden? Meistens passiert das in der header.php, bei Catch Evolution passiert es über die Funktion catchevolution_featured_header(), die sich in wp-content/themes/catch-evolution/inc/custom_header.php versteckt:

[php title=“>>> custom_header.php“ firstline=“390″ highlight=“410,414″]/**
* Header Image
*
* Uses Custom Header and Featued Images
* @Hooked in catchevolution_headercontent
* @since Catch Evolution 1.0
*/
function catchevolution_featured_header() {
global $wp_query, $post, $paged, $_wp_default_headers;

// Header Image
$header_image_path = get_header_image();

// Check if this is a post or page, if it has a thumbnail, and if it’s a big one
if ( is_singular() && current_theme_supports( ‚post-thumbnails‘ ) &&
has_post_thumbnail( $post->ID ) &&
( /* $src, $width, $height */ $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), ‚post-thumbnail‘ ) ) &&
$image[1] >= HEADER_IMAGE_WIDTH ) :
// Houston, we have a new header image!
echo ‚<div id="header-image">‘;
echo get_the_post_thumbnail( $post->ID );
echo ‚</div>‘;
elseif ( get_header_image() ) : ?>
<div id="header-image">
<img src="<?php header_image(); ?>" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" />
</div>
<?php endif;

} // catchevolution_featured_header[/php]

Wie oben schon angesprochen verwendet das Theme automatisch das Artikelbild, wenn dieses mindestens 1600 Pixel breit ist – deswegen müssen wir an zwei Stellen eingreifen.

Picturefill.js funktioniert nur mit der post_id des angehängten Bildes, header_image() liefert aber die URL – also brauchen wir zuerst noch eine kleine Funktion, die uns aus der URL die ID liefert. Auch diese Funktion kommt in die functions.php:

[php padlines=“1″ title=“>>> functions.php“]function get_attachment_id_from_src($url) {
global $wpdb;
$prefix = $wpdb->prefix;
$attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM " . $prefix . "posts" . " WHERE guid=’%s‘;", $url ));
return $attachment[0];
}[/php]

Zu guter Letzt wird die umgebaute Funktion catchevolution_featured_header() eingebaut, ebenfalls wieder in functions.php. Mehr Varianten dazu hat Stefan Ledin mit Responsify-WP auf Github beschrieben.

[php padlines=“1″ title=“>>> functions.php“ highlight=“14,15,16,21-25″]function catchevolution_featured_header() {
global $wp_query, $post, $paged, $_wp_default_headers;

// Header Image
$header_image_path = get_header_image();

// Check if this is a post or page, if it has a thumbnail, and if it’s a big one
if ( is_singular() && current_theme_supports( ‚post-thumbnails‘ ) &&
has_post_thumbnail( $post->ID ) &&
( /* $src, $width, $height */ $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), ‚post-thumbnail‘ ) ) &&
$image[1] >= HEADER_IMAGE_WIDTH ) :
// Houston, we have a new header image!
echo ‚<div id="header-image">‘;
$thumbnail_id = get_post_thumbnail_id( $post->ID );
echo Picture::create( ‚element‘, $thumbnail_id, array(’sizes‘ => array( ‚resp-head-mini‘, ‚resp-head-xsmall‘, ‚resp-head-small‘, ‚resp-head-medium‘, ‚resp-head-large‘, ‚resp-head-xlarge‘, ‚resp-head-full‘ )
) );
echo ‚</div>‘;
elseif ( get_header_image() ) : ?>
<div id="header-image">
<?php
$header_id = get_attachment_id_from_src($header_image_path);
echo Picture::create( ‚element‘, $header_id, array(
’sizes‘ => array( ‚resp-head-mini‘, ‚resp-head-xsmall‘, ‚resp-head-small‘, ‚resp-head-medium‘, ‚resp-head-large‘, ‚resp-head-xlarge‘, ‚resp-head-full‘, ‚full‘ )
)
);
?>
</div>
<?php endif;
} // catchevolution_featured_header[/php]

Wer nicht automatisch das Artikelbild auch als Titelbild verwenden möchte, lässt einfach ein paar Zeilen weg:

[php padlines=“1″ title=“>>> functions.php“ highlight=“8,9-12″]function catchevolution_featured_header() {
global $wp_query, $post, $paged, $_wp_default_headers;

// Header Image
$header_image_path = get_header_image(); ?>
<div id="header-image">
<?php
$header_id = get_attachment_id_from_src($header_image_path);
echo Picture::create( ‚element‘, $header_id, array(
’sizes‘ => array( ‚resp-head-mini‘, ‚resp-head-xsmall‘, ‚resp-head-small‘, ‚resp-head-medium‘, ‚resp-head-large‘, ‚resp-head-xlarge‘, ‚resp-head-full‘, ‚full‘ )
)
);
?>
</div>
<?php
} // catchevolution_featured_header[/php]

Schritt 4:
Erfolgskontrolle

Kontrollieren lässt sich das Ergebnis im Browser: in der Quellcode-Ansicht steht statt

[code lang=“html“]<div id="header-image">
<img src="http://domain.tld/wp-content/uploads/headerimage.jpg" …>
</div>[/code]

jetzt ein ganzer Satz von möglichen Bildern, die vom Browser intelligent passend zur aktuellen Auflösung geladen werden:

[code lang=“html“]<div id="header-image">
<span data-picture data-alt="">
<span data-src="http://domain.tld/wp-content/uploads/headerimage-320×80.jpg" ></span>
<span data-src="http://domain.tld/wp-content/uploads/headerimage-467×116.jpg" data-media="(min-width: 320px)" ></span>
<span data-src="http://domain.tld/wp-content/uploads/headerimage-767×191.jpg" data-media="(min-width: 467px)" ></span>
<span data-src="http://domain.tld/wp-content/uploads/headerimage-960×240.jpg" data-media="(min-width: 767px)" ></span>
<span data-src="http://domain.tld/wp-content/uploads/headerimage-1059×264.jpg" data-media="(min-width: 960px)" ></span>
<span data-src="http://domain.tld/wp-content/uploads/headerimage-1224×306.jpg" data-media="(min-width: 1059px)" ></span>
<span data-src="http://domain.tld/wp-content/uploads/headerimage.jpg" data-media="(min-width: 1224px)" ></span>
<noscript><img src="domain.tld/wp-content/uploads/headerimage-320×80.jpg" alt=""></noscript>
</span>
</div>[/code]

Wenn man die Größe des Browserfensters ändert, ändert sich auch die URL des Titelbilds.

Achtung: picturefill.js hat bei mir nicht mehr funktioniert, als ich es asynchron mit defer='defer' geladen habe; auch die Zusammenfassung mit anderen eingebundenen js-Dateien hat zu Problemen geführt – ggf. muss man beim Einsatz eines Caching-Plugins also darauf achten. Laden im Footer hat keinen negativen Einfluss.

Bei der Umsetzung geholfen haben mir die Erläuterungen zu Responsify-WP, dieser Artikel von wpmudev und ein paar Tassen Kaffee 😉

Licht, Strom und Lichtstrom

Farbtemperaturen

Strom sparen ist ja im Trend, herkömmliche Glühbirnen werden allmählich vom Markt verschwunden und durch energiesparende Leuchtmittel ersetzt. So weit, so gut. Früher oder später steht man aber vor der Neuanschaffung als Ersatz für eine kaputte Glühbirne – and dann fängt die Verwirrung an: die alte Birne hatte 75W, das steht ja drauf. Aber die neuen Leuchtmittel haben deutlich weniger (sonst wären sie ja nicht energiesparend), dafür ist aber zusätzlich zur Leistung in W meistens ein Lichtstrom in Lumen (lm) angegeben.
Die elektrische Leistung bezieht sich nur auf den Stromverbrauch, wogegen der Lichtstrom sich auf die gesamte abgegebene Lichtmenge (also die Helligkeit) der Lampe bezieht. Dummerweise sind Lichtstrom und elektrische Leistung nicht einfach so direkt miteinander vergleichbar – mal abgesehen davon, dass mehr Leistung in der Regel auch mehr Lichtstrom zur Folge hat. Zum Glück gibt es dafür Tabellen, die einem den Vergleich erleichtern – eine davon ist diese hier:

Glühbirne LED Leuchtstofflampe Halogenlampe
15 W 136 lm 125 lm (~3 W) 119 lm (~10 W)
25 W 249 lm 229 lm (~5 W) 217 lm (~20 W)
40 W 470 lm (~5 W) 432 lm (~7 W) 410 lm
60 W 806 lm 741 lm (~11 W) 702 lm (~35 W)
75 W 1055 lm 970 lm (~15 W) 920 lm (~50 W)
100 W 1521 lm 1398 lm (~18 W) 1326 lm (~75 W)
150 W 2452 lm 2253 lm (~30 W) 2137 lm (~100 W)
200 W 3452 lm 3172 lm (~36 W) 3009 lm

Heißt also: als Ersatz für eine 60 W Glühbirne brauche ich eine LED-Leuchte mit einem Lichtstrom von 806 lm, um das gleiche Erlebnis von Helligkeit zu haben. Oder umgekehrt: Eine LED-Leuchte mit 250 lm ist nur in etwa so hell wie eine 25 W Glühlampe.

Aber der Lichtstrom ist nicht alles, was beachtet werden muss: die Farbtemperatur spielt ebenfalls eine entscheidende Rolle. Leider verhält sich die Farbtemperatur umgekehrt zum allgemeinen Sprachgebrauch: „warmes“ Licht (=viel Wärme, wenig Helligkeit, rötlich) hat eine niedrige Farbtemperatur, „kaltes“ Licht (=wenig Wärme, viel Helligkeit, bläulich) hat eine hohe Farbtemperatur. Folgende Anhaltswerte kann man zum Vergleich heranziehen:
Kerzenlicht 1500 K
Glühlampe (40 W) 2600 K
Glühlampe (200 W) 2700 K
Halogenlampe 3000 K
Leuchtstofflampe (kaltweiß) 4500 K
Tageslicht 6500 K

Oder etwas allgemeiner:
<3300 K = warmweiß
3300 – 5300 K = neutralweiß
>5300 K = tageslichtweiß
Farbtemperaturen
Mehr Details zum Thema findet man u.a. bei Netzmafia.

ASCII Art: Bark (Segelschiff)

Eine Bark in ASCII:

              |    |    |
            /_|   )_)  )_)
           /__|  )___))___)\
          |___| )____))____)\\
         _____|____|____|____\\\__
---------\                   /---------
  ^^^^^ ^^^^^^^^^^^^^^^^^^^^^
    ^^^^      ^^^^     ^^^    ^^
         ^^^^      ^^^       TSG-404

Sie basiert auf diesem Vollschiff, welches ich irgendwann mal in den Tiefen des Internets bei chris.com gefunden habe:

              |    |    |
             )_)  )_)  )_)
            )___))___))___)\
           )____)____)_____)\\
         _____|____|____|____\\\__
---------\                   /---------
  ^^^^^ ^^^^^^^^^^^^^^^^^^^^^
    ^^^^      ^^^^     ^^^    ^^
         ^^^^      ^^^

Und wem die Unterschiede nicht mehr so ganz geläufig sind, dem sei Wikipedia ans Herz gelegt.

Das Artikelbild gehört zu den offiziellen Pressefotos der Alex 2.

Howto: Ford Mondeo

Es ist ja nunmal so, dass ich seit einer Weile schon einen Ford Mondeo fahre. Nach 10 Jahren VW Passat war das auf jeden Fall erstmal eine Umgewöhnung  😕 – viele Dinge sind bei Ford anders gelöst, wobei „anders“ das gesamte Spektrum von „gibt’s nicht“ bis „wirklich besser“ umfasst.
Hier in wilder Reihenfolge ein paar Tipps und Tricks, die ich im Lauf der Zeit nützlich fand:

Versionsstand Converse+ (inkl. Testfunktionen)

Taste OK am Lenkrad gedrückt halten, Zündung einschalten. Taste weiter gedrückt halten, bis „Test“ im Display erscheint, dann loslassen. Mit den Pfeiltasten auf/ab am Lenkrad durch die Punkte blättern.

Dank zweier defekter Pixel habe ich inzwischen ein neues Display inkl. der zugehörigen aktualisierten Software – endlich hat auch der Fahrer mal eine Uhr und Temperaturanzeige im direkten Blickfeld (für Nicht-Mondeo-Fahrer: bisher war die einzige Uhr in der rechten unteren Ecke des Navibildschirms, die Temperaturanzeige war irgendwo im Einstellungsmenü versteckt)
Mondeo Display (alt) Mondeo Display (neu)

Versionsstand Navi NX:

NAV und MENU gleichzeitig drücken

Zieleingabe Navigation: Zielvorschlag (Ort, Straße) übernehmen

Folgende Situation: sobald man den ersten Buchstaben einer Stadt, Str., etc. eingibt, wird die letzte Eingabe mit diesem Buchstaben als Vorschlag angegeben – dagegen ist nichts einzuwenden, das erwartet man als Navinutzer einfach. Wenn man sich aber jetzt denkt, diesen Vorschlag mit OK übernehmen zu können, hat man sich getäuscht: OK bringt einen an den Listenanfang des eingegebenen Buchstabens. Beispiel: Ich möchte nach Köln und war da auch vorher schon unterwegs. Ich drücke auf „K“ und es wird zu „Köln“ im Display vervollständigt. Gehe ich jetzt aber auf „Liste“ oder „OK“, zeigt das Navi mir Einträge an, die mit „Ka“ anfangen, weil ich ja nur K eingeben habe.
Die Lösung ist ganz einfach: Man muss nur OK gedrückt halten, dann wird der Vorschlag übernommen. :doh:

Alexander von Humboldt (II)

Der Tag des Generationswechsels bei der Alexander von Humboldt rückt unaufhaltsam näher – das Nachfolgeschiff wird wurde am 24. September 2011 in Bremerhaven getauft.

Ich werde war dabei sein :), immerhin geht es um das zweitgrößte deutsche Segelschiff (nach der Gorch Fock) und um den ersten Großsegler, der seit über 50 Jahren in Deutschland neu gebaut wurde. (Die Gorch Fock wurde 1958 bei Blohm & Voss in Hamburg gebaut.)

Segelriss Alex II

Zum Glück wurden die ursprünglichen Pläne zum Design wieder verworfen, und so wird die Alex2 jetzt doch nicht im Stil der Flying P-Liner* mit schwarzem Rumpf und weißen Segeln unterwegs sein, sondern wenigstens das bekannte Grün am Rumpf weiter tragen. Der Verzicht auf die grünen Segel fällt manchen Alexianern noch schwer, aber die werden sich auch noch daran gewöhnen 😉 „Alexander von Humboldt (II)“ weiterlesen

Color Scheme Designer

Wenn man mal ganz auf die Schnelle ein Farbschema für eine Webseite zusammenstellen muss…

Einfach die Hauptfarbe angeben und aussuchen, wieviele Farben in welchem Verhältnis man braucht – das Ergebnis kann man sich dann komfortabel als Farbraum oder HTML/CSS ausgeben lassen und weiterverwenden.

Color Scheme Designer von Petr Staníček (Pixy) wird es definitiv in meine Lesezeichensammlung schaffen 😉

 

remote cronjob

Folgendes Problem hat mich so viel Nerven gekostet, dass ich die Lösung nicht für mich behalten möchte:

Auf einer Webseite soll regelmäßig ein Backup der Datenbank gemacht werden. Für solche Zwecke bietet sich MySQLDumper an. Einziges Problem: Der Hoster der Webseite bietet keine Möglichkeit, irgendwelche Cronjobs laufen zu lassen (jedenfalls nicht im aktuellen Hosting-Paket). „remote cronjob“ weiterlesen