<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bieh.de</title>
	<atom:link href="http://www.bieh.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bieh.de</link>
	<description></description>
	<lastBuildDate>Fri, 13 Nov 2009 15:42:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Websitestatistik und Zugriffsanalyse mit Mint</title>
		<link>http://www.bieh.de/2009/08/websitestatistik-und-zugriffsanalyse-mit-mint/</link>
		<comments>http://www.bieh.de/2009/08/websitestatistik-und-zugriffsanalyse-mit-mint/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 14:05:54 +0000</pubDate>
		<dc:creator>Mario</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Statistik]]></category>
		<category><![CDATA[Website]]></category>

		<guid isPermaLink="false">http://www.bieh.de/?p=57</guid>
		<description><![CDATA[Da ein erfolgreicher Webauftritt immer wieder dynamisch an seine Leser angepasst werden sollte, ist es wichtig diesen auch genau zu kennen]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-77" title="Mint1" src="http://www.bieh.de/data/2009/08/Mint1-300x270.png" alt="Mint1" width="300" height="270" />Dieses Wissen wird zum einem natürlich über die direkten Feedback-Kanäle wie E-Mail oder Twitter erreicht. Aber auch über die Auswertung der Besuchsdaten kann man eine Menge über sein Publikum erfahren. Das Internet bietet dafür eine Vielzahl von unterschiedlichen Tools. Da sind zum selbstverständlich die Großen zu nennen wie <a href="http://www.google.com/intl/de/analytics/" target="_blank">Google Analytics</a>, <a href="http://web.analytics.yahoo.com/" target="_blank">Yahoo! Web Analytics</a> oder <a href="http://awstats.sourceforge.net/" target="_blank">AWStats</a>. Aber auch kleine und eher unbekanntere Lösungen können eine Hilfe bei der Analyse und Auswertung von Websitezugriffen sein. Und eins genau davon ist <a href="http://haveamint.com/" target="_blank">Mint</a>. Wobei dessen Fokus eher bei aktuellen Daten als auf langfristigen Auswertungen liegt.</p>
<h3>Installation</h3>
<p>Mint wird, im Gegensatz zu Google Analytics, auf dem eigenen Server installiert. Als Plattform braucht es nur eine typische <a href="http://de.wikipedia.org/wiki/LAMP" target="_blank">XAMP</a>-Installation. D.h. es müssen nur ein Apache Webserver mit PHP und eine MySQL Datenbank vorhanden sein. Bevor man  das Tool installiert muss man erst eine Lizenz für seine Website erwerben. Diese kostet aktuell einmalig $30 und ist es allemal wert. Zumal man damit einen kleinen Indipendent-Programmierer unterstützen kann und reich wird er damit sicherlich nicht.<br />
Um aber sein Geld nicht unnötig ausgeben zu müssen, falls das persönliche Webhosting doch nicht kompatibel ist, kann man vorher die <a href="http://haveamint.com/about/mint-scs.zip" target="_self">Mint Server Compatibility Suite</a> herunterladen und auf sein Web schieben. Hiermit hat man dann einen kleinen Wizard zu Hand, der über mehrere Stufen alle nötigen Komponenten testet und am Ende die Tauglichkeit für Mint bescheinigt.<br />
Die eigentliche Installation geht dann genauso einfach. Nach dem man das <a href="http://haveamint.com/peppermill/mint/" target="_blank">Mint-Archiv</a> heruntergeladen und entpackt hat, passt man nur noch die <em>/mint/config/db.php</em> an seine Datenbank an und lädt das ganze zu seiner Webseite hoch. Nun ruft man das Mint-Verzeichnis auf und gibt den erhaltenen Aktivierungsschlüssel ein. Der letzte Arbeitsschritt betrifft dann die eigene Website. Dort fügt man in den Head-Bereich folgende Zeile ein:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">language</span>=<span style="color: #ff0000;">&quot;javascript&quot;</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;/mint/?js&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Dadurch wird ab jetzt bei jedem Seitenaufruf ein Javascript ausgeführt, was den Zugriff und dessen Merkmale in die Datenbank schreibt und damit auswertbar macht.</p>
<h3>Funktionen</h3>
<p>Mint ist von der Grundstruktur her modulbasierend. Die Kernkomponente zeichnet eigentlich nur den eigentlichen Zugriff auf. Alle anderen Funktionen werden über Module, soggenannte Pepper, nachinstalliert. Das hat den Vorteil, dass jeder die Statistikseite nach seinen Vorlieben anpassen kann. Damit man nicht am Anfang ganz mit leeren Händen da steht, ist im Installationspaket schon das <a href="http://haveamint.com/peppermill/pepper/4/default/" target="_blank">Default Pepper</a> enthalten. Mit diesem werden grundlegende Sachen angezeigt. Zum Beispiel die Anzahl der allgemeinen Seitenzugriffe und von eindeutigen Besuchern (Pageviews, Unique visitors), von welcher Seite aus kahm der Besucher (Referrers) oder mit welchem Suchbegriff ist er auf Seite gelandet (Search terms).</p>
<p>Zusätzlich kann ich aber noch folgende Peppers empfehlen um seine Website Statistik zu komplettieren:</p>
<h4>User Agent 007</h4>
<p><img class="alignleft size-full wp-image-79" title="User Agent 007" src="http://www.bieh.de/data/2009/08/useragent.png" alt="User Agent 007" width="150" height="150" />Mit diesem <a href="http://haveamint.com/peppermill/pepper/7/user_agent_007/" target="_self">Pepper</a> erhält man zusätzliche Auswertungsmöglichkeiten über welche Plattform (Windows, Mac OS X, &#8230;)und  welchen Browser (Firefox, Safari, Chrome, &#8230;) inkl. Versionierung der Besucher verfügt. Außerdem erstellt es eine Statistik über die benutzte Bildschirmauflösung und die vorhandene Flash-Version.</p>
<h4>Local Searches</h4>
<p><img class="alignleft size-full wp-image-84" title="Local Searches" src="http://www.bieh.de/data/2009/08/local.png" alt="Local Searches" width="150" height="150" />Zwar hat man schon eine Statistik installiert über die Suchbegriffe mit welchen die Besucher auf die Seite gestoßen. Mit <a href="http://haveamint.com/peppermill/pepper/6/local_searches/" target="_blank">Local Searches</a> sieht man nun auch welche Begriffe in die Suchmaschine der eigenen Website eingegeben wurden.</p>
<h4>Locations</h4>
<p><img class="alignleft size-full wp-image-82" title="Locations" src="http://www.bieh.de/data/2009/08/locations.png" alt="Locations" width="150" height="150" /><a href="http://haveamint.com/peppermill/pepper/29/locations/" target="_blank">Locations</a> erstellt einfach eine Übersicht über die geografischen Standorte der Gäste basierend auf deren IP Adresse.</p>
<h4>Durations</h4>
<p><img class="alignleft size-full wp-image-87" title="Durations" src="http://www.bieh.de/data/2009/08/duration.png" alt="Durations" width="150" height="150" />Das <a href="http://haveamint.com/peppermill/pepper/94/durations/" target="_blank">Durations Pepper Modul</a> zeigt, wie der Name auch schon verrät, einfach eine Statistik an wie lange der Zeitraum war in dem sich der Besucher auf der eigenen Website aufgehalten hat.</p>
<h4>Secret Crush</h4>
<p><img class="alignleft size-full wp-image-89" title="Crushes" src="http://www.bieh.de/data/2009/08/crushes.png" alt="Crushes" width="150" height="150" />Das ist eigentlich das spannendste Pepper für Mint. <a href="http://haveamint.com/peppermill/pepper/10/secret_crush/" target="_blank">Secret Crush</a> fasst im Prinzip alle vorher beschriebenen Informationen zusammen. Und zwar so das sie wieder einem konkreten Benutzer zugeordnet werden können. Man kann also komplett erkennen, was eine Person z.B. für Seiten besucht hat und welche Softwarebasis sie dafür benutzt wurde. Außerdem zieht Secret Crush noch zusätzliche Informationen aus den Cookies von typisch benutzten Plattformen wie Wordpress, Movable Type oder Textpattern.</p>
<h4>iPhone Pepper</h4>
<p><img class="alignleft size-full wp-image-91" title="iPhone Pepper" src="http://www.bieh.de/data/2009/08/iphonepepper.png" alt="iPhone Pepper" width="150" height="150" /><a href="http://haveamint.com/peppermill/pepper/57/iphone/" target="_blank">Damit</a> erhält Mint ein zusätzliches Theme für den iPhone Safari. Die Darstellung ist z.B. dann nur noch einspaltig und man kann bestimmte Bereiche auf- bzw. zuklappen. Auch ein <a href="http://developer.apple.com/iphone/library/documentation/AppleApplications/Conceptual/Dashcode_UserGuide/Contents/Resources/en.lproj/DesignTools/DesignTools.html#//apple_ref/doc/uid/TP40004692-CH5-SW5">Web Clip Bookmark Icon</a> ist integriert oder kann durch ein eigenes ersetzt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bieh.de/2009/08/websitestatistik-und-zugriffsanalyse-mit-mint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Growl Notifications für Dashboard Widgets</title>
		<link>http://www.bieh.de/2009/07/growl-notifications-fur-dashboard-widgets/</link>
		<comments>http://www.bieh.de/2009/07/growl-notifications-fur-dashboard-widgets/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 20:28:11 +0000</pubDate>
		<dc:creator>Mario</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Applescript]]></category>
		<category><![CDATA[Growl]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Widget]]></category>

		<guid isPermaLink="false">http://www.bieh.de/?p=44</guid>
		<description><![CDATA[Growl ist die komfortable Schnittstelle um Anwendern ein Feedback über Programmstatis zu geben. Und diese Funktionalität läßt sich auch einfach für Widgets im Dashboard nutzen]]></description>
			<content:encoded><![CDATA[<p>Für die die <a title="Growl Website" href="http://growl.info/" target="_blank">Growl</a> noch nicht kennen, zum Anfang eine kurze Erklärung. Programme informieren den Benutzer mittels Growl über wichtige Ereignisse. Die Prioritäten dieser kann der Benutzer vollständig konfigurieren. So müssen Softwareentwickler keine eigenen Benachrichtigungssysteme mehr entwerfen, sondern die Meldungen nur noch an Growl weitergeben.<br />
<img class="alignleft size-medium wp-image-150" title="Mitteilung Beispiel" src="http://www.bieh.de/data/2009/07/growl.png" alt="growl" width="319" height="100" />Growl ist eigentlich ein aus Mac OS 9 (und früher) stammendes Feature. Dort wurde der Benutzer ebenfalls systemweit darüber informiert wenn ein Programm die Aufmerksamkeit des Benutzers benötigte.<br />
Mit Growl kompatible Programme senden kurze Signale, wie zum Beispiel „Download beendet“ oder den gerade gespielten iTunes-Song, die dann als Growl-Benachrichtigung im vom Benutzer ausgewählten Stil angezeigt wird.<br />
Es bietet Schnittstellen für Entwickler, die die Programmiersprachen Objective-C, C, Perl, Python, Tcl, Ruby, Java und AppleScript benutzen.</p>
<p>Und letzteres nutzen wir nun um vom Dashboard aus Growl aufrufen zu können. Die Lösung besteht insgesamt aus drei Teilen:</p>
<ul>
<li>ein Shellscript um das Vorhandensein von Growl zu prüfen</li>
<li>etwas Javascript um ersteres und den Mitteilungsbefehl auszuführen</li>
<li>und das Applescript um die Mitteilung zu erstellen und abzuschicken</li>
</ul>
<p>Als erstes das Javascript:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">widget.<span style="color: #660066;">system</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'growlExists.sh'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #003366; font-weight: bold;">var</span> cmd<span style="color: #339933;">;</span>
   <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">+</span>obj.<span style="color: #660066;">outputString</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      cmd <span style="color: #339933;">=</span> <span style="color: #3366CC;">'/usr/bin/osascript senToGrowl.scpt '</span> <span style="color: #339933;">+</span>
         <span style="color: #3366CC;">'&quot;Name&quot; &quot;Widget&quot; &quot;Dashboard&quot; '</span> <span style="color: #339933;">+</span>
         <span style="color: #3366CC;">'&quot;Titel&quot; &quot;Beschreibung&quot;'</span><span style="color: #339933;">;</span>
      widget.<span style="color: #660066;">system</span><span style="color: #009900;">&#40;</span>cmd<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Das Script macht einen <em>widget.system</em> Aufruf, in dem es <em>growlExists.sh</em> aufruft. Nach dem das Script geantwortet hat, wird deren Wert in eine anonyme CallBack-Funktion übergegeben.<br />
Das Shellscript ist unheimlich einfach. Es ruft den Kommandozeilen-Befehl <em>osascript</em> auf und startet damit ein einfaches Applescript welches die Systemprozesse zählt, die den Namen &#8220;<em>GrowlHelperApp</em>&#8221; besitzen. Wenn Growl gestartet ist, gibt das Script &#8220;1&#8243; zurück, bzw. wenn nicht eine &#8220;0&#8243;.</p>

<div class="wp_syntax"><div class="code"><pre class="shellscript" style="font-family:monospace;">#!/bin/sh
osascript&lt;&lt;END
tell application &quot;System Events&quot;
   return count of (every process whose name is &quot;GrowlHelperApp&quot;)
end tell
END</pre></div></div>

<p>Wenn Growl erkannt wurde, setzt das Javascript den Befehl für die Notification zusammen und führt diesen aus. Der Befehl der von <em>osascript</em> aus geführt wird, enthält folgende Parameter:</p>
<pre>senToGrowl.scpt</pre>
<p>Der Pfad zum Growl Applescript</p>
<pre>"Name"</pre>
<p>Der Mitteilungsname</p>
<pre>"Widget"</pre>
<p>Der Name des Programmes welches die Mitteilung wirft</p>
<pre>"Dashboard"</pre>
<p>Der Name des Programms von welchem das Icon angezeigt wird</p>
<pre>"Titel"</pre>
<p>Der Titel der Notification</p>
<pre>"Beschreibung"</pre>
<p>Der Beschreibungstext in der Growl Mitteilung</p>
<p><em>osascript</em> führt <em>senToGrowl.scpt</em> aus und fügt die Parameter ein. Das Applescript erstellt dann so die Growl Notification:</p>

<div class="wp_syntax"><div class="code"><pre class="applescript" style="font-family:monospace;"><span style="color: #ff0033; font-weight: bold;">on</span> <span style="color: #0066ff;">run</span> argv
   <span style="color: #ff0033; font-weight: bold;">tell</span> <span style="color: #0066ff;">application</span> <span style="color: #009900;">&quot;GrowlHelperApp&quot;</span>
      <span style="color: #ff0033; font-weight: bold;">set</span> <span style="color: #ff0033;">the</span> allNotificationsList <span style="color: #ff0033; font-weight: bold;">to</span> <span style="color: #000000;">&#123;</span><span style="color: #0066ff;">item</span> <span style="color: #000000;">1</span> <span style="color: #ff0033; font-weight: bold;">of</span> argv<span style="color: #000000;">&#125;</span>
      <span style="color: #ff0033; font-weight: bold;">set</span> <span style="color: #ff0033;">the</span> enabledNotificationsList <span style="color: #ff0033; font-weight: bold;">to</span> <span style="color: #000000;">&#123;</span><span style="color: #0066ff;">item</span> <span style="color: #000000;">1</span> <span style="color: #ff0033; font-weight: bold;">of</span> argv<span style="color: #000000;">&#125;</span>
      register <span style="color: #ff0033;">as</span> <span style="color: #0066ff;">application</span> ¬
         <span style="color: #0066ff;">item</span> <span style="color: #000000;">2</span> <span style="color: #ff0033; font-weight: bold;">of</span> argv all notifications allNotificationsList ¬
         default notifications enabledNotificationsList ¬
         icon <span style="color: #ff0033; font-weight: bold;">of</span> <span style="color: #0066ff;">application</span> <span style="color: #0066ff;">item</span> <span style="color: #000000;">3</span> <span style="color: #ff0033; font-weight: bold;">of</span> argv
      notify <span style="color: #ff0033; font-weight: bold;">with</span> <span style="color: #0066ff;">name</span> ¬
         <span style="color: #0066ff;">item</span> <span style="color: #000000;">1</span> <span style="color: #ff0033; font-weight: bold;">of</span> argv title <span style="color: #0066ff;">item</span> <span style="color: #000000;">4</span> <span style="color: #ff0033; font-weight: bold;">of</span> argv ¬
         description ¬
         <span style="color: #0066ff;">item</span> <span style="color: #000000;">5</span> <span style="color: #ff0033; font-weight: bold;">of</span> argv <span style="color: #0066ff;">application</span> <span style="color: #0066ff;">name</span> <span style="color: #0066ff;">item</span> <span style="color: #000000;">2</span> <span style="color: #ff0033; font-weight: bold;">of</span> argv
   <span style="color: #ff0033; font-weight: bold;">end</span> <span style="color: #ff0033; font-weight: bold;">tell</span>
<span style="color: #ff0033; font-weight: bold;">end</span> <span style="color: #0066ff;">run</span></pre></div></div>

<p>Dieses Script ist ziemlich selbsterklärend und besteht hauptsächlich aus Informationen der <a title="Growl Applescript Dokumentation" href="http://growl.info/documentation/applescript-support.php" target="_blank">Growl Dokumentation</a>. Mehr gibts eigentlich auch nicht zu erkären. Also wünsch ich viel Spaß beim growlen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bieh.de/2009/07/growl-notifications-fur-dashboard-widgets/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Websites beschleunigen mit CSS Sprites</title>
		<link>http://www.bieh.de/2009/07/css-sprites/</link>
		<comments>http://www.bieh.de/2009/07/css-sprites/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 20:16:51 +0000</pubDate>
		<dc:creator>Mario</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Interface]]></category>

		<guid isPermaLink="false">http://www.bieh.de/?p=30</guid>
		<description><![CDATA[CSS Sprites haben sich schon lange als paraktikable Technologie erwiesen um noch etwas mehr Performance aus einer Website zu kitzeln.]]></description>
			<content:encoded><![CDATA[<p>CSS Sprites ist keine neue Idee. Und natürlich sind CSS Sprites nicht immer nützlich oder nötig. Es gibt aber einige Situationen bei den sie erhebliche Vorteile und Verbesserungen bringen, vor allem wenn es um das Laden von Dateien vom Server geht. Wenn du bis jetzt noch nie etwas von CSS Sprites gehört hast, ist dies nun der ideale Zeitpunkt um zu lernen, wie sie funktionieren und wie man sie erstellen kann.</p>
<h3>Was sind CSS Sprites?</h3>
<p><a href="http://de.wikipedia.org/w/index.php?title=Datei:BOE_tile_set.png&amp;filetimestamp=20080803165943" target="_blank"><img class="alignleft size-full wp-image-117" title="sprites" src="http://www.bieh.de/data/2009/07/sprites.png" alt="sprites" width="250" height="200" /></a>Ein Sprite (engl. für ein Geistwesen, Kobold u. a.) ist ursprünglich ein Grafikobjekt, das von der Grafikhardware über das Hintergrundbild bzw. den restlichen Inhalt der Bildschirmanzeige eingeblendet wird. Durch das Videospiele immer komplexer wurden, mussten gewisse Techniken benutzt werden um den Spielablauf flüssig zu halten. Eine von diesen Entwicklungen war das benutzen von einer Mastergrafik, auf der alle Sprites abgelegt wurden. Später wenn diese gebraucht wurden, wurde per Code wieder das einzelne Objekt herausgelöst und auf dem Spielfeld positioniert.</p>
<p>Circa um 2000 suchte man im Webdevelopment nach Alternativen für die damals schon üblichen JavaScript basierenden RollOver-Menüs. Und mit CSS und einer sehr einfachen Implementierung der alten Sprites-Idee, war auch diese gefunden. Wobei diese auch viel einfacher und sauberer war, als der JavaScript Vorgänger.<br />
Diese Technik wurde dann noch weiter ausgebaut, in dem man im Prinzip nun die komplette Spritebearbeitung den Videospielen entlieh. Das heißt, eine Vielzahl von Bilddateien einer Website werden in eine große &#8220;Master&#8221;-Bilddatei kombiniert. Um auf der Website dann wieder ein einzelnes Bild dar zustellen, benutzt man die &#8220;background-position&#8221;-Eigenschaft in CSS, welches die genaue Position des besagten Bildes definiert. Auch alle möglichen Hover-, Active- oder Focus-Effekte können so direkt realisiert werden.<br />
<img class="aligncenter size-full wp-image-120" title="spritemap" src="http://www.bieh.de/data/2009/07/spritemap.png" alt="spritemap" width="480" height="200" />Bei dem Laden der Website, wird nun nicht jede einzelne Bilddatei mehr geladen (bzw. eine Hover-Datei per Request), sondern ein großes Masterbild mit einem Mal. Das klingt zwar nach keiner großen Sache, aber der Hauptnachteil von  JavaScript basierenden MouseOver-Effekten ist, dass sie zwei HTTP Request pro Bild benötigen. Und da diese alle etwas Zeit benötigen, kommt es zu unschönen &#8220;Flicker&#8221; während des ersten Abrufens. Aber auch allgemein besteht ein Großteil der Gesamtladezeit für eine Seite aus zusätzlichen HTML Requests für alle enthaltenen Elemente. Und diese lassen sich durch diese Technik erheblich reduzieren.<br />
Zusammenfassend kann man also sagen, dass CSS Sprites die Anzahl der HTTP Requests verringern und damit das Laden der Seiten beschleunigen. Aus diesem Grund werden CSS Sprites besondern gern auf stark frequentierten Websites genutzt. Und hauptsächlich für Teile der Navigation (inkl. deren Hover-Effekten), für Icons und natürlich Buttons. Also alles Elemente die sich selten verändern.</p>
<h3>Ein einfaches Anwendungsmuster</h3>
<p>Ok, fangen wir mit einer kleinen Navigation an, wie sie standardmäßig aufgebaut wäre:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#menu</span> li a <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background</span><span style="color: #3333ff;">:<span style="color: #993333;">none</span> </span>no-<span style="color: #993333;">repeat</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #993333;">center</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li a<span style="color: #6666ff;">.elemnt1</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span><span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'img/elemnt1.gif'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li a<span style="color: #3333ff;">:hover</span><span style="color: #6666ff;">.elemnt1</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span><span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'img/elemnt1_over.gif'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li a<span style="color: #6666ff;">.elemnt2</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span><span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'img/elemnt2.gif'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li a<span style="color: #3333ff;">:hover</span><span style="color: #6666ff;">.elemnt2</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span><span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'img/elemnt2_over.gif'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Mit der CSS Sprites können wir dieses Beispiel erheblich beschleunigen. Anstatt 10 einzelne Bilder für die Buttons (5 Default, 5 MouseOver), kombinieren wir diese in eine einzelne Datei. Dieser Arbeitsschritt sollte nicht wirklich schwierig sein. Einfach eine neue Bilddatei öffnen und alle Icons darin von Links Oben beginnend einfügen.<br />
Und nun der angepasste CSS Code. Wie du siehst ist das Hintergrundbild einmalig im Anker-Element definiert. Und in den einzelnen Klassen wird nur noch die Hintergrundposition auf der Y-Achse verschoben.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#menu</span> li a <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span><span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'img/image_menu.gif'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li a<span style="color: #6666ff;">.elemnt1</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-position</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span> <span style="color: #933;">0px</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li a<span style="color: #3333ff;">:hover</span><span style="color: #6666ff;">.elemnt1</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-position</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span> <span style="color: #933;">-72px</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li a<span style="color: #6666ff;">.elemnt</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-position</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span> <span style="color: #933;">-143px</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li a<span style="color: #3333ff;">:hover</span><span style="color: #6666ff;">.elemnt2</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-position</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span> <span style="color: #933;">-215px</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Durch diese kleine Sachen haben wir HTTP Request um 9 Stück verringert und auch die gesamten Datengröße ist durch weniger Overhead etwas verkleinert worden.<br />
Für wen das zu viel ist, dem sei dieser Webservice an Herz gelegt: <a title="CSS Sprite Generator" href="http://spritegen.website-performance.org/" target="_blank">http://spritegen.website-performance.org/</a><br />
Dort genügt es, einfach alle noch einzelnen Bilder in eine ZIP Datei zu packen und hochzuladen. Der Generator erstellt damit dann automatisch das Masterbild und den nötigen CSS Code dazu. Einfacher kann man es wirklich nicht mehr haben.</p>
<h3>Zum Abschluss noch ein paar reale Beispiele</h3>
<h4>Amazon</h4>
<p><img class="alignleft size-full wp-image-110" title="amazon" src="http://www.bieh.de/data/2009/07/amazon.png" alt="amazon" width="250" height="200" />Sehr kompakt gestaltetes Master-Image</p>
<h4>Apple</h4>
<p><img class="alignleft size-full wp-image-107" title="apple" src="http://www.bieh.de/data/2009/07/apple1.png" alt="apple" width="250" height="200" />Apple benutzt CSS Sprites für die verschiedenen Status seiner Hauptnavigation</p>
<h4>YouTube</h4>
<p><img class="alignleft size-full wp-image-109" title="ytube" src="http://www.bieh.de/data/2009/07/ytube.png" alt="ytube" width="250" height="200" />Youtube hat nahezu seine komplette grafische Gestaltung in ein Master-Bild gequetscht, so dass es 2800 Pixel hoch ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bieh.de/2009/07/css-sprites/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Standortbestimmung per Javascript</title>
		<link>http://www.bieh.de/2009/07/standortbestimmung-per-javascript/</link>
		<comments>http://www.bieh.de/2009/07/standortbestimmung-per-javascript/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 17:56:48 +0000</pubDate>
		<dc:creator>Mario</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://www.bieh.de/?p=1</guid>
		<description><![CDATA[Über die Geolocation API, das Google Gears und z.B. Firefox ab 3.5 unterstützt, lassen sich einfach ortsbezogene Dienste im Browser realisieren.]]></description>
			<content:encoded><![CDATA[<p>Location based, also standortbezogenes, Browsing ist eins der neuen Konzepte für das Web. Und es nicht mehr nur auf mobile Applikationen beschränkt. Den Standort zu wissen, bedeutet einfach mehr Service und Dienste für den Benutzer. Zum Beispiel können Bewertungsportale für Restaurants automatisch gleich passende Treffer in der Nähe anzeigen, ohne das man seine Adresse per Hand eingebe  muss.</p>
<p>In diesem Artikel geht es darum wie man die Geolocation mit Hilfe von Javascript ausliest. Aber natürlich fragt man sich zu Recht, ob die Umsetzung überhaupt Sinn macht, wenn es aktuell nur von Firefox ab Version 3.5 unterstützt wird. Aber zum einen gibt es einen eigenen <a href="http://dev.w3.org/geo/api/spec-source.html">Working Draft</a> der  Geolocation API von der W3C. So das es mit ziemlicher Sicherheit in naher Zukunft von allen anderen großen Browsern auch unterstützt wird.<br />
Außerdem kann Geolocation mit allen Browsern genutzt werden in den <a href="http://gears.google.com/">Google Gears</a> installiert ist. Gears ist verfügbar für <a href="http://gears.google.com/?platform=win">Windows</a>, Windows Mobile (<a href="http://gears.google.com/?platform=wince">IE Mobile</a>, <a href="http://gears.google.com/?platform=wince-opera">Opera Mobile</a>), Mac OS X (<a href="http://gears.google.com/?platform=mac-firefox">Firefox</a>, <a href="http://gears.google.com/?platform=mac-safari">Safari</a>), <a href="http://gears.google.com/?platform=linux">Linux</a> und Android. Darüber hinaus funktioniert es auch mit Firefox 3.0 wenn das <a href="https://people.mozilla.com/%7Edolske/dist/geode/geode-latest.xpi|Geode">Geode Plugin</a> installiert ist.</p>
<p>Als erstes aber nur zu Geolocation auf Firefox 3.5. Die Geolocation API befindet sich in einem geolocation Kindobjekt innerhalb des navigator Objektes. Und darauf bezogen können wir nun testen ob eine Geolocation-Unterstützung vorhanden ist, indem wir folgenden Code benutzen:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">geolocation</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #009966; font-style: italic;">/* Geolocation ist verfuegbar */</span>
 <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Der Browser unterstuetzt keinen Geolocation Dienst.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Dieses Verfahren ist einem einfachen Browsercheck vorzuziehen, um auch für zukünftige Entwicklungen gerüstet zu sein.</p>
<h3>Aktuelles Standort im Firefox abfragen</h3>
<p>Um den Standort des Benutzers zu bekommen, ruft man die getCurrentPosition() Methode auf. Diese startet eine asynchronen Abfrage auf die aktuelle Position. Wenn diese bestimmt wurde, ruft es damit den Callback mit dem Ergebnis auf:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">navigator.<span style="color: #660066;">geolocation</span>.<span style="color: #660066;">getCurrentPosition</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  do_something<span style="color: #009900;">&#40;</span>position.<span style="color: #660066;">coords</span>.<span style="color: #660066;">latitude</span><span style="color: #339933;">,</span> position.<span style="color: #660066;">coords</span>.<span style="color: #660066;">longitude</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Und mit dieser Information können wir nun einfach weiter in unserer Anwendung arbeiten:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> getLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	navigator.<span style="color: #660066;">geolocation</span>.<span style="color: #660066;">getCurrentPosition</span><span style="color: #009900;">&#40;</span>gotLocation<span style="color: #339933;">,</span> noLocation<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> gotLocation<span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> lat <span style="color: #339933;">=</span> position.<span style="color: #660066;">coords</span>.<span style="color: #660066;">latitude</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> long <span style="color: #339933;">=</span> position.<span style="color: #660066;">coords</span>.<span style="color: #660066;">longitude</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Der Standort lautet '</span> <span style="color: #339933;">+</span> lat <span style="color: #339933;">+</span> <span style="color: #3366CC;">', '</span> <span style="color: #339933;">+</span> long<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> noLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Standortbestimmung nicht erfolgreich.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
getLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Mit Google Gears den Standort bestimmen</h3>
<p>Und nun die selbe Prozedur mit Hilfe von Google Gears. Also nicht vergessen Gears zu installieren und eine passende <a href="http://code.google.com/apis/gears/tools.html#gears_init">gears_init</a> Datei einfügen.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.google.com/apis/gears/gears_init.js&quot;&gt;&lt;/script&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">function</span> getLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> location <span style="color: #339933;">=</span> google.<span style="color: #660066;">gears</span>.<span style="color: #660066;">factory</span>.<span style="color: #660066;">create</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'beta.geolocation'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	location.<span style="color: #660066;">getCurrentPosition</span><span style="color: #009900;">&#40;</span>gotLocation<span style="color: #339933;">,</span> noLocation<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> gotLocation<span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> lat <span style="color: #339933;">=</span> position.<span style="color: #660066;">latitude</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> long <span style="color: #339933;">=</span> position.<span style="color: #660066;">longitude</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Der Standort lautet '</span> <span style="color: #339933;">+</span> lat <span style="color: #339933;">+</span> <span style="color: #3366CC;">', '</span> <span style="color: #339933;">+</span> long<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> noLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Standortbestimmung nicht erfolgreich.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
getLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Wie man sieht, gibt es nicht viele Unterschiede zwischen den beiden Methoden. Durch die gears_ini Datei bekommen wir Funktionen um mit der Gears-Engine auf dem Benutzerrechner zu kommunizieren. Danach initialisiert man Gears und erstellt eine neue Variable, welche mit den Gears-Funktionen benutzt wird. Danach muss man nur noch getCurrentPosition aufrufen und der Rest ist wieder der selbe.</p>
<h3>Beide Wegen zusammenführen</h3>
<p>Durch diese starke Ähnlichkeit lassen sich beide Codes auch einfach in einen Aufruf kombinieren. Und damit funktioniert es dann bequem mit beiden Technologien:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.google.com/apis/gears/gears_init.js&quot;&gt;&lt;/script&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">function</span> getLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> location <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">geolocation</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		location <span style="color: #339933;">=</span> navigator.<span style="color: #660066;">geolocation</span><span style="color: #339933;">;</span>
		<span style="color: #003366; font-weight: bold;">var</span> geoAPI <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
		location <span style="color: #339933;">=</span> google.<span style="color: #660066;">gears</span>.<span style="color: #660066;">factory</span>.<span style="color: #660066;">create</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'beta.geolocation'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003366; font-weight: bold;">var</span> geoAPI <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>location<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		location.<span style="color: #660066;">getCurrentPosition</span><span style="color: #009900;">&#40;</span>gotLocation<span style="color: #339933;">,</span> noLocation<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Der Browser unterstuetzt keinen Geolocation Dienst.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> gotLocation<span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>geoAPI <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #003366; font-weight: bold;">var</span> lat <span style="color: #339933;">=</span> position.<span style="color: #660066;">coords</span>.<span style="color: #660066;">latitude</span><span style="color: #339933;">;</span>
		<span style="color: #003366; font-weight: bold;">var</span> long <span style="color: #339933;">=</span> position.<span style="color: #660066;">coords</span>.<span style="color: #660066;">longitude</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
		<span style="color: #003366; font-weight: bold;">var</span> lat <span style="color: #339933;">=</span> position.<span style="color: #660066;">latitude</span><span style="color: #339933;">;</span>
		<span style="color: #003366; font-weight: bold;">var</span> long <span style="color: #339933;">=</span> position.<span style="color: #660066;">longitude</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Der Standort lautet '</span> <span style="color: #339933;">+</span> lat <span style="color: #339933;">+</span> <span style="color: #3366CC;">', '</span> <span style="color: #339933;">+</span> long<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> noLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Standortbestimmung nicht erfolgreich.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
getLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.bieh.de/2009/07/standortbestimmung-per-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
