<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:easybase="http://www.easybase.de/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
	<title>Thomas goes .NET - Blog</title>
	<link>http://blog.thomasbandt.de/</link>
	<description />
	<language>de-de</language>
	<copyright><![CDATA[2008 Thomas Bandt]]></copyright>
	<generator><![CDATA[EasyBase 7.5.1]]></generator>
	
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ThomasGoesNet" /><feedburner:info uri="thomasgoesnet" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
<title>Die Sache mit der Umsatzsteuer</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2402/de/blog/die-sache-mit-der-umsatzsteuer.html</guid>
<pubDate>Thu, 03 May 2012 09:15:00 +0200</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/Oxv6XF2K2wk/die-sache-mit-der-umsatzsteuer.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="0_Show_Content" class="BlogPostContainer"&gt;
	

    
    
    &lt;p&gt;Steuern sind natürlich gerade in Deutschland ein hochkomplexes Thema, das sich nicht in einem einzigen Beitrag abhandeln lässt. Dennoch sollte man als Gründer einen groben Überblick darüber haben, was man zu zahlen hat und was nicht – den Rest kann man dann dem Steuerberater überlassen. &lt;/p&gt;
&lt;p&gt;Das ist übrigens auch mein wichtigster Ratschlag in dieser Sache gleich vorab: wer neu gründet, sollte sich auf das Wesentliche konzentrieren. Und dazu gehören in meinen Augen nicht die Buchhaltung und auch nicht die Abgabe von Steuererklärungen. &lt;/p&gt;
&lt;p&gt;Deshalb sollte man von Anfang an mit einem Steuerberater oder einer Steuerberaterin seines Vertrauens zusammenarbeiten. Idealerweise geht man nicht gleich zur größten und teuersten Kanzlei, sondern wählt einen Partner aus, bei dem man sich in Beratungsgesprächen gut aufgehoben und fair behandelt fühlt, und, ganz wichtig, mit dem man verträgliche Pauschalen für die monatliche Buchhaltung und den Abschluss vorab aushandeln kann (man sollte wissen, dass StB in einem hohen Wettbewerb zu einander stehen …).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Umsatz- und Vorsteuer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sofern man nicht zur Kleinunternehmerregelung optiert, bei der man von der Umsatzsteuer befreit wird (gleich mehr dazu), wird man mit diesen zwei wichtigsten Steuerarten laufend in Berührung kommen.&lt;/p&gt;
&lt;p&gt;Die Vorsteuer ist die Steuer, die man selbst auf Waren und Dienstleistungen aller Art zahlt. Erhält man von einem Geschäftspartner für ein gemeinsames Projekt eine Rechnung über 1.000 EUR netto, dann wird dieser Steuern in Höhe von meist 19% = 190 EUR auf den Nettowert aufschlagen. Kauft man bei Amazon für das neue Büro einen Drucker für 100 EUR netto, zahlt man auch hier an Amazon 119 EUR.&lt;/p&gt;
&lt;p&gt;Als Privatperson tun wir das auch täglich, ohne es wirklich zu merken. Das Schöne als Unternehmer: dieses Geld gibt es 1:1 wieder zurück. Mit der Umsatzsteuervoranmeldung (die der StB machen sollte) am Ende des Abrechnungszeitraums (oft 1 Monat, bei wenig Vorfällen aber auch mal 3 Monate oder 1 Jahr) bekommt man nun 190 + 19 = 209 EUR vom Finanzamt erstattet.&lt;/p&gt;
&lt;p&gt;Das bedeutet: alles, was man als Unternehmen einkauft, kauft man zum Nettopreis. Oder vereinfacht gesagt: überall gibt’s noch mal 19% Rabatt oben drauf ;-).&lt;/p&gt;
&lt;p&gt;Gleichzeitig, und hier wird es nun interessant, ist man aber verpflichtet auf beinahe alle Waren und Dienstleistungen, die man verkauft, selbst Umsatzsteuer aufzuschlagen. Meist werden das auch hier 19% sein, in manchen Bereichen sind es aber auch die ermäßigten 7% oder teilweise gar nichts (z.B. bei einigen Bildungsleistungen).&lt;/p&gt;
&lt;p&gt;Um bei den Beispielen zu bleiben: für das gemeinsame Projekt mit dem Geschäftspartner wird dem Endkunden eine Rechnung über 5.000 EUR gestellt, den Drucker verkauft man an einen Kollegen für 150 EUR weiter.&lt;/p&gt;
&lt;p&gt;Dann kommen sowohl für das Projekt 19% Umsatzsteuer = 950 EUR, als auch für den Drucker noch einmal 19% USt = 28,50 EUR oben drauf. Hier schließt sich dann auch der Kreis zur eingangs erwähnten Kleinunternehmerregelung – wer z.B. einen Nähservice nach Feierabend betreibt, wird ein Interesse daran haben, seine Dienstleistung so günstig wie möglich verkaufen zu können. Da Privatpersonen, die meist die Kunden sein werden, keine Vorsteuer erstattet bekommen, wäre es sinnvoll, auf die 19% zu verzichten (leider geht das nur bis zu sehr geringen Umsatzgrenzen).&lt;/p&gt;
&lt;p&gt;Die Umsatzsteuer zahlt der Kunde übrigens nicht an das Finanzamt, sondern immer an den Rechnungsersteller. Gleich mehr dazu.&lt;/p&gt;
&lt;p&gt;Tatsächlich sind also beide nur durchlaufenden Posten, sodass es sich anbietet im Alltag als Unternehmer grundsätzlich immer nur in Netto-Beträgen zu denken und z.B. auch zu verhandeln. Der gewerbliche Kunde, der das Projekt beauftragt hat, sieht auch in den allermeisten Fällen die 5.000 EUR Endpreis vor Augen, nicht den Bruttobetrag.&lt;/p&gt;
&lt;p&gt;Bei der Umsatzsteuererklärung (bzw. „Umsatzsteuervoranmeldung“) wird nun beides verrechnet. Wir haben 950 EUR Umsatzsteuer für das Projekt und 28,50 EUR Umsatzsteuer für den Drucker vereinnahmt und gleichzeitig 119 EUR Vorsteuer für die Fremdleistung des Projekt-Partners und 19 EUR Vorsteuer für den Drucker im Einkauf bezahlt.&lt;/p&gt;
&lt;p&gt;Ergibt: (950 EUR + 28,50 EUR) – (190 EUR + 19 EUR) 769,50 EUR zu zahlende Umsatzsteuer an das Finanzamt im Abrechnungszeitraum. Denn: die Umsatzsteuer muss man abführen, die Vorsteuer erhält man zurück.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Warum ein Tagesgeldkonto sinnvoll ist&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Jetzt sind wir an dem Punkt, an dem es unübersichtlich und kompliziert werden könnte. Dabei ist es in der Praxis ganz einfach, wenn man sich nur eines Hilfsmittels bedient: man sollte zusätzlich zum offiziellen Girokonto des Unternehmens immer noch ein reales (also kein Buchungs-) Konto in Form eines Tagesgeldkontos besitzen. Das gibt es von der eigenen Bank, oder, wenn nicht, z.B. bei der &lt;a href="https://www.company-services.de/"&gt;Degussa Bank&lt;/a&gt;. Dabei sollte es nichts kosten (leider gibt es im Geschäftskundenbereich auch wenig Zinsen, aber das ist nebensächlich – sein Geld verdient man ja nicht mit Geldanlagen, oder?).&lt;/p&gt;
&lt;p&gt;Oben hatte ich geschrieben, dass die Kunden die Umsatzsteuer nicht an das Finanzamt abführen. Das muss man immer selbst machen! D.h. wenn man eine Rechnung über 5.000 EUR an den Kunden stellt, kommen auf diese Rechnung noch einmal die besagten 19% = 950 EUR Umsatzsteuer obendrauf. &lt;/p&gt;
&lt;p&gt;Der Kunde überweist also nicht 5.000 EUR auf das eigene Girokonto, sondern 5.950 EUR (Die 950 EUR sind der gleiche Betrag wie bei unserem Drucker oben – für ihn ist das Vorsteuer, die er zahlt und dann selbst wieder erstattet bekommt. Er hat also keinen Nachteil!).&lt;/p&gt;
&lt;p&gt;Sehr, sehr wichtig, ist, dass man beim Geldeingang auf dem Konto nun aber immer die 5.000 EUR vor Augen sieht – und eben nicht die 5.950 EUR. Das ist besonders dann wichtig, wenn das Geschäft eher schlecht läuft. Ich kenne leider viele kleine Unternehmer, die immer in Bruttobeträgen denken und dann mit der vereinnahmten Umsatzsteuer ihre Miete bezahlen. Einmal damit angefangen schiebt man aber ständig einen Schuldenberg vor sich her.&lt;/p&gt;
&lt;p&gt;Denn: bedient man sich bei den 950 EUR, verschuldet man sich. Die „gehören“ nämlich nicht einem selbst, sondern dem Finanzamt – an das sie bei nächster Gelegenheit abzuführen sind, wie oben schon dargestellt (durchlaufender Posten).&lt;/p&gt;
&lt;p&gt;Hier kommt das Tagesgeldkonto nun ins Spiel: ich handhabe es selbst immer so, dass ich die Umsatzsteuer, die Kunden zusammen mit dem Rechnungsbetrag an mich überweisen, sofort vom Girokonto auf das Tagesgeldkonto umbuche.&lt;/p&gt;
&lt;p&gt;Somit sehe ich immer auf einen einzigen Blick, welches Geld ich zur Verfügung habe und ausgeben darf (Girokonto), und welches nicht (Tagesgeldkonto). &lt;/p&gt;
&lt;p&gt;Zwar könnte man das auch selbst z.B. in Excel „virtuell“ vermerken, aber erfahrungsgemäß wird die Sache schon bei 20 Rechnungen im Monat schnell sehr unübersichtlich. Wichtig ist nur, dass man den Überblick über die Geldeingänge auf dem Girokonto behält und man diese irgendwo abhaken kann (Z.B. in der Faktura-Software, mit der man die Rechnungen erstellt hat. Mehr dazu demnächst.)&lt;/p&gt;
&lt;p&gt;Am Ende des Monats, an dem die Umsatzsteuervoranmeldung gemacht wird, ergibt sich also folgendes Bild (Ausgaben hatten wir keine): auf dem Girokonto liegen, weil alle sofort gezahlt haben, 5.150 EUR, auf dem Tagesgeldkonto befinden sich 978,50 EUR.&lt;/p&gt;
&lt;p&gt;Am 10. des nächsten Monats (üblicher Stichtag) überweist man nun die oben bereits ausgerechneten 769,50 EUR an das Finanzamt, womit die eigenen (Umsatz-)Steuerschulden beglichen sind. Verbleibt ein Differenzbetrag von 209 EUR (Exakt die im Einkauf gezahlte Vorsteuer!), den man sich nun wieder auf das Girokonto zurücküberweisen und verprassen kann.&lt;/p&gt;
&lt;p&gt;Damit ist für den nächsten Monat wieder alles auf null gestellt und das Spiel kann von vorn beginnen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Soll- und Ist-Versteuerung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Eine ganz wichtige Sache, die man gleich zu Beginn seiner Tätigkeit, nämlich mit Anmeldung beim Finanzamt, wählt, ist die Antwort auf die Frage, ob man Soll- oder Ist-Versteuerer sein möchte. Es gibt Gewinn- und Umsatzgrenzen, ab denen einem keine Wahl mehr gelassen wird – für die meisten Gründer dürfte das aber anfangs noch keine Rolle spielen.&lt;/p&gt;
&lt;p&gt;Der Unterschied: Als Soll-Versteuerer wird die Umsatzsteuer, die man auf seine Rechnungen aufschlägt, immer sofort zur Zahlung an das Finanzamt fällig. Egal ob der Kunde bereits gezahlt hat, oder nicht. Das ist in meinen Augen problematisch, denn es erhöht den Druck ungemein, die eigenen Forderungen zeitnah einziehen zu müssen.&lt;/p&gt;
&lt;p&gt;Nehmen wir mal an, es gibt eine Rechnung über 20.000 EUR – das bedeutet eine Umsatzsteuer von 3.800 EUR. Diese will das Finanzamt dann sofort von einem sehen, völlig egal, ob sich der Kunde weigert, die Rechnung zu begleichen. Natürlich bekommt man das Geld auch einmal wieder – wenn man die Forderung ausbucht. Aber so lange man das nicht tut, weil man doch noch auf eine Einigung oder Zahlung hofft, fehlt einem dieses Geld.&lt;/p&gt;
&lt;p&gt;Anders ist es als Ist-Versteuerer. Hier zahlt man die Umsatzsteuer an das Finanzamt erst dann, wenn man sie tatsächlich vom Schuldner erhalten hat. Das bedeutet, dass man sich letztlich weniger Druck machen muss und nicht in Vorleistung geht – ob die Rechnung nun nach 2 oder 8 Wochen beglichen wird, kann einem zumindest im Sinne der Umsatzsteuerzahlung egal sein. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wer begreift, dass er immer nur in Netto-Beträgen rechnen und denken darf, und wer die vereinnahmte Umsatzsteuer sauber vom Rest trennt – idealerweise auf einem Tagesgeldkonto – und diese nicht anrührt, der hat ein relativ stress- und sorgenfreies Leben. Zumindest was diese berüchtigten 19% angeht ;-).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Dieser Beitrag ist im Rahmen der Beitrags-Reihe "&lt;/em&gt;&lt;a href="http://blog.thomasbandt.de/39/2400/de/blog/unternehmensgruendung-und-fuehrung.html"&gt;&lt;em&gt;Unternehmensgründung und -führung&lt;/em&gt;&lt;/a&gt;&lt;em&gt;" erschienen und richtet sich speziell an Gründer von kleinen Unternehmen. Er erhebt entsprechend keinen Anspruch auf Vollständigkeit noch auf Objektivität.)&lt;/em&gt;&lt;/p&gt;


    
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2402/de/blog/die-sache-mit-der-umsatzsteuer.html&amp;title=Die+Sache+mit+der+Umsatzsteuer"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2402%2fde%2fblog%2fdie-sache-mit-der-umsatzsteuer.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2402/de/blog/die-sache-mit-der-umsatzsteuer.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=66409f68-8334-4bf5-b308-c313aa28e4e9" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2402/de/blog/die-sache-mit-der-umsatzsteuer.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2012 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/Oxv6XF2K2wk" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2402/de/blog/die-sache-mit-der-umsatzsteuer.html</feedburner:origLink></item> 
<item>
<title>Das richtige Geschäftskonto</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2401/de/blog/das-richtige-geschaeftskonto.html</guid>
<pubDate>Mon, 30 Apr 2012 20:25:00 +0200</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/g8pWltZFelo/das-richtige-geschaeftskonto.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="1_Show_Content" class="BlogPostContainer"&gt;
	

    
    
    &lt;p&gt;Die Wahl der richtigen Bank ist zwar nicht das Erste, worüber man sich als Gründer Gedanken macht, aber es ist ein nicht unwesentliches Puzzleteil. So will die Auswahl wohl überlegt sein. &lt;/p&gt;
&lt;p&gt;Wer denkt, dass Girokonten heute grundsätzlich kostenlos sein müssten, weil das doch im privaten Bereich seit Langem üblich ist (außer bei Volksbanken und Sparkassen vielleicht), der wird überrascht sein, dass es in Deutschland schwierig ist, ein kostenloses Geschäftskonto zu eröffnen. Dabei langen die Banken nicht nur bei den Grundgebühren kräftig zu, auch für einzelne Buchungen werden teilweise horrende Beträge verlangt.&lt;/p&gt;
&lt;p&gt;Mein erstes Geschäftskonto habe ich vor fünf Jahren bei der Postbank eröffnet. Das lief alles online bzw. per Post und E-Mail, auch die Ausstellung einer Kreditkarte war nach ein paar Monaten kein Problem. Auch die Kommunikation mit dem Geschäftskundenservice war, wenn man ihn denn mal brauchte, eigentlich ganz angenehm. &lt;/p&gt;
&lt;p&gt;Ins Abseits schoss sich die Postbank, als ich es einmal hinbekam, mich aus dem Onlinebanking auszusperren. Mangels Telefon-PIN musste ich in die Filiale – was in meinem Fall hieß, dass ich mich in eine Reihe vor dem Postschalter anstellte. Klar dass mein Gegenüber hinter dem Schalter dann keinen Schimmer hatte und seinerseits selbst nur mit einem Callcenter telefonieren musste. Man bezahlt eine Filialbank und bekommt letztlich doch eine Direktbank.&lt;/p&gt;
&lt;p&gt;Für das nächste Konto wollte ich deshalb eigentlich eine echte Filialbank, weshalb ich mich für die Stadtsparkasse München entschied. Meine Hauptmotivation war der Aufbau einer langfristigen Beziehung. Zwar hatte ich bisher auf Kredite und selbst einen Dispo verzichten können, aber wer weiß, wie sich die Dinge mal entwickeln – da kann es nicht schaden, wenn man sein Gegenüber schon gut kennt.&lt;/p&gt;
&lt;p&gt;Ich stiefelte da also hin und bekam, nach Rückversicherung, dass ich keine UG sondern eine richtige GmbH im Stande war zu gründen, einen Termin. Der Berater begann das Gespräch mit Nachfragen zu Versicherungen und Altersvorsorge, konnte mir kein Tagesgeldkonto anbieten und eröffnete mir, dass jede einzelne Buchung – wovon bei mir im Schnitt 50 monatlich anfallen – mit 50 Cent zu Buche schlägt. Zusätzlich zu den Grundgebühren. Dass ich ihm eine BWA (betriebswirtschaftliche Auswertung) meines Steuerberaters schickte, war für ihn selbstverständlich.&lt;/p&gt;
&lt;p&gt;Irgendwie habe ich es dann noch geschafft mich aus der Affäre zu ziehen und die Sparkassen-Filiale ohne Unterschrift zu verlassen. Die Visitenkarte „meines Beraters“ landete beim Herausgehen gleich im Müll.&lt;/p&gt;
&lt;p&gt;Mir war klar, für welche Bank ich mich nun implizit entschieden hatte: die &lt;a href="http://www.gls.de/"&gt;GLS Bank&lt;/a&gt; in Bochum (die übrigens auch eine Filiale in München hat, was ich aber erst später erfuhr). Die hantiert mit dem ihr anvertrauten Geld nicht nur sinnvoll, sie hat auch ein faires und transparentes &lt;a href="http://www.gls.de/unsere-angebote/girokonto/geschaeftskonto/"&gt;Preismodell&lt;/a&gt;, ein modernes Onlinebanking und sie bietet zudem auf Nachfrage auch ein kostenloses Tagesgeldkonto. &lt;/p&gt;
&lt;p&gt;Das ist übrigens auch der Trick, wie man bei ihr zum SmartTAN-Verfahren kommt und die Anschaffung einer Onlinebanking-Software vermeiden kann (SMS-TAN gibt es leider für Geschäftskunden nicht, soweit ich weiß). Die Eröffnung dauerte nur ein paar Tage, obwohl alles über den Postweg lief.&lt;/p&gt;
&lt;p&gt;Ich hatte nun also ein Girokonto, ein Tagesgeldkonto (sehr wichtig, mehr dazu demnächst) – fehlte noch eine Kreditkarte. Ohne Kreditkarte geht bei mir heute nichts mehr, denn all die kleinen smarten Onlinedienste wie z.B. Basecamp, Campaign Monitor oder DynDns wollen bezahlt werden.&lt;/p&gt;
&lt;p&gt;Der GLS-Berater, den ich am Telefon hatte, zögerte etwas – ich mochte es ihm auch nicht verübeln, da ich gerade frisch eine GmbH gegründet hatte, bei der noch keine Geldeingänge zu verzeichnen waren.&lt;/p&gt;
&lt;p&gt;Aber darum muss man sich keine Gedanken machen: es gibt auf dem Markt eine Reihe von Drittanbietern, die günstige oder teilweise sogar kostenlose Kreditkarten anbieten. Ich habe mich für &lt;a href="http://www.amazon.de/gp/cobrandcard/marketing.html"&gt;Amazon&lt;/a&gt; entschieden, die das zusammen mit der Landesbank Berlin betreiben.&lt;/p&gt;
&lt;p&gt;Die Rechnungsanschrift lautet auf die Firma, das Referenzkonto ist das Firmenkonto – zack, geboren ist die Firmenkreditkarte. Und da ich bei Amazon von Elektronik über Bücher sowieso allerhand im Lauf des Jahres bestelle, bringt das Ding unterm Strich sogar noch Geld in Form von Gutscheinen ein.&lt;/p&gt;
&lt;p&gt;Übrigens: auch Tagesgeldkonten kann man sich extern besorgen. So habe ich während meiner Postbank-Zeit die Dienste der &lt;a href="https://www.company-services.de/"&gt;Degussa Bank&lt;/a&gt; genutzt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fazit und Disclaimer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wer bereits 20 Jahre bei einer Bank ist und mit ihr gute Konditionen für ein Geschäftskonto aushandeln kann, der sollte das nutzen. Auch wenn das später keine Garantie dafür ist, dass einem die Bank mit einem günstigen Zinssatz oder überhaupt mit Krediten entgegenkommt, wenn man sie mal benötigt. &lt;/p&gt;
&lt;p&gt;Wem die nachhaltige und „saubere“ Verwendung seines Geldes etwas bedeutet, dem sei die GLS Bank wärmstens empfohlen. Nicht nur wegen ihrer Grundsätze, sondern weil auch sonst alles gut bei ihr funktioniert.&lt;/p&gt;
&lt;p&gt;Und nicht vergessen: Tagesgeldkonto und Kreditkarte bekommt man auch anderswo, sollte die eigene Bank sich noch querstellen oder Informationen anfordern, die etwas zu weit gehen.&lt;/p&gt;
&lt;p&gt;Klar ist auch, dass jede Situation anders ist. So denke ich z.B., dass, je größer ein Unternehmen wird, es sinnvoll sein kann, mit mehreren Banken parallel zu arbeiten. Der Vorteil: man verbessert seine eigene Verhandlungsposition und kann die einzelnen Banken ggf. gegeneinander ausspielen. Aber in dieser Situation bin ich momentan nicht ;-).&lt;/p&gt;
&lt;p&gt;Meine persönliche Entscheidungsmatrix vom Oktober 2011 habe ich übrigens an diesen Artikel angehängt.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Dieser Beitrag ist im Rahmen der Beitrags-Reihe "&lt;/em&gt;&lt;a href="http://blog.thomasbandt.de/39/2400/de/blog/unternehmensgruendung-und-fuehrung.html"&gt;&lt;em&gt;Unternehmensgründung und -führung&lt;/em&gt;&lt;/a&gt;&lt;em&gt;" erschienen und richtet sich speziell an Gründer von kleinen Unternehmen. Er erhebt entsprechend keinen Anspruch auf Vollständigkeit noch auf Objektivität.)&lt;/em&gt;&lt;/p&gt;


    
            &lt;h2&gt;Downloads&lt;/h2&gt;
            &lt;ul&gt;
        
           &lt;li&gt;
                &lt;a id="1_ListDownloads_ctl01_LinkDownload" href="http://blog.thomasbandt.de/Download.ashx?File=0529c569-abf2-492e-a10b-116708f35df2"&gt;Geschaeftskonten.xls&lt;/a&gt; (28 KB)
                
            &lt;/li&gt;
        
            &lt;/ul&gt;
        
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2401/de/blog/das-richtige-geschaeftskonto.html&amp;title=Das+richtige+Gesch%c3%a4ftskonto"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2401%2fde%2fblog%2fdas-richtige-geschaeftskonto.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2401/de/blog/das-richtige-geschaeftskonto.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=51cfd7fd-e354-41c0-af5c-51484b3537cd" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2401/de/blog/das-richtige-geschaeftskonto.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2012 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/g8pWltZFelo" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2401/de/blog/das-richtige-geschaeftskonto.html</feedburner:origLink></item> 
<item>
<title>Unternehmensgründung und -führung</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2400/de/blog/unternehmensgruendung-und-fuehrung.html</guid>
<pubDate>Mon, 30 Apr 2012 12:06:00 +0200</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/rpiaxC81UoE/unternehmensgruendung-und-fuehrung.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="2_Show_Content" class="BlogPostContainer"&gt;
	

    
    
    &lt;p&gt;Wie ich kürzlich festgestellt habe, hat es in diesem Blog in den vergangenen 12 Monaten zu ganzen 10 Beiträgen gereicht. Eine Quote, die ich in „guten Zeiten“ teilweise an einem Tag geschafft habe.&lt;/p&gt;
&lt;p&gt;Aber die Zeiten haben sich geändert. Zum einen haben sich meine persönlichen Interessen weiter „diversifiziert“, was sicher nicht zuletzt auch an meinem Arbeitsalltag liegt, in dem ich in den vergangenen 12 Monaten nicht täglich Visual Studio offen hatte. Und wenn, dann nur zum Anwenden von bereits Gelerntem. JavaScript, C#, HTML5, CSS – alles toll, alles spannend, aber nichts, worüber ich täglich bloggen müsste (eventuell ändert sich das noch in diesem Jahr aber wieder).&lt;/p&gt;
&lt;p&gt;Zum anderen ist dieses Blog als Medium natürlich auch Opfer der letzten Entwicklungen – interessante Links, Videos und Bilder tausche ich heute, wie fast alle anderen, eher über Twitter und Facebook aus, denn über dieses Blog.&lt;/p&gt;
&lt;p&gt;Wie dem auch sei: es ist trotzdem an der Zeit, die Geschichte hier etwas wiederzubeleben – mit einem etwas veränderten Themenschwerpunkt.&lt;/p&gt;
&lt;p&gt;So bin ich inzwischen seit fünfeinhalb Jahren selbstständig. In dieser Zeit habe ich sehr viele positive wie auch ein paar negative Erfahrungen gesammelt und auch viel Wissen (autodidaktisch) aufgebaut, das ich auf Nachfrage auch immer wieder mal im persönlichen Gespräch weitergebe.&lt;/p&gt;
&lt;p&gt;Zwar wird es nicht zu einem Job als Unternehmensberater bei McKinsey oder pwc reichen, aber ein paar für den ein oder anderen wertvolle Tipps zur Gründung und Führung von (Kleinst-)Unternehmen kann ich der Welt durchaus an diesem Platz hinterlassen.&lt;/p&gt;
&lt;p&gt;Alles natürlich ohne Garantie auf Vollständigkeit und Richtigkeit, und mit einem gehörigen Schuss Subjektivität.&lt;/p&gt;
&lt;p&gt;Falls ihr spezielle Fragen habt: nicht zögern, einfach als Kommentar unten anfügen.&lt;/p&gt;


    
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2400/de/blog/unternehmensgruendung-und-fuehrung.html&amp;title=Unternehmensgr%c3%bcndung+und+-f%c3%bchrung"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2400%2fde%2fblog%2funternehmensgruendung-und-fuehrung.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2400/de/blog/unternehmensgruendung-und-fuehrung.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=2a976587-0c54-4b97-9bb9-48f4f92df755" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2400/de/blog/unternehmensgruendung-und-fuehrung.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2012 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/rpiaxC81UoE" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2400/de/blog/unternehmensgruendung-und-fuehrung.html</feedburner:origLink></item> 
<item>
<title>Windows Phone 7.5 - Kritik nach 4 Wochen</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2399/de/blog/windows-phone-75-kritik-nach-4-wochen.html</guid>
<pubDate>Fri, 06 Jan 2012 00:00:00 +0100</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/oQEZdZN74bg/windows-phone-75-kritik-nach-4-wochen.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="3_Show_Content" class="BlogPostContainer"&gt;
	

    
    
    &lt;p&gt;Nachdem ich ja vor ein paar Wochen schon meinen ersten Eindruck von Windows Phone 7.5 auf dem Nokia Lumia 800 geschildert habe, möchte ich jetzt noch mal auf ein paar Details eingehen, die für mich nach gut 4 Wochen echter Nutzung herausstechen.&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;Live Tiles und App-Organisation&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Bis auf eine einzige Anwendung habe ich inzwischen wirklich fast alles gefunden, was ich wirklich benötigt habe. Und obwohl ich kein App-Sammler bin, kam der Moment, in dem der Homescreen übervoll war, recht bald. So nett die Tiles auch sein mögen, platzsparend ist anders.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Darüber hinaus ist die rein alphabetische Sortierung der Anwendungen im eigentlichen App-Menü nicht besonders gelungen. Auch wenn ab einer bestimmten Anzahl noch die Anfangsbuchstaben zur Gruppierung herangezogen werden: die Welt lässt sich nicht nach dem Alphabet ordnen und benutzen. &lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Hier muss unbedingt eine freie Sortierung sowie die Gruppierung in Ordner oder Kategorien her (die Kacheln würden sich dafür eigentlich besonders gut eignen …).&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Was auch auffällig ist: es gibt beinahe keine Anwendung im Marketplace, die die Live-Funktion der Kacheln sinnvoll nutzt. Ich habe z.B. keine einzige Wetter-App gefunden, die das aktuelle Wetter zuverlässig in die blöde Kachel bringt.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Und noch eine Bemerkung am Rande: alle Kacheln weisen bei mir, je nach gewählter Akzentfarbe mal mehr, mal weniger, Streifen auf. Das war schon im Oktober 2010 bei meinem ersten Versuch mit Windows Phone so, und das ist auch auf dem Lumia 800 so. Ich vermute ja fast, dass da JPEG verwendet wird und die Streifen durch die verlustbehaftete Komprimierung entstehen.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Marketplace&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Was Microsoft überhaupt nicht auf die Reihe bekommt, ist die Sortierung und Gewichtung der Anwendungen innerhalb des Marketplace. Der Store ist überfüllt mit absoluten Schrott-Anwendungen, die kein Mensch braucht, oder solchen, die es bereits in 100 anderen Ausführungen gibt. Die wirklich guten Anwendungen gehen dabei leicht unter.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Gut gelöst ist hingegen der Prozess des Kaufs, der Installation und der Aktualisierung. Das ist stimmig und leicht verständlich.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Suche&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Die Einschränkung auf Bing als Suchmaschine habe ich ja bereits im letzten Post kritisiert. Das kann ich nicht nachvollziehen und empfinde es als eine unverschämte Bevormundung. Ich hoffe inständig auf einen Sinneswandel bei Microsoft. Oder alternativ darauf, dass sie jemand verklagt oder sie von einer Behörde zu einer Öffnung gezwungen werden. Mir letztlich egal.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Aber nicht nur Bing als Suchprovider ist nervig, sondern auch die Inkonsistenz, mit der die Suche systemweit (nicht) integriert ist. So kann ich zum Beispiel in der Telefon-App mit dem Geräte-Such-Button nicht nach Kontakten suchen. Und gehe ich auf den Such-Button in der App selbst (zwei Lupen übereinander!), dann sucht er nur in der Anrufliste, nicht aber in der Kontaktliste.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Status-Bar&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Was total nervt: Die Status-Bar im Kopf. Erstens möchte ich eine Akku-Füllstands-Anzeige in Prozent haben. Zweitens möchte ich diese und andere Informationen wie Uhrzeit und Empfangsqualität/Datennetz jederzeit und in jeder App sehen können.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Beispiel gefällig? Surft man im Wartezimmer beim Arzt sitzend im Internet, und lässt sich eine Seite nicht öffnen, dann muss man den Browser schließen, um zu erfahren, ob der Empfang weg ist. Gleiches gilt, wenn man beim Browsen die Uhrzeit wissen will. Wie bescheuert ist das denn?!?&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Internet Explorer&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Wo ich gerade beim IE bin: wen interessiert denn bitte die Adresse der aufgerufenen Website so sehr, dass die URL-Leiste permanent sichtbar den wenigen verfügbaren Bildschirmplatz noch mehr einschränken muss? Diese Leiste darf sich gerne von alleine ausblenden.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Ebenfalls sehr unglücklich gelöst, analog zu den Apps im Hauptmenü: die Favoriten. Die alphabetische Sortierung ist einfach bescheuert. Hier sollte man sich mal etwas bei Android 2.3 (nicht 4.0 …) abschauen.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Multitasking&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Ich habe eine Weile gebraucht um zu verstehen, wie das Multistasking bei Windows Phone 7.5 funktioniert. Wobei - eigentlich verstehe ich es bis heute nicht.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Ich habe keinen Schimmer, nach welchem Schema Anwendungen im Speicher gehalten werden.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Ich habe keinen Schimmer, warum eine Anwendung komplett neu startet, wenn ich sie über den Homescreen aufrufe und nicht über den "Task-Manager".&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Ich habe keinen Schimmer, wie ich eine Anwendung endgültig schließen - und somit ggf. neustarten - kann.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;What the fuck?&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Fazit&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Das mag jetzt alles negativ klingen, aber andere Systeme haben auch ihre Macken. Insbesondere die Inkonsistenz der Oberflächen bei Apple und Android stört mich, gleichzeitig finde ich Metro gegenwärtig sehr ansprechend und inspirierend. Das, und die gnadenlos gute E-Mail-App, bringen mich dazu, das Nokia aktiv weiterzuverwenden. Ich habe zwar, Multi-Sim der Telekom macht es möglich, auch mein Nexus S mit Android 4 parallel in Verwendung, aber müsste ich mich zwischen beiden entscheiden, würde ich vermutlich doch das Lumia 800 wählen.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;Es bleibt nur zu hoffen, dass Microsoft sich nicht beirren lässt und die Plattform schnell und konsequent weiterentwickelt. Einige der Kritikpunkte können je nach Vorlieben, Vorkenntnissen und eigenen Ansprüchen schließlich echte Show-Stopper sein.&lt;/div&gt;


    
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2399/de/blog/windows-phone-75-kritik-nach-4-wochen.html&amp;title=Windows+Phone+7.5+-+Kritik+nach+4+Wochen"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2399%2fde%2fblog%2fwindows-phone-75-kritik-nach-4-wochen.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2399/de/blog/windows-phone-75-kritik-nach-4-wochen.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=7e8326e1-b188-42eb-b46d-e8ab6024fa22" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2399/de/blog/windows-phone-75-kritik-nach-4-wochen.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2012 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/oQEZdZN74bg" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2399/de/blog/windows-phone-75-kritik-nach-4-wochen.html</feedburner:origLink></item> 
<item>
<title>Windows Phone 7 reloaded (+ Nokia Lumia 800)</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2398/de/blog/windows-phone-7-reloaded-nokia-lumia-800.html</guid>
<pubDate>Sat, 10 Dec 2011 14:35:00 +0100</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/ilwXb5G7lEc/windows-phone-7-reloaded-nokia-lumia-800.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="4_Show_Content" class="BlogPostContainer"&gt;
	

    
    
    &lt;p&gt;Nachdem mein erster und letzter Versuch mit Windows Phone 7 vor einem guten Jahr eher &lt;a href="http://blog.thomasbandt.de/39/2367/de/blog/windows-phone-7-jetzt-mal-butter-bei-die-fische.html"&gt;kläglich verlaufen&lt;/a&gt; ist, und ich trotz anders lautender Gerüchte nicht zur Gruppe der stumpf jubelnden Microsoft-Fanboys gehöre, war das Betriebssystem für mich erst einmal erledigt. &lt;/p&gt;
&lt;p&gt;Damals stand es noch in direkter Konkurrenz zu meinem iPhone 4, dass ich ein paar Monate danach aber reichlich entnervt wegen der Empfangsproblematik durch ein Samsung Nexus S mit Android 2.3 ausgetauscht habe. Damit bin ich bis heute extrem zufrieden - ich kann wieder telefonieren (oho!), es gibt eine sehr große Auswahl an auch qualitativ guten Apps und die Integration meiner inzwischen zwei Exchange-Konten funktioniert zuverlässig.&lt;/p&gt;
&lt;p&gt;Nun stand im November ein neuer Vertrag an und meine Wahl fiel auf T-Mobile. Zu diesem Zeitpunkt war die offizielle Verlautbarung noch, dass diese das neue Samsung Galaxy Nexus nicht anbieten werden. Also blieben noch drei Möglichkeiten: ein Vertrag ohne Gerät, das iPhone 4S oder das Nokia Lumia 800.&lt;/p&gt;
&lt;p&gt;Mein Wahl fiel auf das Lumia. Zum einen, weil es sich rein rechnerisch auf zwei Jahre gegenüber dem Vertrag ohne Hardware nicht lohnte, darauf zu verzichten, zum anderen weil ich keine Lust mehr auf das iPhone und den Lock-In von Apple habe. Darüber hinaus wird Windows Phone für die mobile Webentwicklung langsam so etwas wie Opera oder der (nicht jeweils aktuelle) Internet Explorer - eine Art ungeliebtes Stiefkind, dass man dennoch nicht ganz links liegen lassen und ignorieren kann. Deshalb war das Risiko nicht groß - sollte sich das Lumia als Flop entpuppen, würde ich es eben einfach als reines Test- und Entwicklungs-Gerät in den Schrank legen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Das Lumia 800&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wer die Biografie von Steve Jobs gelesen hat, der weiß wie viel Energie Apple auf die kleinsten Details verwendet. Alles steht im Kontext des perfekten End-to-End-Erlebnisses für den Benutzer. Und wo fängt so ein Erlebnis an? Beim Auspacken! &lt;/p&gt;
&lt;p&gt;Das verstehen nicht viele Menschen, aber wer schon einmal ein Apple-Produkt gekauft hat, der weiß, dass der erste Kontakt damit immer etwas Besonderes ist. Eine Pralinenschachtel ist in der Regel ein Scheiß gegen die Verpackungen von Apple (wer jetzt lächelt: das setzt sich in den Köpfen der Menschen fest und äußerst sich später wieder beim Wiederverkaufswert auf Ebay ...).&lt;/p&gt;
&lt;p&gt;Auch bei Nokia hat das niemand kapiert. Das Gerät kommt mit einer hässlichen blauen Papp-Ummantelung und einem T-Mobile-Aufkleber, was alles sehr billig wirkt. Selbst der Karton des nur 100 Euro teuren Huawei Ideos X3, das ich neulich verschenkt habe, hat einen wertigeren Eindruck hinterlassen. Hier versagt Nokia also schon einmal völlig.&lt;/p&gt;
&lt;p&gt;Was umso erstaunlicher ist, da die Verpackung in völligem Kontrast zum Gerät selbst steht. Über das Design ist ja schon viel geschrieben und gesagt worden - deshalb fasse ich mich kurz. Für mich ist es das momentan schönste Smartphone auf dem Markt. Sogar der mitgelieferte Bumber kann die Schönheit und Eleganz nicht gänzlich zerstören.&lt;/p&gt;
&lt;p&gt;Negativ: &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Die vier Hardware-Knöpfe an der Seite (2 für die Lautstärke, einer zum Aus- und Anschalten, einer für die Kamera) klappern und wirken sehr billig. &lt;/li&gt;
    &lt;li&gt;Den Micro-USB-Anschluss hat Nokia unter einer Klappe versteckt, die wie alles andere auch, aus Plastik besteht. Steve Jobs war immer dagegen, die Leute etwas öffnen zu lassen. Und er hat damit vollkommen recht - es ist nur eine Frage der Zeit, bis diese Klappe abbrechen wird.&lt;/li&gt;
    &lt;li&gt;Die Rückseite des Telefons ist außerdem durch die leichte Gummierung extrem empfindlich für Fingerabdrücke und Schweiß. Womit es nach einigen Minuten Benutzung ziemlich keimig aussieht. Aber gut, diesen Fehler begeht Nokia nicht exklusiv.&lt;/li&gt;
    &lt;li&gt;Es ist relativ schwer.&lt;/li&gt;
    &lt;li&gt;Die Akkulaufzeit ist - nach dem aktuellen Update von dieser Woche - auf einer Skala von 0 bis 10, wo 10 den Bestwert darstellt, vielleicht bei einer 4.&lt;/li&gt;
    &lt;li&gt;Die Empfangsqualität mit Vodafone ist nicht die Beste. Irgendwo zwischen dem Nexus S und dem iPhone 4, würde ich sagen.&lt;/li&gt;
    &lt;li&gt;Die Kamera ist fast unbrauchbar, zumindest bei indirekter Beleuchtung. Ich habe zudem keine einzige Barcode-Scanner-App gefunden, die funktioniert hätte.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Trotzdem meine Kritik stark ist, finde ich es unter dem Strich durchaus gelungen. Das an sich sehr gute Design, vor allem die Einfassung des Displays, wiegen dei Schwachpunkte wieder auf. Zumindest so lange, bis mir die USB-Klappe abbricht ;-).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows Phone 7.5&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Meine zweite Begegnung mit Windows Phone verläuft nun wesentlich entspannter als die erste. Vielleicht, weil meine Erwartungen nicht mehr so hoch sind und ich auch jederzeit zurück zum Nexus S kann, das in ein paar Wochen mit Android 4.0 laufen dürfte. Vielleicht aber auch, weil Windows Phone, nun, vielleicht noch nicht erwachsen, aber doch reifer geworden ist.&lt;/p&gt;
&lt;p&gt;Positiv:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Die Geschwindigkeit ist grundsätzlich sehr gut. Die Navigation durch die Menüs funktioniert sehr flüssig.&lt;/li&gt;
    &lt;li&gt;Die Integration mit Office 365 und hier insbesondere Exchange ist hervorragend. Die Konten sind schnell eingerichtet und die Synchronisation funktioniert via Push tadellos.&lt;/li&gt;
    &lt;li&gt;Die Kalender-App ist übersichtlich und funktioniert problemlos, auch wenn eine Wochenansicht fehlt.&lt;/li&gt;
    &lt;li&gt;Die E-Mail-App schlägt alles, was ich von iOS und Android kenne, um Längen. Insbesondere das, was Android 2.3 hier bietet, kann sich nicht mit Outlook für WP7 vergleichen lassen. Postfächer lassen sich kombinieren und auch wirklich so nutzen, alle wesentlichen Funktionen innerhalb des Postfachs sind schnell und intuitiv zu erreichen und das Design ist extraklasse.&lt;/li&gt;
    &lt;li&gt;Copy &amp;amp; Paste ist gut gelöst. Auch wenn ich zunächst noch die richtige "Antippgeschwindigkeit" herausfinden musste, um einen Text markieren zu können.&lt;/li&gt;
    &lt;li&gt;Der Internet Explorer ist zwar noch lange nicht auf einem Level mit Webkit, aber die Ergebnisse sind inzwischen durchaus annehmbar. Kein Vergleich mehr zu diesem Krüppel in der ersten Version von WP7.&lt;/li&gt;
    &lt;li&gt;Zune ist das bessere iTunes. Die Software läuft unter Windows 7 sehr geschmeidig, sieht dazu noch sehr gut aus und sie funktioniert fast fehlerfrei (für das Firmware-Update dieser Woche musste ich sie erst als Admin starten).&lt;/li&gt;
    &lt;li&gt;Die Zune-App auf dem Phone ist ebenfalls sehr schick gestaltet.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Negativ:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Der Market Place. Nun ja. Vieles ist, wie bei Android und iOS auch, einfach nur Müll. Nur filtern die beiden Konkurrenten die echten Perlen besser - was hier bei Microsoft in den Top-Listen steht, ist entweder unverschämt teuer und/oder trotzdem schlecht. Mich persönlich stört das noch gar nicht so, da ich kein App-Sammler bin und mir momentan nur eine Anwendung für Simfy abgeht, wofür aber Microsoft nichts kann.&lt;/li&gt;
    &lt;li&gt;Die Kacheln auf dem Homescreen sind zu groß, um viele Anwendungen unterbringen zu können. Die rein alphabetische App-Liste jedoch wird sehr schnell sehr unübersichtlich. Hier fehlt einfach die Möglichkeit zu gruppieren, sei es über mehrere Screens oder etwa Ordner (beides bei Android und iOS Standard).&lt;/li&gt;
    &lt;li&gt;Die Akku-Anzeige gibt es nicht in Prozent, es sei denn man wechselt mühsam in die Einstellungen und sieht dort nach. Das ist für die einen eine Kleinigkeit, aber wenn ich unterwegs bin, das Telefon brauche und der Akku je nach Nutzung bei einer Füllstandsanzeige von etwa einem Viertel noch 12, 4 oder nur eine Stunde durchhält, dann will ich das gerne sofort sehen und mich darauf einstellen können.&lt;/li&gt;
    &lt;li&gt;Bing. Sorry, Microsoft. Aber ich möchte Bing nicht verwenden. Denn Bing ist einfach nur absoluter Schrott. Die Ergebnisse sind in Deutschland nicht zu gebrauchen. Also zwingt mich bitte nicht dazu und ermöglicht die Integration anderer Such-Provider. Danke.&lt;/li&gt;
    &lt;li&gt;Es gibt keine zentrale Suche über alle Inhalte des Telefons hinweg, also Kontakte, E-Mails, Musik.&lt;/li&gt;
    &lt;li&gt;Bing Maps ist nicht Google Maps. Wer einmal das Original verwendet und schätzen gelernt hat, wird etwas vermissen.&lt;/li&gt;
    &lt;li&gt;Die eigentliche Telefon-App finde ich etwas unübersichtlich. Auch während eines Gesprächs ist es für mich nicht deutlich genug hervorgehoben, ob nun z.B. die Freisprech-Funktion aktiv ist, oder nicht.&lt;/li&gt;
    &lt;li&gt;Einige Apps brauchen jedoch nach dem Start noch zu lange, auch nach einem Aufwecken, wenn man sie schon mal geöffnet hatte. Ein Effekt, den man von Android her kaum noch kennt.&lt;/li&gt;
    &lt;li&gt;Trotz der großen Klasse hat auch Outlook ein Manko: sucht man beim Schreiben einer Mail nach einem Empfänger, wird nur in den Namen der Kontakte - nicht ihren E-Mail-Adressen gesucht. Eine unterirdische bis unbrauchbare Autovervollständigung hat aber auch in Outlook am Desktop schon eine sehr lange Tradition (das geht nur in der Mac-Version wirklich gut).&lt;/li&gt;
    &lt;li&gt;Nokia liefert eine App mit, die nichts anderes macht, als zu sagen, dass man Daten über mich und mein Telefon sammelt. Da komme ich mir verarscht vor. Sorry - wenn ihr schon so tut, als würdet ihr offen und ehrlich sein, dann gebt gefälligst auch detailliert an, was alles getrackt wird.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Zwischenfazit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mein Verhältnis zu Windows Phone 7.5 und dem Lumia bleibt etwas ambivalent. &lt;/p&gt;
&lt;p&gt;Obwohl Windows Phone selbst noch kleine Macken und einfach hausgemachte Schwächen, wie etwa Bing und die mangelnde App-Vielfalt, besitzt, gibt es darunter für mich momentan keine KO-Argumente, die mich sofort wieder zum Nexus S greifen ließen. Und auch das Lumia ist trotz seiner offensichtlichen Konstruktionsfehler in Kombination mit der sehr stylischen Oberfläche von WP7 eine Augenweide.&lt;/p&gt;
&lt;p&gt;Ich bin nach einer halben Woche noch unentschieden, was man ja auch als deutlichen Fortschritt werten könnte. Auf Twitter wurden am Mittwoch ja schon Wetten angenommen, ich würde es noch am selben Tag zurückschicken ;-).&lt;/p&gt;
&lt;p&gt;Fest steht aber schon mal: nicht technik-affinen Menschen, die bisher ein normales Handy benutzen, würde ich es heute uneingeschränkt empfehlen. Sogar eher als ein Android-Gerät, weil das Design der Oberfläche viel übersichtlicher ist und die Funktionen für den Normalsterblichen mehr als ausreichend sind.&lt;/p&gt;


    
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2398/de/blog/windows-phone-7-reloaded-nokia-lumia-800.html&amp;title=Windows+Phone+7+reloaded+(%2b+Nokia+Lumia+800)"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2398%2fde%2fblog%2fwindows-phone-7-reloaded-nokia-lumia-800.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2398/de/blog/windows-phone-7-reloaded-nokia-lumia-800.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=4b6cca3f-514c-42de-b7d0-1733b8c130da" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2398/de/blog/windows-phone-7-reloaded-nokia-lumia-800.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2011 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/ilwXb5G7lEc" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2398/de/blog/windows-phone-7-reloaded-nokia-lumia-800.html</feedburner:origLink></item> 
<item>
<title>Clientseitige Lokalisierung mit .NET und knockout.js</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2397/de/blog/clientseitige-lokalisierung-mit-net-und-knockoutjs.html</guid>
<pubDate>Tue, 30 Aug 2011 15:54:00 +0200</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/GyrXoCMh5e0/clientseitige-lokalisierung-mit-net-und-knockoutjs.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="5_Show_Content" class="BlogPostContainer"&gt;
	

    
    
    &lt;p&gt;Lokalisierung ist ein Thema, das jeden Entwickler sein ganzes Leben lang begleitet. Lösungsansätze gibt es viele verschiedene, einen ganz speziellen, und in meinen Augen auch eleganten, möchte ich nachfolgend kurz vorstellen. Speziell ist er deshalb, weil er eine Anforderung abdeckt, die sie mir nun nach 10 Jahren Webentwicklung das erste Mal wirklich gestellt hat.&lt;/p&gt;
&lt;p&gt;Bisher wurde jegliche Übersetzung vom Server erledigt, d.h. die Texte wurden schon in der jeweiligen Sprache an den Browser ausgeliefert. Das geht in meinem aktuellen Projekt nicht - denn diese Anwendung arbeitet ab einem bestimmten Zeitpunkt komplett offline. Da wäre es dem Nutzer nicht zu vermitteln, dass er zum Wechseln der Sprache eine Internetverbindung benötigt.&lt;/p&gt;
&lt;p&gt;Das heißt, dass das Wechseln der Sprache clientseitig erfolgen muss und auch die Entscheidung, in welcher Sprache ein&amp;nbsp;Text in einem Dialog angezeigt wird, am Client getroffen wird.&lt;/p&gt;
&lt;p&gt;So lang es nur um Texte geht, die aus JavaScript heraus verwendet werden, z.B. für Message-Boxen, ist das kein großes Problem: irgendwo ein Dictionary hinterlegen, cachen,&amp;nbsp;abfragen, anzeigen, fertig. Aber da nun tatsächlich erst clientseitig die Entscheidung fällt, welche Sprache verwendet wird, müssen auch die Teile, die normalerweise statisch sind, zur Laufzeit erzeugt werden - Hinweistexte, Labels, Legenden usw.&lt;/p&gt;
&lt;p&gt;Und hier wird es kniffelig: wie bekommt man am saubersten Text dynamisch in eine statische HTML-Seite eingebunden, ohne für jeden Punkt und Strich alles mit document.write() und entsprechenden Script-Tags zu verstopfen?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grundlage - Resource-Files&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hier hat sich seit knapp 10 Jahren nicht viel getan - wenn mich meine Erinnerung nicht trügt, hat sich auch das Tooling rund um die .resx-Dateien in Visual Studio nicht verbessert, es ist heute noch genauso schlecht wie schon mit Visual Studio 2002. Trotzdem finde ich das Konzept an sich recht brauchbar und um einiges flexibler als z.B. die Ablage von Texten in der Datenbank (wie immer: it depends).&lt;/p&gt;
&lt;p&gt;Und mit dem &lt;a href="http://www.zeta-resource-editor.com/index.html"&gt;Zeta Resource Editor&lt;/a&gt; steht ein Tool zur Verfügung, das all die Schwachstellen von Visual Studio im Umgang mit den Resource Files beseitigt. Es gibt eine komfortable Editier-Möglichkeit, und, was das allerwichtigste ist, einen Im- und Export für Excel. Kaum ein Übersetzer, den man irgendwo engagiert, wird sich eine Software aufschwatzen lassen - deshalb ist Excel als Schnittstelle eminent wichtig.&lt;/p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" alt="" src="http://blog.thomasbandt.de/Library/Media/CMS/zeta.png" /&gt;
&lt;p&gt;&lt;strong&gt;Die Übersetzungen müssen zum Client ...&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Resource Files als Grundlage haben den großen Vorteil, dass sie sowohl server- als auch clientseitig einsetzbar sind. Man muss also nicht zwei verschiedene Quellen für die Übersetzungen pflegen und kann durchaus für beide Seiten die selben Dateien benutzen. Nur muss der Inhalt auch zum Client, und das geht so:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; LocalizedLabelViewModel&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Label { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; Translations = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;}&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; HomeController : Controller&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult LocalizedLabels()&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        var labels = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;LocalizedLabelViewModel&amp;gt;();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        PropertyInfo[] properties = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Localization.Labels).GetProperties(BindingFlags.Static | BindingFlags.Public);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var property &lt;span class="kwrd"&gt;in&lt;/span&gt; properties.Where(p =&amp;gt; p.Name != &lt;span class="str"&gt;"ResourceManager"&lt;/span&gt; &amp;amp;&amp;amp; p.Name != &lt;span class="str"&gt;"Culture"&lt;/span&gt;))&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            var label = &lt;span class="kwrd"&gt;new&lt;/span&gt; LocalizedLabelViewModel();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            label.Label = property.Name;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            Localization.Labels.Culture = &lt;span class="kwrd"&gt;new&lt;/span&gt; CultureInfo(&lt;span class="str"&gt;"de-DE"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            label.Translations.Add(Localization.Labels.Culture.Name, property.GetValue(&lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;span class="kwrd"&gt;null&lt;/span&gt;).ToString());&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            Localization.Labels.Culture = &lt;span class="kwrd"&gt;new&lt;/span&gt; CultureInfo(&lt;span class="str"&gt;"en-GB"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            label.Translations.Add(Localization.Labels.Culture.Name, property.GetValue(&lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;span class="kwrd"&gt;null&lt;/span&gt;).ToString());&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            labels.Add(label);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; PartialView(labels);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Die einzelnen Labels werden also via Reflection geholt und und in allen Sprachversionen (manuell) gesammelt. Die nachfolgende View sieht furchtbar aus - aber das kommt halt dabei heraus, wenn man versucht mit Razor JavaScript zu erzeugen:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;@model IEnumerable&amp;lt;JsLocalizationDemo.Model.LocalizedLabelViewModel&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;@{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    Response.ContentType = &lt;span class="str"&gt;"text/javascript"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    var indexLabels = 0;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; labelsCount = Model.Count();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;}var localizedLabels = {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    @&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var label &lt;span class="kwrd"&gt;in&lt;/span&gt; Model) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    indexLabels++;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    @label.Label@:: {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    var indexTranslations = 0;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var translation &lt;span class="kwrd"&gt;in&lt;/span&gt; label.Translations) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        indexTranslations++;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        @:&lt;span class="str"&gt;'@translation.Key'&lt;/span&gt;: &lt;span class="str"&gt;'@Html.Raw(translation.Value.Replace("'&lt;/span&gt;&lt;span class="str"&gt;", "&lt;/span&gt;\\&lt;span class="str"&gt;'"))'&lt;/span&gt;@(indexTranslations &amp;lt; label.Translations.Count ? &lt;span class="str"&gt;","&lt;/span&gt; : &lt;span class="str"&gt;""&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    @:}@(indexLabels &amp;lt; labelsCount ? &lt;span class="str"&gt;","&lt;/span&gt; : &lt;span class="str"&gt;""&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;}}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Das Ergebnis kann sich jedenfalls besser sehen lassen:&lt;/p&gt;
&lt;img alt="" src="http://blog.thomasbandt.de/Library/Media/CMS/localizedlabels.PNG" /&gt;
&lt;p&gt;&lt;strong&gt;Ausgabe der Übersetzungen&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Der Vorteil dieses Weges gegenüber der Verwendung von "echtem" Json (was übrigens die Aufbereitung in der View auf 1 Zeile minimieren würde) ist die Möglichkeit mit der Bezeichnung des Labels als Index arbeiten zu können:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;function localizedText(label) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;try&lt;/span&gt; {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; localizedLabels[label][&lt;span class="str"&gt;"de-DE]"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (e) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"n/a"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Integration in die View - mit knockout.js&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Um die Texte nun an beliebigen Stellen innerhalb der View verwenden zu können, hilft knockout.js. Die einfachste aller Möglichkeiten wäre den Standard-Text-Binding-Handler zu verwenden, und so den Text auszugeben:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt; &lt;span class="attr"&gt;data-bind&lt;/span&gt;&lt;span class="kwrd"&gt;="text: localizedText('UserName')"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Doch es geht auch noch einen Tick eleganter. knockout.js bietet die Möglichkeit&amp;nbsp;&lt;a href="http://knockoutjs.com/documentation/custom-bindings.html"&gt;eigene Binding-Handler&lt;/a&gt; zu definieren:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;ko.bindingHandlers.localizedText = {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    init: function (element, valueAccessor) {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        $(element).text(localizedText(valueAccessor()));&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;};&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Womit dann auch die Anwendung sehr einfach wird:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt; &lt;span class="attr"&gt;for&lt;/span&gt;&lt;span class="kwrd"&gt;="userName"&lt;/span&gt; &lt;span class="attr"&gt;data-bind&lt;/span&gt;&lt;span class="kwrd"&gt;="localizedText: 'UserName'"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Diese Bindings lassen sich nun auf sämtliche HTML-Elemente anwenden, die einen "Inner Text" besitzen. Abwandlungen und Erweiterungen sind natürlich beliebig möglich - ich habe z.B. noch einen Handler für das Placeholder-Attribut benutzt, das mit HTML5 für Textboxen eingeführt wird.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Als Grundlage Altbewährtes, im Frontend knockout.js und schon hat man eine Möglichkeit HTML-Anwendungen zu lokalisieren, ohne dass der Server die entscheidende Rolle spielen muss. Ich habe auf dem Weg innerhalb eines Tages eine recht komplexe App mehrsprachig gemacht und bin zufrieden - es ist sehr flexibel, zuverlässig und es funktioniert z.B. auch mit jQuery.templ(), d.h. Übersetzungen sind auch mit Templates kein Problem.&lt;/p&gt;
&lt;p&gt;Im Anhang findet sich noch eine kleine MVC3-App, die sowohl die grundsätzliche Funktionsweise von knockout.js als auch die Übersetzung im Ganzen demonstriert.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;a id="update"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ilker.de/"&gt;Ilker&lt;/a&gt;&amp;nbsp;hat mich darauf hingewiesen, dass es auch&amp;nbsp;&lt;a href="https://gist.github.com/1181500"&gt;mit "echtem" Json&lt;/a&gt; funktioniert - was natürlich wesentlich smarter ist. Als ich mir sein Beispiel angesehen habe, wusste ich auch wieder, warum das so nicht funktioniert hat: bei obigem ViewModel stehen Index (Label) und Übersetzungen nebeneinander, die Übersetzungen sind also dem Label nicht untergeordnet.&lt;/p&gt;
&lt;p&gt;Also habe ich das ViewModel weggeworfen und einfach mit zwei verschachtelten Dictionaries gearbeitet:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult LocalizedLabels()&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    var labels = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;&amp;gt;();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    PropertyInfo[] properties = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Localization.Labels).GetProperties(BindingFlags.Static | BindingFlags.Public);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var property &lt;span class="kwrd"&gt;in&lt;/span&gt; properties.Where(p =&amp;gt; p.Name != &lt;span class="str"&gt;"ResourceManager"&lt;/span&gt; &amp;amp;&amp;amp; p.Name != &lt;span class="str"&gt;"Culture"&lt;/span&gt;))&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        var translations = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        Localization.Labels.Culture = &lt;span class="kwrd"&gt;new&lt;/span&gt; CultureInfo(&lt;span class="str"&gt;"de-DE"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        translations.Add(Localization.Labels.Culture.Name, property.GetValue(&lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;span class="kwrd"&gt;null&lt;/span&gt;).ToString());&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        Localization.Labels.Culture = &lt;span class="kwrd"&gt;new&lt;/span&gt; CultureInfo(&lt;span class="str"&gt;"en-GB"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        translations.Add(Localization.Labels.Culture.Name, property.GetValue(&lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;span class="kwrd"&gt;null&lt;/span&gt;).ToString());&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        labels.Add(property.Name, translations);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; PartialView(labels);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;Das reduziert die View auf ein Minimum:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;@model Dictionary&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;string&lt;/span&gt;, &lt;span class="attr"&gt;Dictionary&lt;/span&gt;&amp;amp;&lt;span class="attr"&gt;lt&lt;/span&gt;;&lt;span class="attr"&gt;string&lt;/span&gt;, &lt;span class="attr"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;@{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    Response.ContentType = "text/javascript";&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;}&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;var localizedLabels = @Html.Raw(Json.Encode(Model));&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Alex' Tipp aus den Kommentaren habe ich hingegen nicht aufgenommen - da ich, würde ich das Json direkt ausliefern, das wieder irgendwo abholen müsste. So spare ich mir den zusätzlichen Request und weise das Ganze direkt zu.&lt;/p&gt;
&lt;p&gt;Jetzt ist es doch wirklich rund, danke Ilker :-). Eine aktualisierte Demo hängt ebenfalls an.&lt;/p&gt;


    
            &lt;h2&gt;Downloads&lt;/h2&gt;
            &lt;ul&gt;
        
           &lt;li&gt;
                &lt;a id="5_ListDownloads_ctl01_LinkDownload" href="http://blog.thomasbandt.de/Download.ashx?File=bf974031-e0f9-4901-ae22-935e22386f98"&gt;JsLocalizationDemo_1.zip&lt;/a&gt; (81,34 KB)
                
            &lt;/li&gt;
        
            &lt;/ul&gt;
        
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2397/de/blog/clientseitige-lokalisierung-mit-net-und-knockoutjs.html&amp;title=Clientseitige+Lokalisierung+mit+.NET+und+knockout.js"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2397%2fde%2fblog%2fclientseitige-lokalisierung-mit-net-und-knockoutjs.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2397/de/blog/clientseitige-lokalisierung-mit-net-und-knockoutjs.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=d7c73229-203f-4241-80c0-1eb19183c70c" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2397/de/blog/clientseitige-lokalisierung-mit-net-und-knockoutjs.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2011 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/GyrXoCMh5e0" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2397/de/blog/clientseitige-lokalisierung-mit-net-und-knockoutjs.html</feedburner:origLink></item> 
<item>
<title>Das Buch ist tot, es lebe das Buch.</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2396/de/blog/das-buch-ist-tot-es-lebe-das-buch.html</guid>
<pubDate>Thu, 18 Aug 2011 12:30:00 +0200</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/kcwV0EiJ8Og/das-buch-ist-tot-es-lebe-das-buch.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="6_Show_Content" class="BlogPostContainer"&gt;
	

    
    
    &lt;p&gt;Ich muss vorwegschicken, dass ich nicht der Typ bin, der auf eine Buchmesse geht. In meinem Besitz befinden sich vielleicht 100 Bücher. Wobei ich mir sicher bin, dass das schon mehr ist, als in anderen Haushalten von Leuten meiner Generation. Auch Fachliteratur lese ich so gut wie nie, quasi mein gesamtes Wissen zu ASP.NET MVC beispielsweise stammt aus dem Netz.&lt;/p&gt;
&lt;p&gt;Ähnlich sieht es mit Zeitschriften aus - ob cicero, Spiegel, 11 Freunde oder ein .NET-Magazin, mit Ausnahme der NEON habe ich alle Abonnements irgendwann eingestellt, da die Dinger meist irgendwann ungelesen ins Altpapier wanderten.&lt;/p&gt;
&lt;p&gt;Dennoch habe ich immer wieder gern gelesen. Das mag sich jetzt widersprüchlich anhören, aber ich habe das meist als Ausbruch aus dem digitalen Hamsterrad begriffen, weshalb es sich dann auch meist auf den Urlaub oder das Lesen abends im Bett beschränkte. Das klappte auch immer nur dann, wenn ein Buch wirklich richtig gut gewesen ist und mich nicht mehr loslassen wollte (zum Beispiel &lt;a href="http://www.amazon.de/Mein-Leben-meine-Freiheit-Autobiographie/dp/3492250866/"&gt;das&lt;/a&gt; oder &lt;a href="http://www.amazon.de/Mein-Bericht-die-Welt-Geschichte/dp/3888977053/"&gt;das&lt;/a&gt;). Einige meiner wenigen Bücher stehen dazu noch ungelesen im Regal, weil ich sie einfach auf Vorrat bestellt habe, nachdem ich irgendwo auf sie aufmerksam wurde. Dazu gleich mehr ...&lt;/p&gt;
&lt;p&gt;Das Thema eBooks habe ich eigentlich nie weiter beachtet, da ich nie ein Interesse daran hatte, längere Texte am Bildschirm zu lesen. Erst als ich mich kürzlich mal gezwungen habe, zwei Stunden mit meinem nur zu Entwicklungszwecken gekauften iPad zu beschäftigen, bin ich über die iBooks-App gestolpert und habe mir aus Neugier dort ein Buch gekauft.&lt;/p&gt;
&lt;p&gt;Die Möglichkeiten, die iBooks und überhaupt das Tablet bieten, fand ich sofort faszinierend: relativ wenig Gewicht, hohe Mobilität, unendlich viele Bücher an einem Ort und die Fähigkeit der App, sich meinen Bedürfnissen anpassen zu lassen - in Schriftgröße, Schriftart, Helligkeit usw.&lt;/p&gt;
&lt;p&gt;So dauerte es nicht lang, bis ich &lt;a href="http://www.amazon.de/Auf-eine-Zigarette-Helmut-Schmidt/dp/3462042157/"&gt;das erste Buch&lt;/a&gt; primär abends im Bett und morgens beim Frühstück auf dem iPad fertig gelesen hatte. Beides Gelegenheiten, die das Für und Wider des iPad als Medium zum Lesen perfekt repräsentieren. &lt;/p&gt;
&lt;p&gt;Dafür spricht das aktive Display, das es ermöglicht, im Dunkeln zu lesen, ohne seine nähere Umwelt mit mehr Licht als notwendig zu belästigen. Das ist sowohl im Bett als z.B. auch im Flugzeug von Vorteil.&lt;/p&gt;
&lt;p&gt;Der größte Nachteil neben dem Gewicht und der furchtbaren Unhandlichkeit des iPad ist aber sein ansonsten gutes aber spiegelndes Display. Als nach den üblichen schlechten Sommertagen dann eines Morgens doch mal die Sonne schien, bekam der Spaß plötzlich ein Loch. Es ist bei Tageslicht schlicht und ergreifend unzumutbar, sich längere Zeit auf einen spiegelnden Bildschirm zu konzentrieren, erst recht darauf zu lesen. Ich möchte gar nicht erst wissen, wie es bei tief stehender Sonne im Zug ausschaut.&lt;/p&gt;
&lt;p&gt;Das ließ dann in mir die Überlegung reifen, doch mal den &lt;a href="http://www.amazon.de/Kindle-Wireless-Reader-Wifi-Lesegerät/dp/B003DZ1Y8Q/"&gt;Kindle&lt;/a&gt; von Amazon auszuprobieren. &lt;/p&gt;
&lt;p&gt;Eigentlich wollte ich mir kein Gerät mehr kaufen, das nur eine einzige Aufgabe erledigt. Auf der anderen Seite musste ich so oder so neben meinem Smartphone unterwegs immer noch mein Notebook mitnehmen, da das iPad allein als Ersatz zum Arbeiten im Notfall auch ungeeignet gewesen wäre. So würde ich lieber auf das iPad verzichten, und hätte die gleiche Anzahl an Geräten dabei.&lt;/p&gt;
&lt;p&gt;Als der Kindle dann ankam, war ich erst einmal etwas enttäuscht. Das Gerät mutet in Zeiten moderner Smartphones usw. nicht nur sehr hässlich, sondern vor allem auch altbacken an. Also eher wie einer der ersten iPods von 2001 als ein iPod Touch von 2011. Vor allem die fehlende Touchbedienung machen die Bedienung in meinen Augen nicht nur ungewöhnlich, sondern wirklich hässlich. Ich bin auch froh, nicht die 3G-Variante genommen zu haben (mein Smartphone kann ich jederzeit als Hotspot einsetzen), denn Surfen möchte ich damit nicht.&lt;/p&gt;
&lt;p&gt;Aber das ist alles völlig egal. Denn der Kindle hat zwei unschlagbare Vorteile: &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;ist er klein und handlich und mit einer der viel zu teuren aber in meinen Augen notwendigen &lt;a href="http://www.amazon.de/Amazon-Kindle-Lederhülle-Display-Generation-Scharniersystem/dp/B004JXVOD6/"&gt;Hüllen&lt;/a&gt; bietet er ein annähernd ähnliches Leseerlebnis, wie mit einem Taschenbuch. Damit lassen sich nun also auch 1000-Seiter jederzeit bequem mit einer Hand lesen!&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Sein Display. Was auf den ersten Blick enttäuscht, entpuppt sich bei längerer Nutzung als absolut genial. Durch das passive Display lässt sich das Gerät bei Licht immer und überall nutzen - egal ob man mittags um 12 Uhr direkt auf dem Äquator sitzt, im Zug fährt oder in der U-Bahn-Station auf die Bahn wartet, es geht immer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Natürlich reflektiert jedes Display der Welt mehr als jedes Stück Papier, weshalb sich kleine Reflexionen nicht ganz vermeiden lassen. Ebenso geht mir persönlich die Möglichkeit im Dunkeln ohne (Lese-)Lampe zu lesen, doch ab. Falls es jemals einen Hybriden geben wird, ist er gekauft.&lt;/p&gt;
&lt;p&gt;Ein weiterer Vorteil ist die Plattformunabhängigkeit von Amazon. Egal ob auf dem iPad, auf dem iPhone, auf meinem Android-Smartphone oder am Desktop - einmal gekaufte Bücher kann ich immer und überall lesen, durchsuchen oder durcharbeiten (inkl. Markierungen, Notizen etc.).&lt;/p&gt;
&lt;p&gt;Das heißt obwohl die Nachteile durch das verwendete DRM, die hohen Preise und überhaupt die Tatsache, dass es sich bei eBooks nicht mehr um physisch greifbaren Besitz handelt, der einem noch dazu jederzeit &lt;a href="http://www.spiegel.de/netzwelt/web/0,1518,637076,00.html"&gt;weggenommen&lt;/a&gt; werden kann, noch immer im Raum stehen, so überwiegen für mich persönlich schon nach kurzer Zeit die Vorteile.&lt;/p&gt;
&lt;p&gt;Ich bin auch guter Dinge, dass die Entwicklung sich ähnlich vollziehen wird, wie bei Musik oder Filmen. Während ich vor einigen Jahren noch Musik gekauft habe, die aufgrund ihres Kopierschutzes für mich heute wertlos ist, bekomme ich heute Musik ohne jede Fesseln. Wenn ich nicht gleich einen Streaming-Dienst wie &lt;a href="http://www.simfy.de/"&gt;simfy&lt;/a&gt; nutze (was ich tue). Bei Büchern mag der Weg noch weit sein, aber allein schon die Tatsache, aus dem Apple-Universum ausgebrochen zu sein, erscheint mir nicht ganz unwesentlich.&lt;/p&gt;
&lt;p&gt;Was mich schlussendlich überzeugt hat, ist die Möglichkeit Bücher in mein normales Leben (digitales Hamsterrad) zu integrieren und dabei ein Stück (gefühlte) Freiheit zu gewinnen. Während ich bisher vor jedem Urlaub genau überlegen musste, welche Bücher ich in den Koffer packe, und im Zweifelsfall Pech hatte, wenn eines ein Reinfall war, kann ich heute einfach alle meine Bücher mitnehmen und im Zweifel sogar im Urlaub neue kaufen.&lt;/p&gt;
&lt;p&gt;Dazu noch eine kleine Anekdote, die mich schlussendlich zu diesem Blogpost inspiriert hat. Als ich am Sonntag auf dem Rückweg nach München noch ein wenig Zeit am Bahnhof hatte, ging ich in die Buchhandlung. Mir fiel auch sofort ein Buch auf. Ich überlegte kurz, ob ich es kaufe, ging dann aber doch mit leeren Händen aus dem Laden. &lt;/p&gt;
&lt;p&gt;Stattdessen aktivierte ich im Zug meinen Wifi-Hotspot, zog den Kindle aus der Tasche und kaufte das Buch kurzerhand online bei Amazon. Zurück zu Hause fiel es mir dann wie Schuppen von den Augen: das Buch, welches ich gerade gekauft hatte, fiel mir deshalb auf, weil ich es schon im Regal stehen hatte - noch eingeschweißt. Tja, über 500 Seiten packt man eben nicht mal eben so, weil man Lust bekommen könnte sie zu lesen, in die Tasche.&lt;/p&gt;
&lt;p&gt;Bisher jedenfalls nicht.&lt;/p&gt;


    
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2396/de/blog/das-buch-ist-tot-es-lebe-das-buch.html&amp;title=Das+Buch+ist+tot%2c+es+lebe+das+Buch."&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2396%2fde%2fblog%2fdas-buch-ist-tot-es-lebe-das-buch.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2396/de/blog/das-buch-ist-tot-es-lebe-das-buch.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=e676278e-4306-4c4b-8ecb-15487e603f37" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2396/de/blog/das-buch-ist-tot-es-lebe-das-buch.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2011 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/kcwV0EiJ8Og" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2396/de/blog/das-buch-ist-tot-es-lebe-das-buch.html</feedburner:origLink></item> 
<item>
<title>1. SkillsCamp zu ASP.NET MVC im August in Köln</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2395/de/blog/1-skillscamp-zu-aspnet-mvc-im-august-in-koeln.html</guid>
<pubDate>Sun, 24 Jul 2011 17:57:00 +0200</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/q5wDNsuq87A/1-skillscamp-zu-aspnet-mvc-im-august-in-koeln.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="7_Show_Content" class="BlogPostContainer"&gt;
	

    
    
    &lt;p&gt;Am 26. und 27. August dieses Jahres wird &lt;a href="http://skillscamp.de/2011august.MainPage.ashx"&gt;das erste SkillsCamp&lt;/a&gt; in Köln stattfinden. Der Titel ist eine Kreation von &lt;a href="http://der-albert.com/"&gt;Albert Weinert&lt;/a&gt;, der das Ganze auch ins Leben gerufen hat und organisiert. Worum geht's? Hauptsächlich darum Erfahrungen und Wissen zu bestimmten, abgegrenzten, Themen in einem offenen Rahmen auszutauschen. Sozusagen ein themenbezogener Open Space.&lt;/p&gt;
&lt;p&gt;Den Anfang macht die moderne Webentwicklung mit und rund um ASP.NET MVC, HTML5, jQuery etc. Also genau mein Thema, weshalb ich natürlich auch dabei sein werde (*). Wer also in das Thema hineinschnuppern, seine eigenen Erfahrungen teilen und seinen Horizont erweitern möchte (vielleicht gibt es ja einen Einblick in Ruby on Rails ...), sollte sich eine Teilnahme überlegen.&lt;/p&gt;
&lt;p&gt;Das Ganze geht von Freitagabend bis Samstagabend und kostet lediglich einen Unkostenbeitrag von 15 EUR, der in die Verpflegung investiert werden soll. Laut dem offiziellen &lt;a href="http://twitter.com/#!/skillscamp"&gt;Twitter-Feed&lt;/a&gt; gibt es bereits 26 Anmeldungen, soweit ich weiß, ist die Teilnehmerzahl auf 30 beschränkt - wer also mit dem Gedanken spielt, teilzunehmen, sollte fix sein.&lt;/p&gt;
&lt;p&gt;(*) Da es in der Nähe des Veranstaltungsortes keine brauchbaren Hotels gab, habe ich das &lt;a href="http://www.senats-hotel.de/"&gt;Senats Hotel&lt;/a&gt; direkt in der Innenstadt gewählt. Je mehr dort absteigen, desto günstiger werden die Taxi-Fahrten ;-).&lt;/p&gt;


    
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2395/de/blog/1-skillscamp-zu-aspnet-mvc-im-august-in-koeln.html&amp;title=1.+SkillsCamp+zu+ASP.NET+MVC+im+August+in+K%c3%b6ln"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2395%2fde%2fblog%2f1-skillscamp-zu-aspnet-mvc-im-august-in-koeln.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2395/de/blog/1-skillscamp-zu-aspnet-mvc-im-august-in-koeln.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=9584d55f-eabc-4c0e-ba1b-5bc70c7c68ef" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2395/de/blog/1-skillscamp-zu-aspnet-mvc-im-august-in-koeln.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2011 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/q5wDNsuq87A" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2395/de/blog/1-skillscamp-zu-aspnet-mvc-im-august-in-koeln.html</feedburner:origLink></item> 
<item>
<title>HTML - Select + Button = Selectbutton</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2394/de/blog/html-select-button-selectbutton.html</guid>
<pubDate>Sun, 10 Jul 2011 00:14:00 +0200</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/I1Q6Uh1ldJY/html-select-button-selectbutton.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="8_Show_Content" class="BlogPostContainer"&gt;
	

    
    
    &lt;p&gt;Es gibt Situationen, da wünscht man sich statt der hässlichen Selectbox, die nur eingeschränkt mit CSS zu formatieren ist, einen schönen Button. Man ist in dieser Situation vielleicht ein Designer. Diesen kühnen Wunsch als Vorlage war ich dann doch auch neugierig, ob das irgendwie zu machen ist.&lt;/p&gt;
&lt;p&gt;Denn es hat auch einen durchaus praktischen Nutzen. Einsatzgebiet ist eine mobile HTML5-Applikation, die mehrere Auswahlfelder in einem Dialog bereitstellt. Native Applikationen nutzen für die Auflistung mehrerer Auswahloptionen für gewöhnlich eigene Seiten bzw. Dialoge, d.h. nach Klick auf einen "Auswahl-Button" erhält man eine gänzlich neue View mit allen Auswahlmöglichkeiten. &lt;/p&gt;
&lt;p&gt;Ich wollte jedoch die native Implementierung der Auswahl auf iOS und Android beibehalten, da sie für den Benutzer gewohnt und bequem ist und natürlich auch nicht so viel Arbeit erfordert, wie die Erstellung einer eigenen Auswahl-Dialog-Komponente (von der Nutzung fertiger Frameworks, die dies natürlich bereitstellen, wurde aus anderen Gründen abgesehen).&lt;/p&gt;
&lt;p&gt;D.h. die Aufgabe bestand darin einen Zwitter aus klassischer Selectbox und Button zu bauen. Es hat eine Weile gedauert, bis ich durch einen Tipp von Christian (&lt;a href="http://blog.dream-coder.de/"&gt;Blog&lt;/a&gt;)&amp;nbsp;&lt;a href="http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/"&gt;auf den Trick&lt;/a&gt; gestoßen bin. Nachfolgend noch einmal meine davon abgeleitete Variante, die sich wirklich nur auf die Selectbox bezieht.&lt;/p&gt;
&lt;p&gt;Wenn man zunächst überlegt, die Selectbox auszublenden und&amp;nbsp;einfach einen Klick per JavaScript auf sie auszulösen, wird dies scheitern. Der Grund ist trivial: es gibt keine Möglichkeit mit JavaScript eine derartige Aktion für dieses HTML-Element zu erzeugen.&lt;/p&gt;
&lt;p&gt;Kern der Lösung und Trick 17 ist es nun, die Selectbox dennoch auszublenden, aber so, dass sie klickbar bleibt. Wie? In dem man einfach die Opazität auf 0 setzt. Sie ist damit immer noch an Ort und Stelle vorhanden, klickbar, aber eben nicht zu sehen. Darüber setzt man nun einen Button - das tut man, in dem man ihn direkt vor der Selectbox im DOM einfügt und ihn absolut positioniert.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.thomasbandt.de/content/demos/selectbutton.htm"&gt;&lt;img style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" alt="" src="http://blog.thomasbandt.de/Library/Media/CMS/selectbutton.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Der gesamte HTML-Code:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Selectbutton&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &amp;lt;style type=&lt;span class="str"&gt;"text/css"&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        select {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            opacity: 0;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            width: 100px;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        button {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            position: absolute;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            width: 100px;    &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    &amp;lt;/style&amp;gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &amp;lt;script type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        $(document).ready(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            $(&lt;span class="str"&gt;"select"&lt;/span&gt;).change(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                $(&lt;span class="str"&gt;"#tb"&lt;/span&gt;).val($(&lt;span class="kwrd"&gt;this&lt;/span&gt;).val());&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            });&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        });&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="tb"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;button&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Auswählen&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;button&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;option&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;option&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;option&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Deutschland&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;option&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;option&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Österreich&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;option&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;option&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Schweiz&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;option&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Ein ausführbares Beispiel gibt es &lt;a href="http://blog.thomasbandt.de/content/demos/selectbutton.htm"&gt;hier&lt;/a&gt;. Getestet auf allen aktuellen mobilen Browsern, sowie Chrome und Opera am Desktop. Im IE wird es schätzungsweise nicht funktionieren, was mir aber auch egal ist ;-).&lt;/p&gt;
&lt;p&gt;Das Ganze kann man auch dynamisch per JavaScript machen, z.B. als Plugin für &lt;a href="http://knockoutjs.com/"&gt;knockout.js&lt;/a&gt;, so dass es schön dynamisch funktioniert:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;ko.bindingHandlers.replaceSelectByButton = {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    update: function (element, valueAccessor) {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        var config = valueAccessor();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="rem"&gt;/*&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="rem"&gt;        config = {&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="rem"&gt;            id: 0,&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&lt;span class="rem"&gt;            visible: true,&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="rem"&gt;            page: ''&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="rem"&gt;        }*/&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!config.visible) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            var button = $(&lt;span class="str"&gt;"#"&lt;/span&gt; + config.page + config.id, currentPage);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (button != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                button.remove();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        var button = document.createElement(&lt;span class="str"&gt;"button"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        button.className = &lt;span class="str"&gt;"selectButton"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        button.innerHTML = &lt;span class="str"&gt;"Auswählen"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        button.id = config.page + config.id;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        element.parentNode.insertBefore(button, element);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;};&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;Viel Spaß damit.&lt;/p&gt;


    
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2394/de/blog/html-select-button-selectbutton.html&amp;title=HTML+-+Select+%2b+Button+%3d+Selectbutton"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2394%2fde%2fblog%2fhtml-select-button-selectbutton.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2394/de/blog/html-select-button-selectbutton.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=c30ea55f-8c9f-42d7-8418-1e0f6c51154b" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2394/de/blog/html-select-button-selectbutton.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2011 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/I1Q6Uh1ldJY" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2394/de/blog/html-select-button-selectbutton.html</feedburner:origLink></item> 
<item>
<title>HTML &amp; CSS3 - Radio-Buttons und Checkboxen für Touch-Geräte</title>
<guid isPermaLink="false">http://blog.thomasbandt.de/39/2393/de/blog/html-css3-radio-buttons-und-checkboxen-fuer-touch-geraete.html</guid>
<pubDate>Sat, 09 Jul 2011 19:02:00 +0200</pubDate>
<link>http://feedproxy.google.com/~r/ThomasGoesNet/~3/kgsOOojFm-4/html-css3-radio-buttons-und-checkboxen-fuer-touch-geraete.html</link>
<author><![CDATA[Thomas Bandt]]></author>
<description>&lt;div id="9_Show_Content" class="BlogPostContainer"&gt;
	

    
            &lt;div style="padding-bottom:5px;margin-top:15px;"&gt;
        
            &lt;div style="float: left"&gt;
                &lt;a href="http://blog.thomasbandt.de/content/demos/touchbuttons.htm"&gt;&lt;img alt=" " title=" " src="http://blog.thomasbandt.de/Library/Media/CMS/touch.PNG" style="border-width:0px;height:261px;width:519px;" /&gt;&lt;/a&gt;
             &lt;/div&gt; 
        
           &lt;/div&gt;
           &lt;div style="clear:both"&gt;&lt;/div&gt;
        
    
    &lt;p&gt;Der Umgang mit Daten in Formularen wird mit HTML5 immer besser, zum Beispiel durch neue Textbox-Typen wie Datum, E-Mail usw. die Touch-Geräten (am Desktop macht es ja wenig Sinn) dann automatisch für ein verändertes Tastatur-Layout sorgen. So muss man dann z.B. für eine E-Mail-Adresse das @-Zeichen nicht aus der zweiten Ebene herauskramen, sondern hat es sofort präsent. Auch das neue Range-Control ist nützlich, sofern es irgendwann mal in Webkit unterstützt werden solle (in iOS 5 ist es angekündigt).&lt;/p&gt;
&lt;p&gt;Worüber man sich scheinbar noch keine Gedanken gemacht hat, ist die verbesserte Unterstützung für Checkboxen (ja/nein) und Radio-Buttons. Diese kommen ganz klassisch wie immer daher. Das ist okay und lässt sich auch bedienen, aber es ist eben nicht optimal, wenn man mit seinen Fingern einen winzigen Kreis oder ein kleines Quadrat treffen muss.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wie wäre es denn, wenn man aus Checkboxen und Radio-Buttons einfach - der Eingabeart gerecht werdend - Buttons machen würde?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Eine Möglichkeit, die absolut einfach zu konfigurieren und ohne Aufwand zu implementieren ist, ist die Verwendung von jQuery UI. &lt;a href="http://jqueryui.com/demos/button/radio.html"&gt;Einfach über ein Radio-Button-Set drüberziehen&lt;/a&gt;, fertig. Leider hat sich das in der Praxis bei uns als ziemlich träge herausgestellt, so dass es in komplexeren Formularen mit bis zu 20 Button-Sets pro Seite erst einmal initial sehr lange dauert, bis die Buttons gerendertt werden, und dann auch das Übernehmen einer Änderung z.B. auf dem iPad der ersten Generation gefühlte zwei Gedenksekunden gebraucht hat.&lt;/p&gt;
&lt;p&gt;Das muss doch einfacher gehen - gesagt, getan. Da wir bei Touch-Geräten heute von überwiegend sehr modernen Browsern sprechen, die allesamt zumindest die wichtigsten CSS3-Funktionen unterstützen, ist auch eine Lösung, die (fast) allein auf CSS3 basiert, möglich. Diese schlägt die Script-basierte Variante von jQuery-UI in Sachen Geschwindigkeit natürlich um Längen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Was ist zu tun?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Voraussetzung ist, dass jede Checkbox oder jeder Radio-Button ein ihm zugewiesenes Label bekommt, was ja sowieso immer ratsam ist. Dieses Label funktioniert man optisch einfach zu einem Button um und blendet das eigentliche Formular-Element aus. Da das Label mit dem Element assoziiert ist, werden auch Änderungen - also checked und unchecked - weitergegeben. Ebenso wird der Status für bereits gecheckte Elemente sofort erkannt, so dass man sich um die Status-Verwaltung gar keine Gedanken machen muss.&lt;/p&gt;
&lt;p&gt;Allein für iOS braucht es ein wenig Nachhilfe, weil hier der "Antipper" auf das Label nicht an das Formularelement weitergegeben wird. Da man aber ja die Information während des Klick-Events besitzt, welcher Checkbox oder welchem Radio-Button das geklickte Label zugeordnet ist, ist auch das kein Problem.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.thomasbandt.de/content/demos/touchbuttons.htm"&gt;Hier findet sich das oben dargestellte Beispiel&lt;/a&gt;, welches in jedem modernen Browser ausführbar ist - natürlich und insbesondere auch mit Touch-Geräten. Der Quellcode findet sich im Quellcode ;-).&lt;/p&gt;
&lt;p&gt;(P.s.: Es geht natürlich auch ohne den ganzen Verlaufs-Firlefanz und damit mit noch weniger CSS - es sieht halt nur einfach schicker aus ;-))&lt;/p&gt;


    
    
    


&lt;/div&gt;






&lt;hr /&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http://blog.thomasbandt.de/39/2393/de/blog/html-css3-radio-buttons-und-checkboxen-fuer-touch-geraete.html&amp;title=HTML+%26+CSS3+-+Radio-Buttons+und+Checkboxen+f%c3%bcr+Touch-Ger%c3%a4te"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.thomasbandt.de%2f39%2f2393%2fde%2fblog%2fhtml-css3-radio-buttons-und-checkboxen-fuer-touch-geraete.html" border="0" alt="kick it on dotnet-kicks.de" style="vertical-align:middle" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://blog.thomasbandt.de/39/2393/de/blog/html-css3-radio-buttons-und-checkboxen-fuer-touch-geraete.html#Comments"&gt;&lt;img src="http://blog.thomasbandt.de/CommentCounter.ashx?ArticleID=720cd4f8-2a0d-41ea-b1f5-d54863895cfc" style="border:solid 0px black" /&gt;&lt;/a&gt; | &lt;a href="http://blog.thomasbandt.de/39/2393/de/blog/html-css3-radio-buttons-und-checkboxen-fuer-touch-geraete.html#AddComment"&gt;Kommentieren&lt;/a&gt; | &amp;copy; 2011 &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ThomasGoesNet/~4/kgsOOojFm-4" height="1" width="1"/&gt;</description>
<feedburner:origLink>http://blog.thomasbandt.de/39/2393/de/blog/html-css3-radio-buttons-und-checkboxen-fuer-touch-geraete.html</feedburner:origLink></item> 
</channel>
</rss>

