Freundlichkeit … was?

Ich war mal wieder unterwegs, diesmal in Düsseldorf. Als Hotel suchte ich mir das InterCity Hotel direkt am Bahnhof aus. Das Hotel und auch die Zimmer sind nett eingerichtet und es gibt kein Grund zur Klage. Grundsätzlich sind alle Hotels, die ich in Deutschland über ein internes Tool buchen kann, inklusive Frühstück. Ich muss auf nichts besonderes achten, denn es ist einfach so.

Heute morgen war mein letzter Tag in Düsseldorf und ich checkte aus, fragte aber, ob es in Ordnung sei, wenn ich nach dem auschecken noch frühstücken gehe, was auch laut Rezeptionistin kein Problem darstellte. Also saß ich beim Frühstück und bestellte mir einen Kaffee. Die Kellnerin schaute mich etwas schräg an, in etwa mit dem Blick, wie ich denn bei ihr nur einen Kaffee bestellen könnte. Der Kaffee kam aber prompt und ich wurde nach meiner Zimmernummer gefragt. Nicht einmal eine Minute später steht sie in einem Abstand von 2,5 Metern an meinem Tisch und fragt mit lauter Stimme, wie ich mir das denn vorstellen würde, „mit dem bezahlen“.  Ich hätte schon ausgecheckt und dürfte auch nicht mehr frühstücken. Weiter wäre bei meinem Zimmer kein Frühstück inbegriffen. Sie wiederholte dann ihre Frage, wie ich mir das mit dem bezahlen vorstellen würde und ob ich denke, bei ihr bezahlen zu können. Ich erklärte, dass es sich um ein Missverständnis handeln würde und ich bereits für das Frühstück bezahlt hätte, da es mit im Zimmerpreis ist.

Die Kellnerin stapfte davon und kam dann wieder. Wieder 2,5 Meter von meinem Tisch entfernt. Wieder mit lauter Stimme wiederholte sie alles noch einmal. Sie hätte an der Rezeption nachgefragt und ich müsse jetzt sofort bei ihr bezahlen. Während sie noch laut weiter plapperte, fragte ich mich, welchen Namen wohl so ein einfaches Gemüt hätte. Ich stehe ja auch ein wenig auf Klischees, obwohl nicht nicht daran glaube. Aber trotzdem freut es mich immer wieder, wenn diese Klischees zutreffen. Und ja, bei ihr passte auch das Klischee. Ihre Eltern hatten ihr den Namen „Mandy“ verpasst.

Wie auch immer, ich stapfte zur Rezeption. Den Kaffee, den ich noch nicht getrunken hatte, hatte ich schon auf und auf Frühstück schon längst keine Lust mehr. Die Rezeptionistin, bei der ich auscheckte und neben der sich Mandy schon postiert hatte, ließ ich links liegen und ging direkt zu dem Kollegen, der allen Anschein nach mehr auf der Pfanne hatte, als die beiden Mädels. Ich erklärte ihm die Situation und er meinte nur nach 5 Klicks in seinem Computer: „Klar ist Frühstück inklusive. Sie haben die Firmenrate“. Mandy regte sich dann noch etwas auf, faselte etwas von ihrer Liste. Aber das wars dann auch schon. Keine Entschuldigung, kein Bedauern. Nichts, außer dumme blicke.

Naja, doch! Ich bin übernächste Woche wieder in Düsseldorf, dann aber wieder im NH Hotel. Denn dort werde ich nicht dämlich, wie auf der Straße, angemacht.

Logwatch, die automatische Logauswertung

Seit 2003 habe ich meinen eigenen Server. Dazu kam noch der Webserver meines Cousins auf dem sein Motorrad-Zubehör-Shop läuft, sowie ein kleiner VServer. Und eines vernachlässige ich seit 2003 vehement – die tägliche Logfile-Auswertung.

Wenn Fehler auftreten schaue ich schon mal rein um den Fehler zu finden, aber die tägliche Auswertung fand ich bisher ziemlich nervig. Überflüssig sicherlich nicht, aber wenn man jeden Tag immer die gleichen Meldungen sieht, die mir mitteilen, dass ein Programm korrekt lief, dann hat man nach zwei Tagen die Lust verloren. So ist mir über die Jahre sicherlich einiges durchgerutscht oder erst sehr viel später aufgefallen, was ich viel früher hätte stoppen können.

Damit ist nun Schluss, den ich habe Logwatch entdeckt. Logwatch ist ein Perl-Skript, dass die Logfiles automatisch auswertet und dem Admin eine Zusammenfassung der wichtigsten Ereignisse des Servers einmal täglich per eMail zuschickt. Und wenn bestimmte Programme nicht von Haus aus unterstützt werden, kann man Logwatch einfach erweitern. Die Programmiersprache hierfür ist egal.

Admin Rechte unter OS X Leopard bekommen

Im Hackszine den Tipp gelesen, wie man unter OS X Leopard einem Benutzer Adminrechte zuteilen kann, wenn das Admin-Passwort mal nicht zur Hand ist.

Als erstes bootet man das System in den Single User Mode. Hierfür hält man Command-S beim hochfahren gedrückt, bis man im Singe User Mode ist. Dann mountet man die Festplatten in den read-write Modus mit den folgenden zwei Kommandos:

/sbin/fsck -fy
/sbin/mount -uw /

Mit dem dscl Kommando fügt man seinen Benutzernamen der Admin Gruppe hinzu. Aber zuerst muss man den Directory Service mit folgendem Kommando starten:

launchctl load /System/Library/LaunchDaemons/com.apple.DirectoryServices.plist

Um die bereits bestehenden Benutzer in der Admin-Gruppe aufzulisten benutzt man das Kommando:

dscl . read groups/admin users

Um Schlussendlich den eigenen Benutzernamen der Admin-Gruppe hinzuzufügen, nutzt man diesen Befehl, wobei „yourusername“ durch den eigenen Benuternamen zu ersetzen ist:

dscl . append groups/admin users yourusername

Nach dem ganzen Prozedere gibt man noch reboot ein um das System neu zu starten.

Smarte Archiv Seite

Als ich im Januar 2008 von dem Blog-System Sunlog auf WordPress umstieg, gefiel mir die Archive-Seite, die WordPress mitlieferte, überhaupt nicht. Mit dem Plugin Smart Archive von Justin Blaton kam ich aber ungefähr zu dem zurück, was ich vorher hatte.

Was mir aber nie wirklich passte war, dass bei jedem Aufruf der Archiv-Seite weit über 600 Datenbankabfragen gemacht wurden. 50 Datenbankabfragen (auch Queries genannt) durch die sehr ineffektive Programmierung des Plugin. Alle weiteren kommen durch einen zwingenden Aufruf der WordPress-Funktion get_permalink().

Mir fiel keine andere Lösung ein, als das alles zu cachen. Darum habe ich auch mir auch etwas zusammenprogammiert, was jeder gerne auch nutzen kann, dem es gefällt. Mir ist erst im nachhinein aufgefallen, dass die neue Version von Smart Archive auch Caching behinhaltet. Ich finde meine Version aber smarter 😉 . Smart Archive cached in einer eigenen Textdatei. Bei mir wird nach jedem erstellen eines neuen Artikels das Archiv neu erstellt und als Post direkt in WordPress gespeichert.

Als erstes muss folgender Code in die Datei function.php in eurem Template kopiert werden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Archive Seite
function my_archive()
{
   // set locale
   setlocale(LC_ALL,'de_DE.UTF-8');
   
   global $wpdb;
    $now = gmdate("Y-m-d H:i:s",(time()+((get_settings('gmt_offset'))*3600)));  // get the current GMT date

   $allPosts = $wpdb->get_results("
       SELECT ID AS id, post_title AS title, post_name AS name, UNIX_TIMESTAMP(post_date) AS date
       FROM $wpdb->posts
       WHERE post_type = 'post'
       AND post_status = 'publish'  
       ORDER BY post_date DESC"
);
   
   $lastdate = '';
   
   foreach ($allPosts as $post) {
   
      if($lastdate != date('Ym', $post->date) ) {
         if(!empty($lastdate)) $archive .= '';
         $archive .= '<h2><a href="' . get_month_link(date('Y', $post->date), date('m', $post->date)) . '">' . strftime('%B %Y', $post->date) . '</a></h2>';
         $archive .= '<ul style="list-style: none;">';
         
         $lastdate = date('Ym', $post->date);
      }
     
      $archive .= '<li><a href="' . get_permalink($post->id) . '">' . $post->title . '</a></li>';
     
   }
   $archive .= '</ul>';
   
   $my_post = array();
   $my_post['ID'] = 171;
   $my_post['post_content'] = $archive;

   // Update the post into the database
   wp_update_post( $my_post );

}
add_action('publish_post', 'my_archive'); // generate archives after a new post

In Zeile 41 muss die Zeile muss die ID (hier 171) durch die ID des Archiv-Posts ersetzt werden. Am einfachsten ist dies herauszufinden, wenn man im Admin-Menu die Archiv Seite editiert. In der Adress-Zeile findest man die ID hinter post= .

Nun muss das Archiv Template in der Datei archives.php angepasst werden. Hierfür wird alles um wp_get_archives() und wp_list_categories() durch folgendes ersetzt:

1
2
3
   <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
      <?php the_content('<p class="serif">Weiterlesen &raquo;'); ?>
   <?php endwhile; endif; ?>

Damit das Archiv angelegt wird, muss einmal ein Beitrag geschrieben werden.