<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Mike's Website</title>
<link>http://unckel.de</link>
<description>Code-Snippets, Projekte, Ideen und Reisebilder von Mike Unckel</description>
<copyright>(c) Mike Unckel</copyright>
<ttl>5</ttl>
<item>
<title>Cron-Job für Arme unter Windows</title>
<description><![CDATA[<p>Über „Geplante Tasks“ kann eine Website (mit oder ohne Skript) folgendermaßen aufgerufen werden: Erst einen Browser dann die Adresse angeben.
<br/>Beispiel: C:\Programme\Internet Explorer\iexplorer.exe http://www.website.de/test.php</p>

<p>Eine andere Möglichkeit, jedoch nur wenn die Adresse öffentlich zugänglich ist, besteht über den Service <a href="http://www.cron-job.org">www.cron-job.org</a></p>

Daß der Browser bzw. der neue Tab nicht dauerhaft beim Aufruf geöffnet bleibt, einfach per JavaScript schließen:
<pre class="brush: js; gutter: false;">&lt;script&gt;
	window.open('', '_self', ''); // chrome bug fix
	window.close();
&lt;/script&gt;</pre>

<p>Da das JavaScript erst nach dem Abarbeiten des Serverskripts ausgeführt wird, muss mit dem Schließen per JavaScript nicht gewartet werden.</p>

<p>Das funktioniert natürlich auch mit anderen Skripts (PHP, ASPX, usw.)</p>

Beispiel:
<pre class="brush: php; gutter: false;">&lt;?php
	// cool php stuff…
?&gt;
&lt;html&gt;&lt;body&gt;
&lt;script&gt;
	window.open('', '_self', '');
	window.close();
&lt;/script&gt;
&lt;/body&gt;&lt;/html&gt;</pre>]]></description>
<link>http://unckel.de/v6/post.aspx?id=280</link>
<pubDate> / </pubDate>
</item>
<item>
<title>HostEurope + Wordpress + Contact Form 7 zum laufen bringen</title>
<description><![CDATA[<p>- HostEurope KIS > Webhosting > Konfiguration > Scripte > Standard > E-Mail-Adresse. E-Mail-Adresse die unter HE erstellt wurde.<br>
- Wordpress Backend > Einstellungen > Allgemein > E-Mail-Adresse (muss mit der von HE KIS übereinstimmen)</p>
<p>via <a href="http://forum.wpde.org/konfiguration/72449-contact-form-7-wp-3-0-hosteurope-hilfe.html">http://forum.wpde.org/konfiguration/72449-contact-form-7-wp-3-0-hosteurope-hilfe.html</a></p>]]></description>
<link>http://unckel.de/v6/post.aspx?id=279</link>
<pubDate> / </pubDate>
</item>
<item>
<title>HTML Attribut height per CSS entfernen/zurücksetzen</title>
<description><![CDATA[<p>Das HTML height-Attribut lässt sich per CSS folgendermaßen überschreiben:</p>

<pre class="brush: css; gutter: false;">
  { height:auto !important; }
</pre>]]></description>
<link>http://unckel.de/v6/post.aspx?id=278</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Excel: Datei-Änderungsdatum in Zelle ausgeben</title>
<description><![CDATA[<p>Excel 2007 » Entwicklertools » Visual Basic » VBAProject markieren » Einfügen » Modul<br/>(Datei muss dann unter .xslm gespeichert werden.)</p>

<pre class="brush: plain; gutter: false;">
Function savedate()
  savedate = ActiveWorkbook.BuiltinDocumentProperties(12).Value
End Function
</pre>

<p>=savedate() steht dann unter Benutzerdefinierte Funktionen bereit.</p>

<p>Quelle: <a href="http://www.herber.de/forum/archiv/444to448/t444825.htm">http://www.herber.de/forum/archiv/444to448/t444825.htm</a></p>




]]></description>
<link>http://unckel.de/v6/post.aspx?id=277</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Kompletter UNICODE-Zeichensatz per Javascript </title>
<description><![CDATA[<p>Schriftart "Arial Unicode" o.ä. verwenden.</p>

<pre class="brush: js; gutter: false;">
for (var i=0; i<65536; i++) {
    document.write(String.fromCharCode(i) + " ");
}
</pre>

<p>http://www.weblog-deluxe.de/sonderzeichen-und-symbole-ascii-art-fur-second-life/</p>]]></description>
<link>http://unckel.de/v6/post.aspx?id=276</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Bruchzahlen (Unicode)</title>
<description><![CDATA[<p>Bruchzahlen zum einfachen copy'n'paste. Achtung: Unicode-Zeichensatz!</p>
<p>½ (0,5)<br />
⅓ (0,333)<br />
⅔ (0,667)<br />
¼ (0,25)<br />
¾ (0,75)<br />
⅕ (0,2)<br />
⅖ (0,4)<br />
⅗ (0,6)<br />
⅘ (0,8)<br />
⅙ (0,167)<br />
⅚ (0,833)<br />
⅛ (0,125)<br />
⅜ (0,375)<br />
⅝ (0,625)<br />
⅞ (0,875)</p>]]></description>
<link>http://unckel.de/v6/post.aspx?id=275</link>
<pubDate> / </pubDate>
</item>
<item>
<title>KISS - MAYA - AIDA</title>
<description><![CDATA[<p><a href="http://de.wikipedia.org/wiki/KISS-Prinzip">KISS-Prinzip</a> - Keep it simple and stupid<br/>
<a href="http://de.wikipedia.org/wiki/MAYA-Prinzip">MAYA-Prinzip</a> - Most Advanced Yet Acceptable<br/>
<a href="http://de.wikipedia.org/wiki/AIDA-Modell">AIDA-Modell</a> - Attention, Interest, Desire & Action</p>]]></description>
<link>http://unckel.de/v6/post.aspx?id=274</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Word: Tabelle horizontal teilen </title>
<description><![CDATA[<p>So werden aus einer Word-Tabelle zwei:<br/>
<br/>
Cursor in irgendeiner Zelle positionieren und dann<br/>
<strong>[Strg] + [Shift] + [Enter]</strong></p>

<p>Quelle: http://www.ratschlag24.com/index.php/word-tabellen-teilen_000006237/</p>
]]></description>
<link>http://unckel.de/v6/post.aspx?id=273</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Dropdown-Navigation (Version 1) mit CSS und JavaScript</title>
<description><![CDATA[<p>Ein typisches Aufklappmenü, umgesetzt mit reinem CSS. Dem Internet Explorer bis Version 7 benötigt etwas Hilfe per JavaScript. Dazu habe ich die jQuery- Bibliothek eingesetzt (was zwar etwas übertrieben erscheint, ich jedoch meistens sowieso auf der Website einsetze).<br/>Getestet mit IE 6-8, Firefox 3x und Google Chrome auf PC.</p>

<img src="data/files/dropdown-menue.png" alt="" />

<pre class="brush: js; gutter: false;">
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot; /&gt;
&lt;style type=&quot;text/css&quot;&gt;

#nav, #nav ul {
  font-family:sans-serif;
  list-style:none;
  padding:0;
  margin:0;
}

#nav a {
  display:block;
  color:#000;
  text-decoration:none;
  padding:.5em;	
}

#nav li {
  float:left;
  background-color:#ddd;
}

#nav li ul {
  position:absolute;
  width:auto;
  left:-999em;
  padding:0;
}

#nav li ul li {
  clear:both;
}

#nav li:hover {
  background-color:#eee;
}

/* no support IE 6,7 see JavaScript */
#nav li:hover ul,  
#nav li.iehover ul {
  left:auto;
}

&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;ul id=&quot;nav&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Parent 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Parent 2&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Child 2.1&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Child 2.2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Child 2.3&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Parent 3&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Child 3.1&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Child 3.2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Child 3.3&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Child 3.4&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;			
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Parent 4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;!-- Single-level Dropdowns: http://htmldog.com/articles/suckerfish/dropdowns/ --&gt;
&lt;!--[if lte IE 7]&gt;
&lt;script&gt;
$(function() {
  $(&quot;#nav li&quot;).hover(
    function() { $(this).addClass(&quot;iehover&quot;); },
    function() { $(this).removeClass(&quot;iehover&quot;); }
  );
});
&lt;/script&gt;
&lt;![endif]--&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>

Quelle und ausführliche Beschreibung: <a href="http://htmldog.com/articles/suckerfish/dropdowns/">http://htmldog.com/articles/suckerfish/dropdowns/</a>]]></description>
<link>http://unckel.de/v6/post.aspx?id=268</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Onepager jQuery-Script</title>
<description><![CDATA[<p>jQuery-Script um auf kleinen Webseiten (Web-Visitenkarten bzw. Onepager) zu navigieren. Inhalte werden ein- und ausgeblendet, ähnlich Accordion-Scripts. Einzelne Inhalte können aber auch über den Hash-Verweis direkt angesprungen werden, z.B. unckel.com/#kontakt.<br />
Ist kein JavaScript verfügbar, werden alle Inhalte untereinander dargestellt. Über die Navigation können diese angesprungen werden.</p>

<strong>JavaScript</strong>
<pre class="brush: js; gutter: false;">
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
$(function() {
	
  var navLinks = $('#nav a');	
  var pages = $('#pages &gt; div');
	
  // rewrite ids to set hashes into address bar and hide all pages
  pages.each(function(i) {
    $(this).attr('id','js' + $(this).attr('id'));
  }).hide();
  $('.toplink').hide();
    
  navLinks.click(function(e) {
    // highlight navigation links
    navLinks.removeClass('active');
    $(this).addClass('active');

    // hide all pages and show requested page
    pages.hide();
    var page = $(this).attr('href').substring(1);
    $('#js' + page).fadeIn(); // .slideDown();
  });
	
  // read hash from address bar to show requested page
  var locationHash = window.location.hash.substring(1);
  if (locationHash == '') $('#nav a:first').click();
  else $('#nav a[href=#' + locationHash + ']').click();
	
});
&lt;/script&gt;
</pre>

<strong>Styles</strong>
<pre class="brush: css; gutter: false;">
&lt;style&gt;
  #pages div { background-color:#ddd; height:500px; }
  .active { font-weight:bold; color:#f00; }
&lt;/style&gt;
</pre>

<strong>HTML</strong>
<pre class="brush: html; gutter: false;">
&lt;ul id=&quot;nav&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#page1&quot;&gt;Page 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#page2&quot;&gt;Page 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#page3&quot;&gt;Page 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div id=&quot;pages&quot;&gt;
  &lt;div id=&quot;page1&quot;&gt;Page 1&lt;p class=&quot;toplink&quot;&gt;&lt;a href=&quot;#nav&quot;&gt;Nach oben&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
  &lt;div id=&quot;page2&quot;&gt;Page 2&lt;p class=&quot;toplink&quot;&gt;&lt;a href=&quot;#nav&quot;&gt;Nach oben&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
  &lt;div id=&quot;page3&quot;&gt;Page 3&lt;p class=&quot;toplink&quot;&gt;&lt;a href=&quot;#nav&quot;&gt;Nach oben&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>]]></description>
<link>http://unckel.de/v6/post.aspx?id=267</link>
<pubDate> / </pubDate>
</item>
<item>
<title>jQuery: HTML ID-Attribute hinzufügen</title>
<description><![CDATA[<p>Gegeben sind HTML-Elemente welche alle die Klasse 'box' zugewiesen wurde. Will man nun gezielt z.B. das 3. Element ansprechen, ginge das auch mit ' $(".box").eq(2)'.<br />Mit folgendem Code-Schnipsel füge ich jedoch jedem div-Element mit der Klasse 'box' ein id-Attribut mit aufsteigender Zählung an ('box1', 'box2',...).</p>

<pre class="brush: js; gutter: false;">
$(".box").each(function(index) {
  var boxId = "box" + index;
  $(this).attr("id", boxId);
  //...				
});
</pre>
]]></description>
<link>http://unckel.de/v6/post.aspx?id=272</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Schicke CSS3-Buttons</title>
<description><![CDATA[<p>Mit CSS3 lassen sich auf sehr einfache Weise, Elemente gestalten, was üblicherweise nur mit Grafiken zu bewerkstelligen war. Leider müssen noch Prefixes für die einzelnen Browsertypen verwendet werden (-moz, -webkit, -o). Hier z.B. mal Buttons, ganz ohne Grafiken oder "dirty tricks" wie verschachtelte Tags.</p>

<pre class="brush: css; gutter: false;">
.btn {
  position:relative;

  background:-webkit-gradient(linear, left top, left bottom, from(#7CD357), to(#5CA33E));
  background:-moz-linear-gradient(center top, #7CD357, #5CA33E);

  background-color:#5CA33E;

  border:1px solid #5CA33E;
  -webkit-border-radius:3px;
  -moz-border-radius:3px;
  border-radius:3px;

  -moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.4);
  -webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.2), inset 0 1px 1px rgba(255, 255, 255, 0.4);
  box-shadow:0 1px 1px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255, 255, 255, 0.9);

  font:bold 14px/14px sans-serif;
  color:#fff;
  text-shadow:1px 1px 0 rgba(0, 0, 0, 0.3);
  text-decoration:none;
  display:inline;

  padding:8px 16px;
  margin:0;
  cursor:pointer;
}

.btn:hover {
  background:-moz-linear-gradient(center top, #5CA33E, #7CD357);
  background:-webkit-gradient(linear, left top, left bottom, from(#5CA33E), to(#7CD357));
}

.btn:active  {
  top:1px;
}
</pre>

&nbsp;

<pre class="brush: html; gutter: false;">
  &lt;input class=&quot;btn&quot; type=&quot;submit&quot; value=&quot;Submit&quot; /&gt;
  &lt;button class=&quot;btn&quot;&gt;Button&lt;/button&gt;
  &lt;a class=&quot;btn&quot; href=&quot;#&quot;&gt;Link&lt;/a&gt;
  &lt;div class=&quot;btn&quot;&gt;Div&lt;/div&gt;
  &lt;span class=&quot;btn&quot;&gt;Span&lt;/span&gt;
</pre>

<p><img src="data/files/css3-buttons.jpg" /></p>
]]></description>
<link>http://unckel.de/v6/post.aspx?id=266</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Meine Android Apps</title>
<description><![CDATA[<p>Kleine Sammlung meiner wichtigsten Apps für Android:</p>

<p><strong>Dropbox</strong><br />
Netzwerk-Speicher zur Synchronisation zwischen unterschiedlichen Endgeräten<br />
<a href="http://www.dropbox.com">http://www.dropbox.com</a></p>

<p><strong>KeePassDroid</strong><br />
Gute Kennwortverwaltung<br />
<a href="http://www.keepassdroid.com/">http://www.keepassdroid.com/</a></p>

<p><strong>My Tracks</strong><br />
Zeichnet GPS Tracks und weitere Daten zum Joggen, Radfahren, usw. auf<br />
<a href="http://mytracks.appspot.com/">http://mytracks.appspot.com/</a></p>

<p><strong>Smooth Calendar</strong><br />
Besseres Kalender-Widget als das Standard-Widget<br />
<a href="http://de.androlib.com/android.application.catharsis-android-calendar-xiCB.aspx">http://de.androlib.com/android.application.catharsis-android-calendar-xiCB.aspx</a></p>

<p><strong>Barcode Scanner</strong><br />
Liest Bar- und QR-Codes<br />
<a href="http://androidpit.de/de/android/market/apps/app/com.google.zxing.client.android/Barcode-Scanner/">http://androidpit.de/de/android/market/apps/app/com.google.zxing.client.android/Barcode-Scanner/</a></p>

<p><strong>Barcoo</strong><br />
Produktscanner zum Preisvergleich mit Lebensmittelampel und mehr...<br />
<a href="http://www.barcoo.com/de/">http://www.barcoo.com/de/</a></p>]]></description>
<link>http://unckel.de/v6/post.aspx?id=265</link>
<pubDate> / </pubDate>
</item>
<item>
<title>XML zu JSON mit PHP</title>
<description><![CDATA[<p>Hier ein einfaches Beispiel, wie aus folgender XML-Datei über das Attribut 'id' ein Datensatz gelesen, und als Antwort ein JSON-Objekt zurück geliefert wird.</p>

<pre class="brush: xml; gutter: false;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;articles&gt;
&lt;article id=&quot;1&quot;&gt;
  &lt;artid&gt;A1001&lt;/artid&gt;
  &lt;descr&gt;Description here&lt;/descr&gt;
  &lt;price&gt;12.89&lt;/price&gt;
&lt;/article&gt;
&lt;article id=&quot;2&quot;&gt;
  &lt;artid&gt;B2002&lt;/artid&gt;
  &lt;descr&gt;Description here&lt;/descr&gt;
  &lt;price&gt;8.49&lt;/price&gt;
&lt;/article&gt;
&lt;/articles&gt;</pre>

<p>&nbsp;<br/>Per XPATH werden alle Knoten 'article' mit dem Attribut id = 2 selektiert. (Sollte in diesem Beispiel eindeutig sein, d.h. der Primärschlüssel.)</p>

<pre class="brush: php; gutter: false;">&lt;?php
header(&quot;Content-type: application/json&quot;);
echo &quot;{&quot;;

if (isset($_GET[&quot;id&quot;])) {
  
  $xml = simplexml_load_file(&quot;data.xml&quot;); 
	
  foreach($xml-&gt;xpath(&quot;//article[&quot; . $_GET[&quot;id&quot;] . &quot;]&quot;) as $item) {
    echo &quot;\&quot;artid\&quot;:\&quot;&quot; . $item-&gt;artid . &quot;\&quot;,&quot;;
    echo &quot;\&quot;descr\&quot;:\&quot;&quot; . htmlspecialchars($item-&gt;descr) . &quot;\&quot;,&quot;;
    echo &quot;\&quot;price\&quot;:&quot;   . $item-&gt;price . &quot;&quot;;		
  } 
}
else {
  echo &quot;\&quot;error\&quot;:\&quot;no data\&quot;&quot;;
}

echo &quot;}&quot;;
?&gt;</pre>

<p>&nbsp;<br/>Die Antwort zur ID 2 ist ein JSON-Objekt:</p>

<pre class="brush: js; gutter: false;">{
  "artid": "B2002",
  "descr": "Description here",
  "price":  8.49	
}</pre>
]]></description>
<link>http://unckel.de/v6/post.aspx?id=264</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Smartphone Screen Sizes</title>
<description><![CDATA[<p>Typische Auflösungen von Smartphones im Vergleich:</p>
<a style="border:none;" href="http://unckel.de/v6/data/files/smartphone-screen-sizes.png"><img src="http://unckel.de/v6/data/files/smartphone-screen-sizes.png" alt="smartphone screens sizes" style="width:300px; border:solid 1px #999; padding:2px;" /></a>]]></description>
<link>http://unckel.de/v6/post.aspx?id=263</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Wordpress: Untermenüpunkte nur bei Klick auf Elternpunkt sichtbar</title>
<description><![CDATA[<p>Kleines Snippet zu einer Navigation mit 2 Ebenen in typischer Listenverschachtelung. Die Unterebenen sollen jedoch nur dann zu sehen sein, wenn der Eltern-Menüpunkt angeklickt wurde:</p>

<img src="data/files/wp-menues.jpg" alt="Wordpress Navigation Beispiel" style="border:solid 1px #E7E5DC" />

<pre class="brush: js; gutter: false;">
&lt;?php
  global $post; // http://www.sitepoint.com/forums/showthread.php?t=668865
  $thispage = $post-&gt;ID; // grabs the current post id
  $pagekids = get_pages('child_of='.$thispage); // gets a list of pages that are sub pages
?&gt;

&lt;?php if ($pagekids || ($post-&gt;post_parent &gt; 0)) { // exists sub pages OR selected a sub page ?&gt;
  &lt;ul&gt;
    &lt;?php wp_list_pages('title_li='); // display all pages ?&gt;
  &lt;/ul&gt;
&lt;?php } else { ?&gt;
  &lt;ul&gt;
    &lt;?php wp_list_pages('depth=1&amp;title_li='); // display only parent pages ?&gt;
  &lt;/ul&gt;
&lt;?php } ?&gt;
</pre>

]]></description>
<link>http://unckel.de/v6/post.aspx?id=262</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Links rund um HTML5</title>
<description><![CDATA[<ul>
<li><a href="http://praegnanz.de/weblog/htmlcssjs-kickstart">HTML5/CSS/JS-Kickstart 1.4</a></li>
<li><a href="http://html5boilerplate.com/">HTML5 ★ Boilerplate - HTML5 Template</a></li>
<li><a href="http://diveintohtml5.org/">Dive Into HTML5</a></li>
<li><a href="https://developer.mozilla.org/en/HTML/Canvas">MDC - HTML-Element: Canvas</a></li>
<li>Schöner malen mit <a href="http://processingjs.org/">Processing.js</a></li>
</ul>

<p>...to be continued...</p>]]></description>
<link>http://unckel.de/v6/post.aspx?id=261</link>
<pubDate> / </pubDate>
</item>
<item>
<title>Position eines Street View-Panoramas über Panorama-ID ermitteln (Google Maps Javascript API V3)</title>
<description><![CDATA[<p>Jedes Panorama hat eine eindeutige ID. (IDs sind nur während einer Session stabil!) Über die Methode <a href="http://code.google.com/apis/maps/documentation/javascript/reference.html#StreetViewPanorama">getLinks()</a> werden zum aktuellen Street View-Panorama ein Array der verbundenen Straßen mit Name, Richtung und IDs der nächsten Panoramen zurückgeliefert. Leider aber nicht die einzelnen Positionen.</p>
 
<p>Eine Möglichkeit bietet die <a href="http://code.google.com/apis/maps/documentation/javascript/reference.html#StreetViewService">StreetViewService-Klasse</a>. Die Methode getPanoramaById() liefert dazu ein StreetViewPanoramaData-Objekt zurück welches unter anderem die Position enthält.</p>

<pre class="brush: js; gutter: false;">
//...

var sv = new google.maps.StreetViewService();
var panoramaLinks = panorama.getLinks();
for (var i in panoramaLinks) {
  sv.getPanoramaById(panoramaLinks[i].pano, processSVData)
}

//...
 
function processSVData(data, status) {
  if (status == google.maps.StreetViewStatus.OK) {
    alert(data.location.latLng);
  }
}
</pre>

 
<p>Jetzt ist man in der Lage z.B. die Positionen der nächsten Panoramen auf einer Karte zu markieren oder die Entfernungen zur aktuellen Position auszurechnen. Letzteres ist wiederum wichtig wenn es um eine möglichste genaue Simulation einer virtuellen Fahrt durch Street View geht.</p>

<p>Bei kurzen Tests rund um den Globus, scheinen die Panoramen immer mindestens 10 m Abstand zu haben. Eine Unterschreitung habe ich nie gesehen. Auf Landstraßen können es auch schon mal über 40 m sein.</p>

<p>Link: <a href="http://code.google.com/apis/maps/documentation/javascript/">Google Maps Javascript API V3</a></p>

<em>(Stichworte: google, street view, api, location, position, distance)</em>]]></description>
<link>http://unckel.de/v6/post.aspx?id=260</link>
<pubDate> / </pubDate>
</item>
<item>
<title>.NET: Webcam in Windows Forms-Anwendung mit OpenCV über Emgu CV-Wrapper integrieren</title>
<description><![CDATA[<p>Hier ein "HelloWorld"-Beispiel, wie man eine USB-Cam in einer Visual Studio Windows Forms-Anwendung in C# einbindet. Über den <a href="http://www.emgu.com/">Emgu CV-.Net-Wrapper</a> wird die <a href="http://opencv.willowgarage.com/">OpenCV Library</a> (Open Source <a href="http://en.wikipedia.org/wiki/Computer_vision">Computer Vision</a>) verwenden. Diese enthält unzählige Algorithmen für die Bildverarbeitung und maschinelles Sehen. Also z.B. Filter, Gesichts- und Bewegungserkennung usw. Das ganze ist auch ziemlich schnell in der Verarbeitung.</p>

<p>Getestet und programmiert mit Visual Studio 2008 mit SP1 (ServicePack ist wichtig) auf Windows 7 (32) und Windows XP (32).</p>

<strong>Vorgehen:</strong>
<ol style="margin-left:10px; padding-left:10px;">
<li>Download Emgu inkl. OpenCV: libemgucv-2.1.0.793-win32.exe von <a href="http://sourceforge.net/projects/emgucv/files/">http://sourceforge.net/projects/emgucv/files/</a> (prinzipiell benötigt man nur die paar DLLs beim Download sind aber noch Beispiele, eine Doku usw. dabei.)</li>
<li>Bei der Installation die vorgewählten Optionen belassen.</li>
<li>Neues Windows Forms-Anwendung-Projekt anlegen und Timer und PictureBox in die Form setzen.</li>
<li>Alle relevanten OpenCV- und Emgu-DLLs in den Anwendungsordner (\bin) kopieren und auf die Emgu-DLLs in Visual Studio verweisen.</li>
</ol>

<pre class="brush: c-sharp; gutter: false;">
using System;
using System.Drawing;
using System.Windows.Forms;

using Emgu.CV;
using Emgu.CV.Structure;

namespace WebCamSimpleTest
{
  public partial class Form1 : Form
  {
    private Capture capture;

    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      capture = new Capture(0); // 0 = get first cam
      timer1.Interval = 40;     // 40 ms = 25 fps
      timer1.Enabled = true;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
      using (Image&lt;Bgr, byte&gt; nextFrame = capture.QueryFrame())
      {
        pictureBox1.Image = nextFrame2.ToBitmap();
      }
    }
  }
}</pre>]]></description>
<link>http://unckel.de/v6/post.aspx?id=259</link>
<pubDate> / </pubDate>
</item>
<item>
<title>SQL: Duplikate mit Anzahl ausgeben</title>
<description><![CDATA[<p>Ausgabe aller Duplikate (einer Spalte) und deren Anzahl per SQL ermitteln.</p>

<pre class="brush: sql; gutter:false;">
SELECT Spalte, (COUNT(*)-1) AS Anzahl
FROM Tabelle
GROUP BY Spalte
HAVING COUNT(*)>1
ORDER BY COUNT(*) DESC;
</pre>

<table class="contentDataTable">
    <thead>
        <tr>
            <th>Spalte</th>
            <th>Anzahl</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>A. Müller</td>
            <td>5</td>
        </tr>
        <tr>
            <td>B. Schneider</td>
            <td>2</td>
        </tr>
        <tr>
            <td>W. Weber</td>
            <td>1</td>
        </tr>
    </tbody>
</table>]]></description>
<link>http://unckel.de/v6/post.aspx?id=257</link>
<pubDate> / </pubDate>
</item>
</channel>
</rss>

