tag:blogger.com,1999:blog-90062663444766605392024-03-19T05:26:02.683+01:00MarmelAnonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.comBlogger84125tag:blogger.com,1999:blog-9006266344476660539.post-21834709717681330972015-07-22T21:03:00.000+02:002015-07-22T21:03:02.978+02:00Visual Studio 2015 und Android <div style="text-align: justify;">
Eine der größten Neuerungen von Visual Studio 2015 ist die Unterstützung von Android und iOS. Dies war im Prinzip bereits mit älteren Versionen möglich musste aber teilweise umständlich installiert werden. Es waren immer Zusätze von Drittanbietern. Neu ist in 2015 nur das diese Tools direkt bei der Installation mit installiert werden. Android (und auch iOS) können in C++ und C# programmiert werden. Für C# wird Xamarin benutzt und es wird eine entsprechene Lizenz benötigt. Ohne diese kann man zwar entsprechende Vorlagen erstellen und auch den Quelltext editieren. Eine Erzeugung von Apps und ein Debuggen ist aber nur mit der Lizenz möglich! Für die Entwicklung mit C++ benötigt man keine Lizenz eines Drittherstellers. Für Android verwendet VS2015 NDK und das ADK von Google sowie das JDK von Oracle. Da ich kein iOS-Entwickler bin kann ich keine entsprechende Ausage dazu weiter machen was dort benutzt wird. </div>
<div style="text-align: justify;">
Negativ sehe ich das die Installationsroutine kein installiertes ADK und NDK sowie JDK erkennt und diese neu installiert. Diese werden dann im Programmordner installiert. Wer diese nicht doppelt haben möchte kann dann die bereits installierten Teile löschen. Danach müssen dann aber die Pfade in Eclipse, Androidstudio oder was ihr sonst so verwendet angepasst werden. Hier hätte ich mir eine bessere Lösung gewünscht.</div>
<div style="text-align: justify;">
Positiv finde ich das es möglich ist plattformübergreifende Librarys zu erstellen. Allerdings nur für iOS und Android. Fehlt noch Windows. Vielleicht habe ich da auch was übersehen. </div>
<div style="text-align: justify;">
Insgesamt gesehen macht VS 2015 einen guten Eindruck und ist ein Meilenstein für eine Entwicklungsumgebung, hat aber noch Potential. Ich werde die Möglichkeiten der Android-Entwicklung auf VS 2015 jedenfalls in nächster Zeit ausführlich testen. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
PS Mit der Option C++ ist es auch möglich Android-Apps nur in Java zu erstellen!</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-TWfKCJvwkqs/Va_nZe0RKBI/AAAAAAAAJQQ/zOlOsJEF2Lg/s1600/VS2015.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="111" src="http://3.bp.blogspot.com/-TWfKCJvwkqs/Va_nZe0RKBI/AAAAAAAAJQQ/zOlOsJEF2Lg/s200/VS2015.png" width="200" /></a></div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-16591051125129374332015-06-15T16:35:00.000+02:002015-06-15T16:35:03.774+02:00Luthers Hochzeit - Das Wittenberger Stadtfest - Kritische Betrachtungen<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-huSB4-BEi-A/VX6q9ta2xuI/AAAAAAAAJEM/2Oh0AEVnAPc/s1600/IMG_20150612_172333.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="http://3.bp.blogspot.com/-huSB4-BEi-A/VX6q9ta2xuI/AAAAAAAAJEM/2Oh0AEVnAPc/s200/IMG_20150612_172333.jpg" width="200" /></a></div>
In der Mitteldeutschen Zeitung und beim Mitteldeutschen Rundfunk liest man leider nur Lobhudeleien über das jährlich stattfindende Stadtfest "Luthers Hochzeit". Dieses Jahr feierte man den 490. Hochzeitstag Luthers mit Katharina von Bora, Es war die 21. Auflage des Stadtfestes welches man hier seit 22 Jahren feiert, einmal fiel es aus wegen Hochwasser in der Umgebung. Böse Zungen behaupten heute noch der Ausfall kam nur zu Stande weil die Stadtoberen und der Landrat hätten nicht mitfeiern können. Das aktuelle Stadtfest war recht ordentlich, auch wenn es prinzipiell immer das selbe ist und es kaum Änderungen gibt. Trotzdem gibt es etliche Kritikpunkte die mir aufgefallen sind und die man doch in der Zukunft vermeiden könnte:<br />
<br /></div>
<div style="text-align: justify;">
</div>
<ul>
<li>Zufahrtswege.
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-sGBJSuK7CLo/VX6x5rzUUQI/AAAAAAAAJFk/6zseFouyOZI/s1600/IMG_20150614_182238.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="http://4.bp.blogspot.com/-sGBJSuK7CLo/VX6x5rzUUQI/AAAAAAAAJFk/6zseFouyOZI/s200/IMG_20150614_182238.jpg" width="200" /></a></div>
<div style="text-align: justify;">
Besonders die Juristenstraße war eine Zumutung. Eine dort befindliche Baustelle störte ungemein. Diese hätte fertig sein müssen. Wenn man aber sah wie die dort tätige Baufirma arbeitete war eigentlich klar das die nicht funktioniert. Was wäre gewesen wenn auf dem Arsenalplatz etwas passiert wäre das einen größeren Rettungseinsatz erfordert hätte? Der in der Juristenstraße stationierte Rettungsdienst hätte keine schnelle Ausfahrt gehabt und hätte sich durch die Menschenmassen in der Gegenrichtung quälen müssen.</div>
</li>
</ul>
<br />
<ul>
<li>Abfallkörbe. <div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-evdYmaJjea4/VX6x52CBQvI/AAAAAAAAJFo/b9vsXNaPI4M/s1600/IMG_20150614_183917.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Überquellender Abfallkorb" border="0" height="150" src="http://2.bp.blogspot.com/-evdYmaJjea4/VX6x52CBQvI/AAAAAAAAJFo/b9vsXNaPI4M/s200/IMG_20150614_183917.jpg" title="Überquellender Abfallkorb" width="200" /></a></div>
<div style="text-align: justify;">
In Wittenberg gibt es leider viel zuwenig Abfallbehälter. Die quollen auch noch über und wurden scheinbar nicht regelmäßig gelehrt so das viel Müll dann einfach auf Straßen und in Parks abgelegt wurde. Kein schönes Bild für eine Stadt die auf Tourismus setzt. Dies ist übrigens ein Problem welches unabhängig vom Stadtfest besteht nur dann besonders auffällt.</div>
</li>
</ul>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<ul>
<li style="text-align: justify;">Programmheft. Es waren viele ausländische Gäste vor Ort welche kein deutsch sprachen. Das es das Programmheft nur in deutsch gibt ist für eine Stadt die so gerne auf Tourismus setzt eine Frechheit. Es wäre hier erforderlich das es das Programmheft wenigstens in Englisch gibt, Überhaupt bedarf das Programmheft einer dringenden Überarbeitung. Es ist teilweise sehr unübersichtlich. Warum die Angabe der Zeiten so unterschiedlich ist wird wohl auch niemand wissen. warum werden die Endzeiten der einzelnen Events nur manchmal angegeben und nicht immer? Warum wird der Arsenalplatz getrennt gelistet? Und überhaupt das angegebene Tagesende stimmt nie! Wenn im Programmheft 2 Uhr steht erwarte ich das die Events bis zur angegebenen Zeit gehen und nicht bereits um 0:30 Uhr enden wie am Freitag und Samstag auf dem Arsenalplatz! Es ist sowieso für ein Stadtfest ein sehr zeitiges Ende. Von Festen in anderen Städten ist mit ein Ende gegen 5 Uhr bekannt, In den Anfangsjahren des Stadtfestes gab es das übrigens in Wittenberg auch das man die Nacht durchmachen konnte.</li>
</ul>
<div>
<br /></div>
<ul>
<li style="text-align: justify;">Sicherheitsdienst. Diesen kann man nur loben, zumindest die Mitarbeiter welche vor Ort agierten. Sie waren sehr freundlich und versuchten fehlende (Orts-)Kenntnisse weitestgehend zu kompensieren. Warum auf manche Plätzen nur einseitig der Zugang kontrolliert wurde ist mir nicht ganz klar. Dies habe ich mehrfach beobachtet, besonders am Kirchplatz.</li>
</ul>
<div>
<br /></div>
<ul>
<li style="text-align: justify;">Standverzeichnis. Was beim Stadtfest grundsätzlich fehlt ist ein Verzeichnis der Händler, Wirte und anderen Standbetreiber.</li>
</ul>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<ul>
<li>Der Lutherdarsteller.<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-fbp1I3RctG0/VX7IdIMm0gI/AAAAAAAAJF8/NJoitsZMtXk/s1600/Screenshot_2015-06-15-14-26-30.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-fbp1I3RctG0/VX7IdIMm0gI/AAAAAAAAJF8/NJoitsZMtXk/s200/Screenshot_2015-06-15-14-26-30.png" width="120" /></a></div>
Es geht nicht das dieser bereits am Nachmittag bereits angetrunken durch die Gegend läuft wie man bei <a href="http://goo.gl/8JMe8j" rel="nofollow" target="_blank">Twitter</a> lesen konnte. Da sollte man vielleicht eine bessere Auswahl treffen!</li>
</ul>
</div>
<div style="text-align: justify;">
<br />
<ul>
<li>Die Preise. Sie waren durchaus angemessen, Was aber nicht geht sind unterschiedliche Preise für das selbe Produkt. Andere Städte schreiben beispielsweise die Preise für Bratwürst vor. In Wittenberg gab es Bratwurst von 1,50 € bis 3,50 €. Wir haben zwar Marktwirtschaft aber die kann man auch mal außer Betrieb nehmen bei solchen Festen. Die Städte im Rheinland schaffen das während des Karnevals ja auch.</li>
</ul>
<br />
<br />
<br />
Das sind meine Kritikpunkte welche doch recht eindeutig sind und nun kommen wir zu meiner persönlichen Analyse der Ereignisse auf dem Arsenalplatz. Da Geschmäcker verschieden sind mögen andere Besucher dies garantiert anders sehen.<br />
<br />
Die dort stattfindenden Events waren sehr durchwachsen, von geht gar nicht bis ganz gut. Aber ein außergewöhnlicher Auftritt war nicht zu vermerken. Ich könnte jetzt jeden einzelnen Auftritt analysieren den es gab, aber das würde den Rahmen sprengen zumal so etwas Geschmackssache ist. In Zukunft sollte man aber eine bessere Auswahl treffen und keine abgehalfterten DSDS- und Schlagerstars einladen. Leute die niemand auf längere Zeit ertragen kann. Positiv sehe ich die Moderation durch Karsten Giersch. <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-0SvhPoS7Qn8/VX6v0kJXDrI/AAAAAAAAJFM/Bd7X8RaxP1o/s1600/IMG_20150614_175551.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="http://1.bp.blogspot.com/-0SvhPoS7Qn8/VX6v0kJXDrI/AAAAAAAAJFM/Bd7X8RaxP1o/s200/IMG_20150614_175551.jpg" width="200" /></a></div>
Die beiden Moderatoren des MDR Sachsen-Anhalt waren dagegen das letzte, Schlecht angezogen und schlecht vorbereitet. Dies wurde deutlich bei vielen Fehlern in ihren Ansagen! Da muss der MDR nachbessern, eventuell auch bei der Auswahl der Künstler. Diese wird von Jahr zu Jahr übrigens schlechter! Auch diese unerträglich langen Pausen zwischen Vormittag-, Nachmittag- und Abendevents sind bei vielen Besuchern nicht gut angekommen. Lichtblick war allerdings die Regenpause am Samstagnachmittag wodurch Silke und Dirk Steinberg aufhören mussten, eine Wohltat für die meisten Zuschauer vor Ort.<br />
<br />
Die Bewirtung auf dem Platz ließ auch zu wünschen übrig. Stellenweise war das Bier zu warm und nicht alle Bierstände geöffnet. Das das Bier an einzelnen Ständen bereits am Sonntag 2 Stunden vor dem offiziellen Ende alle war zeugt auch nicht gerade von großer Professionalität. Von den über Tage defektem Sonnenschirm will ich gar nicht reden, er passt voll ins Bild des Betreibers. Gut waren die Besucher dran die sich ihre Getränke selbst mitgebracht hatten weil das dortige Angebot doch sehr dürftig war in den Augen vieler.<br />
<br />
Fazit:<br />
Es war ein Stadtfest welches besonders organisatorisch noch viele Mängel hat. Positiv sehe ich den Einsatz aller Teilnehmer und die gute Laune der Zuschauer. Aber es muss sich einiges tun ansonsten werden es noch weniger Zuschauer. Die Anzahl der Zuschauer - so die mehrheitliche Meinung der Besucher - ist seit Jahren ja gefühlt rückläufig.</div>
<div style="text-align: justify;">
</div>
<br />
<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-15662808523139543512015-01-04T20:30:00.000+01:002015-01-04T20:58:18.529+01:00Sterbehilfe und warum deutsche "Experten" dagegen sind.<div style="text-align: justify;">
Nach dem nun in Belgien ein Straftäter für sich das Recht auf Tötung erstritten hat, aus Gründen die ich nachvollziehen kann, ereifern sich sogenannte Experten aus Deutschland wieder wie schlimm doch aktive Sterbehilfe ist. Das ist doch völliger geistiger Dünnschiss.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In der <a href="http://www.bild.de/politik/ausland/aktive-sterbehilfe/deutsche-sterbehilfe-organisation-empoert-ueber-rechtssprechung-in-belgien-39191754.bild.html" rel="nofollow" target="_blank">Bild</a> wird berichtet das der Stiftungs-Vorstand Eugen Brysch der Deutschen Stiftung Patientenschutz sagte: „Der Fall in Belgien muss Folgen für die aktuelle Debatte um Sterbehilfe in Deutschland haben. Wenn Sterbehilfe erlaubt ist, verabschiedet sich die Gesellschaft viel zu schnell von Begleitung und Linderung von Kranken und Sterbenden.”</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Prof. Christoph Ostgathe, Vize-Präsident der Deutschen Gesellschaft für Palliativmedizin (DGP) sage ebenfalls bei <a href="http://www.bild.de/news/ausland/belgien/warum-bekommt-belgier-sterbehilfe-statt-lebenslang-37698140.bild.html" rel="nofollow" target="_blank">Bild</a>: „Wir sind erschüttert über dieses Urteil. Das Töten gehört nicht den ärztlichen Aufgaben. Es macht deutlich, welches Verhältnis in Belgien zum Thema Tod herrscht – Kranken, die den Druck spüren, Angehörigen nicht zur Last zu fallen oder keine Ausgrenzung erleben wollen, werden solche Türen geöffnet".</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Liebe Herren Brysch und Ostgathe ihr seid nichts weiter als Heuchler, so wie alle Mediziner und Pflegedienstleister die eine aktive Sterbehilfe ablehnen. Euch geht es <b>nicht</b> um den Menschen sondern nur um euren Profit. An einem Mensche den ihr mit aller Gewalt nicht sterben lassen könnt ihr natürlich deutlich mehr verdienen als an einem Menschen der bewusst sterben möchte. So könnt ihr noch im Idealfall jahrelang Geld kassieren für das "Quälen" eines Menschen.</div>
<br />
<div style="text-align: justify;">
<span style="color: red;"> <b>Schämt euch! </b></span></div>
<br />
<div style="text-align: justify;">
Wenn ihr wirklich so human wärt wie ihr Euch immer darstellt, würdet ihr euch dafür einsetzen das es in Deutschland auch aktive Sterbehilfe gibt!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Gleiches gilt für alle die mit Sterbenden ihr Geld verdienen! Für den Einzelnen in der Gesellschaft allerdings muss es allerdings immer seine eigene Gewissensentscheidung bleiben!<br />
<br />
<br />
<br />
<a href="http://goo.gl/jSe8D0" rel="nofollow" target="_blank">PS. Passend dazu eine kleine Umfrage</a></div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-73259219045859174682014-02-21T17:00:00.000+01:002014-02-21T17:00:00.210+01:00Gibt es einen Gott?<div dir="ltr">
<div style="text-align: justify;">
Eine berechtigte Frage die natürlich unterschiedlich beantwortet wird. Die Vertreter monotheistischer Glaubensrichtungen sagen <b>ja</b>. Vertreter des Multitheismus sagen ja, aber es gibt nicht nur einen sondern <b>mehrere</b> und Atheisten beantworten diese Frage mit nein. Wer hat nun Recht? Naturwissenschaftler tendieren eher zum <b>nein</b>. Allerdings ist es gelungen die Existenz eines Gottes <a href="http://www.heise.de/tp/artikel/39/39766/1.html" target="_blank">rechnerisch</a> zu beweisen. </div>
</div>
<div dir="ltr">
<div style="text-align: justify;">
<br />
Historisch gesehen konnten die Menschen früher vieles nicht erklären und deuten. Da haben sie eben ein (oder mehrere) göttliches Wesen für sie unerklärliche Phänomene verantwortlich gemacht. Im Laufe der zunehmenden Erkenntnis der Zusammenhänge allerdings wurden diese wieder in Frage gestellt.</div>
</div>
<div dir="ltr">
<div style="text-align: justify;">
<br />
Ich allerdings bin nach langwierigen Studien zu dem Ergebnis gekommen jeder hat Recht. Dies kommt eben auf die Sichtweise an. Göttliche Wesen oder einen Gott und auch seinen Gegenspieler den Teufel gibt es so wie ihn sich Religionen ihn vorstellen nicht. Was es aber gibt ist eine Lebensform im Universum die wir im Normalfall nicht wahrnehmen können, es sei denn sie zeigen sich uns. Und diese Speziell ist die Spezie der <b><a href="http://de.memory-alpha.org/wiki/Q_(Spezies)" target="_blank">Q</a></b> welche ja bekanntlich im Kontinuum leben. Diese über auf das gesamte Universum einen solchen Einfluss auf der er uns Menschen eben göttlich erscheint.</div>
</div>
<div dir="ltr">
<div style="text-align: justify;">
<br />
<br />
In diesem Sinne: Tai nasha no karosha. <b>\\//_</b><br />
<br />
<br />La-kuramano Marmel</div>
</div>Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-25589027862024582992014-01-31T15:23:00.003+01:002014-01-31T15:23:25.356+01:00Chrome Erweiterung für Radioplayer<div class="separator" style="clear: both; text-align: center;">
<a href="https://chrome.google.com/webstore/detail/radio-player/nhjdkfecmdnbikkekhphmjnffliogfkc" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" target="_blank"><img alt="Radioplayer Extension" border="0" src="http://2.bp.blogspot.com/-rgelqgG4Nto/Uuuv7JupzhI/AAAAAAAAFW4/rPWeBh53EcQ/s1600/128.png" title="Radioplayer Extension" /></a></div>
<br />
<div style="text-align: justify;">
Ich hatte ja eine Erweiterung für den <a href="http://www.google.de/intl/de/chrome/browser/" target="_blank">Google Chrome Browser</a> geschrieben. Diese Erweiterung listet alle PLS und M3U Links auf einer Webseite auf. Diese können dann direkt gespeichert oder geöfnet werden bzw. per Drag&Drop von einem geeignetes Programm (z.B. mein RadioPlayer) übernommen werden. Der Download wurde bisher von mir direkt zur Verfügung gestellt. Da Chrome ja nur noch Extensions unterstützt welche über den <a href="http://www.google.de/intl/de/chrome/webstore/extensions.html" target="_blank">Chrome Web Store</a> kommen habe ich die Extension auf den neuesten Stand gebracht und biete sie ab sofort über den Webstore kostenlos an.</div>
<a name='more'></a><div style="text-align: justify;">
Natürlich kann man Erweiterungen auch von anderen Quellen weiterhin laden und installieren. Allerdings geht dies nicht mehr direkt wie über dern Webstore. Man muss dazu erst der geladenen CRX-Datei als ZIP-Datei umbenennen, dann entpacken. Jetzt kann man im Chromebrowser in der Erweiterungsverwaltung auf Entwicklermodus schalten und die in einem Verzeichnis liegende Erweiterung installieren. Für den normalen User zu kompliziert und deshalb ist der Weg über den Store einfacher für User. Selbst der Entwickler profitiert von dieser Variante weil er so leicht Rückmeldungen bekommt, automatische Updates für die User bereitgestellt werden und er nicht erst die CRX-Datei erzeugen muss sondern die ZIP-Datei direkt uploadet.</div>
<br />
<br />
<a href="https://chrome.google.com/webstore/detail/radio-player/nhjdkfecmdnbikkekhphmjnffliogfkc" target="_blank">Hier</a> gehts zur Erweiterung für den Radioplayer.Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-79963194130303205682013-10-23T16:33:00.001+02:002013-10-23T16:33:42.899+02:00Mein Star Trek CharakterWeil es scheinbar in ist sein Ergebnis im eigenen Blog zu veröffentlichen kann ich mich diesem nicht entziehen.<br />
<br />
Allerdings fühle, denke und lebe ich eher wie ein Vulcanier. In diesem Sinne:<br />
<b>Tai nasha no karosha.</b><br />
<br />
<br />
<br />
Your results:<br />
<b>You are <span style="font-size: x-large;">Data</span></b>
<br />
<table><tbody>
<tr><td><table><tbody>
<tr><td>Data</td>
<td><hr align="LEFT" noshade="" size="4" width="86" />
</td><td>86%</td>
</tr>
<tr><td>Worf</td>
<td><hr align="LEFT" noshade="" size="4" width="80" />
</td><td>80%</td>
</tr>
<tr><td>Jean-Luc Picard</td>
<td><hr align="LEFT" noshade="" size="4" width="75" />
</td><td>75%</td>
</tr>
<tr><td>Mr. Scott</td>
<td><hr align="LEFT" noshade="" size="4" width="75" />
</td><td>75%</td>
</tr>
<tr><td>Geordi LaForge</td>
<td><hr align="LEFT" noshade="" size="4" width="70" />
</td><td>70%</td>
</tr>
<tr><td>Spock</td>
<td><hr align="LEFT" noshade="" size="4" width="70" />
</td><td>70%</td>
</tr>
<tr><td>Mr. Sulu</td>
<td><hr align="LEFT" noshade="" size="4" width="65" />
</td><td>65%</td>
</tr>
<tr><td>Leonard McCoy (Bones)</td>
<td><hr align="LEFT" noshade="" size="4" width="65" />
</td><td>65%</td>
</tr>
<tr><td>Beverly Crusher</td>
<td><hr align="LEFT" noshade="" size="4" width="65" />
</td><td>65%</td>
</tr>
<tr><td>An Expendable Character (Redshirt)</td>
<td><hr align="LEFT" noshade="" size="4" width="65" />
</td><td>65%</td>
</tr>
<tr><td>Chekov</td>
<td><hr align="LEFT" noshade="" size="4" width="60" />
</td><td>60%</td>
</tr>
<tr><td>Deanna Troi</td>
<td><hr align="LEFT" noshade="" size="4" width="55" />
</td><td>55%</td>
</tr>
<tr><td>Will Riker</td>
<td><hr align="LEFT" noshade="" size="4" width="50" />
</td><td>50%</td>
</tr>
<tr><td>Uhura</td>
<td><hr align="LEFT" noshade="" size="4" width="45" />
</td><td>45%</td>
</tr>
<tr><td>James T. Kirk (Captain)</td>
<td><hr align="LEFT" noshade="" size="4" width="30" />
</td><td>30%</td>
</tr>
</tbody></table>
</td>
<td>Even though you are a genius<br />
you are always striving to be better.<br />
<img src="http://www.seabreezecomputers.com/startrek/pics/data.jpg" /></td>
</tr>
</tbody></table>
<a href="http://www.seabreezecomputers.com/startrek">
Click here to take the Star Trek Personality Test</a>Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-1403662671874056112013-10-14T17:47:00.001+02:002013-10-14T17:47:18.265+02:00Blogger Tipp Nr. 13 - My Tracks einbinden (2)<div style="text-align: justify;">
Eine Möglichkeit My Tracks auf die eigene Webseite zu bringe hatte ich ja bereits beschrieben. Wie <a href="http://marmelblog.blogspot.co.uk/2013/10/blogger-tipp-nr-13-my-tracks-einbinden-1.html">dort</a> bereits angekündigt nun der Teil wie man einen eigenen Viewer benutzt. Dazu benötigt man etwas Javascript. die fertige Bibliothek gibt es bei <a href="http://www.j-berkemeier.de/GPXViewer/" target="_blank">Jürgen Berkemeier</a> zum Download. Damit fangen die Probleme für Blogger an denn man kann ja bekannterweise keine Dateien ins System einspielen. Damit brauche ich einen externen Host auf dem ich die JavaScript-Bibliotheken und eine HTML Seite speichern kann. Dies kann man komischerweise nicht auf Google Drive machen obwohl es ja HTML und JavaScript unterstützt. Bei mir wurde zwar eine Ausgabe erzeugt, aber komischerweise die Map nicht dargestellt. Ursache ist mir unbekannt und ich habe es auch nicht weiter verfolgt. Auf komplett externen Webspace lief es dann allerdings problemlos. Die dort angelegte HTML-Seite bindet ihr dann in euren Blog per InlineFrame ein. Der Vorteil dieser Lösung nämlich auch OpenStreetMap zu benutzen geht natürlich durch die Schwierigkeiten verloren. Wer allerdings eigenen WebSpace besitzt kann dies gerne nutzen. Der Einfachheit halber empfehle ich für Nutzer von Blogspot/Blogger allerdings die von mir im vorherigen Post beschriebene Variante. Die genauen Einzelheiten was man an bei der Version mit einem GPX-Viewer machen muss sind gut auf der <a href="http://www.j-berkemeier.de/GPXViewer/" rel="" target="_blank">Webseite</a> beschrieben, so dass ich hier nicht weiter darauf eingehen werde.</div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-24576825559543327392013-10-01T20:14:00.003+02:002013-10-14T17:32:53.807+02:00Blogger Tipp Nr. 12 - My Tracks einbinden (1)In <a href="https://plus.google.com/106860011182406338515/posts/WRDA7Tp9pmx">Google+</a> kam die Frage auf wie man Tracks die man mit My Tracks erstellt hat in Blogger/Blogspot einbindet. Dies ist gar nicht so schwer. Da <a href="https://play.google.com/store/apps/details?id=com.google.android.maps.mytracks">My Tracks</a> normale gpx-Dateien verwendet geht die natürlich mit allen gpx-Dateien, auch von anderen Trackern. Um dies zu demonstrieren habe ich im Internet eine entsprechende <a href="http://www.gpx-touren.de/trackanzeige/silbersee.php?zeige=gpx-bike/silbersee.gpx">Datei</a> heruntergeladen, ich hätte aber auch selbst einen Track aufzeichnen können.<br />
<br />
<a name='more'></a><br />
In der App gibt es eine Exportfunktion - dort müsst ihr nur euren Track nach Goggle Maps exportieren. Danach Google Maps öffnen und die entsprechende Karte uner "Meine Orte" suchen. Dort erhaltet ihr einen Quellcode den ihr nur noch auf eure Seite übernehmen müsst. Dir Krte könnt ihr natürlich vorher noch anpassen.<br />
Das Ergebnis sieht dann so aus:<br />
<br />
<iframe frameborder="0" height="500" marginheight="0" marginwidth="0" scrolling="no" src="https://maps.google.de/maps/ms?msa=0&msid=212706415472957889233.0004e7b17f342d844ea1e&ie=UTF8&t=m&ll=51.797487,7.24129&spn=0.012822,0.021935&output=embed" width="500"></iframe><br />
<small><a href="https://maps.google.de/maps/ms?msa=0&msid=212706415472957889233.0004e7b17f342d844ea1e&ie=UTF8&t=m&ll=51.797487,7.24129&spn=0.012822,0.021935&source=embed" style="color: blue; text-align: left;">SILBERSEE3</a> auf einer größeren Karte anzeigen</small>
<br />
<small><span style="font-size: small;"><br /></span></small>
Eine weitere Möglichkeit ist die Verwendung eines eigenen GPX Viewers, diesen gibt es als Javascript und kann dann auch eingebunden werden. Wie man dies macht werde ich demnächst in einem weiteren Post zeigen.Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-78321491795464701772013-09-28T12:00:00.000+02:002013-09-28T13:09:41.153+02:00Blogger Tipp Nr. 11 - Probleme mit eingebetteten BildernWie <a href="https://plus.google.com/app/basic/111826237840120715824/" target="_blank">+Oliver Doetsch</a> in seinem <a href="http://www.5202.de/2013/09/blogger-grauen-hintergrund-verpixelte.html">Blog 5202</a> schreibt gibt es wohl aktuell Probleme mit den eingebetteten Bildern. Lösungswege bietet er auch an. Für alle mit diesem Problem deswegen hier die Info das es Lösungen gibt. Ich selbst habe solche Probleme allerdings auch nicht bemerkt bisher. Aber Bilder sind ja bei mir eher die Ausnahme.Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-4386666039682182002013-08-12T08:45:00.003+02:002013-08-13T18:23:19.939+02:00Luthers HochzeitJährlich findet in der Lutherstadt Wittenberg ein Stadtfest unter dem Motto "Luthers Hochzeit" statt. Dafür gib es nun eine App die es Ihnen ermöglicht es ihren Besuch von Veranstaltungen
zum Wittenberger Stadtfest "Luthers Hochzeit" zu planen.<br /><a name='more'></a>
Die App listet alle Veranstaltungen auf (<a href="http://www.lutherhochzeit.de/" target="_blank">Quelle: Wittenberg Stadtmarketing</a>). Sie können geziehlt
Veranstaltungsorte auswählen. Ab einer Entfernung von ca. 10 km
besteht die Möglichkeit den von ihrem aktuellen Standort
nächsten Veranstaltungsort automatisch auswählen zu lassen.
<br />
Die App enthält auch eine Karte welche die
Veranstaltungsorte (und evtl. ihren Standort) anzeigt. Auf der Karte
können gezielt Veranstaltungsorte ausgewählt werden. Eine
Routenplanung von ihrem aktuellen Standort zum ausgewählten
Veranstaltungsort ist ebens möglich.<br />
Veranstaltungen in der Vergangenheit werden rot, in der Zukunft
schwarz dargestellt. Aktuell laufende Veranstaltungen sind in
grün dargestellt.<br />
Ein kurzer Klick auf den entsprechenden Eintrag öffnet ein
Fenster mit Details. Ein langer Klick öffnet ein Menü mit
weiteren Möglichkeiten, wie Eintrag in ihren Kalender oder Teilen
der Veranstaltung z.B. per Twitter oder Mail. Die
Teilungsmöglichkeiten sind abhängig von den auf ihrem
Gerät installierten Apps.<br />
<br />
<br />
<br />
<br />
<b>Viel Vergnügen beim
Feiern!</b>
<br />
<br />
<br />
<hr />
<h3>
<a href="https://play.google.com/store/apps/details?id=de.lutherhochzeit.app">Download:</a>
</h3>
<a href="https://play.google.com/store/apps/details?id=de.lutherhochzeit.app">
<img alt="Get it on Google Play" src="https://developer.android.com/images/brand/de_generic_rgb_wo_45.png" />
</a> <br />
<hr />
<h3>
Datenschutz:</h3>
Es werden nur die zur Funktion notwendigen Daten an die angezeigten Webseiten übermittelt. Was mit den Daten geschieht die an Webseiten übermittelt werden liegt in der Verantwortung des jeweiligen Webseitenbetreibers. Ich habe darauf keinen Einfluss.<br />
<br />
<hr />
<h3>
Technische Informationen:</h3>
Die App benötigt folgende Rechte:<br />
<ul>
<li><a href="http://developer.android.com/reference/android/Manifest.permission.html#INTERNET" target="_blank">android.permission.INTERNET</a> : Dieses Recht wird benötigt um Zugriff ins Internet zu haben. Ohne dieses würde weder der Browser noch Routenplanung funktionieren.</li>
<li><a href="http://developer.android.com/reference/android/Manifest.permission.html#ACCESS_FINE_LOCATION" target="_blank">android.permission.ACCESS_FINE_LOCATION</a> : Dieses Recht ermöglicht es die Genauigkeit der Ortung zu erhöhen.</li>
<li><a href="http://developer.android.com/reference/android/Manifest.permission.html#ACCESS_COARSE_LOCATION" target="_blank">android.permission.ACCESS_COARSE_LOCATION</a> : Dieses Recht ermöglicht es die Genauigkeit der Ortung zu erhöhen.</li>
<li><a href="http://developer.android.com/reference/android/Manifest.permission.html#ACCESS_WIFI_STATE" target="_blank">android.permission.ACCESS_WIFI_STATE</a> : Dieses Recht ermöglicht es die Genauigkeit der Ortung zu erhöhen.</li>
<li><a href="http://developer.android.com/reference/android/Manifest.permission.html#CHANGE_WIFI_STATE" target="_blank">android.permission.CHANGE_WIFI_STATE</a> : Dieses Recht ermöglicht es die Genauigkeit der Ortung zu erhöhen.</li>
<li><a href="http://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE" target="_blank">android.permission.WRITE_EXTERNAL_STORAGE</a> : Dieses Recht ermöglicht es die Datenbank lokal zu speichern.</li>
<li><a href="http://developer.android.com/reference/android/Manifest.permission.html#FLASHLIGHT" target="_blank">android.permission.FLASHLIGHT</a> : Dieses Recht ermöglicht die LED bei Benachrichtigungen zu blinken.</li>
<li><a href="http://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE" target="_blank">android.permission.ACCESS_NETWORK_STATE</a> : Dieses Recht ermöglicht es die Genauigkeit der Ortung zu erhöhen.</li>
<li><a href="http://developer.android.com/reference/android/Manifest.permission.html#VIBRATE" target="_blank">android.permission.VIBRATE</a> : Damit kann das Gerät bei Bedarf vibrieren.</li>
</ul>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-77580808523651197652013-08-06T11:18:00.000+02:002013-08-06T11:18:33.027+02:00Vegetarismus und Faschismus<div style="text-align: justify;">
Sind Vegetarier Faschisten? Um es kurz zu machen: Sie sind es <strong>nicht</strong> aber viele kann man ohne weiteres als faschistoid bezeichnen.</div>
<a name='more'></a><div style="text-align: justify;">
Adolf Hitler war ja bekennender Vegetarier und Nichtraucher, nun aber zu sagen alle Vegetarier und Nichtraucher sind damit Faschisten wäre zu einfach und ginge an der Sache vorbei. Betrachten wir das Ganze mal etwas tiefer und klären erst mal was ist Faschismus. Dabei muss man sagen es gibt keine einheitliche Definition was Faschismus ist. Es gibt unterschiedliche Erklärungen hierzu. Robert O. Paxton sagt:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<em>„Faschismus kann definiert werden als eine Form des politischen Verhaltens, das gekennzeichnet ist durch eine obsessive Beschäftigung mit Niedergang, Demütigung oder Opferrolle einer Gemeinschaft und durch kompensatorische Kulte der Einheit, Stärke und Reinheit, wobei eine massenbasierte Partei von entschlossenen nationalistischen Aktivisten in unbequemer, aber effektiver Zusammenarbeit mit traditionellen Eliten demokratische Freiheiten aufgibt und mittels einer als erlösend verklärten Gewalt und ohne ethische oder gesetzliche Beschränkungen Ziele der inneren Säuberung und äußeren Expansion verfolgt.“</em> <sup><span style="font-size: xx-small;"><a href="http://de.wikipedia.org/wiki/Faschismustheorie#Definitionen_des_Faschismusbegriffs" target="_blank">1</a></span></sup></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Wieder andere einwickelten eine Modernisierungstheorie:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<em>„Verschiedene Theorien interpretieren den Faschismus als gewaltsamen Versuch einer beschleunigten Modernisierung“</em> <sup><span style="font-size: xx-small;"><a href="http://de.wikipedia.org/wiki/Faschismustheorie#Modernisierung_und_Anti-Modernismus" target="_blank">2</a></span></sup></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Sind nun nicht alle Punkte einer Theorie zutreffend spricht man nicht mehr von faschistisch sondern von faschistoid. Damit sind wir wieder beim Ursprungsthema. Gerade im Internet begegnen einem viele Vegetarier und auch ihre Untergruppe die Veganer welche mit aller Macht ihren Vegetarismus/Veganismus verteidigen als die einzig wahre Lebensweise und alle anderen möchten doch nun ihren Fleischkonsum aufgeben und sie werden schon sehen wie sie enden. Genau wie das Durchsetzen des Rauchverbots wollen sie alle Bürger bevormunden und ihnen ihre Lebensart aufzwingen dazu bedienen sie sich inzwischen politischer Parteien wie den Grünen und Teilen der SPD. Wenn man dies nun zusammenfasst und mit dem Faschismustheorien vergleicht kann man eigentlich nur zu dem Schluss kommen viele Vegetarier und besonders Veganer sind faschistoid.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Übrigens mi den Modernisierungstheorien lassen sich auch einige Parteien als faschistoid bezeichnen. </div>
<br />
<br />
<br />
Quelle der Zitate: <a href="http://de.wikipedia.org/wiki/Faschismustheorie" target="_blank">Wikipedia</a><br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-33081816522118565372013-04-20T23:30:00.000+02:002013-04-20T23:56:11.431+02:00Blogger Tipp Nr.10 - Alte Kommentare und Google+ Kommentare gemeinsam nutzen<div style="text-align: justify;">
Vor einigen Tagen hat ja Google die Blogs von Blogspot so erweitert das jetzt die Kommentare über Google+ gemacht werden können. Jeder Blogbetreiber hat nun die Möglichkeit seine Kommentarfunktion mit Google+ zu verbinden. Leider wird dabei das alte Kommentarsystem deaktiviert, aber ältere Kommentare noch angezeigt. Ich hatte auf das neue System umgestellt, aber leider war mir etwas Unwohl dabei. Da ich aber niemanden zu einem Google+ Account zwingen möchte habe ich durch eine kleine Ergänzung im Template es ermöglicht das jetzt beide Kommentarformen möglich sind. Wie das genau geht hat <a class="g-profile" href="http://plus.google.com/111826237840120715824/about" target="_blank">+Oliver Doetsch</a> genauesten in seinem <a href="http://www.5202.de/2013/04/blogger-altes-und-neues-kommentarsytem.html" target="_blank">Blog</a> beschrieben, Interessierte können dort nachlesen wie man die macht. Ich jedenfalls habe sowohl diesen <a href="http://marmelblog.blogspot.de/">Blog</a> als auch <a href="http://insideweblin.blogspot.de/">InsideWeblin</a> auf beide Kommentarmöglichkeiten umgestellt, allerdings jeweils in unterschiedlicher Reihenfolge welche Kommentarform als Erste angezeigt wird.</div>
<br />Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-26545662028809045852013-04-01T08:02:00.000+02:002013-04-01T09:26:14.056+02:00McDonald's - Ich liebe es nicht immer.<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; margin: 0px; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<div style="margin: 0px;">
<br />
<div style="text-align: justify;">
Ich hatte letztens in in Düsseldorf auf dem Flughafen zu tun. Dort hatte vor einigen Tagen ein McDonald's nach Umbau und Renovierung neu eröffnet.In diesem Falle sollte man von einer Verschlimmbesserung sprechen. Völlig neu ist der Bestellvorgang. Man bestellt entweder persönlich oder per Automat. </div>
<a href="http://4.bp.blogspot.com/-Fp-LAPJI6d0/UVYzkdEtDeI/AAAAAAAAEvk/irV9fkbqios/s1600/IMAG0115.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://4.bp.blogspot.com/-Fp-LAPJI6d0/UVYzkdEtDeI/AAAAAAAAEvk/irV9fkbqios/s200/IMAG0115.jpg" style="cursor: move;" width="119" /></a><br />
<ol>
<li style="text-align: justify;">In beiden Fällen bekommt man einen Zettel und muss warten bis seine Nummer angezeigt wird. Dieser Vorgang soll eigentlich schneller gehen als das bisher übliche Verfahren. Nur leider in der Praxis ist es leider so das dadurch die Kunden noch länger warten müssen. Ich habe es mal mit dem McDonald's auf dem Düsseldorfer Hbf verglichen. Beide sind ungefähr gleich frequentiert. Ich habe mir nun mal die Mühe gemacht und die Zeiten verglichen. Bei gleichem Andrang ist die Wartezeit auf dem Flughafen fast doppelt so lang. Ursache dafür ist die Unfähigkeit des Personals und der Aufbau der Ausgabe. Auf dem Flughafen ist die Ausgabestrecke viel zu klein, sie sollte mindestens doppelt so groß sein. Dadurch treten sich die für die Ausgabe tätigen Mitarbeiter nur gegenseitig auf die Füsse. Das ganze wirkt nicht nur total chaotisch, sondern es ist es auch. Die Bestellungen wurden teilweise willkürlich abgearbeitet so das einzelne Kunden über 15 Minuten warten mussten. Ich hoffe nicht das Zukunft dieses System bei allen Restaurants so eingeführt wird. Ich persönlich habe In beiden Restaurants jeweils das selbe bestellt immer zu einem Zeitpunkt wo ich der einzige Kunde war. Im Hauptbahnhof hatte ich mein bestelltes nach 1:45,1 Minuten und im Flughafen dauerte es 3:57,1 Minuten, also mehr als doppelt so lange.</li>
</ol>
<br />
<br /></div>
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; margin: 0px; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<div style="text-align: justify;">
Ausserdem wurden dort 10 Tablets aufgestellt zu freien Benutzung. Der Hersteller ist mir nicht bekannt da diese in ein extra diebstahlsicheres Gehäuse eingebaut wurden. Die Tablet sind 10 Zöller mit Android. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-OJfYsml0j0c/UVYemehh_FI/AAAAAAAAEu0/FZYK7o8qG7A/s1600/IMAG0111.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="119" src="http://4.bp.blogspot.com/-OJfYsml0j0c/UVYemehh_FI/AAAAAAAAEu0/FZYK7o8qG7A/s200/IMAG0111.jpg" width="200" /></a></div>
<div style="text-align: justify;">
McDonalds hat aber diese so mit einem separaten eigenen Launcher ausgestattet so das man Systemfunktionen üblicherweise nicht aufrufen kann. Leider ist dieser Launcher so schlecht das er erstens die Tablets stark verlangsamt und zweitens dauernd einfriert. Das passiert scheinbar ständig. Bei meinen Besuchen war fast immer die Hälfte der Tablets nicht benutzbar. Ansicht eine gute Idee, aber dann bitte ausgereift. Vielleicht liegt es auch am Namen des verschlüsselten WLANs welches McDonald's dort verwendet: iPad-WLAN2. Was hat Android mit einem iPad zu tun?</div>
<br /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; margin: 0px; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<a href="http://3.bp.blogspot.com/-o-rnAu2r-sU/UVYckPNd3AI/AAAAAAAAEuk/kdGW3ilgQ8o/s1600/IMAG0114.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="119" src="http://3.bp.blogspot.com/-o-rnAu2r-sU/UVYckPNd3AI/AAAAAAAAEuk/kdGW3ilgQ8o/s200/IMAG0114.jpg" style="cursor: move;" width="200" /></a></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; margin: 0px; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
Ganz neu man kann jetzt auch sein Smartphone dort drahtlos aufladen.
</div>
<div class="separator" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; clear: both; color: black; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<a href="http://3.bp.blogspot.com/-oOuoTgBTWDo/UVYdk7TDvyI/AAAAAAAAEus/W1bEw_lfFdk/s1600/IMAG0112.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="http://3.bp.blogspot.com/-oOuoTgBTWDo/UVYdk7TDvyI/AAAAAAAAEus/W1bEw_lfFdk/s200/IMAG0112.jpg" style="cursor: move;" width="119" /></a></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; margin: 0px; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<div style="text-align: justify;">
Wer kein Gerät hat welches dies beherrscht, der kann sich gegen Pfand einen Ring ausleihen den er an die normale Usb-Ladebuchse seines Smartphones anschliessen kann. Leider hat hier McDonald's am falschen Ende gespart und zu wenig Lademöglichkeiten geschaffen. So etwas gehört eigentlich dann in jeden Tisch und nicht nur an wenige ausgewählte Plätze. Allerdings habe ich noch recht wenig Kunden gesehen die diese Möglichkeit überhaupt nutzen</div>
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; margin: 0px; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<a href="http://2.bp.blogspot.com/-Zy0rEvsICWA/UVYfwrnwuII/AAAAAAAAEvE/iRZ9PjOQJSY/s1600/IMAG0113.jpg" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: right;"><img border="0" height="119" src="http://2.bp.blogspot.com/-Zy0rEvsICWA/UVYfwrnwuII/AAAAAAAAEvE/iRZ9PjOQJSY/s200/IMAG0113.jpg" style="cursor: move;" width="200" /></a></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; margin: 0px; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
</div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-38851790293467017852013-03-02T18:00:00.000+01:002013-03-02T20:35:14.483+01:00Meine Blogs und AppleDas schon in der Bibel vor angefressenen Äpfeln gewarnt wird <a class="external text" href="http://www.bibleserver.com/go.php?lang=de&bible=EU&ref=Gen2%2C17" rel="nofollow" target="_blank">(Gen 2,17)</a> ist ja allgemein bekannt, auch wenn es sich dabei um einen Übersetzungsfehler (zwischen mālum = Apfel bzw. mālus = Apfelbaum und malum = das Böse) handelt allerdings weniger. <br />
<a name='more'></a>Ich kann allerdings angefressene Äpfel auch nicht leiden und halte meine Rechner und auch mein sonstiges Umfeld möglichst apfelfrei. Aus diesem Grund hatte ich auch die Jünger des angefressenen Apfels bisher an das <a href="http://www.stammhirnrinde.de/405.htm" rel="nofollow" target="_blank">Ende des Internets</a> umgeleitet. Allerdings zeigte sich im Laufe der Zeit das es doch ein paar Unverbesserliche gibt die meine Blogs trotzdem lesen wollen. Dies betrifft zwar nur 5% bzw. 1% aller User. Deshalb habe ich nun eine Änderung durchgeführt und verweise die Apfelfans auf Google Currents. Dort waren meine Blogs schon immer zu lesen. Dadurch das ich diese Information ohne Umleitung auf meinen Blogs habe ist es ihnen auch möglich meine Beiträge per RSS zu lesen. Damit ist es diesen User nun auch möglich an meinen Gedanken teilzuhaben, wenn auch nicht direkt. Zu einfach will ich es den Apfelfans dann doch nicht machen und vielleicht kann ich dadurch auch ein wenig zu weiteren Verbreitung von Google Currents beitragen.Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-83735347537256635862013-02-05T22:20:00.000+01:002013-02-05T23:39:21.560+01:00Blogger Tipp Nr.9 - Letzte KommentareOftmals wurde ich gefragt wie ich die letzten Kommentare in Blogger anzeige. Dis ist ganz einfach. ich habe einfach ein HTML/JavaScript Gadget hinzugefügt und es mit folgendem Quelltext versehen:<br />
<a name='more'></a><br />
<br />
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><div <span class="kwrd">class</span>=<span class="str">"widget-content popular-posts"</span>></pre>
<pre><span class="lnum"> 2: </span><ul></pre>
<pre><span class="lnum"> 3: </span><script style=<span class="str">"text/javascript"</span>> </pre>
<pre><span class="lnum"> 4: </span><span class="kwrd">function</span> showrecentcomments(json) {</pre>
<pre><span class="lnum"> 5: </span> <span class="kwrd">for</span> (<span class="kwrd">var</span> i = 0; i < 5; i++) { </pre>
<pre><span class="lnum"> 6: </span> <span class="kwrd">var</span> entry = json.feed.entry[i]; </pre>
<pre><span class="lnum"> 7: </span> <span class="kwrd">var</span> ctlink; </pre>
<pre><span class="lnum"> 8: </span> <span class="kwrd">if</span> (i == json.feed.entry.length) <span class="kwrd">break</span>; </pre>
<pre><span class="lnum"> 9: </span> <span class="kwrd">for</span> (<span class="kwrd">var</span> k = 0; k < entry.link.length; k++) { </pre>
<pre><span class="lnum"> 10: </span> <span class="kwrd">if</span> (entry.link[k].rel == <span class="str">'alternate'</span>) { </pre>
<pre><span class="lnum"> 11: </span> ctlink = entry.link[k].href;</pre>
<pre><span class="lnum"> 12: </span> <span class="kwrd">break</span>; </pre>
<pre><span class="lnum"> 13: </span> }</pre>
<pre><span class="lnum"> 14: </span> }</pre>
<pre><span class="lnum"> 15: </span> ctlink = ctlink.replace(<span class="str">"#"</span>, <span class="str">"#comment-"</span>); </pre>
<pre><span class="lnum"> 16: </span> <span class="kwrd">var</span> ptlink = ctlink.split(<span class="str">"#"</span>); </pre>
<pre><span class="lnum"> 17: </span> ptlink = ptlink[0]; </pre>
<pre><span class="lnum"> 18: </span> <span class="kwrd">var</span> txtlink = ptlink.split(<span class="str">"/"</span>); </pre>
<pre><span class="lnum"> 19: </span> txtlink = txtlink[5]; </pre>
<pre><span class="lnum"> 20: </span> txtlink = txtlink.split(<span class="str">".html"</span>); </pre>
<pre><span class="lnum"> 21: </span> txtlink = txtlink[0]; </pre>
<pre><span class="lnum"> 22: </span> <span class="kwrd">var</span> pttitle = txtlink.replace(/-/g,<span class="str">" "</span>);</pre>
<pre><span class="lnum"> 23: </span> pttitle = pttitle.link(ptlink);</pre>
<pre><span class="lnum"> 24: </span> <span class="kwrd">if</span> (<span class="str">"content"</span> <span class="kwrd">in</span> entry) { </pre>
<pre><span class="lnum"> 25: </span> <span class="kwrd">var</span> comment = entry.content.$t;</pre>
<pre><span class="lnum"> 26: </span> } <span class="kwrd">else</span> <span class="kwrd">if</span> (<span class="str">"summary"</span> <span class="kwrd">in</span> entry) { </pre>
<pre><span class="lnum"> 27: </span> <span class="kwrd">var</span> comment = entry.summary.$t;</pre>
<pre><span class="lnum"> 28: </span> } <span class="kwrd">else</span> <span class="kwrd">var</span> comment = <span class="str">""</span>; </pre>
<pre><span class="lnum"> 29: </span> <span class="kwrd">var</span> re = /<S[^>]*>/g; </pre>
<pre><span class="lnum"> 30: </span> comment = comment.replace(re, <span class="str">""</span>); </pre>
<pre><span class="lnum"> 31: </span> <span class="kwrd">var</span> authorname=entry.author[0].name.$t;</pre>
<pre><span class="lnum"> 32: </span> document.write(<span class="str">'<li>'</span>); </pre>
<pre><span class="lnum"> 33: </span> document.write(<span class="str">'<a href="'</span> + ctlink + <span class="str">'">'</span> + authorname + <span class="str">'</a>'</span>); </pre>
<pre><span class="lnum"> 34: </span> document.write(<span class="str">' schrieb:'</span> ); </pre>
<pre><span class="lnum"> 35: </span> document.write(<span class="str">'<br/>'</span>); </pre>
<pre><span class="lnum"> 36: </span> <span class="kwrd">if</span> (comment.length < 100) { </pre>
<pre><span class="lnum"> 37: </span> document.write(comment);</pre>
<pre><span class="lnum"> 38: </span> } <span class="kwrd">else</span> { </pre>
<pre><span class="lnum"> 39: </span> comment = comment.substring(0, 100); </pre>
<pre><span class="lnum"> 40: </span> <span class="kwrd">var</span> quoteEnd = comment.lastIndexOf(<span class="str">" "</span>);</pre>
<pre><span class="lnum"> 41: </span> comment = comment.substring(0, quoteEnd); </pre>
<pre><span class="lnum"> 42: </span> document.write(comment + <span class="str">'...<a href="'</span> + ctlink + <span class="str">'"> Mehr...</a>'</span>); </pre>
<pre><span class="lnum"> 43: </span> } </pre>
<pre><span class="lnum"> 44: </span> } </pre>
<pre><span class="lnum"> 45: </span> document.write(<span class="str">'</li>'</span>); </pre>
<pre><span class="lnum"> 46: </span> document.write(<span class="str">'<div style="font-size:75&percnt;;text-align:center"></div>'</span>);</pre>
<pre><span class="lnum"> 47: </span>} </script> </pre>
<pre><span class="lnum"> 48: </span><script src=<span class="str">"/feeds/comments/default?alt=json-in-script&callback=showrecentcomments"</span>> </script></pre>
<pre><span class="lnum"> 49: </span></ul></pre>
<pre><span class="lnum"> 50: </span></div></pre>
</div>
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #efefef;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style><br />
<br />
In der Zeile 5 könnt ihr die Anzahl der ausgegebenen Kommentare verändern. Bei mir werden die angezeigten Kommentare nach max 100 Zeichen abgebrochen und mit ... ergänzt. Wer dies kürzer oder länger braucht muss die in den Zeilen 36 und 39 entsprechend anpassen. Farbanpassungen usw, können durch CSS passieren oder direkt auch in diesem Quelltext und wird von mir hier nicht näher betrachtet.Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-82189697923385504132013-01-24T09:59:00.000+01:002013-01-24T09:59:00.204+01:00Telefonieren mit dem Galaxy Tab 10.1N<div style="text-align: justify;">
Das Samsung Galaxy Tab 10.1N (P7501) hat zwar ein GSM Modul, aber damit kann man nicht telefonieren. Gleiches gilt für das Galaxy Tab 10.1 (P7500). SMS kann man damit allerdings versenden und empfangen. Die neueren Modelle Tab 2 erlauben allerdings Telefonate. Wenn man SMS versenden und empfangen kann dann sollte es eigentlich auch möglich sein zu telefonieren. Ein wenig googlen und man findet eine Lösung. Die Entwicker von xda-developers haben eine Lösung die recht einfach ist. Sie funktioniert sowohl mit dem Original-ROM als auch mit Custom-Roms. Einzige Vorraussetzung ist ein Tablet mit einen freien Recovery. Wer noch kein entsprechendes Recovery hat muss sich dieses als erstes installieren. Ich benutze <a href="http://www.clockworkmod.com/" rel="nofollow" target="_blank">ClockworkMod</a> und habe es mit Odin geflasht.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nun müsst ihr nur 2 Zip-Dateien laden wobei eine abhängig ist welche Firmware ihr verwendet. Die beiden Dateien findet ihr auf <a href="http://forum.xda-developers.com/showthread.php?t=1875024" rel="nofollow" target="_blank">xda-developers</a>. Dies ladet ihr am besten ins Wurzelverzeichnis der (eingebauten) SD-Karte eures Tablets. Danach nur noch euer Gerät im Recovery Modus starten. und dann "Install from SD Card" auswählen. Dann die beiden Dateien auswählen und installieren. Dabei hat es sich als praktisch erwiesen zuerst CWM_I9103XXLQ3_Modem.zip zu installieren. Danach die Voice_Call_Enable_XXX.zip installieren, wobei XXX für euer verwendetes ROM steht. Danach müsst ihr euer Tablet nur neu booten und schon habt ihr ein Galaxy Tab 10.1 bzw. 10.1N welches eine Telefonfunktion besitzt. Wer ganz sicher gehen will kann vorm Reboot noch ein "Wipe Cache & Dalvik Cache" durchführen, aber dies ist im Prinzip nicht notwendig. Bei mir funktionierte es problemlos ohne.</div>
<div style="text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-r9M4lCD3JEQ/UQCjMTJZYVI/AAAAAAAAEOk/XiupVUAhASY/s1600/2013-01-24+03.54.18.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="400" src="http://4.bp.blogspot.com/-r9M4lCD3JEQ/UQCjMTJZYVI/AAAAAAAAEOk/XiupVUAhASY/s400/2013-01-24+03.54.18.jpg" width="250" /></a></div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-10868127134908184182013-01-19T17:23:00.002+01:002013-01-19T17:26:43.028+01:00Google+ als RSS-Stream<div style="text-align: justify;">
Google+ bietet ja von Hause kein RSS an. Es gibt aber viele Seiten die euren Stream in RSS wandeln. Wer aber will kann dieses auch anders lösen. Der Google+ Stream kann per API abgerufen werden und man erhält die Daten als JSON-Objekt. Dieses ist nur in das RSS-Format umzuwandeln. Die Umwandlung geht wiederum recht einfach, entweder ein kleines Script in einer Sprache eurer Wahl auf eurem Server oder auch clientseitig per Javascript ist dies möglich. Beachtet dabei aber das die Aufrufe der Google+ API limitiert sind. Wem dieses Limit nicht ausreicht der kann dieses Limit kostenpflichtig erhöhen. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Eine weitere Möglichkeit ist es die <a href="http://pipes.yahoo.com/pipes/" rel="nofollow" target="_blank">Yahoo-Pipes</a> zu benutzen. Ich habe diese benutzt und rufe die RSS-Ausgabe der Pipe dann mit Feedburner ab und Poste dann in Twitter. Das Limit erreiche ich mit dieser Variante nicht. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-vqGl5uOya7g/UPrG5BSHgTI/AAAAAAAAEOU/ZVU8wPBHDkU/s1600/yahoo-pipe.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"><img border="0" height="317" src="http://1.bp.blogspot.com/-vqGl5uOya7g/UPrG5BSHgTI/AAAAAAAAEOU/ZVU8wPBHDkU/s400/yahoo-pipe.png" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In einer neuen Pipe braucht man nur 3 Elemente. Das erste Element ist "Fetch Data" und holt die Daten von Google+ und gebt als auszuwertenden Pfad "items" an. Die Adresse für die Daten lautet: https://www.googleapis.com/plus/v1/people/EUREGOOGLEPLUSID/activities/public?alt=json&pp=1&key=EUERKEY</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
EUREGOOGLEPLUSID ist dann die entsprechende ID für euren Account oder auch für eure Seite, welche ihr bei Google+ besitzt. EUERKEY ist das entsprechende Zugriffstoken welches ihr auf der <a href="https://code.google.com/apis/console/" rel="nofollow" target="_blank">Google API Console</a> erhaltet. Dazu müsst ihr dort ein Projekt anlegen und die Google+ API einschalten und dann den entsprechenden Key generieren.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Das zweite Element in der Pipe ist "Rename" und wandelt die Namen der Einträge des empfangenen JSON-Objekts in die Namen für RSS um. Was genau umgewandelt erden muss ist im Screenshot zu sehen.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Und das dritte Element ("Pipe Output") gibt dann nur noch die Daten aus. Diese können dann per RSS abgerufen werden.</div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com1tag:blogger.com,1999:blog-9006266344476660539.post-34531745120348301562012-11-02T19:00:00.000+01:002012-11-03T00:13:57.678+01:00Muss man Leser an den Blog binden?<div style="text-align: justify;">
Diese Frage stellte ich mit als ich das Wochenthema des <a href="http://www.webmasterfriday.de/blog/leser-an-den-blog-binden" target="_blank">WebmasterFriday</a> las. Wer mich kennt weiß ja das ich mich fast nie an solchen Aktionen beteilige. Aber irgendwie kam bei mir eben die Frage auf muss man Leser wirklich an sein Blog binden? Ich meine<b> NEIN</b> oder doch<b> JA</b>. Die Frage ist eben nicht mit einen klaren Ja oder Nein zu beantworten. Es kommt meiner Meinung nach auf die Art und die Inhalte des Blogs an. Normale 081-Blogs welches die meisten ja sind, müssen Leser binden und sich darüber Gedanken machen. Spezial Blogs die nur ein Thema behandeln welches vielleicht noch sehr speziell ist brauchen sich darüber keine Gedanken machen. Da reichen die Inhalte um Leser anzulocken.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Je spezieller das Thema ist um so größer ist dieser Effekt. Zu dieser Erkenntnis bin ich jedenfalls gekommen. Mir persönlich ist es egal wer hier oder auf meinen anderen Seiten etwas liest. Schon gar nicht erwarte ich das Leser hier jeden Tag herkommen, dazu schreibe ich zu selten. Oft kommt es vor das ich nur einen Post im Monat bringe und was sollen die Leser dann in der Zwischenzeit hier? </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Manchmal verbinde ich auch meine Blogs, besonders dann wenn es Postings sind die auf mehreren Blogs stehen könnten. Dort erhalten Leser auf einem Blog nur die ersten Zeilen und beim Klick auf "Weiterlesen" werden sie dann automatisch auf den Originalpost auf einem anderen Blog umgeleitet.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Für mich ist es wichtig das wenn ich etwas schreibe es die richtigen Leser erreicht. Und die kommen von ganz alleine wie die Analyse der Seiten zeigt. Wichtig ist nur das die Leser informiert werden wenn etwas neues geschrieben wurde. Um dies zu erreichen benutze ich soziale Netzwerke, hauptsächlich Google+ und Twitter. Facebook benutze ich dagegen relativ selten um nicht zu sagen fast nie. Zusätzlich bite ich die Inhalte noch mobilgerecht aufgearbeitet bei Google Currents an. Oftmals lohnt es sich auch gar nicht einen kompletten Post zu schreiben, dann veröffentliche ich nur ein paar Zeilen zum Thema bei Google+.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Die Analyse der Zugriffe gibt mir insofern recht das dies funktioniert indem sich die Besucherzahlen nach einem Posting ungefähr um das bis zu 100fache ansteigen. Für mich sind wichtig die Inhalte die ich publiziere und nicht die Reaktionen der Leser. Dies finden auch statt durch retweeten, 1+ geben und was weiß ich noch. Allerdings soll dies nicht heißen das mir die Leser egal sind, sondern ich will durch Inhalte überzeugen und nicht durch technische Maßnahmen. Allerdings reagiere ich auf Kommentare wenn man reagieren muss wie bei gestellten zusätzlichen Fragen. Bei reinen Zustimmungen zum Inhalt reagiere ich meistens aber nicht.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Und nun zum Schluß noch eine Nachricht die sich viele Blogbetreiber wahrscheinlich überhaupt nicht vorstellen können: Ich schließe bestimmte Usergruppen von meinen Blogs komplett aus und leite sie automatisch an das <a href="http://www.stammhirnrinde.de/405.htm">Ende des Internets</a>. Dies werde ich allerdings noch ändern und es komplett hier realisieren. </div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-6515335607176110362012-10-20T21:04:00.000+02:002012-10-20T21:04:02.245+02:00Android Programmierung unter Google TV<div style="text-align: justify;">
Über meine Erfahrungen mit Google TV als User hatte ich ja bereits <a href="http://marmelblog.blogspot.com/2012/10/google-tv-ein-erster-eindruck.html">berichtet</a> und heute schreibe ich über meine Erfahrungen der Programmierung. Google TV ist ja im Prinzip nichts weiter als ein Android Gerät mit ein paar Besonderheiten. Ich möchte hier nicht alle Aspekte beleuchten sondern nur meine eigenen Erfahrungen bei der Anpassung von <a href="https://sites.google.com/site/weblinfuerandroid/">Andlin, dem Android-Client für weblin</a> mitteilen.</div>
<div style="text-align: justify;">
<br /></div>
<a name='more'></a><div style="text-align: justify;">
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #e4e4e4;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
Wenn die eigene App unter Google TV laufen soll sind ein paar Änderungen an der App notwendig. Normal geschriebene Apps laufen unter Google TV normalerweise nicht. Hauptursache dafür ist ein fehlender Eintrag im AndroidManifest. Google TV kennt ja keinen Touchscreen und deshalb werden APKs normal für Google TV nicht gelistet. Als Entwickler sollte man sich entscheiden ob man eine App für alle Geräte entwickelt, unterschiedliche Apps für "normales" Android und Google TV. Bei letzterem kann man dann noch wählen wob die App im Store gemeinsam unter einer Adresse abrufbar sind oder nicht.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Jedes Verfahren hat seine Vor- und Nachteile. Sollen die Apps getrennt gelistet werden braucht man unterschiedliche Packagenamen und ist ansonsten recht frei in dem was man macht. Sollen die unterschiedlichen Apps gemeinsam angezeigt werden brauchen sie nur eine unterschiedlichen Versionscode. Allerdings unterstützt nur der Google Play Store diese Vorgehensweise. Benutzt man noch andere Stores ist diese Vorgehensweise nicht möglich. Ich hatte dies erst so machen wollen, stellte dann aber noch fest das einige Geräte beide Versionen hätten laden können. Der Google Play Store hätte dann immer die mit dem höheren Versionscode angeboten. Letztendlich habe ich mich dann dazu entschlossen nur noch eine einzige App anzubieten. Dazu mußte ich dann nur folgendes in die Manifest-Datei eintragen:</div>
<br />
<pre class="csharpcode"><span class="kwrd"><</span><span class="html">uses-feature</span> <span class="attr">android:name</span><span class="kwrd">="android.hardware.touchscreen"</span> <span class="attr">android:required</span><span class="kwrd">="false"</span><span class="kwrd">/></span></pre>
<br />
<div style="text-align: justify;">
Dadurch wird die App auch im Play Store für Google TV Geräte angezeigt. Nun muss man nur noch in den Sourcen alle Teile ausschließen die Google TV nicht unterstützt, welche dies im einzelnen sind kann man auf der <a href="https://developers.google.com/tv/android/docs/gtv_android_features">Entwicklerseite</a> lesen. Bei mir waren es nicht allzu viele so das sich der Aufwand in Grenzen hielt. Lediglich meine Zoomfunktion per Touchscreen habe ich durch die Tastatursteuerung ergänzen müssen. Je nach Bedarf kann/muss auch das Layout für Google TV noch angepasst werden.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Fazit: Der Aufwand eine bestehende App an Google TV anzupassen kann unterschiedlich groß sein. Bei mir war er eher gering. Problematisch wird es nur bei nativen Apps da Google TV diese nicht unterstützt. Das bedeutet das Apps für Google TV immer in Java geschrieben sein müssen. </div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-40806041305801501982012-10-15T17:04:00.000+02:002012-10-15T17:04:07.730+02:00Google TV - Ein erster Eindruck<div style="text-align: justify;">
Seit Anfang Oktober gibt es ja die Google TV Box <a href="http://www.sony.de/product/google-tv/nsz-gs7" target="_blank">NSZ-GS7</a> von Sony offiziell in Deutschland. Nachdem ich mir vorige Woche eine direkt kaufen wollte und ich feststellen musste das sie überall bei mir in der Umgebung entweder noch nicht im Sortiment der Händler ist bzw, bei denen die sie bereits führen bereits vergriffen ist habe ich mir sie bestellt. Und heute wurde sie geliefert und ich konnte sie testen. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Der Anschluß der Box war ganz unproblematisch. HDMI Kabel vom Sat-Receiver in den HDMI-Eingang der Box und den HDMI-Ausgang der Box in den Fernseher und dann noch den die Stomversorgung herstellen und das war es bei mir. Wer möchte kann auch noch ein LAN-Kabel zum Router verlegen, aber ich bevorzugte die WLAN-Anbindung. Als erstes kam auf dem Bildschirm eine Anleitung wie man die Batterien in die Fernbedienung der Box einlegen muss. Danach startete die Box mit dem Setup. Das war eigentlich unproblematisch. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nur mir ist es nicht gelungen den Sat-Receiver der Box bekanntzumachen. Damit kann ich die Fernbedienung der Box nicht für den Sat-Receiver mit benutzen. Für den Fernseher ging es allerdings ohne Probleme. Ich werde mal sehen ob ich noch ein baugleiches Gerät finde welches ich dann dort eingeben kann. Nach dem Start der Box erfolgte sogleich ein Systemupdate. Die Qualität der Ausgabe (1080p) finde ich hervorragend. Alle Funktionen sind zu meiner Zufriedenheit. Der einige Kritikpunkt an der Hardware ist die Fernbedienung, mir ist sie eindeutig zu schwer.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Was ein wirklich störend ist sind die nur wenigen vorhandenen Apps. Das ist aber kein Problem von Sony, sondern liegt daran, dass die App-Entwickler ihre Apps nicht für Google TV bereitstellen. Entäuschend fand ich allerdings dass selbst die meisten Apps von Google nicht zur Verfügung stehen. Es gibt kein Google+, kein GMail, kein Google Drive, kein Google Maps usw. Diese Funktionen muss ich eben dann über den Browser benutzen. Wenigstens ist Google Chrome vorinstalliert. Für Freunde des Fuchses gleich noch die Mitteilung auch FireFox ist nicht für Google TV zur haben. Auch die Facebook-App steht nicht zur Verfügung. Auch habe ich noch keinen Virenscanner gefunden. Insgesamt ist das Angebot an Apps also noch sehr dürftig.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
FAZIT: Insgesamt gut, aber noch nicht ausgereift, es fehlen vor allen noch Apps.</div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-50955384881205817952012-10-01T20:22:00.000+02:002012-10-01T22:30:44.782+02:00ShowDialog unter Android<div style="text-align: justify;">
In den Dot.Net-Sprachen gibt es die Möglichkeit mit <a href="http://msdn.microsoft.com/de-de/library/c7ykbedk(v=vs.110).aspx" target="_blank">ShowDialog()</a> ein Programm anzuhalten bis der Dialog beendet ist. Diese Möglichkeit gibt es so ohne weiteres in Android nicht. Der AlertDialog.Builder kennt nur ein <a href="http://developer.android.com/reference/android/app/AlertDialog.Builder.html#show()" target="_blank">show()</a> und diese Funktion hält das aufrufenden Programm nicht an. Um eine modale Darstellung zu bekommen ist es am einfachsten dies mir einer eigenen Klasse zu realisieren die man aus der Klasse Dialog ableitet. Für die Darstellung muss noch ein Layout in einer XML-Datei erstellt werden. Dies lasse ich hier einfach mal weg, jeder der Androidprogramme entwickelt sollte dazu in der Lage sein. Das Beispiel macht nichts weiter als zu warten bis der OK bzw. Abbrechen-Button geklickt wurde. Zusätzliche Funktionalität muss jeder selbst noch implementieren. Hier der entsprechende Quelltext:</div>
<br />
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #e4e4e4;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<br />
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><span class="kwrd">public</span> <span class="kwrd">enum</span> DialogResult{Cancel, Ok}</pre>
<pre><span class="lnum"> 2: </span> </pre>
<pre><span class="lnum"> 3: </span><span class="kwrd">public</span> <span class="kwrd">class</span> InputDialog extends Dialog{</pre>
<pre><span class="lnum"> 4: </span> <span class="kwrd">private</span> DialogResult dialogResult;</pre>
<pre><span class="lnum"> 5: </span> <span class="kwrd">private</span> Handler mHandler ;</pre>
<pre><span class="lnum"> 6: </span> </pre>
<pre><span class="lnum"> 7: </span> <span class="kwrd">public</span> InputDialog(Activity context){</pre>
<pre><span class="lnum"> 8: </span> super(context);</pre>
<pre><span class="lnum"> 9: </span> setOwnerActivity(context);</pre>
<pre><span class="lnum"> 10: </span> onCreate();</pre>
<pre><span class="lnum"> 11: </span> <span class="kwrd">this</span>.setTitle(context.getString(R.<span class="kwrd">string</span>.app_title));</pre>
<pre><span class="lnum"> 12: </span> }</pre>
<pre><span class="lnum"> 13: </span> </pre>
<pre><span class="lnum"> 14: </span> <span class="kwrd">public</span> DialogResult getDialogResult(){</pre>
<pre><span class="lnum"> 15: </span> <span class="kwrd">return</span> dialogResult;</pre>
<pre><span class="lnum"> 16: </span> }</pre>
<pre><span class="lnum"> 17: </span> </pre>
<pre><span class="lnum"> 18: </span> <span class="kwrd">private</span> <span class="kwrd">void</span> setDialogResult(DialogResult dialogResult){</pre>
<pre><span class="lnum"> 19: </span> <span class="kwrd">this</span>.dialogResult = dialogResult;</pre>
<pre><span class="lnum"> 20: </span> }</pre>
<pre><span class="lnum"> 21: </span> <span class="kwrd">public</span> <span class="kwrd">void</span> onCreate(){</pre>
<pre><span class="lnum"> 22: </span> setContentView(R.layout.inputdialog);</pre>
<pre><span class="lnum"> 23: </span> findViewById(R.id.cancel).setOnClickListener(View.OnClickListener() {</pre>
<pre><span class="lnum"> 24: </span> </pre>
<pre><span class="lnum"> 25: </span> <span class="preproc">@Override</span></pre>
<pre><span class="lnum"> 26: </span> <span class="kwrd">public</span> <span class="kwrd">void</span> onClick(View paramView){</pre>
<pre><span class="lnum"> 27: </span> endDialog(DialogResult.Cancel);</pre>
<pre><span class="lnum"> 28: </span> }</pre>
<pre><span class="lnum"> 29: </span> });</pre>
<pre><span class="lnum"> 30: </span> findViewById(R.id.ok).setOnClickListener(<span class="kwrd">new</span> View.OnClickListener(){</pre>
<pre><span class="lnum"> 31: </span> </pre>
<pre><span class="lnum"> 32: </span> <span class="preproc">@Override</span></pre>
<pre><span class="lnum"> 33: </span> <span class="kwrd">public</span> <span class="kwrd">void</span> onClick(View paramView){</pre>
<pre><span class="lnum"> 34: </span> endDialog(DialogResult.Ok);</pre>
<pre><span class="lnum"> 35: </span> }</pre>
<pre><span class="lnum"> 36: </span> });</pre>
<pre><span class="lnum"> 37: </span> }</pre>
<pre><span class="lnum"> 38: </span> </pre>
<pre><span class="lnum"> 39: </span> <span class="kwrd">public</span> <span class="kwrd">void</span> endDialog(DialogResult result){</pre>
<pre><span class="lnum"> 40: </span> dismiss();</pre>
<pre><span class="lnum"> 41: </span> setDialogResult(result);</pre>
<pre><span class="lnum"> 42: </span> Message m = mHandler.obtainMessage();</pre>
<pre><span class="lnum"> 43: </span> mHandler.sendMessage(m);</pre>
<pre><span class="lnum"> 44: </span> }</pre>
<pre><span class="lnum"> 45: </span> </pre>
<pre><span class="lnum"> 46: </span> <span class="kwrd">public</span> DialogResult showDialog() {</pre>
<pre><span class="lnum"> 47: </span> mHandler = <span class="kwrd">new</span> Handler() {</pre>
<pre><span class="lnum"> 48: </span> <span class="preproc">@Override</span></pre>
<pre><span class="lnum"> 49: </span> <span class="kwrd">public</span> <span class="kwrd">void</span> handleMessage(Message mesg){</pre>
<pre><span class="lnum"> 50: </span> <span class="kwrd">throw</span> <span class="kwrd">new</span> RuntimeException();</pre>
<pre><span class="lnum"> 51: </span> }</pre>
<pre><span class="lnum"> 52: </span> };</pre>
<pre><span class="lnum"> 53: </span> super.show();</pre>
<pre><span class="lnum"> 54: </span> <span class="kwrd">try</span>{</pre>
<pre><span class="lnum"> 55: </span> Looper.getMainLooper().loop();</pre>
<pre><span class="lnum"> 56: </span> }</pre>
<pre><span class="lnum"> 57: </span> <span class="kwrd">catch</span>(RuntimeException e){</pre>
<pre><span class="lnum"> 58: </span> <span class="kwrd">if</span> ((BuildConfig.DEBUG) && (e != <span class="kwrd">null</span>)</pre>
<pre><span class="lnum"> 59: </span> && (e.getMessage() != <span class="kwrd">null</span>))</pre>
<pre><span class="lnum"> 60: </span> Log.e(LOG, e.getMessage());</pre>
<pre><span class="lnum"> 61: </span> }</pre>
<pre><span class="lnum"> 62: </span> <span class="kwrd">return</span> dialogResult;</pre>
<pre><span class="lnum"> 63: </span> }</pre>
<pre><span class="lnum"> 64: </span> </pre>
<pre><span class="lnum"> 65: </span>}</pre>
</div>
<br />
Dieser muss nur noch angepasst werden und damit sind dann modale Dialoge unter Android möglich.
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-4391279761913503562012-09-20T15:27:00.000+02:002012-09-20T15:27:51.863+02:00Bedingte Compilierung und Versionierung unter Java<div style="text-align: justify;">
Leider kennt ja Java keinen Präprozessor-Anweisungen wie die C-Sprachen. Gerade die Möglichkeiten der bedingten Compilierung fehlen hier. Aber es gibt mindestens 2 Ersatz-Lösungen:</div>
<a name='more'></a><br />
<br />
<ol>
<li style="text-align: justify;"><a href="http://de.wikipedia.org/wiki/Apache_Ant" target="_blank">Ant</a></li>
<li style="text-align: justify;">Finale Konstanten in If-anweisungen. Der Javacompiler erkennt dadurch einfach entstehenden <a href="http://de.wikipedia.org/wiki/Redundanter_Code" target="_blank">toten Code</a> und lässt ihn weg.</li>
</ol>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nähere Einzelheiten findet man z.B.<a href="http://how2that.blogspot.de/2010/05/java-pre-compiler-well-nearly.html" target="_blank"> hier</a>. Diese Möglichkeiten sind im allgemeinen völlig ausreichend. Was aber wenn man Projekte hat die zusätzliche Dateien haben die kein Quelltext sind, z.B. Resourcendateien. Sprachdateien werden ja durch die meisten Entwicklungsumgebungen mit unterstützt. Aber was macht man wenn man Projekte hat die sich beispielsweise durch die Menüstruktur unterscheiden. Ich möchte eine kostenlose und eine bezahlbare Version einer Software produzieren die sich im Funktionsumfang unter scheiden. Dann hilft keine IDE mir da so richtig weiter. Benutz man eine Sprache wie C# ist dies auch kein größeres Problem, da die Menüerzeugung per Programm geschieht. Zwar wird der Code dazu automatisch generiert, aber man kann ihn ändern. Er wird zwar bei Änderungen immer wieder neu generiert, aber die kann man umgehen in dem man die Teile die man erhalten will in eine eigene Datei auslagert. Schwieriger ist dieses Problem allerdings wenn man Java und Eclipse benutzt um eine Android-App zu entwickeln. Zwar kann man auch dort beispielsweise Menüs oder Layouts per Code erzeugen aber die kompliziert die Sache erheblich da es keine Grafische Darstellung dann mehr gibt. Zusätzlich wird der erzeugte Code um etliches größer und auch langsamer. Ich habe das Problem dadurch gelöst das ich für jede Variante ein eigenes Projekt benutze. Ich habe dazu ausgehend von einem Grundprojekt entsprechende Kopien angelegt. Damit waren erstmal alle Varianten gleich. Danach habe ich in den abgeleiteten Projekten alle Dateien gelöscht die sich vom Grundprojekt nicht unterscheiden. Diese habe ich nun als Hardlinks eingefügt. Dadurch sind nun bei einer Änderung in einem Projekt die Änderungen auch in den anderen Projekten enthalten. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Kleiner Tipp am Rande: Hardlinks sind auch unter Windows möglich wenn man als Dateisystem NTFS benutzt. Allerdings werden Hardlinks von Hause aus nur per Kommandozeile unterstützt, es gibt aber Erweiterungen für den Explorer.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Dadurch ist es nun möglich verschiedene Versionen ein und derselben Android-App ohne größeren Aufwand zu erzeugen.</div>
Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-57986631115568362982012-08-27T14:22:00.002+02:002012-08-27T14:24:33.063+02:00Warum ich kein Nexus 7 will<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-7usGhVMtzzI/UDtmWQfJEDI/AAAAAAAAD4k/K_2ZIp-Y2Ag/s1600/nexus7.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="135" src="http://4.bp.blogspot.com/-7usGhVMtzzI/UDtmWQfJEDI/AAAAAAAAD4k/K_2ZIp-Y2Ag/s400/nexus7.png" width="400" /></a></div>
Seit heute gibt es ja das Google Nexus 7 offiziell in Deutschland zu <a href="https://play.google.com/store/devices/details?id=nexus_7_16gb" target="_blank">kaufen</a>. Ein eigentlich schönes Tablet, was mir persönlich aber nicht zusagt. Folgende Punkte sind dies besonders:<br />
<br />
<br />
<br />
<ol>
<li><b>Kein GSM/UMTS/LTE enthalten. </b><br />Damit ist für mich das Gerät nicht mobil nutzbar. Viele sagen nun du hast doch ein Handy dabei dann nutze dies um ein mobiles Internet per <a href="http://de.wikipedia.org/wiki/Tethering" target="_blank">Tethering</a>/<a href="http://de.wikipedia.org/wiki/Hot_Spot_(WLAN)" target="_blank">Hotspot</a> auf dem Nexus 7 zu benutzen. Dies ist aber leider nur bedingt möglich. Ich bin darauf angewiesen Telefon und Internet gleichzeitig zu benutzen und dies ist damit leider nur in 3G-Netzen und höher uneingeschränkt möglich. Unterwegs im Zug oder auch Auto und auch oftmals in Gebäuden steht leider nur 2G zur Verfügung und damit ist dieses nicht möglich da die Provider kein <a href="http://de.wikipedia.org/wiki/Dual_Transfer_Mode" target="_blank">DTM</a> unterstützen. Zusätzlich gibt es das Problem das fast alle Androidgeräte (und auch viele andere) während des Telefonierens in den GSM-Modus umschalten!</li>
<li><b>Formfaktor 7 Zoll</b><br />Für mich ist 7 Zoll zu klein, ich habe es getestet. Ich kann 10 Zoll Geräte ohne Probleme in einer Hand halten und auch bedienen. Ich bin ja Entwickler und entwickle Apps zum Teil direkt auf dem Gerät und da ist ein größerer Bildschirm auf alle Fälle besser.Auch das Ansehen von Fotos, Filmen oder TV ist einfach auf einem 10 Zöller besser.</li>
<li><b>Fehlender SD-Slot </b><br />Auf diesen könnte ich notfalls verzichten, aber mir sind die max. 16 GB leider zu wenig. Besser wären 64 GB oder ein Slot zur Aufnahme von SD-Karten. Natürlich ist dies ein geringeres Problem da es ja möglich ist externe Datenträger per USB anzubinden.</li>
</ol>
Da ich allerdings bereits ein 10 Zoll Tablet besitze brauche ich zur Zeit kein weiteres Tablet. Sollte es allerdings irgendwann mal ein Nexus 10 mit GSM/UMTS/LTE geben würde ich dieses Tablet allen anderen vorziehen, alleine schon aus Gründen der Update-Politik der Hersteller. Mit einem Nexus egal ob Tablet oder Smartphone ist man eben immer auf dem aktuellsten Stand von Android. Zumindest für einen längeren Zeitraum als bei anderen Geräten.<br />
<br />
Ich persönlich sehe das Nexus 7 so wie es jetzt verkauft wird als Einsteigermodell an und wünsche allen denen die es kaufen viel Spaß damit.Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-67850908012924471632012-08-06T15:45:00.000+02:002012-08-06T16:22:26.438+02:00Google Music API<div style="text-align: justify;">
In meinem<a href="https://sites.google.com/site/marmel1958/" target="_blank"> Radio Player</a>, ein Programm welches Radiostreams, CDs und MP3-Files abspielt und dann die Titel in verschiedene soziale Netzwerke posten kann wollte ich auch das abspielen von Songs die bei <a href="http://music.google.com/" target="_blank">Google Music</a> gespeichert sind ermöglichen. Leider stellt Google dazu (bisher?) keine API zur Verfügung. Allerdings gibt es dazu Alternativen. ich habe bisher folgende gefunden:</div>
<a name='more'></a><ul>
<li><a href="https://github.com/simon-weber/Unofficial-Google-Music-API" target="_blank">Unofficial-Google-Music-API</a> von Simon Weber in Python</li>
<li><a href="https://github.com/Byteopia/GoogleMusicAPI.NET" target="_blank">GoogleMusicAPI.NET</a> von Byteopia (Taylor Finell) in C#</li>
</ul>
Da mein Radio Player in größten Teils in C# geschrieben ist verwende ich natürlich letztere API.<br />
<div>
<br /></div>
<div>
<div style="text-align: justify;">
Diese API stellt nur minimale Funktionen zur Verfügung, welche aber erstmal völlig ausreichend sind. Man kann damit seine Playlists ermitteln, die in der jeweiligen Playlist enthaltenen Songs und man kann alle Songs laden. Die Songs befinden sich dann in einer Liste und jeder Eintrag gibt die Beschreibung des Songs wieder. Alle Rohdaten erhält die API von Google Music im JSON-Format und deserialisiert sie entsprechend. Auf Grund der Datenmenge geschieht dies asynchron. Funktionen wie der Abruf von Alben, Künstlern, Autoplaylists usw. sind nicht vorhanden. Da aber in der Beschreibung der Songs die Informationen über Album, Genre usw. enthalten sind könnte man diese auch auf der Clientseite realisieren, wenn man so etwas benötigt. Außerdem enthält die API noch Funktionen zum Erzeugen und Löschen von Playlists.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Mit der Hilfe der ID durch die jeder Song eindeutig gekennzeichnet ist kann dann die URL ermittelt werden unter der dieser gespeichert ist. Die erhaltene URL kann dann zum Streamen benutzt werden oder auch um den Song wieder zurückzuspeichern. Auch diese Funktion ist asynchron, was sich in meinem Programm allerdings als hinderlich darstellte. Deswegen habe ich die
Klasse API um eine synchrone Funktion "GetSongURLSync" erweitert</div>
<br /></div>
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><span class="kwrd">public</span> String GetSongURLSync(String id)</pre>
<pre><span class="lnum"> 2: </span> {</pre>
<pre><span class="lnum"> 3: </span> <span class="kwrd">return</span> JSON.DeserializeObject<GoogleMusicSongUrl>(client.DownloadStringSync(<span class="kwrd">new</span> Uri(String.Format(<span class="str">"https://play.google.com/music/play?u=0&songid={0}&pt=e"</span>, id)))).URL;</pre>
<pre><span class="lnum"> 4: </span> }</pre>
</div>
<br />
<div style="text-align: justify;">
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #e4e4e4;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style> und der in der Datei API.cs hinzugefügt. Zusätzlich musste noch die Klasse GoogleHTTP in der Datei GoogleHTTP.cs un die Funktion "DownloadStringSync" erweitert werden.</div>
<br />
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><span class="kwrd">public</span> String DownloadStringSync(Uri address)</pre>
<pre><span class="lnum"> 2: </span> {</pre>
<pre><span class="lnum"> 3: </span> HttpWebRequest request = SetupRequest(address);</pre>
<pre><span class="lnum"> 4: </span> request.Method = <span class="str">"GET"</span>;</pre>
<pre><span class="lnum"> 5: </span> WebResponse response = request.GetResponse();</pre>
<pre><span class="lnum"> 6: </span> String responseString = <span class="str">""</span>;</pre>
<pre><span class="lnum"> 7: </span> <span class="kwrd">using</span> (Stream stream = response.GetResponseStream())</pre>
<pre><span class="lnum"> 8: </span> {</pre>
<pre><span class="lnum"> 9: </span> StreamReader reader = <span class="kwrd">new</span> StreamReader(stream, Encoding.UTF8);</pre>
<pre><span class="lnum"> 10: </span> responseString = reader.ReadToEnd();</pre>
<pre><span class="lnum"> 11: </span> } </pre>
<pre><span class="lnum"> 12: </span> <span class="kwrd">return</span> responseString;</pre>
<pre><span class="lnum"> 13: </span> }</pre>
</div>
<br />
<div style="text-align: justify;">
Durch diese 2 Erweiterungen ist es nun möglich die URL des Songs synchron zu ermitteln und damit war es für mich viel einfacher diese in meinem Programm zu verwenden.</div>
<br />
<div style="text-align: justify;">
Zum Abschluss noch der <b>Hinweis</b> das es Google Music außerhalb der USA offiziell noch nicht gibt. Wer noch keine Anmeldung dort hat kann dies aber tun. Man benötigt <b>nur</b> während der Anmeldeprozedur eine IP-Adresse aus den USA, welche man ja über einen entsprechenden Proxy ohne Probleme bekommt. Wer erst einmal angemeldet ist kann den Dienst dann aber überall benutzen. Der Proxy ist dann <b>nicht</b> mehr erforderlich.</div>Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0tag:blogger.com,1999:blog-9006266344476660539.post-89668561289369365732012-07-27T15:00:00.000+02:002012-08-04T20:36:11.775+02:00Das HTC Desire HD Disaster [UPDATE]<div style="text-align: justify;">
Ich gehöre ja zu den zahlreichen Besitzern eines HTC Desire HD (DHD). Als ich es vor ca. 1,5 Jahren kaufte hatte es noch Android 2.2 und ich war eigentlich zufrieden. Später gab es dann ein Update auf die Version 2.3.5 mit dem Ergebnis das es stellenweise langsamer wurde. Ob die gefühlt ist oder real sei dahingestellt, aber die Batterie hielt auf alle Fälle bei mir danach länger. Mag sein das andere User da andere Erfahrungen haben. Ich war aber schon etwas verärgert das HTC es nicht schafft seine Geräte zügig auf Android 4.0 zu bringen. </div>
<div style="text-align: justify;">
Das allerdings das Update bestätigt wurde, um es danach 2 Tage später endgültig abzusagen ist mehr als eine Frechheit. Darüber bin ich nun echt sauer. Das DHD ist von der Verarbeitung eigentlich ein gutes Smartphone und nicht so einfacher Plastikmüll. HTC begründet nun die Absage mit fehlender <a href="http://blog.htc.com/2012/03/ics/#desirehd" target="_blank">„User Experience“</a>, was auch immer dies sein soll. Dies ist in meinen Augen nur eine vorgeschobene Begründung seitens HTC zumal es zur Zeit keine weiteren Erklärungen dazu gibt. Die <a href="http://forum.xda-developers.com/forumdisplay.php?f=765" target="_blank">XDA-Developers-Community</a> hat ja bewiesen das es geht. Auch wenn es bei deren Custom-ROMs noch Einschränkungen gibt, was aber an den ihn fehlenden Treibern liegt. Unverständlich auch bei vielen Usern ist das leistungsärmere Geräte von HTC trotzdem ein Update bekommen. Das dies dann zum Teil heftige Reaktionen im Netz auslöst ist dann auch nicht verwunderlich. Auch eine entsprechende weltweite <a href="http://www.ipetitions.com/petition/give-us-ics/" target="_blank">Petition</a> gibt es.</div>
<div style="text-align: justify;">
In meinen Augen wäre es ehrlicher gewesen wenn HTC von Anfang an gesagt hätte das DHD bekommt kein Update. Ich glaube es gibt nur kein Update weil HTC möchte das ihr neues Flagschiff das HTC One gekauft wird. Ob dies wirklich soviel besser ist? Dazu gibt es viele gegenteilige Meinungen, ich kann es nicht beurteilen. Würde HTC wirklich seine Kunden binden wollen würden sie jetzt nicht de Kopf in den Sand stecken und das Update wenigestens für Interessierte zum Download anbieten bzw. die Quellen den Leuten von XDA.Developpers zur Verfügung stellen. Auch eine großzügiger Umtausch des DHD zu einem One (gegen geringe Gebühr (ca. 10% z.B.)) wäre eine geeignete Maßnahme. Sollte HTC nicht bald vernünftig reagieren, werden bestimmt viele User keine HTC-Geräte mehr kaufen, zumal sie den selben Fehler ja bereits beim HTC Desire (ohne HD) gemacht hatten. Zur Zeit sieht es so aus als möchte HTC das Problem aussitzen.</div>
<div style="text-align: justify;">
Ich werde jedenfalle keine HTC Geräte mehr empfehlen, was ich bisher gerne getan habe. Ich entschuldige mich bei allen die wegen mir ein HTC haben und nun enttäuscht sind. Wenn mein nächstes Gerät ansteht wird es auf alle fälle eins aus der Nexus Serie, wer auch immer dann der Hersteller sein wird. Wenn HTC so weiter macht wird es so wie Nokia bald in der Bedeutungslosigkeit versinken.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Das größer Disaster ist für mich allerdings das es mir nicht gelingt ein Costom-ROM auf mein DHD zu bringen. Das Gerät ist zwar gerootet, aber mehr geht aus mir unbekannten Gründen nicht. Es ist mir nicht gelungen das Gerät in den S-Off Modus zu bringen und dann ein Rcovery wie z.B. <a href="http://www.clockworkmod.com/" target="_blank">ClockWorkMod Recovery</a> zu flashen. Dadurch kann ich dann auch kein Custom-ROM aufspielen. Sämtliche Anleitungen im Internet funktionierten bei mir bisher nicht. Sollte wer noch eine mir bisher unbekannte neue Lösung haben würde ich mich freuen.<br />
<br />
<br />
[UPDATE 28.07. 2012]<br />
HTC hat inzwischen bekanntgegeben dass sie kein Update bringen können weil dann der Speicher neu partitioniert werden müsste und da dann ja alle Daten verloren gehen kann man das dem User nicht zumuten. Verdammt noch mal dann bietet es wenigstens für Interessierte an. Die Daten kann man vorher ja auch sichern. Ihr vergrault (potentielle) Kunden immer mehr durch solche Aussagen. Der kunde ist also dumm? Ich dachte bisher immer das nimmt nur Apple von seinen Kunden an.<br />
<br />
<br />
[UPDATE 04.08. 2012]
<br />
Inzwischen ist es mir gelungen af mein DHD ein ICS Custom ROM aufzuspielen. Das es nicht ging bisher lag an einer defekten SD-Karte.</div>Anonymoushttp://www.blogger.com/profile/03080569668125855988noreply@blogger.com0Neuss, Deutschland51.2041968 6.687951151.1246078 6.5300226000000006 51.2837858 6.8458796