Anfang Juli habe ich im Rah­men des Mobi­lers Pro­jekts ein neues Tele­fon bekom­men: das Samsung Galaxy S. Bis dahin habe ich immer etwas nei­disch Rich­tung iPhone geschaut. Seit­dem ich das Galaxy S habe weiß ich aber, wie gut sich auch Android Geräte anfüh­len können.

Vor­ne­weg: das Galaxy S ist toll ver­ar­bei­tet und extrem leicht. Das wird vor allem dadurch erreicht, das viel Plas­tik ver­ar­bei­tet wird. Dadurch wirkt es etwas weni­ger wer­tig als ein iPhone aber das wirk­lich geringe Gewicht macht diese Ent­schei­dung defi­ni­tiv wett. Das Dis­play ist rich­tig toll, hat eine auto­ma­ti­sche Hel­lig­keits­an­pas­sung und ist selbst in glei­ßen­dem Son­nen­licht pro­blem­los ables­bar. Auch die Geschwin­dig­keit von dem Gerät ist wirk­lich gut.

Samsung hat dem Galaxy S eine eigene Home-Oberfläche spen­diert. Das Touch­Viz Inter­face ist zwar schick, gefällt mir per­sön­lich aber nicht so toll und ich hab’s dann rela­tiv schnell durch Laun­cher Pro ersetzt. Was mich aber bei der Android-Anpassung von Samsung echt stört, ist dass einige Ein­stel­lungs­mög­lich­kei­ten weg­ge­fal­len sind. So kann man bei­spiels­weise beim Kalen­der den Benach­rich­ti­gungs­sound nicht ver­än­dern. Ich nehme den Ton lei­der nicht so deut­lich wahr.

Damit wären wir aber mal wie­der bei einem — aus mei­ner Sicht — gro­ßen Pro­blem bei Android. Viele Apps sind immer noch nicht mit ähnli­cher Liebe zum Detail gestal­tet wie ent­spre­chende Apps auf dem iPhone. Es gibt natür­lich auch einige Aus­nah­men die ein rich­tig gutes Inter­face Design auf­wei­sen. Der Audio Player Mix­Zing, der Todo Mana­ger Astrid oder der Twit­ter­cli­ent twicca sind da in jedem Fall zu nennen.

Ges­tern habe ich mir zu mei­nem Galaxy S dann ein Blue­tooth Ste­reo Head­set gekauft. Die Instal­la­tion war echt ein­fach und läuft super mit dem Telefon.

Das Tele­fon ist in jedem Fall eine Emp­feh­lung wert und fühlt sich rich­tig gut an. Es ist defi­ni­tiv eine über­le­gens­werte Alter­na­tive zum iPhone.

 
 

Ich benutze auf mei­nem Blog Google Ana­lytics zum Web­tracking. Nur ist der Ein­satz von Google Ana­lytics bis vor kur­zem nicht mit den Vor­ga­ben des Düs­sel­dor­fer Krei­ses ver­ein­bar gewesen.

Als Lösung habe ich bei mir ein OptOut aus dem Web­tracking mit jQuery rea­li­siert. Google hat zudem ein AddOn für die meis­ten Brow­ser ent­wi­ckelt, das Ana­lytics grund­sätz­lich deaktiviert.

Aber vor ein paar Wochen hat Google nach­ge­bes­sert und Google Ana­lytics den Vor­ga­ben ange­passt, und die Anony­mi­sie­rung der IP–Adres­sen ermög­licht. Damit erfüllt Ana­lytics die­ses Kri­te­rium und ist in Deutsch­land wohl pro­blem­los nutzbar.

Um Google Ana­lytics ein­zu­bin­den, ver­wende ich das jQuery Plu­gIn GeekGA von Wil­lem van Zyl. Ich habe die Ver­sion 1.1 so erwei­tert, dass es jetzt mög­lich ist, das Tracking zu anony­mi­sie­ren. Per Default ist die Anony­mi­sie­rung aktiv.

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
 * jQuery plugin for Google Analytics
 *
 * Version 1.0
 *
 * This plugin extends jQuery with two new functions:
 *
 *   - $.GATrackPage(options)
 *       Track a pageview of the current page.
 *       options: account_id -> Your google Analytics Account
 *                anonymize  -> Flag to enable anonymous stats, defaults true
 *
 *   - $.GATrackEvent(category, action, label, value)
 *       Track an event with a category, action, label and value.
 *
 *   - $.GATrackPageview (page)
 *       Track a pageview of page.
 *
 *
 * This code is in the public domain.
 *
 * This jQuery plugin is based on GeekGA 1.1 by
 *
 * Willem van Zyl
 * willem@geekology.co.za
 * http://www.geekology.co.za/blog/#
 *
 * Fork by
 * Martin Gude
 * http://onygo.org
 */
 
(function($){
  var pageTracker;
 
  $.GATrackPage=function(options){
    var host       = (("https:"==document.location.protocol)?"https://ssl.":"http://www.");
    var src        = host+'google-analytics.com/ga.js';
    var account_id = options["account_id"];
    var anonymize  = (options["anonymize"] == undefined) || options["anonymize"];
    $.ajax({
      type:'GET',
      url:src,
      success:function(){
        pageTracker=_gat._createTracker(account_id);
        if (anonymize) {
          _gat._anonymizeIp();
        }
        pageTracker._trackPageview();
      },
      error:function(){
        throw"Unable to load ga.js; _gat has not been defined.";
      },
      dataType:'script',
      cache:true
    });
  };
 
  $.GATrackEvent=function(category,action,label,value){
    if(typeof pageTracker!=undefined){
      pageTracker._trackEvent(category,action,label,value);
    }else{
      throw"Unable to track event; pageTracker has not been defined";
    }
  };
 
  $.GATrackPageview=function(page){
    if(typeof pageTracker!=undefined){
      pageTracker._trackPageview(page);
    }else{
      throw"Unable to track event; pageTracker has not been defined";
    }
  };
})(jQuery);

Das Skript kann dann in $(document).ready fol­gen­der­ma­ßen auf­ge­ru­fen werden:

1
$.GATrackPage({account_id:'UA-000000-0', anonymize:true});

Die Account ID (UA-000000-0) muss natür­lich durch die ent­spre­chende ID ersetzt werden.

Als nächs­ter Schritt muss noch die Daten­schutz­er­klä­rung ange­passt wer­den. Ein Vor­schlag hier­für fin­det sich bei der Grün­der­szene.

 
 
11. Jul. 2010

Geschwin­dig­keit einer Web­site ist ein wich­ti­ger Fak­tor für die User Expe­ri­ence einer Web­site. Und seit Anfang des Jah­res natür­lich auch ein wich­ti­ger Fak­tor für das Google Ran­king einer Web­site.

Word­Press ist Out-of-the-box nicht unbe­dingt ein Per­for­mance Biest. Aber mit ein wenig Tuning ist das schon recht gut hinzukriegen.

Fol­gende Auf­ga­ben sind bei der Opti­mie­rung zu erledigen:

  • Caching der gene­rier­ten Word­Press Seiten
  • Zusam­men­fas­sen von Java­script und CSS Dateien in jeweils eine Datei
  • Akti­vie­rung des Cachings von sta­ti­schen Dateien

Die ers­ten bei­den Auf­ga­ben habe ich mit­hilfe von zwei Word­Press Plugins rea­li­siert: WP Super Cache und WP Minify. Die dritte Auf­gabe lässt sich auf einem Shared Hos­ting Ser­ver mit Hilfe von .htac­cess realisieren.

Über WP Super Cache habe ich ja bereits geschrie­ben, aller­dings ist jetzt eine neue Kon­fi­gu­ra­ti­ons­mög­lich­keit hin­zu­ge­kom­men. Seit neu­es­tem kann man auto­ma­tisch für alle Word­Press Sei­ten sta­ti­sche Abbil­der der Seite im Vor­aus gene­rie­ren. Ich habe es so kon­fi­gu­riert, dass die Caches auto­ma­tisch alle zwei Stun­den neu gene­riert werden.

WP Minify fasst alle in einem Tem­plate vor­han­de­nen CSS und Java­script Files auto­ma­tisch zusam­men. Das Plu­gin musste ich nur instal­lie­ren und schon funk­tio­nierte es einwandfrei.

Die letzte Auf­gabe, das Caching von sta­ti­schen Dateien, lässt sich durch ein­fa­ches Ein­fü­gen von fol­gen­dem Code in die .htac­cess Datei akti­vie­ren. Die Dateien wer­den für zwei Monate gecacht, das lässt sich aber natür­lich anpassen.

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
# Expire headers 5184000 Sekunden = 2 Monate
<ifmodule mod_expires.c>
ExpiresActive On
ExpiresByType image/x-icon "access plus 5184000 seconds"
ExpiresByType image/gif "access plus 5184000 seconds"
ExpiresByType image/jpg "access plus 5184000 seconds"
ExpiresByType image/png "access plus 5184000 seconds"
ExpiresByType text/css "access plus 5184000 seconds"
ExpiresByType text/javascript "access plus 5184000 seconds"
ExpiresByType application/javascript "access plus 5184000 seconds"
ExpiresByType application/x-javascript "access plus 5184000 seconds"
</ifmodule>
 
# BEGIN Cache-Control Headers
<ifmodule mod_headers.c>
<filesmatch "\\.(ico|jpe?g|png|gif|swf)$">
Header set Cache-Control "max-age=5184000, public"
</filesmatch>
<filesmatch "\\.(css)$">
Header set Cache-Control "max-age=5184000, private"
</filesmatch>
<filesmatch "\\.(js)$">
Header set Cache-Control "max-age=216000, private"
</filesmatch>
</ifmodule>
 
# Turn ETags Off
<ifmodule mod_headers.c>
Header unset ETag
</ifmodule>
FileETag None

Durch diese Maß­nah­men hat sich die Per­for­mance mei­nes Blogs im Ver­gleich zu vor­her deut­lich gesteigert.

 
 
8. Jun. 2010

Ich bin ein Libe­ra­ler. Keine Par­tei steht mir vom Grund­ge­dan­ken so nah, wie die FDP. Ich hab in dem Ver­ein mit­ge­mischt. Ich war Kreis­vor­sit­zen­der der Jun­gen Libe­ra­len im Ober­ber­gi­schen. Aber wie sich die FDP — oder bes­ser gesagt deren (Noch-) Bun­des­vor­sit­zen­der und Bun­des­au­ßen­mi­nis­ter — gerade posi­tio­niert, geht abso­lut gar nicht.

Die FDP ist gerade dabei, wie­der zur Par­tei der Bes­ser­ver­die­nen­den zu wer­den. Ein Image gegen dass ich lange ange­ar­bei­tet habe und das so nicht ganz zutrifft. Johan­nes Vogel, bis vor Kur­zem Bun­des­vor­sit­zen­der der Julis und — wäh­rend mei­ner Amts­zeit im Ober­ber­gi­schen — Kreis­vor­sit­zen­der der Julis im Rheinisch-Bergischen Kreis, hagt letz­tes Wochen­ende bei West­pol einen sehr tol­len Satz gesagt: »Wir sind die Par­tei der Frei­heit, nicht der Frei­be­träge.« Ein Satz den ich einem Guido Wes­ter­welle oder einem Rai­ner Brü­derle nie­mals zutrauen würde.

Sicher ist Wirt­schafts­kom­pe­tenz wich­tig, aber zur Wirt­schafts­kom­pe­tenz gehört auch einen sozia­len Aus­gleich zu schaf­fen. Nicht dass wir uns falsch ver­ste­hen, ich will keine Umver­tei­lung von oben nach unten. Und ja wir müs­sen spa­ren. Aber warum spa­ren wir nicht dort wo es weni­ger weh tut als beim Kin­der­geld für Hartz IV Emp­fän­ger? Ich ver­steh lei­der zu wenig von Wirt­schafts– und Steu­er­po­li­tik, dass ich hier einen ver­nünf­ti­gen Vor­schlag machen könnte, aber nehmt lie­ber erst­mal mir etwas weg, bevor ihr ans Kin­der­geld geht.

Die Wei­ge­rung der FDP, in Rich­tung einer Ampel­ko­ali­tion zu gehen und nur mit der CDU reden zu wol­len, stört mich gewal­tig. Diese Ver­wei­ge­rungs­hal­tung zur gemein­sa­men Gestal­tung mit SPD und Grü­nen geht gar nicht. Dadurch würde die große Koali­tion und damit die schlech­teste aller Alter­na­ti­ven zur ein­zig ver­blei­ben­den Mög­lich­keit. Ich per­sön­lich sehe ja schon immer mehr Schnitt­men­gen zwi­schen FDP und Grü­nen als mit der CDU. Aber immer­hin hat der NRW Lan­des­vor­sit­zende Andreas Pink­wart jetzt doch Son­die­rungs­ge­sprä­che mit Roten und Grü­nen — vor allem gegen Ger­hard Papke — durchgesetzt.

Auch die vor­schnelle Fest­le­gung auf Chris­tian Wulff als neuem Bun­des­prä­si­den­ten miss­fällt mir deut­lich. Die Kanz­le­rin hat Füh­rungs­stärke bewie­sen, hat gezeigt das auch Wes­ter­welle ihr nicht gewach­sen ist und einen CDU–Sol­da­ten als Kan­di­da­ten durch­ge­setzt. Joa­chim Gauck wäre — vor allem auf­grund sei­ner bei der Ver­gan­gen­heits­be­wäl­ti­gung der DDR geleis­te­ten Arbeit — der weit­aus bes­sere Prä­si­dent. Hier macht mir beson­ders große Hoff­nung, dass auch einige der ost­deut­schen Lan­des­ver­bände der FDP sich eher für Gauck posi­tio­nie­ren. Naja, und recht lus­tig finde ich auch, dass einige der Admi­nis­tra­to­ren der Face­book Gruppe Joa­chim Gauck als Bun­des­prä­si­dent aus dem Umfeld der Julis stammen.

Nicht das die FDP keine guten Leute hat, sie ste­hen nur lei­der noch hin­ter der »Licht­ge­stalt« Guido Wes­ter­welle in der zwei­ten Reihe. Ein Par­tei­vor­sit­zen­der Chris­tian Lind­ner oder Phil­ipp Rös­ler kön­nen der Par­tei nur gut tun. Und natür­lich wäre Johan­nes ein guter Nach­fol­ger für Chris­tian als Generalsekretär.

Unter Wes­ter­welle hat sich die FDP zum Wurm­fort­satz der Union ent­wi­ckelt. Aber sie kann mehr. Sie muss mehr können.

 

 
 
neuere Einträge
 
Creative Commons-Lizenz BY-NC-SA 3.0 DE