Dienstag, 15. Dezember 2009

Android SDK Installationsprobleme

Momentan versuche ich ein wenig über den Tellerrand hinaus zu gucken und wollte mich eigentlich mit dem Android SDK beschäftigen. Um Software für die google-Telefonplattform entwickeln zu können benötigt man lediglich folgende Dinge:

Der Rest wird auf den Android Developer-Seiten gut erklärt. Beim Schritt “Install the ADT Plugin for Eclipse” hapert es jedoch und ich bekomme folgende Fehlermeldung:

Cannot complete the install because one or more required items could not be found.
  Software being installed: Android Development Tools 0.9.5.v200911191123-20404 (com.android.ide.eclipse.adt.feature.group 0.9.5.v200911191123-20404)
  Missing requirement: Android Development Tools 0.9.5.v200911191123-20404 (com.android.ide.eclipse.adt.feature.group 0.9.5.v200911191123-20404) requires 'org.eclipse.gef 0.0.0' but it could not be found

Abhilfe schafft folgendes Vorgehen:

  1. In Eclipse unter Help, Install New Software auswählen.
  2. Das eclipse.org Galileo Software Repository  http://download.eclipse.org/releases/galileo/ durch Add hinzufügen.
  3. Die Komponente “WST Server Adapters    3.1.0.v200906020451-51DFAkF77g7GCNc    org.eclipse.wst.server_adapters.feature.feature.group” hinzufügen (dieses kann gefunden werden, wenn im Filter WST eingegeben wird), herunterladen und installieren.
  4. Eclipse neustarten und wie unter “Installing and Updating ADT” beschrieben fortsetzen.

Freitag, 4. Dezember 2009

Codesmells im Review finden

Gerade bin ich dank dieser Stackoverflow Frage (in der es eigentlich um “Type”, “Activator.CreateInstance” und “warum man einen IoC-Container nehmen sollte” ging) auf eine sehr gute Code-Review-Anleitung gestossen. Klasse, vorallem der Abschnitt “der Konstruktor macht zu viele Dinge” aus Misko Hevery’s “Writing Testable Code” spricht mir aus der Seele.

Sonntag, 29. November 2009

Surface SDK für alle

Microsoft hält gerade die PDC09 ab und beglückt uns mit tollen Neuigkeiten: Das SDK für den Multitouchtisch Microsoft Surface steht nun öffentlich zum Download bereit. Man benötigt lediglich das Microsoft Surface SDK 1.0 SP1 Workstation Edition, das XNA Framework 2.0 und das Visual Studio 2008 wobei die Express Edition ausreicht. Der Tisch selbst ist vermutlich für die meisten zu teuer, der im SDK enthaltene Simulator sollte für die ersten Gesten-Gehversuche aber ausreichen.

Leider lässt sich das Surface SDK nur unter Windows Vista SP1 installieren. Findig Köpfe haben jedoch herausgefunden, wie sich der OS Check im Surface SDK Installer abschalten lässt und die Software dann auch unter Windows7 installierbar ist.

Apropos Windows7: Während in Deutschland Stromberg's Ernie das neue Betriebsystem bewirbt, sind es in den vereinigten Staaten die Figuren von Family Guy:

Freitag, 21. August 2009

Die Xbox360 HDMI Kabelproblematik

Einen LCD-Fernseher mit der Xbox360 zu verbinden ist eigentlich einfach. HDMI Kabel besorgen und die beiden Geräte verbinden. Damit die 5.1 Dolby Digital Kanäle bis zum Receiver kommen, muss man diesen ebenfalls mit dem Fernseher verbinden. Leider funktioniert das Audio-Passthrough bei meinem Fernseher nicht, sodass ich lediglich einen digitalen Stereostream am Receiver empfange. Die Lösung schien zunächst einfach: Man muss lediglich das YUV-Kabel mit optischem Digitalausgang und das HDMI-Kabel zusammen anschließen.

Leider haben die Xbox360 Konstrukteure das Steckerdesign auf Gewinnmaximierung ausgelegt: HDMI und YUV Kabel kann man nicht parallel anschließen. Microsoft schlägt an dieser Stelle das teure HDMI AV Adapter Kabel vor. Dabei liegt die Lösung des Problems so nahe: Brute Force. Es genügt die graue Plastikummantelung des YUV-Komponenten Kabels zu entfernen und schon passen beide Kabel. Als Hilfsmittel zum Entfernen der Plastikschale schlägt diese Seite einen Schraubendreher vor. Besser klappte es bei mir mit einem stumpfen Messer.

Bei dieser Geldschneiderei durch “Designflaws” sollte einem eigentlich “die Krausbirne hochsteigen”. Stattdessen lese ich mir jetzt einen Artikel über Desingfehlentscheidungen in StarWars durch und lache drüber.

Samstag, 11. Juli 2009

Blogger DNS und Strato A RessourceRecord

Vor fast genau zwei Jahren habe ich den A Record meiner Subdomain blog.tobsen.de auf eine fixe IP umgestellt.

Gestern war es dann offenbar so weit: Der von mir als A Record angegebene Nameservice war nicht mehr erreichbar. Infolge dessen konnte man zwar tobsen.de nicht jedoch blog.tobsen.de erreicht.

Nachdem ich dieses zufällig gemerkt habe, habe ich mir sogleich angeschaut, wohin ghs.google.com nun zeigt (nslookup ghs.google.com) und den A Record entsprechend umgestellt.

Und alles nur, weil ich bei Strato nicht den alias des Nameservices hinterlegen kann. Vielleicht sollte ich doch “umziehen”…

Sonntag, 28. Juni 2009

LINQ ist doch tot, oder?

Die Language-Integrated Query bleibt in aller Munde – auch wenn LINQ-to-SQL schon wieder “auf dem Abstellgleis steht” (iX, Ausgabe 7 Juli 2009, S. 97) und nur noch wenige Neuerungen erhält. Für diejenigen, die auf LINQ-to-SQL gesetzt haben, nicht auf den EntitFramework-Zug springen können oder wollen und Persistence Ignorance kein Thema ist, könnte PLINQO interessant sein. Der Hersteller verspricht: “It's still LINQ to SQL, but better!”. PLINQO basiert auf CodeSmith Templates und bringt Features wie beispielsweise Entity Detach in die LINQ-to-SQL Welt, ermöglicht es u.a. Manager- und QueryExtensionklassen generieren zu lassen und unterstützt Many-to-Many Relationen. In den NightlyBuilds wurde diese Woche die Unterstützung für einen Caching-Mechanismus implementiert.

Für mich als Plain old CLR Objects (POCO) liebender LINQ-to-* Neuling sind wahrscheinlich Seiten wie 101 LINQ Samples oder diese MSDN Seite ein guter Einstieg, selbst wenn man mit dem spezifischen LINQ-to-SQL nicht in Berührung kommt.

Interessant finde ich in diesem Zusammenhang auch das, was Daniel Simmons (Dev Manager Entity Framework) über Persistence Ignorance (PI) zu sagen hat. Dass man PI seit der Visual Studio 2010 .Net 4.0 Beta 1 auch mit dem EntityFramework hinbekommen kann und schließlich DDD, POCOs und das EntityFramework unter einen Hut bekommen kann, wenn man dieses denn will.

Montag, 15. Juni 2009

Hass-Liebe Opera

Eigentlich wollte ich nur zwei Bilder meines kurzurlaubes auf ImageShack® hochladen und diese dann an Bekannte verschicken. Per click auf imageshack’s “email”-Schaltfläche sollte das auch eigentlich kein Problem sein, jedoch verwendet imageshack gigyadie “Socialweb” Schaltflächen von Gigya.com – und dort scheint man Opera nicht zu mögen, denn anstelle des @ wird lediglich ein Q in die Adresszeile übernommen. Mit IE, Safari und Firefox funktioniert es natürlich. Bleibt zu hoffen, dass Gigya.com auf meine Email reagiert und das Problem behebt. Andere können das ja schließlich auch (beispielsweise gibt es keine Probleme mit den Socialbuttons von AddThis).

Nunja, hochgeladen habe ich sie dann trotzdem:

Update (17.06.09): Imageshack.us hat auf meine Email geantwortet, Gigya hat’s gefixt. Schön. Ansonsten hätte man sich mit einem der anderen Imagehoster behelfen können.

Mittwoch, 10. Juni 2009

DotnetKicks nun auch auf Deutsch und via Blogger

Vor langer Zeit habe ich mich auf der Seite DotNetKicks.com - .NET links, community driven. angemeldet und täglich werde ich über einen RSS Feed mit englischen Beiträgen zum Thema .Net versorgt. Zugegeben, nicht alles ist interessant oder lesenswert, aber dennoch stimmt meist die Qualität der gekickten Artikel.

Um so schöner ist es, das es nun eine deutschsprachige Community gibt. Leider habe ich erst jetzt davon erfahren: dotnet-kicks.de gibt es mittlerweile seit dem 13.03.2009 – zumindest ist das der erste Eintrag im DNKde’s eigenem Blog. Ich habe dieses zum Anlass genommen um mich dort anzumelden – leider braucht man auch bei DNKde einen Login – OpenId wird derzeit nicht unterstüzt (vielleicht baut man sowas einfach mal ein – sobald die Sicherheitslücken gestopft sind…). Was beiden Seiten bislang fehlt ist ein Link auf die jeweils lokalisierte Seite – andernfalls gelangen Besucher erst durch Zufall auf die lokalisierte Seite.

Damit relevante Posts automatisch den kick-it  Button bekommen habe ich meine Blogger Vorlagen erweitert. Hierzu genügt es im Bloggeraccount unter “layout”, “HTML bearbeiten” die Vorlage auszuwählen, den Haken bei ”Vorlagen zum Erweitern von Widgets” zu setzen und folgenden Code unter <p><data:post.body/></p> zu setzen:

<b:if cond="data:post.labels">
     <b:loop var="label" values="data:post.labels">
       <b:if cond="data:label.name == ".net"">
         <p><a expr:id="data:widget.instanceId + "_kickit"" expr:href=""http://dotnet-kicks.de/submit/?url=" + data:post.url + "&title=" + data:post.title"><img alt="Kick It on dotnet-kicks.de" border="0" expr:src="" dotnet-kicks.de http: kickitimagegenerator.ashx?url=" + data:post.url" services images /></a></p>
       </b:if>
     </b:loop>
   </b:if>

sodann werden alle Posts mit dem Label .net durch den DNKde Button verziert. Gut, dass es die Bloggerhilfe gibt und auch andere DotNetKicks in Blogger integrieren.

Sonntag, 7. Juni 2009

Meine Lieblings-Entwickler-Tools

Die MSDN-Blogparade ruft die “Softwarehersteller in Deutschland” dazu auf, an einem Gewinnspiel teilzunehmen und die Frage “Was sind Ihre Lieblings-Entwickler-Tools?” zu beantworten. Meine Antwort:

  1. TestDriven.Net
  2. .NET Reflector (RedGate, vormals Lutz Roeder)
  3. GhostDoc (SubMain, vormals Roland Weigelt)

Nunja, selbst wenn ich nicht unter den Gewinnern sein sollte, so bin ich doch wenigstens auf interessante Helferlein gestossen. Zum Beispiel nennt dieser Teilnehmer Clone Detective für das Visual Studio.

Montag, 1. Juni 2009

Spring.Testing.NUnit, ConfigLocations und die App.config

Bei dem Versuch, Integrationstests unter Zuhilfenahme von Spring's Spring.Testing.NUnit  zu schreiben stand ich vor folgendem Problem:

Spring.Testing.NUnit wurde gegen eine ältere NUnit-Version kompiliert - daher war ein Assembly-redirect in der App.config nötig (unschön, denn nun hab ich eine App.config für eine dll):
   1: <runtime>
   2:      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   3:        <dependentAssembly>
   4:          <assemblyIdentity name="nunit.framework"
   5:                        publicKeyToken="96d09a1eb7f44a77"
   6:                        culture="neutral"/>
   7:          <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="2.4.3.0"/>
   8:        </dependentAssembly>
   9:        <dependentAssembly>
  10:          <assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e"/>
  11:          <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="2.0.0.0"/>
  12:        </dependentAssembly>
  13:      </assemblyBinding>
  14:    </runtime>

Am Rande: Wie die Zeilen 10 und 11 benutze ich für Spring die neue Common.Logging Version. Laut Dokumentation muss man nun lediglich die Integrationstestklasse von AbstractTransactionalDbProviderSpringContextTests ableiten und ConfigLocations angeben, die Spring dann zur Contextinstanziierung verwendet - und schon hat man zurückrollende Transaktionen am Ende eines jeden Tests. Meine ConfigLocations sahen zunächst so aus:
protected override string[] ConfigLocations
{
   get { return new string[]{ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath };
}
}

Diese wurde dann mit einer Exception zur Laufzeit geahndet:

failed: Spring.Objects.Factory.ObjectDefinitionStoreException : Error registering object defined in 'file [IntegrationTests\bin\Release\IntegrationTests.dll.temp.config] at line 3' : There is no parser registered for namespace ''

Die ersten Zeilen der Konfiguration sehen so aus:
   1:  <?xml version="1.0" encoding="utf-8" ?>
   2:  <configuration>
   3:    <configSections>
   4:      <sectionGroup name="common">

Die übrigen Zeilen der Konfiguration beinhalten die üblichen Spring Sections: spring, parsers, context, objects. Nach langer Suche hatte ich's dann: die ConfigLocation sieht nun so aus:
   1: protected override string[] ConfigLocations
   2: {
   3:  get { return new string[]{ "config://spring/objects" };  }
   4:  }

So hat man schlussendlich beides mit nur einer Konfigurationsdatei: AssemblyRedirection durch die App.config und normale Spring-Configsections. Glücklicherweise sind die beiden Namespaceparser DatabaseNamespaceParser und TxNamespaceParser offenbar automatisch registriert, sodass es nicht weiter ins Gewicht fällt, dass die parsers-Section nicht ausgewertet wird. Für nicht registrierte Namespace Parser bleibt schließlich noch das programmatische Registrieren in der XmlParserRegistry.

Donnerstag, 7. Mai 2009

Nebenläufigkeit und CHESS

Durch diesen Blogeintrag bin ich gerade auf ein Microsoft Research Projekt aufmerksam geworden: CHESS. Mit Hilfe von CHESS ist es möglich sonst nur schwierig zu reproduzierende Fehler zu finden. Beispielsweise können Threading Problem erkannt werden und durch CHESS erneut ausgelöst werden.

Leider ist die Projekt Seite research.microsoft.com/chess derzeit nicht erreichbar - im Google-Cache lässt sich aber dennoch einiges herausfinden und schließlich gelangt man auf Umwegen auch zur CHESS Download Seite. Ebenfalls interessant ist das offizielle CHESS Blog.

Übrigens: Fehler, die nur unter bestimmten Umständen auftreten - Beispielsweise nur während des Debuggens oder nur bei konkurrierenden Zugriffen - und obendrein schlecht zu reproduzieren sind, nennt man offenbar Heisenbugs. Wieder was gelernt und wieder mal bei der Wikipedia-Lektüre von einem Thema (Heisenbugs) auf ein völlig anderes gekommen (Heisenberg's Uncertainty principle).

Sonntag, 11. Januar 2009

Liveshopping Newsletter und RSS

Liveshopping-Shops haben sich auf die Fahne geschrieben, jeden Tag ein Produkt zu einem "unschlagbaren Preis" meist in begrenzter Stückzahl und nur 24 Stunden lang anzubieten.
Liveshopping Anbieter und Portale gibt es wie Sand am Meer, da wünscht man sich doch ein wenig mehr Übersicht. Damit man sich nicht bei jedem dieser Anbieter anmelden, den Newsletter oder RSS-Feed abonnieren muss, habe ich mir die mühe gemacht und Liveshopping RSS-Feeds gesammelt und zu einem Feed aggregiert. Den zusammengefassten Feed kann man hier abonnieren:
xfruits
Viel Erfolg bei der Schnäppchenjagd!

Update:
Da xfruits leider nicht mehr aktiv ist und somit auch der RSS Feed nicht mehr funktioniert, habe ich mich auf die Suche nach Alternativen gemacht.
EIne gute Liveshopping Seite ist diese Seite und einen RSS Feed bietet sie auch an.

Mittwoch, 7. Januar 2009

Tipps für die Xbox360

Zu Weihnachten habe ich mir eine Xbox360 gegönnt. Tolles Gerät. Nur leider etwas laut. Auch sind Spiele und Zubehör relativ teuer. Hier einige Tipps die einige Euros im Zusammenhang mit der Xbox360 sparen:

Xbox Live

Um gegen andere Spieler online anzutreten benötigt man eine Xbox Live Goldmitgliedschaft. Kauft man diese im Einzelhandel oder per Kreditkarte bei Mircosoft, kostet ein Jahr Goldmembership 60 Euro. Günstiger wird die Xbox Live Goldmitgliedschaft auf dem Marktplatz von Amazon. Dort wird die Jahresmitgliedschaft schon ab 38,26 Euro angeboten. Warum die Anbieter dort Porto nehmen, obwohl die Xbox Live-Abonnementcodes per Mail verschickt werden, bleibt mir allerdings ein Rätsel.

Wer seine Xbox360 mit dem Internet verbinden will, um beispielsweise das lohnenswerte New Xbox Experience (NXE) herunter zu laden, Demos zu spielen oder zu chatten, hat zwei Möglichkeiten: Die günste per LAN-Kabel oder man greift zum 70 Euro teuren Microsoft Xbox360 WLAN Adapter. Letzteres ist aber nicht der einzige Weg, seine Konsole kabellos ins Netz zu bringen: WLAN Brücken schaffen günstig Abhilfe. Verbunden wird die Konsole per Lan-Kabel zur WLAN Bridge, von dort aus geht's weiter per Funk. Ich benutze das SMC Networks EZ Connect G (Artikel zur Konfiguration), aber laut Herstellerangaben unterstützten auch die günstigen Geräte Edimax BR-6204Wg (20,47 Euro) und WL054MBit Access Point WAP-3000 von LevelOne (32,22 Euro) einen Brige Modus. Wer noch einen alten Router sein Eigen nennt und diesen nicht mehr benötigt, kann versuchen eine neue Firmware mit Bridge-Modus zu installieren. Voraussetzung hierfür ist, dass das Gerät kompatibel mit der DD-WRT, OpenWRT oder Sveasoft Talisman Firmware ist. Hilfreich ist in diesem Fall folgender Workshop: WLAN Bridge mit Linksys-Routern aufsetzen.

Ist die Box online, möchte man wahrscheinlich mit seinem Gegenüber kommunizieren. Microsoft bietet hierzu das "Xbox 360 - Tastatur Input-Device" (ca. 30 Euro). Günstiger geht's mit einer handelsüblich USB Tastatur, die man an einen der beiden USB Ports der Konsole anschließt - sieht zwar nicht so gut aus, reicht aber aus.

Strom sparen

Die Xbox360 ist ein Stromfresser: Je nach Modell verbraucht die Konsole im Standby bis zu 2,8 Watt, im Ruhebetrieb 155,7 Watt und unter Last bis zu 172 Watt, wie diese Tabelle zeigt. Nun hat Microsoft nachgebessert und in der neuen Xbox360 Revision mit dem Codenamen "Jasper" den Verbrauch reduziert, was schlussendlich auch dem berühmten, durch Überhitzung entstehenden, Red Ring of Death (RROD) vorbeugen soll.

Wer mit dem Gedanken spielt, eine Xbox360 zu Kaufen, sollte (soweit verfügbar) zur Jasper Revision greifen. Wie man eine Jasper schon im Laden erkennt zeigt dieser Artikel.

Auch gilt: Xbox aus? Netzteil aus der Steckdose! Das spart im Jahr bis zu 4,66 € (2,8 Watt an 365 Tagen bei 19 Cent pro kwh).

Anstelle des Charge & Play Kits (~17 Euro), welches es ermöglicht, einen Controller per Akku zu betreiben und gleichzeitig zu spielen, ist es meines Erachtens sinnvoller, das Geld in gute, handelsübliche AA Akkus und ein vernünftiges Ladegerät mit Lade- und Pflegeprogramme zu investieren (ich benutze dieses Gerät und bin sehr zufrieden damit). Selbiges gilt meiner Meinung nach auch für das Xbox Schnelladegrät - universell einsetzbare Akkus sind einfach günstiger und praktischer.

Waagerecht spielen

Die Xbox360 kann man sowohl waagerecht, als auch senkrecht aufstellen. Senkrecht sieht die Konsole zwar besser aus und nimmt weniger Platz weg, steht die Box jedoch waagerecht, bekommt die Konsole besser Luft und angeblich zerkratzen die DVDs nicht so leicht (ein weiteres Xbox360 Problem).

Wie spart das Geld? Nunja, sind die DVDs in tadellosem Zustand können diese ggf. besser verkauft (Ebay) bzw. in Zahlung gegeben werden (Gamestop). Möchte man ältere Spiele spielen lohnt sich ebenfalls ein Besuch bei Gamestop, Ebay und auf dem Amazon Marktplatz. Eine Liste mit weiteren Möglichkeiten günstig an Spiele zu gelangen gibt es auf mydealz - und seit dem der Zoll die Höchstgrenze der zollfreien Einfuhr von Geringwertigen Sendungen von 22 auf 150 Euro je Sendung angehoben hat, kann man Spiele sogar Zollfrei importieren.