.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv April 2014

Microsoft in der Wildnis von Berlin-Kreuzberg

28.04.2014 07:25:25 | Mathias Gronau

Vom 5. bis 8. Mai findet in Berlin zum siebten Mal die re:publica statt. Seit 2007 findet die vermutlich weltweit größte Communityveranstaltung jährlich in Berlin statt und befasst sich mit dem Internet und neuen Kommunikationsformen, im Grunde also mit der Schnittstelle zwischen IT und Zivilgesellschaft. Die Bedeutung dieser Veranstaltung, die aus der Open-Source-Szene hervorgegangen ist, wird bereits aus der Entwicklung der Teilnehmerzahlungen deutlich: kamen zur ersten re:publica bereits 700 Teilnehmer, waren es im letzten Jahr bereits 3.000. Dabei umfasst das behandelte Themenspektrum nicht nur die hiesigen Probleme, sondern geht auch auf aktuelle Einschränkungen der Meinungsfreiheit weltweit ein. Als Beispiel sprach 2011 während der Hochzeit des arabischen Frühlings die ägyptische Bloggerin Noha Atef auf der re:publica und 2012 kamen Sprecher aus 30 Ländern. Seit dem letzten Jahr ist auch Microsoft Partner der re:publica. Nun ist Microsoft nicht bevorzugt als Teil der Open-Source-Bewegung bekannt, wollte die aber im Rahmen der neuen Offenheit nicht länger ignorieren. Es ist schon recht amüsant, Microsofts Erklärung zu lesen, in der Microsoft die Teilnahme begründet: “…keine Angst, die beißen nicht. Nicht Promotoren-Drohnen, sondern Mitarbeiter aus den Teams von Microsoft Deutschland werden da sein und Fragen beantworten. Mitdiskutieren, aber nicht missionieren. Zuhören und nicht mit endlosen Sessions Zuquatschen…” In diesem Jahr geht Microsoft aber schon deutlich selbstbewusster an die Sache ran. Hier die Presseerklärung: Wir sind alle längst in der digitalen Welt angekommen. Wir haben #Neuland betreten und experimentiert, das Leben zu einem Netzwerk geformt. Als Microsoft haben wir alte Wurzeln gekappt, Plattformgrenzen überwunden, Open Source lieben und Geräte zu designen gelernt. Wir sind “Into the Wild” und haben doch den Weg vor uns nie klarer gesehen: Für diesen “Wild Way” sind wir offizieller Partner der re:publica 2014 in Berlin (06.-08. Mai 2014). Unser Ziel ist es, den Austausch über alle Grenzen hinweg voran zu treiben. “Als Partner der re:publica verlässt Microsoft den gängigen Pfad und schlägt mit uns gemeinsam den Wild Way ein. Im Mittelpunkt steht der Dialog. Denn gemeinsam wollen wir Digitalisierung, Vernetzung und das offene Gespräch vorantreiben”, kommentiert Andreas Gebhard, geschäftsführender Gesellschafter der re:publica. In ihrer knapp achtjährigen Geschichte hat sich das Event für die Digitale Gesellschaft mit zuletzt 5.000 Besuchern zur größten Social-Media-Konferenz Europas entwickelt und durfte auf ihren Bühnen viele der wichtigsten Mitwirkenden der digitalen Gesellschaft begrüßen. Diese Gesellschaft unterliegt seit ihrer Existenz dem ständigen Wandel, doch nie zuvor war dieser so spürbar wie seit den Enthüllungen um Edward Snowden im Sommer 2013. “Into the Wild soll als Motto der re:publica 2014 den Blick öffnen für verschiedene Ansätze, um das Internet und die Gesellschaft der nahen Zukunft zu verstehen und zu verbessern”, kommentiert Gebhard. #einfachmachen: Das Manifest des Neuen Arbeitens“Wir haben gelernt, miteinander zu sprechen, ohne uns das Büro zu teilen. Wir haben gelernt, Meetings abzuhalten, ohne uns die gleiche Zeitzone zu teilen. Es ist an der Zeit, Arbeitswelt neu zu definieren”, erklärt Thorsten Hübschen, Business Group Lead der Microsoft Office Division. Gemeinsam mit Experten aus Netz, Politik und Gesellschaft diskutiert der Software-Konzern in drei Workshops und Experten-Panels das Manifest des Neuen Arbeitens […]

IconToggleButton für Windows 8

27.04.2014 19:46:59 | Hendrik Loesch

Da ich für eine App einen Togglebutton mit Icon brauchte, habe ich mir einen Style für den AppBarToogleButton geschrieben, der diesen so umgestaltet, dass er wie der normale ToggleButton aussieht. Zugegebener maßen, der Aufwand ist gering und es ist auch etwas schmutzig gelöst, da kein Text angezeigt wird. Es erfüllt aber alle meine Anforderungen. Das […]

DNUG Braunschweig–Verdammt, ich wurde gehackt!

27.04.2014 12:54:00 | Lars Keller

Die DNUG Braunschweig trifft sich am 29.04.2014 um 19:00 im Restaurant Zucker (Tagungsraum). Dieses Mal kommt uns der Microsoft Evangelist Patric Boscolo mit einem Security Thema besuchen.

Abstract:
In dieser Session schauen wir auf die unterschiedlichsten Webtechnologien und deren Angriffspunkte/Sicherheitslücken. Wir zeigen ihnen moderne Angriffstechniken und wie sie sich schützen können. Außerdem bekommen sie eine Guidance zum Thema Containment, in der wir darauf eingehen was zu tun ist, wenn der Angriff erfolgreich war.

Über den Sprecher
Patric startete seine IT Karriere 1998 als er noch dafür bezahlt wurde Rechner Support im Öffentlichen Dienst durchzuführen. Dabei lernte er Programmieren mit Visual Basic und da Ihm das nicht gefiel und er eine 5 in der Schule bekam, beschäftigte er sich fortan mit Fortran =) Nein, C und C++ sollte es werden. Als Student Partner lernte er dann C# kennen und ist bis heute ein großer Fan der .net Platform. Nach einem kurzen Ausflug in die GPU und Automotive Welt begann Patric 2011 bei Microsoft. Hier macht er den Brückenschlag zwischen Services und Devices und beschäftigt sich mit Themen wie Microsoft Azure, Windows, Windows Phone und nicht zuletzt Security.

Wie immer ist die Veranstaltung kostenlos!
Weitere Informationen zur DNUG Braunschweig können hier gefunden werden: http://www.dotnet-braunschweig.de

LINQify the SimpleObjectStore

11.04.2014 05:26:00 | Jürgen Gutsch

in den letzten Wochen habe ich weiter am SimpleObjectStore geschraubt. Mir ging es in der Zeit vor allem Darum die API zu vereinfachen und direkter Nutzbar zu machen. So habe ich mir ausnahmsweise mal das Entity Framework zum Vorbild genommen und analog zum DbSet das IObjectStore<T> LINQifiziert ;)

Wie das?

Eigentlich recht einfach. Der SimpleObjectStore basiert auf eine im Arbeitsspeicher gehaltene Liste. Diese ist die Grundlage für alle Operationen die mit dem ObjectStore möglich sind. Ich habe also Das Interface IObjectStore<T> um das Interface IEnumerable<t> erweitert. Der Enumerator ist der aus der zugrundeliegenden Liste. Dadurch ist der ObjectStore etwas einfacher nutzbar.

Mehrere Objekte selektieren:

using (var store = ObjectStore.GetInstance<MyEntity>())
{
    var actual = store.Where(x => x.Length > 50);
}

Hinzufügen eines einzelnen Objektes (AddOrUpdateRange() um mehrere Objekte hinzuzufügen):

using (var context = ObjectStore.GetInstance<InsertEntity>())
{
    context.AddOrUpdate(new MyEntity
    {
        Id = 11,
        Length = 11,
        Name = "Name11",
        Price = 11
    });
}

Einzelnes Objekt selektieren:

using (var store = ObjectStore.GetInstance<MyEntity>())
{
    var actual = store.First(x => x.Id == 3);
}

Existierende Objekte abfragen:

using (var store = ObjectStore.GetInstance<MyEntity>())
{
    var result = store.Any(x => x.Name.StartsWith("Name"));
}

Spezielle Objekte löschen:

using (var context = ObjectStore.GetInstance<MyEntity>())
{
    context.Remove(x => x.Id <= 5);
}

Alle Objekte löschen:

using (var context = ObjectStore.GetInstance<MyEntity>())
{
    context.Clear();
}

LINQ Aggregat-Funktionen nutzen:

using (var store = ObjectStore.GetInstance<MyEntity>())
{
    var result = store.Sum(x => x.Price);
}

Was somit wegfällt ist der Aufruf von LoadAll() um erst Mal an die Liste der Daten zu kommen. Es kann nun also auch direkt über den Instanz eines konkreten IObjectStore<T> iteriert werden.

Dahinter steckt jetzt allerdings keine besondere Magie oder komplexe Logik, wie man vielleicht vermuten könnte, sondern der Zugriff auf die Interne Liste ist nun direkt über den Enumerator möglich, den ich nach Außen freigebe. Es geht hier also nicht um einen LINQ-Provider, wie er beim EntityFramework oder bei NHibernate existiert.

Dank Laurin Stoll (der mit mir zusammen beim einem Kunden einen Workshop zum Thema ASP.NET MVC und Entity Framework gemacht hat) habe ich einen sehr guten Einblick in die Aktuelle API des Entity Framework bekommen und konnte das Prinzip hier stellenweise umsetzen.

Was für einen Sinn hat das?

Der SimpleObjectStore ist keine vollwertige Datenbank und soll es auch nicht sein. Ziel dieses Tools ist es schnell Tests, Demos, Mockups und Click-Dummies aufzubauen, ohne sich um die Details der Persistierung kümmern zu müssen. Auch wäre es möglich UI-Driven zu entwickeln einfache Persistierungen umzusetzen. (HINWEIS: Für den Poduktiveinsatz unter Stress und in Multithreading-, bzw. Multiuser-Umgebungen wird dieses Werkzeug nur bedingt funktionieren)

Der Umstieg zu einer produktiv nutzbaren Persistierung sollte so unkompliziert wie möglich sein, ohne zu viel umstellen zu müssen. Die Direkte Nutzung von LINQ sollte das nun vereinfachen

Was wird noch kommen?

IEntity soll verschwinden. Ich möchte einfache POCOs verwenden können, statt die Implementierung von IEntity vorzuschreiben. in früheren Versionen war das eine einfache Möglichkeit um an den Identifier zu kommen. Schon jetzt kann aber Entweder das Identifier-Attribut verwendet werden oder ToString wird genutzt um Entitäten zu vergleichen. Eine zusätzliche Id-Konvention wäre ebenfalls denkbar.

Die aktuellen Änderungen sind im SourceCode Repository auf BitBucket zu finden, allerdings noch nicht per NuGet verteilt.

Event Sourced Applications

11.04.2014 01:25:01 | Jürgen Gutsch

Immer mehr bin ich davon überzeugt, dass überall dort wo in einer Applikation eine eindeutige Domäne ausgemacht werden kann, ein Event Source die richtige Datenhaltung ist.

Das mag für kleine Anwendungen etwas übertrieben sein, aber sobald diese kleine Anwendung wächst kann der Aufwand für diese Anpassung schnell unverhältnismäßig wachsen. Aktuell sitze ich auch an einem Projekt, das am Anfang recht einfach ausgesehen hat. Mit der Zeit, sind aber neue Anforderungen an der Kerndomäne hinzugekommen. Das Resultat sind unter anderem Sonderbehandlungen innerhalb dieser Domäne und die Komplexität der Software steigt annähernd exponentiell. Das ist unschön für den Entwickler der die neuen Anforderungen implementiert und für den der den Code warten muss.

Ein noch kommendes Reporting und Export der Daten muss nun ebenfalls auf diese Sonderbehandlungen reagieren. Die Komplexität habe ich also nicht nur bei der Erfassung der Daten, sondern auch beim Lesen der Daten.

Einfacher ist es die Daten in einem Event Stream abzulegen und gleich mehrere zusätzliche Features geschenkt bekommen:

  • Historie / Reporting
  • Logging / Protokollierung
  • Erweiterbarkeit / Evolvierbarkeit (auch auf die Datengrundlage)
  • Modularität
  • Stabilität

Event Source

Gemeint ist eine Art von Datenbank, in welcher die Aktionen auf ein Domainobjekt abgelegt werden. Das Domänenobjekt kann z. B. eine Kunde in einem CRM System sein. Jede Änderung einer Eigenschaft dieses Kunden wird nun persistiert: Die Änderung des Nachnamens, des Vornamens, der Adresse, etc. wird separat erfasst und abgelegt. Üblicherweise wird dabei für jedes Event die ID des Domänenobjekts (Kunden), die Reihenfolge der Events und das Erstelldatum des Events abgelegt, zuzüglich der geänderten Werte des Kunden.

Diese über die ID zusammenhängenden Änderungen, werden Event Stream genannt, das zugehörige Domänenobjekt ist das sog. Aggregate. Das Aggregate ist die Summe der zugehörigen Events. Soll heißen: Alle geladenen Events des Aggregates beschreiben dessen Zustand. Lade ich nur Events des Kunden bis vor zwei Wochen, habe ich den Zustand des Kunden von vor zwei Wochen (Historie).

Daraus ergeben sich die oben aufgelisteten Vorteile:

Historie

Alle Aktionen auf dem Zentralen Objekt werden als Events (und nur als Events) in der DB abgelegt, dadurch erhält man eine komplette Historie über alle vergangenen Aktionen. Das heißt auch, wir sind in der vergangene Zustände wiederherzustellen. Wir können sagen, wie die der Zustand eines Objektes vor zwei Wochen war. Dabei ist die Art des Objektes völlig irrelevant. Sei es ein Vertrag, ein Kunde, ein Werkstück, ein Dokument, was auch immer.

Logging

Wir sind in der Lage, nicht nur die Änderungen, sondern auch die Änderer und die Zeitpunkte der Änderungen mit anzugeben. Wir können also sehen, wer was zu welchem Zeitpunkt geändert hat. Praktisch die totale Überwachung auf Daten-Ebene.

Erweiterbarkeit

Dem Event Stream ist es egal, welche Events abgelegt werden. Kommen neue Anforderungen hinzu, so müssen nur neue Events definiert werden, die einfach zusätzlich in diesen Stream abgelegt werden. Das ist alles. Existieren die Events in der Vergangenheit nicht, sind sie für die Vergangenheit auch nicht relevant. Die Daten sind somit Modularisiert.

Modularität

Die Applikation wird bei neuen Anforderungen mit neuen Events ausgerüstet. Um auf diese Events zu reagieren, werden neue EventHandler angehängt. Es gibt weniger festen Abhängigkeiten in der Software. Auf eine Eventbasierte Datengrundlage kann auch einfach Eventbasiert Entwickelt werden.

Die Modularität geht noch einen Schritt weiter: Es können nicht nur neue Applikationsanforderungen über EventHandler implementiert werden, es können auch neue Datenextrakte – für Reportings, etc. – über EventHandler hinzugefügt werden. Ein Handler der auf Änderungen einer Kundenadresse reagiert, könnte die Daten über das Umzugsverhalten eines Kunden zu Statistikzwecken extrahieren.

Stabilität

Der EventStream sollte in einem stabilen System persistiert werden. Ist das gewährleistet ist auch für Datensicherheit gesorgt. Es gehen keine historischen Informationen verloren, da keine Events gelöscht werden, sondern immer nur neue hinzukommen. Daraus können Informationen für Statistiken, etc. immer wieder neu generiert werden.

Datenmigrationen bei einem Softwareupdate werden fast überflüssig gemacht. Auf veraltete Events muss nicht mehr reagiert werden. Neue Events beeinflussen alte Applikationen nicht. Nur auf die Struktur vorhandener Events muss ggf. geachtet werden. Je nachdem wie diese allerdings persistiert werden. kann auch das egal sein.

Und was ist mit CQRS?

Oftmals wird Event Source im Zusammenhang mit CQRS genannt. Es macht in vielen Fällen Sinn, dort wo das CQRS-Pattern genutzt wird, auch über Event Source nachzudenken. Umgekehrt macht es Sinn, dort wo die Event Source genutzt wird auch über CQRS nachzudenken. Da das Selektieren von Daten aus dem Event Stream recht aufwendig ist, sollte CQRS tatsächlich in Betracht gezogen werden. Also per EventHandler die Daten aus dem Events abzufangen und in eine separate, leseoptimierte Datenbank abzulegen. Also Quasi die aktuellen Zustände des Aggregates separat denormalisiert abzulegen und zu aktualisieren. Dadurch optimiert man die Lesezeit enorm.

Allerdings ist das kein Muss. Beide Patterns arbeiten hervorragend zusammen, müssen aber nicht zwingend in einen Zusammen eingesetzt werden.

Was meint Ihr?

Here we go!–Microsoft MVP Award 2014

09.04.2014 13:03:00 | Lars Keller

Ich bin zum sechsten Mal in Folge zum Microsoft MVP ernannt worden. Dieses Mal habe ich meine Expertise in Client Development gewechselt.

Sehr geehrte(r) Lars Keller,
herzlichen Glückwunsch! Wir freuen uns, Ihnen den Microsoft® MVP Award 2014 verleihen zu können! Diese Auszeichnung wird an herausragende, führende Mitglieder der technischen Communities verliehen, die ihre wertvollen praktischen Erfahrungen mit anderen Menschen teilen. Wir schätzen Ihren außerordentlich bedeutenden Beitrag in den technischen Communities zum Thema Client Development im vergangenen Jahr hoch ein.

Danke Community! Danke Microsoft!

Build 2014 – Ein neues Microsoft?

07.04.2014 16:59:00 | Christian Binder

Die //Build2014 letzte Woche in San Francisco war für mich eine besondere Build. Der Grund dafür sind nicht etwa nur einzelne Produkt Features, die angekündigt worden sind, wie. z.B. das neue Azure Portal, welches definitiv ein Meilenstein ist und DevOps in der Cloud neu definiert, sondern viel mehr die Tatsache, dass sich ein neues Microsoft präsentiert hat.

WP_20140402_12_06_00_Pro

Like - “Developing since kindergarten … C++ is his blood … Tried them all”

Windows für 0€

Windows wird nun für Tablets und Phones bis 9 Inch Diagonale kostenfrei sein. Für mein Dell Venue Pro 8 bedeutet das, dass keine Windows Lizenzkosten anfallen. Das gilt auch für Windows im IoT (Internet of things), also kleinste Geräte, die z.B. mit dem Micro Framework laufen. Ein Beispiel hierfür ist die Netduino Platform. Für mich eine der signifikantesten Änderungen, da so ein Schritt vor Jahren nicht denkbar gewesen wäre.

Windows näher am Kunden entwickeln

Windows 8 wurde für Tablets und Touch optimiert. Die Brücke zwischen Touch und Desktop für reine Desktop Anwender hatten wir aus meiner Sicht nicht ideal gebaut. Durch die nun kürzeren Release Zyklen von Window  können wir aber näher am Kunden entwickeln und schneller Feedback einfließen lassen. Mit Windows 8.1 Update kommen nun Neuerungen, die das Arbeiten mit dem Desktop optimieren, unter anderem dann später auch das optionale Startmenü für den Desktop. Ich selbst werde es nicht mehr aktivieren, da ich die Vorteile des neuen Start Screens selbst auf einem Gerät ohne Touch schätze. Aber für alle Anwender, die noch Windows XP nutzen, wird der Umstieg dann ganz einfach.

.NET is so alive

Wer heute .NET Entwickler ist, dem stehen alle Türen offen. Ob Spiele Entwicklung mit Unity und C#, ob Cross Device Platform Apps für IPhone und Android mit C# und Xamarin, Windows Phone Apps, Windows Apps mit Hilfe der neuen Universal Windows Apps für einfaches Code-Sharing zwischen den unterschiedlichen Formfaktoren oder IoT Devices mit dem Micro Framework z.B. der Netduino Platform - You can do. Aber da ist viel mehr Innovation in .NET:

Der Core -  Ein neuer .NET JIT Compiler (Preview), der auch SIMD (Single Instruction, Multiple Data) unterstützt. Die .NET Compiler Platform (Codename Roslyn), welche die Compiler nun durch eine API öffnet und sich dadurch gerade im Bereich IDE Rectoring, Code Analyse und Diagnostik ganz neue Möglichkeiten ergeben.  Zudem ist die .NET Compiler Platform Open Source! Get the code here. Wir werden in Zukunft auch einige neue Innovationen in Visual Studio sehen, welche die .NET Compliler Platform nutzen und somit .NET noch produktiver machen. .NET Native –  C# Store Apps lassen sich mit dem C++ Backend Compiler bauen und profitieren so von einem besseren Startverhalten und Speichernutzung. .NET Native bringt die Produktivität von .NET mit der Performance des C++ Compilers zusammen.

Zudem wurde die .NET Foundation angekündigt – die Open Source Initiative für die .NET Platform und es sind schon eine ganze Reihe Projekte verfügbar. Mehr Infos unter http://www.dotnetfoundation.org

Zum Abschluss noch zwei Themen, die ich empfehlen möchte - es gibt natürlich viel mehr…..

Session Empfehlung  - Machine Learning

Die Session Developing Neural Networks Using Visual Studio greift wie der Titel schon sagt Neurale Netzwerke auf, was durchaus den einen oder anderen Leser an mentale Qual und Folter erinnert. Es ist aber die Grundlage für Machine Learning und die Session gibt nicht nur einen kompakten Einstieg, sondern zeigt auch interessante Anwendungsfälle. Denkt man z.B. an gewachsene Menüstrukturen, kommt man schon auf die Idee, warum nicht ein Neurales Netzwerk Anwendung finden könnte, um aus meinem Nutzungsverhalten die Menüs intelligent und dynamisch  aufzubauen. Spannend.

Session Empfehlung  - Deep Dive into Git with Team Foundation Server

Martin und Ed hatten eine echt gute Session zum Thema Deep Dive into Git with Team Foundation Server. Vor allem die Unterscheidung, für welchen Anwendungsfall sich Git oder TFVC empfiehlt, halte ich für besonders wichtig, da ich diese Fragen häufig selbst gestellt bekomme.

image

Viel Spass mit den //Build 2014 Recordings

TFS 2013 Update 2 verfügbar

03.04.2014 16:09:30 | Christian Binder

Das TFS Update 2 ist nun final TFS 2013.2 Update verfügbar. Hier ein kompakter Überblick einiger neuer Funktionen.

Work Item Tagging

image

Work Item Tags können nun in Work Item Abfragen verwendet werden. Diese Tags können jetzt auch in Excel und Visual Studio (ab 2013.2) definiert werden. Die neue Berechtigung “Tag-Permission” ermöglicht es festzulegen, wer Tags erstellen  kann. Also eine ganze Reihe von Verbesserungen rund um die Nutzung von Work Item Tags.

Neues Homepage Layout

Das aus VSO schon bekannte neue Layout der Homepage, jetzt auch für die lokale Version.

Backlog Management und Charting

Verbesserte Performance der Backlog Ansichten. Das Burn Down Chart ermöglicht die Definition von arbeitsfreien Tagen - für Alle, die noch ein Wochenende haben.  Das Anfangs Datum für den “Cumulative flow” Report ist zur besseren Darstellung jetzt konfigurierbar. Work Item Charts können direkt auf die Neue Homepage geheftet werden.

Test Plan Export nach HTML

Test Pläne lassen sich nun  nach HTML exportieren und können so in Emails einfach versendet werden.

clip_image001

Shared Test Parameters Management

Die zentrale Verwaltung von Shared Parametern für manuelle als auch automatisierte Tests (Coded UI Tests)

 

Code Lens – Incoming Changes Indicator

Den Incoming Changes Indicator habe ich schon mal in folgendem Post etwas ausführlicher beschrieben.

Verbesserter Git Support

Einige Verbesserungen rund um den Git Support in VS. Die Annotate Ansicht jetzt auch für Git. Das Git Amend Command direkt in VS als auch der Revert eines commits. Der Team Explorer unterstützt jetzt den push/pull für mehrere Remotes. 

Daten Export aus VS Online zu TFS 2013.2

TFS 2013.2 ist die Voraussetzung, um den Daten Export aus VS Online zu nutzen.

Support für SQL Server 2014

TFS 2013.2 unterstützt SQL Server 2014.

TFS 2013.2 Extensions für SharePoint 2013 unter Windows Server 2012 R2

Die TFS Extensions konnten nicht auf einem SharePoint 2013 unter Windows 2012 R2 installiert werden, was nun behoben ist.

Chris

Regeln | Impressum