Kleine Anpassung am Design

Heute habe ich noch eine kleine Anpassung am Design vorgenommen. So hat man nun auf der Startseite, den Themen, Tags usw. jeweils auch oben die Möglichkeit zur nächsten Seite zu blättern, oder zum Archiv zu gelangen. In einem zweiten Schritt möchte ich die Links noch etwas besser machen, das heisst gleich Links zu den fünf nächsten, bzw vorherigen Seiten. Auch das Archiv sollte ich mal etwas anpassen.
http://images.t-error.ch/blog/838/seiten.jpg


Zudem habe ich noch bemerkt, dass das Design nun genau ein Jahr alt ist. Wie die Zeit doch vergeht. Aber das Design gefällt mir noch immer :)

Moblogscript in PHP

Eigentlich wollte ich ja schon seit längerem etwas über mein Moblog-Script schreiben. Eigentlich seit dem Wunsch von Znuk, aber leider ist es bisher immer beim "wollen" geblieben. Da ich nun mein Script etwas verbessert habe, greife ich die Gelegenheit gleich beim Schopf und erkläre die Funktionsweise kurz.

Funktionsweise

In der Theorie sieht das ganze sehr simpel aus. Ich mache auf meinem Handy (Samsung SGH-600E) ein Foto, und sende es per Mail an eine (geheime) Mailadresse. Auf dem Webserver wird nun alle 15 Minuten ein PHP-Script aufgerufen, welches überprüft ob in der Mailbox neue Mails sind, diese dann verarbeitet und schlussendlich einen neuen Beitrag auf meiner Homepage erstellt.

Spammails

Ein Problem an der Sache sind die Spammails. Das Problem kann man aber einfach umgehen, indem man eine Mailadresse nimmt, die nicht so schnell erraten werden kann, diese nirgens publiziert und im PHP-Script noch eine Passwortabfrage einbaut. Ich bin hier auf Nummer sicher gegangen und habe alle beiden Methoden eingesetzt, den schliesslich möchte ich keine Spammails auf meiner Homepage.

Mailaufbau

Damit das ganze mit dem Passwortschutz und der zuordnung zum richtigen Thema auch funktioniert, muss das E-Mail natürlich auch immer gleich aufgebaut werden. Bei mir sieht das nun folgendermassen aus:
passwort
Thema
Ort
Text für die Homepage
Auf der ersten Zeile steht das Passwort, welches auch als erstes geprüft wird, darauf gehe ich aber spätzer genauer ein. Darauf folgt das Thema, in welches der Aktrikel gehört. Zum Bsp. "Bike", "Diverses" usw. Da ich Moblogs ja immer von unterwegs versende ist es interessant von wo das Mail versendet wurde. Mein Handy hat noch keinen GPS Empfänger und so kann ich auch keine Koordinaten angeben, also muss ich mich auf den Ortsnamen beschränken. Aber das reicht im Normalfall bestens aus. Zum Schluss folgt der Text, welcher auf der Homepage stehen soll.
Das Problem, welches ich meistens habe, ist das Tippen auf der kleinen "Tastatur" auf dem Handy, aber für kurze Nachrichten reicht es meist und wirklich wichtig ist ja das Bild.

Das Script

Nun zum wirklich spannenden Teil dieses Beitrags. Das Script ist in PHP geschrieben und wird alle 15 Minuten aufgerufen. Wenn ein neues Mail vorhanden ist wird das Passwort geprüft und der Artikel erstellt, sofern das Passwort natürlich korrekt ist.
Die Verbindung zur Datenbank und das schreiben der Daten in die DB habe ich hier ausgelassen, da dies ja je nach Blogsoftware bzw. Tabellenstruktur variert. Das Script gibt einfach Variabeln mit dem Inhalt zurück und diese können dann nach belieben in die DB geschrieben werden.

Voraussetzungen

Damit das Script richtig funktioniert, bzw die Mails auch lesen und bearbeiten kann müssen die Imap-Funktionen von PHP Installiert sein. Sonst wird es zu kompliziert.

Ablauf

Damit man einen groben Überblick über das Script bekommt fasse ich hier den Ablauf des Scripts etwas zusammen.
  1. Überprüfen ob neue Mails vorhanden sind
  2. Passwort des Mails überprüfen
  3. Headerdaten auslesen (Betreff, Datum & Zeit)
  4. Text auslesen
  5. Attachments auslesen
  6. Text aufteilen (Thema, Ort und Text)
  7. Bilder speichern
  8. (Daten in die Datenbank schreiben)
  9. E-Mail löschen
  10. Verbindungen trennen

Code

Zuerst werden einige Konstanten definiert, die Hostname vom Mailserver, Benutzername, Passwort usw. beinhalten.
<?
// Konfiguration
define("MAIL_HOST","{mail.server.ch:143}");                // Hostname und Port vom Mailserver
define("MAIL_USER","moblog@adresse.ch");                   // Der Benutzername
define("MAIL_PASS","passwort");                            // Passwort vom Mailaccount

define("PASS","passwort");                                 // Das Passwort das im Mail stehen soll 
define("IMAGES_PATH","images/");                           // Pfad zum Bilderordner
?>



Damit die allfälligen Fehler oder Mitteilungen vom Script auch sinnvoll Protokolliert werden, habe ich eine kleine Funktion geschrieben, welche das aktuelle Datum sowie eine Fehlermeldung zurückgibt. Wenn das Script mit einem Cronjob aufgerufen wird, wird diese nachricht automatisch ins Logfile geschrieben.
<?
// kleine funktion die eine fehlermeldung mit dem aktuellen datum ausgibt
function _log($text)
{
    echo 
date("r")."    ".$text."\n";
}
?>


Nun kann auch schon die Verbindung zum Mailserver hergestellt werden. Die angaben zum Hostnamen usw, werden aus den oben definierten Konstanten gelesen. Wenn die Verbindung zum Mailserver nicht hergestellt werden kann wird eine Fehlermeldung ausgegeben und das Script abgebrochen.
<?
// verbindung zum mailserver herstellen
if(!$mail=imap_open(MAIL_HOST,MAIL_USER,MAIL_PASS))
{
    
_log("Keine Verbindung zum Mail-Server");
    exit;
}
?>


Wenn die Verbindung zum Server steht kann überprüft werden, ob neue, ungelesen Mails auf der Server sind. Ist dies nicht der Fall wird das Script abgebrochen.
<?
// ueberpruefen, ob mails vorhanden sind
$headerstrings=imap_headers($mail);
$mails=count($headerstrings);                              // Die Anzahl der neuen Mails

if($mails==0)
{
    echo 
"keine mails";
    exit;
}
_log($mails." neue E-Mails auf dem Server.");              // Nachricht ausgeben
?>


Ist bekannt ob und wieviele neue Mails vorhanden sind, gehts ans verarbeiten der Mails. Mit einer Schleife wird jedes Mail durchgegangen und überprüft.
Aus Übersichtlichkeitsgründen habe ich hier den Code in zwei Funktionen ausgelagert. Zum einen gibt es die Funktion _getData(). Diese Funktion list die Daten aus dem Mail aus und gibt sie schön sortiert in einem Array zurück. Dieser kann so aussehen:
Array
(
    [header] => Array
        (
            [date] => datum als timestamp
            [email] => mailadresse des absenders
            [name] => name des absenders
            [subject] => betreff
        )
    [text] => Inhalt des Mails (mit Passwort, Thema, Ort und Text)
    [attachment] => Array
        (
            [0] => Array
                (
                    [filename] => Dateiname des ersten Anhangs
                    [content] => Inhalt des ersten Anhangs
                )
            [1] => Array
                (
                    [filename] => Dateiname des zweiten Anhangs
                    [content] => Inhalt des zweiten Anhangs
                )
        )
)


Die zweite Funktion heisst _getMetaData() und sie unterteilt den Inhalt der Nachricht, überprüft das Passwort und gibt die verschiedenen Angaben (Thema, Ort und Text) geordnet zurück.

Nun aber erstmal der Code, der die Funktionen aufruft:
<?
// mail fuer mail durchgehen, daten auslesen, passwort check machen, daten in die db schreiben und das mail loeschen
foreach($headerstrings as $headerstring)
{
    
preg_match("/[0-9]/",$headerstring,$number);           // Numer des E-Mails auslesen

    
$mailData=_getData($headerstring,$number);             // Inhalt aus dem Mail auslesen

    
$meta=_getMetaData($mailData['text']);                 // Inhalt aufteilen

    
if($meta===FALSE)                                      // wenn $meta FALSE ist, stimmt das Passwort nicht
    
{
        
log("falsches pw");
        continue;
    }

    
$mailData['text']=$meta[0];                            // Text des E-Mails
    
$mailData['meta']=$meta[1];                            // Meta Daten des E-Mails (Thema und Ort)

    
foreach($mailData['attachment'] AS $attachment)        // alle attachments durchgehen
    
{
        
$filename=$attachment['filename'];                 // dateiname auslesen

        
$fp=fOpen(IMAGES_PATH.$filename,"w+");             // das attachment abspeichern
        
fWrite($fp,$attachment['content']);
        
fClose($fp);
    }

    
imap_delete($mail,$number[0]);                         // Mail l&ouml;schen
}
?>


Nun zu den Funktionen. Als erstes _getData(), die den Inhalt der Mails ausliest und zurückgibt. Hierzu muss ich vieleicht noch sagen, dass jedes Gerät die Mails etwas anders gestaltet und es so zu Problemen bei dieser Funktion kommen könnte. Mit meinem Handy funktioniert es wunderbar, aber bei anderen Geräten muss man vieleicht die eine oder andere Anpassung vornehmen.
<?
// liest die daten aus einem mail aus, verarbeitet sie und gibt sie als array zur&uuml;ck
function _getData($headerstring,$number)
{
    global 
$mail;
    
$mailData=array();                                     // Array, in den schlussendlich die
                                                           // Daten geschrieben werden

    
$header=imap_fetchheader($mail,$number[0]);            // mailheader auslesen

    
preg_match("/Date: (.*)?[\+|-]/",$header,$date);       // datum des mails auselesen
    
$date=htmlEntities($date[1]);
    
$mailData['header']['date']=strToTime($date);

    
$headerinfo=imap_headerinfo($mail,$number[0],256,256); // liest die headerinformationen aus

    
$mailData['header']['email']=$headerinfo->from[0]->mailbox."@".$headerinfo->from[0]->host// mailadresse des absenders auslesen

    
$decode=imap_mime_header_decode($headerinfo->from[0]->personal); // name des absenders auslesen
    
$mailData['header']['name']=$decode[0]->text;

    
$decode=imap_mime_header_decode($headerinfo->fetchsubject); // betreff auslesen
    
$mailData['header']['subject']=$decode[0]->text;


    
// inhalt der mailnachricht auslesen
    
$struct=imap_fetchstructure($mail,$number[0]);
    
    
// mails mit attachments werden immer als multipart, also mail mit verschieden teile versendet
    // sollte eine mail ohne attachment und mit nur als plaintext versendet worden sein, wird nur der text ausgelesen 
    
if(!empty($struct->parts))
    {
        
// durch alle teile gehen
        
for($i=0;$i<count($struct->parts);$i++)
        {
            
$part=$struct->parts[$i];

            
$msg=imap_fetchbody($mail,$number[0],$i+1);    // inhalt des teils

            // wenn der teil ein attachment, bild und jpg ist.
            
if ($part->disposition==ATTACHMENT OR $part->type==TYPEIMAGE OR ($part->type==TYPEAPPLICATION AND $part->subtype!="SMIL"))
            {
                if(
$part->subtype=="JPEG" OR $part->subtype=="JPG" OR $part->subtype=="OCTET-STREAM")
                {
                    
$attachment=array();

                    
// daten in einen array schreiben.
                    
$attachment['filename']=$part->dparameters[0];
                    
$attachment['filename']=$attachment['filename']->value;
                    
$attachment['content']=base64_decode($msg);

                    
$mailData['attachment'][]=$attachment;
                    unSet(
$attachment);
                }
            }

            
// wenn der teil nur text ist
            
elseif(($part->type==TYPETEXT OR $part->type==TYPEMULTIPART OR $part->disposition==INLINE))
            {
                
$mailData['text']=base64_decode($msg);
            }
        }
    }
    else
    {
        
// wenn das mail als plaintext versendet wurde
        
$mailData['text']=imap_body($mail,$number[0]);
    }

    return 
$mailData;                                      // daten zur&uuml;ckgeben
}
?>


Und nun noch zur zweiten Funktion, welche den Text der Nachricht verarbeitet und das Passwort überprüft.
<?
function _getMetaData($text)
{
    
$text=explode("\n",$text);                             // den text aufteilen

    
if(trim($text[0])!=PASS)                               // ueberprufen, ob die erste zeile dem passwort entspricht
    
{
        return 
FALSE;
    }
    unSet(
$text[0]);

    
$metaData['topic']=trim($text[1]);                     // die zweite zeile als thema (topic) abspeichern
    
unSet($text[1]);

    
$metaData['location']=trim($text[2]);                  // die dritte zeile als ort (location) abspeichern
    
unSet($text[2]);

    
$text=implode("\n",$text);                             // den rest zusammenfuegen und als text speichern

    
return array($text,$metaData);                         // den array zurueckgeben
}
?>


Zum Schluss müssen die gelöschten Mails mit imap_expunge() noch definitiv gelöscht und die Verbindung zum Server getrennt werden.
<? 
// mailbox leeren und verbindung zum server trennen
imap_expunge($mail);
imap_close($mail);
?>


Das ist auch schon der ganze Zauber. Wie schon gesagt müssen die Daten noch in die DB geschrieben werden und idealerweise generiert man für die Bilder auch noch ein Thumbnail, aber das sollte ja kein grosses Problem darstellen.
Wer sich das Script nicht aus den einzelnen Teilen zusammensetzen will, kann es sich hier herunterladen.

Kleine Anpassungen auf dem Blog

Heute habe ich mal wieder einige kleine Verbesserungen an meiner Homepage vorgenommen. Das Problem war, dass viele Suchmaschinen auf der 404 Fehlerseite gelandet sind, weil sie bei den Urls den Slash am Ende nicht angegeben hatten.
Das heisst sie hatten die Seite http://blog.t-error.ch/article/797/herbstlich angefragt, anstelle der Seite http://blog.t-error.ch/article/797/herbstlich/ (Man beachte den Slash am Schluss). Nun habe ich meine .htaccess Datei angepasst, dass die Seite nun wie folgt aufgerufen werden kann:
  • http://blog.t-error.ch/article/797/herbstlich/
  • http://blog.t-error.ch/article/797/herbstlich
  • http://blog.t-error.ch/article/797/
  • http://blog.t-error.ch/article/797
So sollten die Suchmaschinen auch die Seiten finden, die sie erwartet hatten und ich denke auch der eine oder andere Besucher wird so das gewünschte finden.

Dasselbe habe ich auch bei den Themen (http://blog.t-error.ch/topic/1/bike), den Tags (http://blog.t-error.ch/tag/bike) und bei fast allen anderen Seiten so gemacht.

Moblogtest

Da ich gerade am Moblogscript am Schrauben bin, gibts nun einen kleinem Test. Wenn alles funktioniert wie es soll, dann werde ich morgen noch etwas genaueres dazu schreiben.


Unter den Top 50 der Schweizer Blogs

Als ich heute etwas durch das Internet gestreift bin, habe ich mir mal wieder die neuen Slug Blogcharts angesehen. Im Gegensatz zu Technorati oder den Blogug Top 100, wertet Slug aus, wie oft die Beiträge eines Blogs gelesen werden und nicht, wie oft er verlinkt wurde.
Zu meiner Überraschung konnte ich feststellen, dass es mein Blog in die Top-50 der Schweizer Blogs geschafft hat. Mit dem 45. Platz zwar weit unten auf der Liste, aber ich bin drauf. Das freut mich natürlich ausserordentlich. Danke an alle fleissigen Leser dieses Blogs.
http://images.t-error.ch/blog/677/slug.jpg


Die nächste Aktualisierung steht am Montag um 8:00 an, mal sehen, wo ich dann bin.

Zweiter Geburtstag!

http://images.t-error.ch/blog/650/birthday.jpg
Fast hätte ich es verpasst. Genau heute vor zwei Jahren habe ich hier im Blog den ersten Beitrag geschrieben. Seitdem hat sich hier vieles getan. Ich habe die RS abgeschlossen und danach einen neuen Job angetreten. Hier im Blog habe ich fleissig Beiträge geschrieben und der Seite auch ein neues Design verpasst.

Statistik

Da dies ein geeigneter Zeitpunkt ist, um etwas zurück zu blicken, möchte ich hier eine kleine Statistik veröffentlichen.

Beiträge: 637 (0.871 pro Tag)
Kommentare: 593 (0.811 pro Tag)
Durchschnittlich 236 Pageviews und 335 Hits pro Tag.

Auch die Statistik von Google Analytics die seit Anfangs 07 mitläuft zeit einen klaren Trend an. Dass es in der letzten Zeit etwas abgeflacht ist, verwundert nicht, aber es geht immer noch leicht nach oben. Und das ist doch schön.
http://images.t-error.ch/blog/650/analytics.jpg

Danke!

An dieser Stelle möchte ich noch Danke sagen. Danke allen Besuchern die absichtlich oder per Zufall auf meiner Seite gelandet sind. Besonderen dank gilt auch jenen Besuchern die hier den einen oder anderen Kommentar hinterlassen haben. Denn Kommentare sind das Brot eines Bloggers und zeigen auch, dass man das alles doch nicht nur für sich selber macht.
Besonders möchte ich meinen Stammbesuchern und Kommentieren danken:


Nun freue ich mich auf viele Jahre mit diesem Blog und hoffentlich auch noch mit dir, lieber Besucher :)

Trackbackspam mit PHP verhindern

Im September des letzten Jahres habe ich bereits einmal über eine Möglichkeit zum erkennen von Trackbackspam geschrieben. Diese Funktion habe ich nun noch etwas verfeinert und einen zusätzlichen Check eingebaut.

Damit ein Trackback nicht als Spam identifiziert wird, müssen zwei Bedingungen erfüllt sein.

Zum einen muss die Seite die den Trackback sendet, einen Link auf meine Seite haben. Klingt logisch, denn warum sonst sollte man einen Trackback versenden. Das kommt immer mit einem Link zusammen. Nur durch dieses Kriterium filtert man schon einen Grossteil von dem Spamnachrichten, denn die Webseiten der Spamer haben selten einen Backlink auf die eigene Seite.

Die andere Bedingung ist, dass die IP Adresse der Webseite, die angegeben wird, dieselbe sein muss wie die des Servers der den Trackback sendet. Erhalte ich also einen Trackback mit der URL test.ch muss der Trackback auch von dem Server gesendet werden, auf dem test.ch liegt. Mal abgesehen von NAT.

Um zu überprüfen, ob die Webseite einen Link auf die eigene Seite gesetzt hat, muss man den Inhalt der anderen Webseite auslesen und diesen nach einem Link absuchen. In dieser Funktion suche ich nur nach dem String t-error.ch und das erkennt auch die meisten Spamnachrichten.
Der Vergleich der IP-Adresse ist auch relativ simpel. Mit der Funktion getHostbyName() löst man die IP Adresse der URL auf und die IP Adresse des Servers der den Trackback sendet, kann man man mit $_SERVER['REMOTE_ADDR'] auslesen.

Und so sieht die Funktion dann aus.
<?
function trackbackSpamCheck($url)
{
    
// trackback prinzipiell als spam definieren
    
$spam=TRUE;
    
    
// URL in einzelteile zerlegen
    
$url=parse_url(trim(addSlashes($url)));
    
    
// verbindung zum host auf port 80 herstellen
    
$fp=fSockOpen($url['host'],80,$errno,$errstr,30);
    
    
// ueberpruefen, ob die verbindung steht
    
if($fp)
    {
        
// pfad zur zieldatei auslesen
        
$path=$url['path'];
        if(isSet(
$url['query']))
        {
            
$path.="?".$url['query'];
        }

        
// wenn der pfad leer ist '/' verwenden
        
if($path=="")
        {
            
$path="/";
        }

        
// get request an den server senden
        
$req ="GET ".$path." HTTP/1.0\r\n";
        
$req.="Host: ".$url['host']."\r\n\r\n";
        
fPuts($fp,$req);

        
// http headers auslesen
        
while(!feof($fp))
        {
            
$data=fgets($fp,1024);
            if(
trim($data)=="")
            {
                break;
            }
        }

        
// daten auslesen
        
while(!feof($fp))
        {
            
$data=fgets($fp,1024);
            
            
// ueberpruefen, ob t-error.ch darin vorkommt
            // dies kann man noch verfeinern,
            // in dem man nach einem link sucht
            
if(eregi("t-error.ch",$data))
            {
                
$spam=FALSE;
                break;
            }
        }
        
        
// verbindung zum server trennne
        
fclose($fp);
    }

    
// ip adresse des hosts auslesen,
    // auf dem die im trackback angegebene
    // webseite liegt
    
$ip=@getHostByName($url['host']);

    
// ueberpruefen, ob die ip adresse
    // aufgeloest werden konnte.
    // trackback sonst als spam definieren
    
if($ip==$url['host'])
    {
        
$spam=TRUE;
    }
    else
    {
        
// ip adresse der webseite
        // mit der ip des hosts,
        // welcher den trackback gesendet
        // hat vergleichen
        
if($_SERVER['REMOTE_ADDR']!=$ip)
        {
            
$spam=TRUE;
        }
    }
    
    
// spam status zurueckgeben    
    
return $spam;
}
?>

Ziele für das Jahr 2008

Nachdem ich bereits einige Gedanken über das schon fast vergangene Jahr 2007 verloren habe, möchte ich hier nun auch etwas über das kommende Jahr schreiben.
Ich bin nicht der Typ, der sich vornimmt, im nächsten Jahr mit dem Rauchen aufzuhören (ok, ich rauche ja auch nicht), fünf Kilo abzunehmen, oder ähnliches zu machen. Und selbst wenn, das würde ich auch nicht hier rein schreiben. Ich habe mir aber trotzdem einige Dinge, die ich auch hier im Blog behandle vorgenommen. Dies schreibe ich hier hauptsächlich auf, damit ich zu einem späteren Zeitpunkt mal wieder hier rein schauen kann und so sehe, ob ich schon ein Ziel erreicht habe.

Sport

Biken ist und bleibt wohl mein Lieblings-Sport, aber in Zukunft möchte ich mich doch noch nach einem Alternativ-Sport umsehen. Zum einen ist das Biken ja eigentlich nur ein Trainign für die Beine und zum anderen macht Biken bei schlechtem Wetter doch nicht so viel Spass. Eine alternative Sportart wäre als nicht schlecht.

Biken

Natürlich gibt es hier einige Ziele. Zum einen gilt es die 6000 Km Grenze dieses Jahr zu knacken. Die 5000 er Grenze habe ich dieses Jahr ja schon erreicht und da ich das nächste Jahr noch etwas öfter mit dem Bike zur Arbeit fahren möchte, sollte das ein realistisches Ziel sein. Das andere Ziel ist stark damit verbunden, denn ich möchte in jeder Woche 1-2 mal pro Woche mit dem Bike zur Arbeit fahren. Im Sommer sollte es zwischendurch auch für drei mal in der Woche reichen.
Zudem möchte ich auch noch einige neue und schon bekannte Bikegebiete besuchen. Neben der Lenzerheide, wo ich in diesem Jahr schon war, möchte ich auch in Vals, Savognin und dem Tessin noch Biken gehen. Mal sehen, ob das klappt.

Beruf

Auch im Beruf habe ich mir einige Ziele gesteckt, die meisten möchte ich hier aber nicht niederschreiben. Was ich hier aber erwähnen möchte, ist dass ich den MCSA Kurs in Frühjahr abschliessen möchte. Je nach der Entwicklung im Beruf und im Privaten sollte es gegen Ende 08 noch für den MCSE reichen.

BLOG

Auch für meine Homepage habe ich mir einige Ziele gesetzt. Zum einen möchte ich mit dem Bloggen so weitermachen wie bisher. Das ganze stimmt für mich so, macht Spass und bringt auch einen gewissen Nutzen :)
In Zukunft möchte ich aber vermehrt noch über die Fotografie schreiben. Dank der EOS 400D sollte das in der nächsten Zeit auch kein allzu grosses Problem sein.

Mein Jahr 2007

An dieser Stelle möchte ich ein persönliches Fazit vom Jahr 2007 ziehen. Allerdings werde ich hier nur über Themen schreiben, die in meinem Blog auch vorkommen, natürlich gibt es in meinem Leben auch noch andere Dinge als Biken, Fotografieren und Arbeiten, aber diese Dinge schaffen es selten in mein Blog.

Sport

Sportlich war ich dieses Jahr einiges Aktiver als das 2006, was wohl auch daran liegt, dass ich im 06 fast die ganze Zeit im Militär war. Begonnen hat das Jahr mit Skiferien oder kurz-Trips in die Höhe.
Zur Erinnerung noch ein Foto:


Vor allem beim Biken hat sich viel verändert. Zum einen bin ich dieses Jahr relativ oft mit dem Bike zur Arbeit gefahren, was mir doch noch einige KM eingebracht hat.
Zum anderen gab es mit dem BMC Superstroke ein neues Bike, welches wirklich eine schöne Spassmaschine ist. Ich bereue den Kauf kein bisschen. Richtig testen konnte ich das Bike in den Bikeferien in der Lenzerheide bei schönstem Wetter. So sollten alle Bikeferien sein. Schönes Wetter und angenehme Temperaturen.


Und zudem knackte ich dieses Jahr nur mit Biken die 5000 KM Grenze. Das ist schon etwas mehr als ich erwartet hätte. Besonders die Fahrten zur Arbeiten haben einiges dazu beigetragen.

Fotografie

Eigentlich hatte ich als ich mit dem bloggen begann vor, mehr über Fotografie zu schreiben. Leider ist dieses Thema etwas zu kurz gekommen. Aber es hat sich doch etwas getan. So hatte ich meine Powershot S3 doch auf jeder Biketour dabei und damit in diesem Jahr über 10'000 Fotos geschossen. Einige besser, einige schlechter. An Fotos mangelte es im Blog kaum, die Beiträge mit dem Thema Fotografie waren etwas (zu) selten.
Der Höhepunkt im Bezug zur Fotografie war in diesem Jahr sicher die Anschaffung der EOS 400D. Ich denke, dadurch wird es in Zukunft einige Beiträge mehr über Fotografie geben.

Militär

Meine RS hatte ich ja schon das letzte Jahr bereits abgeschlossen. Dieses Jahr wurde ich von den Grünen allerdings nicht verschont und so musste ich im Februar schon mal an eine kurze FIS HE Ausbildung in Thun. Im Mai gings dann noch in den regulären WK nach Bern, wo wir uns auf die Euro 08 vorbereitete.

Beruf

Über meinen Beruf habe ich hier noch nie so viel geschrieben. Die Beiträge im Thema Job handeln hauptsächlich von IT Sachen, die mir während der Arbeit so über den Weg laufen. Erwähnenswert ist da aber noch der MCSA Kurs den ich im Oktober begonnen habe. So kann ich meine Windows Kenntnisse etwas ausbauen. Einige Dinge konnte ich im Geschäft bereits anwenden, es hat sich also schon gelohnt.

BLOG

Hmm ja, was soll ich das sagen schreiben. Nachdem ich vor etwas mehr als einem Jahr mit dem Militär fertig war, hat sich die Beitragskadenz recht erhöht und nun bin ich wohl so etwa bei einem mehr oder weniger sinnvollen Beitrag pro Tag. Das Hauptthema hat stark von der Armee zum Biken gewechselt. Eine Veränderung, die mir gut gefällt, Biken macht auch etwas mehr Spass. So habe ich bisher jede Biketour in diesem Jahr hier niedergeschrieben, was ich schon oft praktisch fand. So habe ich mein Biketouren Archiv online verfügbar.
Auch sonst konnte ich das Blog schon oft als Nachschlagewerk benutzen. Besonders bei IT Problemen die ich schon mal hatte und hier aufgeschrieben hatte, war es von Vorteil.
Zu erwähnen gibt es vielleicht noch das neue Design, welches ich im Oktober aufgeschaltet habe. Mir gefällt es auf jeden Fall noch immer.

So.. ich glaube das wärs. Ich hoffe mal, dass ich nichts vergessen habe..

404 Fehler Seite angepasst

Nun habe ich mal wieder meine 404, 403 und 401 Fehlerseiten an das neue Design angepasst. Nachdem ich die Seiten im Juli anlässlich einer Blogparade neu gestaltet hatte, habe ich es versäumt die Seiten an das neue Design anzupassen. So fristeten sie ihr Dasein seit der Umstellung auf das neue Design immer noch mit Fieldsets, wie es im alten Design halt so war.

Die Seiten passen nun wieder zum neuen Design, ich hoffe aber trotzdem, dass nicht allzuviele Benutzer diese Seiten zu Gesicht kriegen.
http://images.t-error.ch/blog/555/404_seite.jpg