Softwarearchitektur: Komponenten Teil 1 - Was wir von anderen Industrien lernen können.

16. Februar 2012 22:41

imageWenn man erfahrene Entwickler fragt, wie man große und Komplexe Softwareprojekte umsetzt, bekommt man meistens zwei Dinge zu hören: Schichten und Komponenten. Beiden ist gemeinsam, dass sie dazu dienen, innerhalb meines Softwaresystems klare Grenzen zwischen Funktionalitäten zu ziehen und sie in Module aufzuteilen mit all den einhergehenden Vorteilen wie besserer Wiederverwendbarkeit, Wartbarkeit, Testbarkeit und – vor allem – der besseren Verteilbarkeit auf einzelne Entwickler.

Herr Ober da liegt ein Haar neben meiner Suppe…

Schaut man über den Tellerrand hinaus in andere Ingenieursbereiche erkennt man, dass dort identische Probleme existieren – und gelöst wurden: durch Modularität. Modular ist etwas, was in sich eine geschlossene Einheit bildet und über verschiedene definierte Schnittstelle angesprochen wird und seinerseits die Fähigkeiten anderer Module ebenfalls über definierte Schnittstellen nutzt. Für Benutzer eines Moduls ist deren innerer Aufbau meist vollkommen unwichtig. Betrachtet man das Modul einer Backstraße zum backen von Brot, so ist klar: Es benötigt Mehl, Hefe und Wasser und produziert Brot, mehr muss ich von Außen nicht wissen um damit Brot herzustellen. Angeschlossen an ein Mehlsilo, ein Hefesilo und eine Wasserleitung kann es also los gehen. Klar wachsen Backstraßen nicht auf Bäumen, sie müssen von irgendjemandem gebaut werden. Bei dem Bau solch eines Systems, schauen wir uns die Lösung zu zwei Problemen an, die wir auch in der Softwareentwicklung haben:

  1. Wie und wo fangen wir bei großen Systemen an zu entwickeln?
  2. Wie können wir die Arbeit auf mehrere Personen aufteilen?

Aus dem Bereich der Mathematik und der Informatik kennt man die Taktik des “Divide And Conquer” (Teile und herrsche), welches besagt das man ein großes Problem in viele kleinere Probleme unterteilt. Das macht man so lange bis alle kleinen Probleme lösen werden können und somit das Gesamtproblem gelöst ist.

Fangen wir also an unser “Problem” aufzuteilen: Eine Backstraße besteht (vermutlich, Leser der Backindustrie mögen mich bitte korrigieren) aus den Untermodulen Teigverarbeitung, Teigherstellung und Backofen wobei in das Modul Teigverarbeitung die Eingabe von Mehl, Hefe und Wasser erhält.

image

Wie dabei dieser Teig erzeugt wird, wie die Rohlinge geformt werden oder wie gebacken wird – das interessiert den Benutzer von Außen nicht. Hauptsache an den Schnittstellen steht das definierte Ergebnis mit den definierten Eigenschaften bereit.

Nun ist so eine Teigherstellungsmaschine (die in der Backstraße enthalten ist) auch kein einfaches Modul und so ist es ebenfalls aus Untermodulen zusammengesetzt, die – ihr werdet es nicht glauben – über fest definierte Schnittstellen miteinander kommunizieren (gähn…)

image

Mangels Maschinenbaustudium vermute ich das solch ein Modul aus einem Mixer (zum vermengen der Zutaten) und einem Kneter (der alles zu einem Teig knetet) bestehen wird. Dieses Spiel könnte man nun so lange treiben, bis man bei Schrauben und Kabeln der einzelnen Module angekommen ist.

image

Haben wir den überschaubaren Level der Schrauben und Kabel erreicht, kann losgebaut werden. Die Module auf unterster Ebene können auf die Ingenieure verteilt werden, da sie ja keine anderen Komponenten brauchen um fertiggestellt zu werden. Aber auch an den Modulen der oberen Schichten kann gebaut werden (Halterungen, Rohre, Kabel, usw.) weil deren Arbeit ebenfalls unabhängig ist – auch von Untermodulen. Denn deren Ausmaße und Schnittstellen sind je genau definiert – die Ingenieure müssen dies nur beim Bau berücksichtigen. Wurde unsere Beispiel sauber durchspezifiziert, kann an 6 Stellen losgebaut werden.

Und wie man sich die Brötchen, die aus der Backstraße kommen, mit der Softwareentwicklung verdienen kann, indem man sich genau das Prinzip zu nutze macht, schauen wir uns im nächsten Teil an… Weil jetzt habe ich Hunger!

Mobile Developer Conference 2012 in Hamburg

15. Februar 2012 06:38

Am 13.2 und 14.2 fand, wie jedes Jahr, die Mobile Developer Conference 2012 statt. An zwei Tagen wurden in jeweils drei Tracks aktuelle T20120213_MDevCon_Tielke_0010hemen rund um iOS, Android, Windows Phone 7 und natürlich auch Trends präsentiert und mit den Teilnehmern diskutiert. Die sehr gut besuchte Konferenz fand im Radisson Blue auf dem Hamburger Messegelände statt und bot, mit großen und gut ausgestatteten Konferenzräumen die idealen Rahmenbedingungen für eine großartige Konferenz. Zum ersten Mal war auch ich mit einem Vortrag dabei. Da die Entwicklung von mobilen Anwendungen auf immer mehr Plattformen publiziert werden muss und es dabei wichtig ist, die Kosten in einem erträglichen Rahmen zu halten und eine gut erweiterbare und wartbare Software zu schaffen, wählte ich als Thema “Unite the Worlds – .NET als Backend”. In dem 60-minütigen Vortrag ging es neben der Frage “Warum überhaupt ein einheitliches Backend bei mobilen Anwendungen?” vor allem um die konkrete Umsetzung und warum Microsoft .NET dafür eine ideale Plattform ist. Der komplett gefüllte Raum bot eine super Atmosphäre und spannende Fragen und Diskussionen mit den Teilnehmern und hat wirklich enorm viel Spaß gemacht. Nach dem Vortrag entstand eine rege Diskussion mit den Teilnehmern in der Lounge, bei der sich viele als überrascht zeigten, wie einfach ein Backend mit .NET zu realisieren ist und wie viele Probleme damit vermieden werden können.

Zusätzlich führte der Chefredakteur Markus Stäuble mit mir ein Interview zu meiner Markteinschätzung von Windows Phone 7:

Ich möchte mich auf diesem Wege noch einmal bei allen Teilnehmern für die rege Teilnahme und das Feedback bedanken und hoffe mit meinem Vortrag den ein oder anderen entscheidenden Impuls für Ihre mobilen Projekte gegeben zu haben. Natürlich möchte ich mich auch bei der Neuen Mediengesellschaft Ulm für die Einladung zu dieser Konferenz bedanken und hoffe beim nächsten Mal wieder dabei sein zu können.

Links:
Mobile Developer Conference 2012
Fotos auf Facebook

Test Driven Development mit .NET und C#–Tipp #2: Abhängigkeiten auflösen mit Stubs

19. Oktober 2011 20:45

Das Testen von Code ist eine wichtige und – für Entwickler – richtig coole Angelegenheit. Doch Testen ist weitaus mehr, als ein Testrunner und ein paar Attribute für Klassen und Methoden. In der Reihe “TDD Tipps” versuche ich regelmäßig Probleme zu erläutern, die beim Testen auftauchen und mit einem praktischen Hinweis einen Lösungsweg aufzuzeigen.

Unit-Tests sollen das Verhalten von nur einem einzigen Modul, für uns in diesem Fall einer Klasse, testen. Aber warum? Nehmen wir an wir testen die Methode Foo() in einer Klasse A die eine Referenz auf eine Klasse B hat. Im Laufe der Methode Foo() aus Klasse A wird die Methode Bar() aus Klasse B aufgerufen. Wenn wir jetzt A.Foo() testen, wird Code aus B.Bar() ausgeführt. Also ist das Ergebnis unseres Tests nicht mehr alleine von A, sondern auch von B abhängig und damit hängt auch der Testerfolg von A.Foo() von B.Bar() ab. Was hier noch nach einem einfachen Problem aussieht, wird spätestens zu einem Problem, wenn B eine externe Ressource nutzen würde, wie einen Webdienst, einen Mailserver, Datenbankserver o.ä. Aus dem und vielen anderen Gründen, sollte man in seinem Design immer so wenig Abhängigkeiten wie möglich haben. Was in der Theorie und in den zahlreichen Demos in Büchern und Konferenzen immer ganz einfach und simpel aussieht, gestaltet sich in der Praxis als teilweise sehr kompliziert. Wenn man ein Klassendesign entwirft, hat man an einigen Stellen zwangsläufig Abhängigkeiten.

Abbildung 1 verdeutlich das Problem noch einmal:

image

Abbildung 1: Klassendesign das getestet werden soll.

Würden wir nun einen Test für die Methode Foo() ) der Klasse A schreiben und dort ein Objekt der Klasse A instanziieren, würde dieses automatisch ein Objekt der Klasse B erzeugen, da A.Foo() ja deren Funktionalität nutzt.

Um solche Abhängigkeiten aufzulösen, bietet sich der Einsatz von Interfaces an. Mit nur einem Interface haben wir die Klassen voneinander entkoppelt und die Abhängigkeit zwischen A und B aufgelöst.image

Abbildung 2: Die Klassen A und B sind durch das Interface entkoppelt.

Zusätzlich übernimmt jetzt nicht mehr A selbst die Instanziierung von B, sondern wir injizieren dem Objekt von A mittels Konstruktorparameter b ein Objekt, das die Schnittstelle IB implementiert. Dadurch können wir von außen bestimmen, welches Objekt die Funktionalität IB.Bar() übernimmt, die wir von A.Foo() aus aufrufen.

Man stelle sich vor ,dass B.Bar() eine Datenbank aufruft. Gibt es dort einen Fehler, löst diese Methode eine InvalidOperationException aus. Unsere Methode A.Foo(), die ja B.Bar() aufruft, soll auf diese Exception mit einer CustomException reagieren. Wenn wir das mit dem Design aus Abbildung 1 testen möchten, müssten wir eine Datenbank aufsetzen, diese Tabellen in der Datenbank so manipulieren, dass in der Methode B.Bar() die gewünschte Exception auftritt und dann den Test für A.Foo() durchführen. Wir müssen quasi ein Szenario für B.Bar() simulieren, obwohl wir nur A.Foo() testen wollen. Das ist hier bereits verwirrend und in größeren Systemen führt das zu unglaublich kompliziertem Testcode den nach ein paar Tagen der Tester selbst nicht mehr versteht.

Mit dem Design aus Abbildung 2 ist das überhaupt kein Problem: In unserem Testprojekt legen wir einen sogenannten Stub an. Stub heißt, das er ein “dummer” Stellvertreter einer Interfaceimplementierung ist, der fest definierte Werte zurückgibt.

public class IBExceptionStub : IB
{
    public void Bar()
    {
        throw new InvalidOperationException("...");
    }
}

Listing 1: Ein Stub für einen Test der von B.Bar() eine Exception erwartet.

Schreiben wir nun also einen Test, der prüfen möchte, ob A.Foo() die erwartete CustomException auch tatsächlich auslöst, brauchen wir nur noch folgenden Code zu schreiben:

[TestMethod]
[ExpectedException(typeof(CustomException))]
public void Foo_DatabaseNotAvailable_CustomException()
{
    IB ib = new IBExceptionStub();
    A a = new A(ib);

    a.Foo();
}

Listing 2: Der Test für A.Foo() nutzt den ExceptionStub um einen Fehlerfall von B.Bar() zu simulieren.

Damit haben wir zwei Punkte erreicht:

Erstens können wir unterschiedlichste Verhalten von A in Abhängigkeit von Verhalten in B testen. Möchten wir z.B. ein Verhalten von A.Foo testen, wenn von B.Bar() aus der Datenbank ein ungültiger User geladen wird, schreiben wir einfach einen kleinen Stub.

Zweitens das Design ist wesentlich flexibler geworden durch die Entkopplung durch das Interface. Das Design aus Abbildung 1 wäre nicht durch eine Klasse C ersetzbar, welche die Methode Bar() ebenfalls anbietet. Das zweite Design könnte dies ohne Probleme, wenn C das Interface IB implementieren würde.

Das Ganze funktioniert so natürlich nur wenn Constructorinjection möglich ist. Sollte das nicht möglich sein, nutzt man dazu das ServiceLocator-Pattern. Aber das schauen wir uns in einem anderen Tipp genauer an.

Alle Beiträge der Reihe “TDD Tipps” sind hier zu finden.

Web Developer Conference 2011

18. Oktober 2011 22:19

Vom 17-18.11 fand zum ersten Mal die Web Developer Conference im Hamburger InterContinental Hotel statt. Mehr als 150 Teilnehmer konnten sich dabei in zwei Tracks auf den neusten Stand in der Webentwicklung bringen. Neben Vorträgen zu HTML5, JavaScript, NodeJs und vielen weiteren Themen, war auch ich kurzfristig mit einem Vortrag zum Thema “Schnittstellen im Web – Aktueller Technologiestand bei Webdiensten” vertreten. In der 60-minütigen Session versuchte ich den Teilnehmern die verschiedensten Technologien wie REST, SOAP und Data-Services zu erläutern, zu erklären wie und wo man diese Dienste in Architekturen am besten unterbringt und was man beim Thema Security zu beachten hat.

An dieser Stelle möchte ich mich noch einmal bei allen Teilnehmern meiner Session und natürlich auch allen Teilnehmern des Events bedanken. Es war für einen Desktopentwickler ein wirklich super cooler Informationsaustausch, der mir viele Anregungen und Perspektiven der Softwareentwicklung in den nächsten Jahren aufgezeigt hat. Ich freue mich schon auf die nächste Veranstaltung.

Wie mit den Teilnehmern besprochen, gibt es hier auch meine Folien zu dem Vortrag.

Links
Folien

Ein internal Interface in C# implementieren ohne public Methoden

12. Oktober 2011 14:15

Ab und zu kommt man in die Situation, dass man ein Interface in C# sowohl für public-Zwecke (Verwendung außerhalb eines Projekts) und auch für internal-Zwecke (Verwendung in dem jeweiligen Projekt) verwendet. Dabei gibt es das Problem, dass in C# keine Zugriffsmodifizierer für Interfacemethoden zulässig sind. Wie man das Ziel trotzdem erreicht, zeigt das Listing 1.

    public interface IPublic
    {
        void Foo();
    }

    internal interface IInternal : IPublic
    {
        void Bar();
    }

    class Something : IInternal
    {
        public void Foo()
        {
            throw new NotImplementedException();
        }

        void IInternal.Bar()
        {
            throw new NotImplementedException();
        }
    }

Listing 1: Das implementieren eines internal und eines public Interfaces

Der Trick daran ist es, die Funktionalität in ein Public Interface (hier IPublic) und ein Internal Interface (hier IInternal) aufzuteilen. Da IInternal von IPublic abgeleitet ist, bietet die interne Schnittstelle alle angebotenen Methoden an und die öffentliche Schnittstelle nur die öffentlich zugänglichen. Aber warum dann nicht in ein Interface? Ganz einfach, in einem Interface kann nur der Zugriffsmodifizierer für das gesamte Interface angegeben werden, nicht für einzelne Methoden oder Eigenschaften.

Weiter ist zu beachten das wenn ein Interface implizit implementiert wird, müssen dadurch alle implementierten Methoden public sein, egal welchen Zugriffsmodifizierer das Interface hat. Daher wird die Methode Bar() aus dem Interface IInternal explizit implementiert, womit wir das gewünschte Verhalten erzielt wird.

Test Driven Development mit .NET und C#–Tipp #1: Events testen

11. Oktober 2011 23:08

Das Testen von Code ist eine wichtige und – für  Entwickler – richtig coole Angelegenheit. Doch Testen ist weitaus mehr, als ein Testrunner und ein paar Attribute für Klassen uns Methoden. In der Reihe “TDD Tipps” versuche ich regelmäßig Probleme zu erläutern, die beim Testen auftauchen und mit einem praktischen Hinweis einen Lösungsweg aufzuzeigen.

Um Klassen untereinander zu benachrichtigen und voneinander zu entkoppeln, können Events genutzt werden. Wenn man Klassen mit Events testen möchte, muss natürlich auch das korrekte auslösen des Events getestet werden. Hat man kein entsprechendes Mock-Framework zur Hand, geht das auch relativ einfach mit Lambda-Expressions. Gegeben sei folgende Klasse Foo mit dem Event Bar (die so natürlich NICHT im Produktivcode auftauchen sollte):

public class Foo
{
    public event EventHandler Now;
    public void Bar()
    {
        Now(null, null);
    }
}

Listing 1: Die Klasse Foo mit dem Event Now, das getestet werden soll

Das Testen ist relativ einfach und simple:

[TestMethod]
public void Bar_EventSubscribed_EventIsRaised()
{
    bool isRaised = false;
    Foo foo = new Foo();
    foo.Now += (sender, args) => isRaised = true;
            
    foo.Bar();

    Assert.IsTrue(isRaised);
}

Listing 2: Die Methode, die testet, ob das Event ausgelöst wurde

Zunächst wird eine Variable isRaised deklariert und mit false initialisiert. Diese Variable erfasst, ob das Event ausgelöst wurde. Danach wird mit einem Lambda-Ausdruck dafür gesorgt, dass diese Variable auf true gesetzt wird, wenn das Event ausgelöst wird. Im Assert-Teil ist dann nur noch zu prüfen, ob diese Variable auf true gesetzt wurde.

Alle Beiträge der Reihe “TDD Tipps” sind hier zu finden.

Buchvorstellung: iWoz – Wie ich den Computer erfand und Apple mitgründete von Steve Wozniak

11. Oktober 2011 20:55

Eigentlich verwende ich die wenige Zeit die ich zum Lesen habe, meist für das Studium von Fachbüchern. Als ich jetzt aber durch Zufall den Klassiker “The Silicon Valley Story” gesehen habe (dort geht es geht um die Anfänge von Microsoft und Apple aus Sicht von Steve Wozniak und Steve Ballmer), bin ich auf das Buch iWoz von Apple-Mitgründer Steve Wozniak aufmerksam geworden. Da dies ein Buch mit starkem Technikhintergrund ist, ohne gleichzeitig ein Fachbuch zu sein, verschenkte ich es zu einem Geburtstag an einen Freund als leichte Lektüre für zwischendurch. Beim Einpacken durchstöberte ich den Umschlagtext und war derart fasziniert, dass ich es gleich ein zweites Mal bestellte Smiley 

Das Buch beschreibt zunächst seinen Werdegang beginnend im Alter von 3 Jahren und schon dort zeigt sich, dass Steve Wozniak nicht nur technisch hochbegabt ist, sondern bereits in frühen Tagen von seinem Vater neben technischen Dingen vor allem eine hohe moralische Wertvorstellung vermittelt bekommt. Er beschreibt weiter wie sein Vater als Ingenieur bei Lockheed arbeitet und wie er ihm bereits früh elektronische Prinzipien wie Spannung, Strom und Widerstände erklärt. Dabei merkt man die ganze Zeit wie sehr in Steve der Ehrgeiz brennt, selbst irgendwann ein solcher Ingenieur zu sein, wie sein Vater. Die Erzählungen gehen weiter über Technologiewettbewerbe in der Highschool, seine Anfänge im Studium, die Entwicklung der BlueBox (Gerät um kostenlos telefonieren zu können), seine ersten Kontakte zu Steve Jobs, seinem ersten (richtigen) Job bei Hewlett Packard und schließlich die Gründung von Apple. Dabei geht er besonders auf die Schaltungen und Geräte ein, die er dabei entwickelt, so detailliert, wie ich es in einem solchen Buch nicht erwartet hätte. Dabei erstaunt Wozniak bereits im frühen Jahren mit selbstentwickelten Geräten wie z.B. dem Tic-Tac-Toe-Computer, der wahrscheinlich selbst mich, als studierten Nachrichtentechniker, vor ein Problem stellen würde.

Dabei ist das Buch ein gelungener Mix für jeden Lesen, denn es geht nicht nur um technische Dinge, sondern auch um viele lustige Dinge, moralische Wertvorstellungen und amerikanische Geschichte. Aber für mich besonders interessant war die Erkenntnis, warum Steve Wozniak zu dem Genie geworden ist und das es nicht das oft beschrieben “göttliche Talent” war, sondern eine solide und gründliche Erziehung, Wissbegierde, ein guter Lehrer und ein Schulsystem, das genau auf solche Kinder ausgelegt ist und diese fördert. Die Art und Weise wie dieses Buch die Lebensgeschichte und die unglaublichen Leistungen vermittelt ist beispiellos und ein Muss für jeden technisch Interessierten.

Für jeden, der den Werdegang einem der größten Ingenieure der Welt einmal genauer verfolgen möchte, ist dieses Buch genau das richtige. Selten hat mich ein Buch so sehr gefesselt, motiviert und begeistert zugleich. Man merkt in jeder Zeile das Wozniak ein Ingenieur durch und durch ist und es macht teilweise wirklich sprachlos, welche Leistungen er bereits im jungen Alter vollbracht hat.

Links
iWoz – Die Autobiographie des Apple-Erfinders

i, i, i wo ist Es denn?

5. Oktober 2011 06:18

Wo einige Unternehmen teure Werbekampagnen starten müssen, um ihre neu entwickelten Produkte an die Kunden zu bringen, stellt eine Firma jedes Jahr aufs Neue eine Ausnahme dar: Apple. Kein anderes Unternehmen versteht es derart gut, ihre Kunden (bei Apple darf man sie getrost Fans oder Jünger nennen) vorab derart zu illusionieren, das selbst erwachsene Personen sich plötzlich aufführen wie Schulkinder zur Weihnachtszeit. Das Apple noch nicht auf die Idee gekommen ist, in ihren iStores einen Keynotekalender in Apfelform zu verkaufen, womit man vom Ankündigungsdatum an, jeden Tag ein kleines Kläppchen öffnen kann (wobei jeden Tag ein App-Symbol mit einem Hinweis auf das baldige Produkt zu finden ist), bis zu angekündigten Keynote, verstehe ich bis heute nicht.

Microsoft fuhr in diesem Jahr mit Windows 8 ein ähnliche Strategie: Nachdem man den Kunden (ja, hier sind es leider nur Kunden) vorab einige Screenshots oder kurze Videos “hingeworfen” hatte, zog man eine Veranstaltung ganz im Stil von Apple auf: Die Build (ehemals Professional Developer Conference – PDC). Auch wenn ich persönlich es Microsoft nicht zugetraut hätte, war die Konferenz aus Kundensicht wirklich fast so etwas wie die legendären Apple-Keynotes – Windows 8 ist echt ein geniales Stück Software und die (nicht Entwickler-)Massen waren begeistert. Aber eben nur fast, es fehlte eine Präsens auf der Bühne. “The one” mit dem sich jeder ein Stück weit identifizieren konnte und zu dem gleichzeitig auch jeder irgendwie hinauf schaute… So jemand wie Steve Jobs! 

Doch natürlich schläft auch die Apfelfraktion nicht – vor einige Zeit kündige Apple die längst überfällige Keynote an: “Let’s talk iPhone”. Zusammen mit diesem knappen Satz, wurde ein Bild veröffentlich, auf dem genau vier App-Icons zu sehen waren: Ein Kalender Icon mit “Tuesday the 4th”, einem Icon mit der Uhrzeit 10:00, einem Map-Icon mit der Adresse von Apple’s Headquater und einem Icon das einen verpassten Anruf zeigt. Das die ersten drei Icons auf die Keynote am 4.10.2011 um 10:00 Uhr im Apple Headquater in Kalifornien hinwiesen, war klar, aber das letzte Icon führt zu den wildesten Spekulationen – Einige spekulierten gar darüber, ob das neue Gesicht von Apple Tim Cook, in der Keynote einen Videocall mit Steve Jobs führen würde um über das neue iPhone zu plaudern. Und wie jedes Jahr geht mir dabei derselbe Gedanke durch den Kopf: Wow Apple! Egal auf welcher Newsseite man in der letzten zeit unterwegs war, überall gab es wildeste Spekulationen über das neue iPhone 5. Während einige nur über die Funktionen spekulierten, präsentierten andere gar Ganze selbst angefertigte Prototypen. Zusätzlich konnte man seit einiger Zeit bei T-Mobile ein neues Smartphone vorbestellen – jedem war klar um welches Smartphone es sich handeln würde. Versuchte man an der Hotline das neue iPhone zu bestellen, entgegnete die nette Dame am Ende nur mit “das haben wir hier nicht, sie können nur ein Smartphone der neusten Generation vorbestellen” – Wuuuhaaaa, das ist der Punkt an dem die Nägel der eingefleischten Apple-Jünger schon bis zur Schulter abgekaut waren.

Pünktlich um 19 Uhr (MEZ), als alle Apple-Jünger ihr iPad gen Kalifornien gedreht und die Gebets-App gestartet hatten, startete die Keynote mit Tim Cook. Und dann wurde es präsentiert: Das iPhone 4S… VIER ESS! Nicht 5!!! Bitte was?!?! Unter Jobs begeisterte Apple jedes Jahr, fast ohne Ausnahme, mit genialen und vor Innovation nur so platzenden Produkten und jetzt reicht es plötzlich nur noch für ein 4S??? Ein herber Schlag für die Jünger und ein toller Tag im Kalender für alle Applefeinde – Das was Apple Jahrelang ausgezeichnet hatte, mit dem Apple eine Phänomen wie sonst nirgends geschaffen hatte… sie hatten es versaut! In Zeiten in denen über Features wie Stereokameras, 3D-Bildschirme, HD-Auflösungen, Bezahlen mit Smartphones und vielem Mehr gesprochen wird, schafft Apple es nur, ihren Antennenbug zu fixen, eine bessere Kamera einzubauen, einen doppelkern Prozessor einzubauen und eine Spracherkennung zu integrieren? Na klasse, letzteres kann man Windows Phone 7 Mango auch, aber das Feature ist so unwichtig, das selbst Microsoft es nicht für nötig gehalten hat, es gesondert zu erwähnen – zumal es für den deutschen Raum noch nicht zu funktionieren scheint. Selbst mit den angesprochenen Verbesserungen schafft Apple es nicht wirklich zur Hardwarespitze der Smartphones aufzuschließen.

Und was gab es noch? Die iCloud – Noch eine Wolke mehr am Himmel, nur komisch das selbst Apple nicht versteht, dass schon die bisherigen Wolken bei dem gemeinen Fußvolk nicht sonderlich beliebt sind. Die iCloud soll auf Amazon AWS und Windows Azure (ja, das Ding von Microsoft, irgendwann muss sich Microsoft’s großes Apple-Aktienpaket ja auszahlen) basieren. Dort bekommt man 5GB umsonst und 10GB für 16 Euro im Jahr. Nun kann man Bilder, Musik und Filme mit allen Apple-Geräten synchronisieren. Das Apple schon in der Vergangenheit nicht unbedingt verantwortungsvoll mit den Daten der Jünger umgegangen ist, wird hier bestimmt bald keinen mehr interessieren und das man bei Microsoft 25GB umsonst bekommt, auch nicht.

Welches Fazit sollten wir daraus ziehen? Jahrelang war Apple im Smartphone und Tabletbereich der Innovationsmotor, der nun aber nur noch Trabant-Qualität zu haben scheint. Das angekündigte iPhone 4S zaubert jedem Android oder Phone 7 Mango Besitzer ein breiten selbstzufriedenes Lächeln ins Gesicht und sollte auf der anderen Seite jedem Apple-Jünger zum nachdenken anreden. Jemand hat einmal gesagt, das dass Problem von Microsoft seiner Meinung nach ist, das heute keine Person mit Visionen mehr an der Spitze ist, sondern jemand der nur in Zahlen denkt. Trifft dasselbe jetzt etwa auch auf Apple zu nachdem Jobs krankheitsbedingt ausgeschieden ist? Ich Sinne der vielen Innovationen die Apple uns gegeben hat, hoffe ich, dass es nicht so ist…

Windows Phone 7 Mango Update mit einem Trick schon jetzt für alle Geräte

28. September 2011 14:11

imageMicrosoft hat beschlossen das Mango Update für Windows Phone 7 in mehreren Wellen auszurollen und so kommt es, das einige noch auf das Update warten müssen (z.B. alle die das Samsung Omnia 7 besitzen). Mit einem kleinen Trick kann man den Updatemechanismus umgehen und jetzt schon in den Genuss des Updates kommen:

  1. Zune Software updaten
  2. Einstellungen –> Telefon
  3. Danach auf Aktualisieren klicken
  4. Normal zeigt er hier “Kein Update verfügbar an”, wenn man jedoch direkt nach dem Klick die Internetverbindung trennt, wird das Mango-Update gefunden

Nach ca. 30 Minuten ist man dann unterwegs mit Windows Phone 7 Mango…

Viel Spaß damit Smiley

Zusätzliche Bing-Funktionen für die deutsche Version von Windows Phone 7 Mango freischalten

28. September 2011 14:05

image_thumb[1]Seit heute wird das neue Windows Phone 7 Mango Update verteilt. Im Bing-Hub muss man leider feststellen, dass viele der angekündigten Features nicht verfügbar sind. Dies kann mit einem kleinen Trick aktiviert werden:

Unter Einstellungen –> Region & Sprache –> Browser und Suchsprache wählt man Englisch (USA)

Danach findet sich in der Bing-Suche (die trotz der Einstellung komplett auf deutsch ist) nicht nur den Menüpunkt “in der Nähe” (eins der besten neuen Features) sondern Bing Vision erkennt nun neben den bisherigen Optionen QR-Codes und Microsoft Tags auch normale Barcodes, Bücher, CDs und DVDs.

Warum diese Funktionen gesperrt sind ist mir nicht wirklich ersichtlich, da “in der Nähe” wirklich sehr gut funktioniert und eine absolut geniale Erweiterung des Bing-Hubs ist. Bei der Suche nach Büchern, CDs und DVDs stellt man jedoch schnell fest, das fast nur englischsprachige Bücher erkannt werden – das könnte also ein Grund sein.

Zusätzlich soll auch die gesamte Umstellung auf die englische Sprache weitere gesperrte Features freischalten, allerdings habe ich das noch nicht getestet.


video2brain - Videotraining

© Copyright 2011 by David Tielke - Impressum