Holger Sirtl: Azure-in-a-box: Microsoft macht mit dem Cloud Platform System Azure im eigenen Rechenzentrum möglich

Nach einer urlaubs- und diensreisenbedingten schöpferischen Pause möchte ich meine Blogging-Aktivitäten gleich mal mit einem Knaller wieder aufnehmen: Gestern Abend hat Satya Nadella, Microsoft CEO, zusammen mit Scott Guthrie, Executive Vice President, Cloud and Enterprise Group, Microsoft das

Microsoft Cloud Platform System

bekanntgegeben. Damit gibt es nun (endlich) die extrem häufig nachgefragte Möglichkeit, Azure-in-a-Box zu beziehen. Mit dem Cloud Platform System (CPS) gibt es also eine Hardware (in diesem Fall von Dell entwickelt), auf der Microsofts Azure Technologien vorinstalliert sind, d.h. das CPS ist in Summe

  • Dell Cloud Server
  • Dell Storage
  • Dell Netzwerk Hardware
  • Microsoft Windows Server 2012 R2
  • Microsoft System Center 2012 R2
  • Microsoft Windows Azure Pack

Alles zusammen, vorkonfiguriert und bereit zum Einsatz im eigenen Rechenzentrum. Auf der CPS-Produktseite finden sich weitere Informationen wie ein Produktvideo und ein Whitepaper.

Mit dem Windows Azure Pack stehen somit auf CPS folgende Azure Services zur Verfügung:

Weitere Informationen

Holger Schwichtenberg: Azure VMs mit viel mehr Kraft und Speicher

Bei dem heutigen Microsoft Cloud Briefing in San Franciso kündigte Microsoft einige Neuerungen für ihre Cloud an.

Johnny Graber: Kurz-Tipp: Responsive Design einfach testen mit Window Resizer

Wer heutzutage Webapplikationen erstellt wird kaum um das Thema Responsive Design herum kommen. Dabei geht es um die Anpassungsfähigkeit einer Webseite an verschiedene Bildschirmgrössen. Schliesslich soll die Anwendung nicht nur auf dem Laptop bedienbar sein sondern auch auf dem Smartphone zum Verweilen einladen.

Die technische Seite wird durch Frameworks wie Bootstrap gut abgedeckt und dürfte den meisten Entwicklern bekannt sein. Wenn es allerdings ums Testen der einzelnen Auflösungen geht stutzt man das Browserfenster meist von Hand zurecht. Dies mag zwar ein gangbarer Weg sein, doch ist dies mühsam und ungenau.

Viel einfacher und schneller ist es eine entsprechende Erweiterung für den Browser zu installieren. Davon gibt es für jeden Browser mehr als genug, doch kaum eine kommt an Window Resizer von Ionut Botizan für Chrome heran. Diese Erweiterung ist auf genau einen Zweck optimiert und lässt einem die voreingestellten Fenstergrössen um beliebige eigene Formate erweitern.

Window Resizer

Für mich gibt aber eine Tastenkombination den Ausschlag Window Resizer zu verwenden: Mittels [Strg] + [Umschalt] + [Abwärtspfeil] lässt sich sehr schnell durch die einzelnen Fenstergrössen durchschalten. Dies ist sehr praktisch wenn man nicht nur wissen will ob eine bestimmte Grösse funktioniert sondern ob alles noch wie gewünscht aussieht.

Hat man sich einmal an die damit gewonnene Flexibilität gewöhnt will man so eine Erweiterung nicht mehr missen.


Einsortiert unter:.Net, dnugBern, webDotNet Tagged: .Net, Beschleuniger, Web

Hendrik Lösch: Developer Openspace 2014

Einmal im Jahr zieht es eine Vielzahl von Softwareentwicklern nach Leipzig zum Developer Openspace. Wie jedes Jahr seit 2011, war auch ich wieder mit dabei und bin mit einem Kopf voller Ideen, sowie neuer Sichtweisen nachhause gefahren. Die Besonderheit des Openspaces ist dabei, dass die Agenda zu Beginn der eigentlichen Veranstaltung auf Basis der Wünsche […]

codefest.at [MS]: Zeige deine Innovation Power mit Pioneers Discover!

Pioneers ist das führende internationale Startup Netzwerk, das globale Investoren, Startups und Corporations miteinander zusammenbringt.

Wenn ihr Developer oder ein Startup mit tollen technologischen Innovationen oder Lösungen seid, so habt ihr jetzt eine super Gelegenheit euch zu präsentieren und euch bzw euer Unternehmen mit den richtigen Leuten zu vernetzen.

Pioneers Discover veranstaltet vom 9. – 11. Dezember 2014 einen Hackathon gemeinsam mit einer namhaften österreichischen Bank, bei dem alle teilnehmenden Startups die Möglichkeit haben, ihren technologischen Vorsprung und ihre Innovationspower zu zeigen und in Folge vielleicht wertvolle Kunden und Partner zu bekommen. Weiters gibt es lukrative Preise für die Teilnehmer, die von Devices bis hin zu Freikarten für das angesehene Pioneers Festival reichen.

Dieser Hackathon ist dem Thema “FinTech” gewidmet, das heißt, wenn ihr Lösungen entwickelt, von denen ihr glaubt, dass man diese im Finance Bereich anwenden kann, dann könnt ihr euch für den Hackathon bewerben.

Hier sind einige Beispielkategorien in denen eure Lösungen beheimatet sein könnten:

  • Kaufmännische Services: Web Shop Integration, Buchhaltung, etc.
  • Kontosicherheit und Datenschutz: Hier geht es technische Lösungen, wie Sicherheit, Kontozugang, biometrischer Zugang, Encryption.
  • Kontoschutz: Möglichkeiten betrügerische Aktionen am Konto zu entdecken oder Community-gesteuerte Infos über Händler einbauen.
  • Shopping Assistent/Erinnerung: Über die GPS Position, Erinnerungen und relevante Informationen an den Benutzer über Push schicken.
  • Intelligente Ausgabenanalyse: Vergangene Ausgaben verwenden, um ein vorausschauendes Ausgabenprofil zu erstellen.
  • Inspirationen zu Investitionen: Verschiedene externe APIs und Services einbauen, um Investionsmöglichkeiten aufzuzeigen (social integration über crowdinvesting, social trading).
  • Kontaktmanager/Card Scanner: Möglichkeiten über Bankomatkarten neue Benutzer zu erstellen und Kontoinformationen hinzuzufügen.

Wenn ihr euch bewerben wollt oder weitere Fragen dazu habt, dann schreibt an discover@pioneers.io , oder ruft an: +43676 347 8608.

Martin Hey: Ein Wochenende beim Developer Open Space

An diesem Wochenende war ich beim Developer Open Space in Leipzig, der nun schon einige Male dort stattgefunden hat. Leider konnte ich auch dieses Jahr aus Zeitgründen nicht an den wirklich interessanten Workshops am Freitag teilnehmen, aber Samstag und Sonntag war ich vor Ort. 


Das Konzept ist recht einfach: Versammle eine Menge Entwickler und gib ihnen den Freiraum, selbst Themen zu bestimmen über die sie reden wollen. Was initial mal als .NET Open Space gestartet ist, hat sich in den letzten Jahren von der Technologie entfernt. Und so kommt es, dass inzwischen auch Entwickler mit dabei sind, die in anderen Technologien zu Hause sind, wie Java, Ruby, JavaScript und so weiter.

Welche Themen waren für mich interessant? Nun ja, dadurch, dass ich mich auch beruflich mit IoT beschäftige, fand ich die Wearables und Smarthome-Sessions sehr spannend. Als Freelancer/Geschäftsführer auch sehr interessant war die anschließende Session bei der es darum ging, gescheiterte Projekte zu analysieren und die Meinungen anderer zu hören, wie sie und auch ihre Auftraggeber damit umgehen. Leider war die Event Storming Session parallel, so dass ich bei dieser nicht dabei sein konnte. Weil auch wir oftmals vor Technologieentscheidungen stehen, besuchte ich anschließend die Session zum Thema NoSql vs. RDBMS in der diskutiert wurde, wann man welche Technologie sinnvollerweise einsetzt. Die für mich letzte Session des Tages hielt ich mit einigen Usergroup-Leads gemeinsam, in der wir zeigten, wie wir die Seite der .NET Usergroup Dresden aufgebaut haben (Jekyll auf Github). Es folgten noch zwei weitere Slots, aber die Zeit habe ich eher für entspannte Gespräche auf dem Hof genutzt. Der Abend endete dann in entspannter Atmosphäre und durchaus auch lustigen Gesprächen im Pub.

Der Sonntag lief recht ähnlich ab: interessante Sessions, spannende Gespräche in den Pausen oder nebenher. 

Es war für mich wieder ein Erlebnis, mit den ganzen Leuten quer aus dem DACH-Raum fachsimpeln und Gedanken austauschen zu können. Und auch wenn ich eher Technologie oder Management-Sessions besucht habe, so gab es auch dieses Jahr wieder Sessions zu Softskill und Psychologie - es ist also für jeden etwas dabei. Und mit 200 Anmeldungen zählt dieser Event nun schon zu den größeren Konferenzen.

Karsten Kempe: Scrum mit Visual Studio Online

channel-9-logoLetzte Woche war ich zu Gast bei Microsoft in Unterschleißheim und habe zusammen mit Daniel Meixner, einem Technical Evangelist, ein Video zum Thema “Scrum mit Visual Studio Online” aufgenommen. Dieses Video ist nun in der TechTalk Videothek auf Channel9 veröffentlicht worden, in der aktuelle Themen rund um die Microsoft Developer Plattform vorgestellt werden. Viel Spaß beim Anschauen.

Natürlich ist SCRUM kein brandneues Thema in der Software-Entwicklung, viele Teams arbeiten bereits sehr erfolgreich mit diesem Framework. Aber gerade weil man mit SCRUM sehr erfolgreich Software entwickeln kann, lohnt sich immer ein Blick auf diese agile Arbeitsweise.

Der TechTalk zeigt wie der Team Foundation Server, Teams in Ihrer täglichen Arbeit unterstützen kann. Angefangen bei der Aufnahme von Anforderungen, über deren Planung, während des Daily Stand-Ups, bis hin zur Kapazitätsplanung einzelner Team-Mitglieder. Aber seht selbst.

TechTalk mit Daniel Meixner von Microsoft zum Thema “Scrum mit TFS/VSO”

[1] http://channel9.msdn.com/Blogs/TechTalk/Episode-15-Scrum-mit-Team-Foundation-Server-und-Visual-Studio-Online

Fabian Deitelhoff: Blogparade digitalLEBEN: zehn Fragen und meine Antworten dazu

Mit diesem Beitrag möchte ich zum ersten Mal bei einer Blogparade mitmachen. Das Thema ist #digitalLEBEN, was auch gleichzeitig der Hashtag auf Twitter ist. Initiiert hat die Blogparade die SPD mit diesem Blogpost zum Thema.

Mir geht es hier absolut nicht um eine Unterstützung der Partei, da ich diesen Blog gerne frei von Politik jeglicher Art halten möchte. Egal um welche Partei es sich handelt. Aufmerksam geworden bin ich durch den unten stehenden Tweet von Nico Lumma.

Bei der Blogparade geht es darum, zehn Fragen zum digitalen Leben zu beantworten. Die Fragen sind im Blog der SPD im Beitrag “Blogparade zu #digitalLEBEN” zu finden. Ebenso wie ein paar Informationen zum Ablauf. Die Blogparade geht noch bis zum 31. Oktober. Jetzt aber zu den Fragen und meinen Antworten, die sich hinter dem Weiter-Button verstecken :)

Die zehn Fragen und meine Antworten

  1. In einer digitalen Welt zu leben, bedeutet für mich…
    Vernetztes Leben. Mit all seinen Vorteilen wie schnelle und weitestgehend günstige Kommunikation, sowie immer verfügbare Informationen. Aber auch mit all seinen Nachteilen wie andauernde Ablenkung und Erreichbarkeit.
  2. Mein Computer ist für mich…
    Arbeitsgerät und ziemlicher Lebensmittelpunkt. Zumindest wenn es um meinen Arbeitsrechner (Desktop) zu Hause geht. Mein Smartphone wird Stück für Stück reduziert. Da mache ich nur noch das nötigste mit, was zurzeit die ein oder andere Kurznachricht, Sport und (dabei) Musik hören ist.
  3. Wirklich gut! Die größte Chance durch die Digitalisierung ist…
    Ständiger Zugriff auf Informationen und Wissen. Arbeiten unabhängig vom Ort. Neue Tätigkeitsfelder und Möglichkeiten, wie beispielsweise das Self-Publishing beziehungsweise alle Berufe im Allgemeinen, die mit der Digitalisierung zu tun haben.
  4. Bedrohlich! Wir müssen aufpassen, dass…
    Unsere Daten auch unser Eigentum bleiben und Konzerne damit nicht machen können was sie wollen. Und das der Staat nicht immer weiter in unsere Privatsphäre eingreift, als das eh schon der Fall ist. Wir sind nicht alle generell verdächtig!
  5. Die Digitalisierung verändert mein Leben durch…
    Das ortsunabhängige Arbeiten, die Softwareentwicklung und durch die ständig verfügbaren Informationen. Ohne die Digitalisierung müsste ich mir einen anderen Job in einer ganz anderen Branche suchen. Allerdings verändert es mein Leben auch durch die ständige Erreichbarkeit, die schnell zu Dauerstress führen kann.
  6. Chatten mit den Enkeln, Einkaufen per Mausklick, Arbeiten ohne feste Bürozeiten. Was bringt die Digitalisierung für Familien und Ältere?
    Die Digitalisierung bringt die kostengünstige Kommunikation, die obendrein immer verfügbar ist. Beispielsweise der kostenfreie Skype-Anruf von Deutschland nach Kanada. Ganz grundsätzlich bringt die Digitalisierung mehr Flexibilität in den Alltag von Familien und Älteren.
  7. Programmieren in der Grundschule, das gesamte Faktenwissen der Welt in der Suchmaschine. Wie sollte Bildung der Zukunft aussehen?
    Bildung muss sich komplett wandeln. Weg vom Faktenwissen und reinen Auswendiglernen von Informationen, hin zu dem strukturierten Methodenwissen, wie neue Situationen gemeistert werden können. Inklusive der Einbeziehung von Multimedia und Medienkompetenz
  8. An jedem Ort arbeiten können und ständig erreichbar sein. Was bedeutet das für Arbeit im Digitalen Zeitalter?
    Auf der einen Seite bedeutet das für mich ganz klar mehr Flexibilität. Ich kann arbeiten von wo aus ich möchte und im besten Fall auch für wen ich möchte, wenn das meine Tätigkeit erlaubt. Auf der anderen Seite bedeuten diese Möglichkeiten aber auch deutlich mehr Stress. Überall arbeiten und erreichbar zu sein heißt oft auch an jedem Ort Zeitdruck ausgesetzt zu sein. Deswegen muss es so sein, dass überall arbeiten zu können nicht gleichbedeutend ist mit auch tatsächlich überall zu arbeiten.
  9. Was müssen wir im digitalen Zeitalter tun, damit unsere Wirtschaft erfolgreich bleibt?
    Digitales darf nicht mehr außen vor stehen sondern muss überall integriert werden. Ängste bei der Bevölkerung abbauen indem beispielsweise Medienkompetenz schon in der Schule ein Thema ist. Es darf zudem keine Trennung mehr zwischen sogenanntem realem und digitalem Leben mehr geben. Bei Personen, die nicht mit dem Internet aufgewachsen sind, gibt es diese Trennung noch. Bei jungen Menschen absolut nicht. Dort verschmelzen die beiden Welten.
  10. Die Digitalisierung schafft Chancen und birgt Risiken. Von der SPD erwarte ich, dass…
    Sie sich mit dem Thema Netzpolitik auseinandersetzt und neue Technologien nicht von vornherein verteufelt. Das Internet bietet eine Menge Chancen und Deutschland muss digitaler werden. Interdisziplinär und unabhängig von der konkreten Partei.

Das waren meine Antworten zu den zehn Fragen auch schon. In diesem Sinne wünsche ich mir ein Deutschland mit mehr Lust auf digitales, Technologie und Innovation. Einen deutlich stärkeren Breitbandausbau und mehr Mitmenschen, die beim Thema Internet nicht gleich an Kriminalität, Gefahren und Jobverlust denken.

Sven Hubert: Agilität ohne Product Backlog Items oder User Stories? – Agile Entwicklung mit dem TFS und dem CMMI-Template

Wie haben wir uns in der Softwareentwicklung an die agilen Methoden gewöhnt. So schön leichtgewichtig, transparent und in Sprints ungestört arbeiten. Product Backlog Items oder User Stories machen den Projektalltag um einiges angenehmer.

Doch was, wenn es nicht ausreicht, nur noch den verbleibenden Aufwand zu betrachten? Was, wenn man Ursprungsschätzung und die bereits investierte Zeit betrachten möchte? Wo führt es hin, wenn ein Entwicklungsprozess in einer Branche mehr Informationen erfordert, als sie die leichtgewichtigen Vorgehensweisen bereitstellen? Müssen wir uns in diesen Szenarien etwa von der liebgewonnenen Agilität verabschieden?

Häufig führt die Diskussion zur Frage, welches Prozessmodell man in seiner ALM-Toollandschaft wählt. Der Artikel im OBJEKTspektrum Online Themenspecial Agility zeigt am Beispiel des Team Foundation Servers, wie man zugunsten der Informationsvielfalt das CMMI-Process-Template des TFS verwenden und dabei trotzdem einen agilen Entwicklungsprozess leben kann.

>> Lesen Sie den Artikel von Stefan Mieth und Thomas Rümmler hier.

Agilität ohne Product Backlog Items oder User Stories? – Agile Entwicklung mit dem TFS und dem CMMI-Template is a post from: AIT Blog

Thomas Bandt: Review: Developer Open Space 2014 in Leipzig

Während ich diese Zeilen schreibe, sitze ich gerade auf der Rückfahrt vom diesjährigen #devspace, dem insgesamten 7. von Torsten Weber, Alexander Groß und Marcel Hoyer (und Helfern) organisierten Open Space in Leipzig.

Trotz Verkehrschaos durch einen Bahnstreik hatten sich an diesem Wochenende tatsächlich rund 200 Leute zusammengefunden, um sich in ihrer Freizeit mit anderen um überwiegend technologische Themen auszutauschen. Oder wie man es auch formulieren kann: Mit den Homies abzunerden ;-).

Spannend zu sehen war schon am zweiten Tag bei der Session-Planung, dass der größte Raum beinahe aus allen Nähten platzte. Dabei waren dieses Mal viele neue Gesichter, die teilweise auch keinen Hintergrund im Microsoft-Stack haben, aus dessen Umfeld die ganze Veranstaltung ja ursprünglich mal entsprungen ist.

So war dann auch der Themenmix recht bunt und für meinen Geschmack auch wieder deutlich spannender als noch in den letzten 2-3 Jahren.

Nachfolgend mal ein kleiner Abriss aus meiner Warte.

F# Workshop von Max

F# = The not so new but cool kid on the block. Nachdem ich mir im Büro immer häufiger erzählen lassen muss ;-), wie toll funktionale Programmiersprachen sind, wollte ich da mal reinhören. Für jemanden, der aus der objektorientierten Denkweise kommt und mit seiner primären Sprache C# ganz happy ist, ist das vollkommen abweichende Mindset hinter F# schon eine schwer zu knackende Nuss.

Leider konnte ich dem Workshop nur am Anfang beiwohnen, aber immerhin so lange, um zu sehen wie bei ein wenig Spielen mit der String Calculator-Kata allmählich Licht ins Dunkel gebracht wurde, wobei mir insbesondere das Refactoring beim Verständnis half.

Das Zeug kompilierte zwar nicht in Xamarin Studio mit Mono, wohl aber in Visual Studio. Weiß der Geier … Fazit: weiter beobachten ;-).

Smart Home

Ein Thema, mit dem ich (als Mieter einer Wohnung naturgemäß) noch nicht so besonders in Berührung gekommen bin, sieht man von einem gescheiterten Versuch, Tado im Büro zu installieren, einmal ab.

Ziemlich überraschend war für mich, wie viele schon damit experimentieren bzw. es tatsächlich in ihren Häusern und teilweise auch Wohnungen einsetzen. Von Push-Notifications beim Klingeln an der Haustür, über intelligentes Ein- und Ausschalten von Geräten ist alles dabei.

Diskutiert wurden auch verschiedene geschlossene und offene Systeme, (potentielle) Auswirkungen auf die Sicherheit etc.Sehr spannend.

Universal Apps Best Practices

Zwei der gegenwärtig drei Entwickler für die Microsoft-Versionen von Wunderlist zeigten, wie sie in ziemlich kurzer Zeit eine “Universal App” für Windows (Desktop/Tablet) und Windows Phone bauen konnten, welche Teile sich wie teilen lassen etc. Interessant, was Microsoft da entwickelt – ein Teil, mit dem ich bislang überhaupt nicht in Berührung gekommen bin (fragt einfach keiner nach ;-)).

NoSQL sucks vs. NoSQL for Devs

Der etwas provozierende erste Teil des Session-Titels stammt von mir, war natürlich nicht so verallgemeinernd gemeint ;-).

Dennoch wollte ich die Gelegenheit nutzen, und meine negative Praxis-Erfahrung mit MongoDB und RavenDB einmal vorzustellen und mir ggf. zeigen zu lassen, was wir hätten besser machen können.

Kurzum kann man sagen, dass man mit NoSQL-Lösungen immer mit Eventual Consistency leben und dann auch anwendungsseitig dafür Sorge tragen muss, diese zu erreichen – weil klassische ACID-Transaktionen eben gar nicht funktionieren (z.B. mit MongoDB), oder nur eingeschränkt (z.B. mit RavenDB). Kalkuliert man diesen Aufwand mit ein, fährt man mit klassischen RDBMS zumindest zu Projektstart wohl meist besser. Ob man dann nun gewohnt normalisiert oder seine eigene, pragmatische Lösung, z.B. über Key/Value, darauf aufbaut, steht noch mal auf einem anderen Blatt.

Letztendlich gibt es aber auch Anwendungsfälle, wo NoSQL, vielleicht auch nicht als einziges System, die ideale Besetzung für eine Problemstellung darstellt. Aber auch hier wurde kontrovers diskutiert …

Fazit, na klar: it depends …

Xamarin

Interessanterweise ist Xamarin in diesem Umfeld noch immer kein Mainstream-Thema. Wenige haben konkret damit entwickelt und Erfahrungen gesammelt, nur ein paar mehr sind interessiert und tasten sich gerade vor.

Speziell Xamarin.Forms weckt aber Interesse, wobei wir uns da einig waren: noch relativ buggy, noch etwas abwarten.

Zukunft des Microsoft-Stacks

Noch eine von mir vorgeschlagene Session. Ich wollte einmal ein Stimmungsbild einfangen, was die Arbeit und die Zukunftsperspektiven von ASP.NET etc. anbelangt.

Nicht erstaunlich: so ziemlich alle sind mit den Tools (sehr) zufrieden und sehen in absehbarer Zukunft auch keine Probleme darin, damit Geld zu verdienen. Insbesondere .NET ist nicht hip und ganz klar ein (Enterprise-)Nischenthema, wenn man die gesamte Entwicklungswelt betrachtet und hier gerade auf den Webbereich schaut, dafür scheint aber die Nachfrage nach guten Entwicklern und damit auch das Niveau der Tagessätze weiterhin hoch zu sein. Auch wenn der ein oder andere eben noch WebForms klopfen muss.

TypeScript

Nachdem JavaScript zur alles dominierenden Sprache in der Webentwicklung geworden ist und sich erst in ferner Zukunft mit ECMAScript 6 einige wirklich heftige Schmerzen auflösen werden, kommt man immer wieder an den Punkt, über Alternativen nachzudenken.

Eine davon ist TypeScript, von Microsoft vor ziemlich genau zwei Jahren aus der Taufe gehoben.

Marius ging es in dieser Session darum, ebenso ein Stimmungsbild bei anderen Entwicklern abzuklopfen, was den Einsatz und die Praxiserfahrungen mit TypeScript angeht.

Wenn ich es richtig mitbekommen habe, wird es von niemandem [der Anwesenden] ernsthaft eingesetzt. Trotz der offensichtlichen Vorteile des TypeScript-Compilers und des gesamten Konzeptes dahinter sehe ich selbst zwei eher psychologische Hürden. Zum einen ist es ein Produkt von Microsoft, was für viele die Freiheit liebende Webentwickler ein Show-Stopper ist, zum anderen begibt man sich in eine Abhängigkeit zum Tooling, die man mit purem JavaScript schlicht und ergreifend nicht hat.

Klar wurde aber auch, dass es eine Schwelle bei sehr, sehr großen JS-Projekten gibt, an denen die Nachteile der Sprache dafür sorgen, dass sie kaum mehr wartbar sind.

Mein Gefühl: Besser auf Plain JS setzen. Zumindest so lange, bis der Druck wirklich groß wird.

Fazit

Schienen sich die .NET|Developer Open Spaces zuletzt eher zu Klassentreffen zu entwickeln, die ich gerne besuchte um abends 1-n Bierchen zu trinken, war es dieses Mal auch inhaltlich wieder interessant. Es gab zu den von mir besuchten und hier aufgeführten Sessions noch unzählige weitere, auf denen ich gerne gewesen wäre.

Es ist ganz spannend zu beobachten, dass sich die Schwerpunkte über die Jahre doch verschoben haben. Waren vor ein paar Jahren noch Themen wie “SharePoint” oder sogar “Lightswitch” auf der Agenda, gab es beim Session-Vorschlag “Entity Framework und WCF” dieses Mal schallendes Gelächter … etwas böse, aber irgendwie sehr vielsagend.

In diesem Sinne – bis zum nächsten Event.


| Kommentieren | © 2014 Thomas Bandt

codefest.at [MS]: Save the date for Build 2015

Microsoft hat vor kurzem Details über die die nächsten großen Konferenzen bekanntgegeben (siehe auch TechNet Blog:  Ein neuer Name für eine neue Konferenz: Microsoft Ignite Conference 2015). Seit kurzem stehen auch der Ort und der Termin für die nächste BUILD Conference fest, siehe buildwindows.com.

Die Build 2015 Conference wird von 29. April – 1. Mai 2015 (wieder) in San Francisco stattfinden. Veranstaltungsort (das Moscone Center) und Zeitraum (die erste Maiwoche) sind wieder gleich gewählt wie letztes Jahr.

image

Derzeit kann man sich in die Mailinglist der BUILD Conference eintragen um per E-mail über Neuigkeiten informiert zu werden – eine gute Idee…

image

Dieses Jahr gibt es zum Glück keine terminlichen Überschneidungen zu anderen Microsoft-Konferenzen. Hier ein Überblick über die nächsten großen Microsoft Konferenzen in USA:

  • Convergence 2015 in Atlanta, 16. – 19. März 2015, die Konferenz für Microsoft Dynamics Produkte.
  • //Build in San Francisco, 29. April – 1. Mai 2015, Technologien und Plattform-Neuigkeiten für Developer
  • Microsoft Ignite in Chicago, 4. – 8. Mai 2015, die neue Microsoft “Enterprise Tech Conference”
  • Worldwide Partner Conference in Orlando,12. – 16. Juli 2015, die Microsoft Partner Konferenz

Save the Date(s)!

Roberto Bez: Emmet in Sublime Text

Egal, welcher Texteditor gerade verwendet wird – die Chance, dass es für diesen ein Emmet Plugin gibt, ist ziemlich groß. Wenn das der Fall sein sollte, dann wird dieses Werkzeug für das eine oder andere “Yeah, geil!” sorgen.

Emmet in SublimeText installieren

Um Emmet in SublimeText zu installieren muss als aller erstes Package Control für SublimeText installiert werden. Der auf der Webseite gefundene Code muss dafür einfach in die Console von SublimeText (ctrl+`oder View > ShowConsole) eingefügt werden.

Nach einem Neustart von SublimeText kann Emmet über das Package Control – ctrl+shift+p (Windows, Linux) oder cmd+shift+p (OS X) – mit dem Befehl install package installiert werden.

Einführung in Emmet

Jeder Entwickler weiß, dass das Tippen von HTML Code viel unnötige Zeit in Anspruch nimmt. Das muss aber eigentlich gar nicht sein, denn Emmet hilft mit Snippets und Abbreviations (Abkürzungen) das Schreiben von HTML und CSS Code deutlich zu beschleunigen:

div.container

Einmal auf die Tab-Taste:

<div class="container"></div>

Diese Abkürzung geht mit .container noch etwas kürzer – da Emmet implizit von einem div-Element ausgeht.

Damit lassen sich alle möglichen Konstrukte bilden: Von children bis siblings, von Nummerierungen bis zu eigenen Attributen. Beispielsweise kann mittels einer html:5 oder ! Abkürzung ein komplettes HTML5 Dokument erzeugt werden:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

</body>
</html>

Es gibt noch viele weitere Abkürzungen. Um ein paar Beispiele zu nennen:

Abkürzung Ergebnis
            script:src
        
            <script src=""></script>
        
            link:rss
        
            <link rel="alternate" type="application/rss+xml" title="RSS" href="rss.xml">
        
            input:hidden
        
            <input type="hidden" name="">
        
            table+
        
<table>
    <tr>
        <td></td>
    </tr>
</table>
        
            select+
        
<select name="" id="">
    <option value=""></option>
</select>
        


Child/Parent/Sibling-Elemente mit Emmet

Mit Emmet ist es ein Kinderspiel, beispielsweise Unterelemente für eine Liste zu erzeugen:

ul>li*3

Wird zu:

<ul>
    <li></li>
    <li></li>
    <li></li>
</ul>

Während das &gt-Zeichen angibt, dass es sich um Kind-Elemente handelt, kann mit einer *3 Abkürzung das Ergebnis um ein vielfaches dupliziert werden. Der aktuelle Counter kann über $ abgefragt werden, wenn dieser denn benötigt wird:

ul>li.itemClass$*3

Wird zu:

<ul>
    <li class="itemClass1"></li>
    <li class="itemClass2"></li>
    <li class="itemClass3"></li>
</ul>

Auf das Parent-Element zu erreichen, wird ein ^ verwendet:

div>ul>li*3^div.container

Wird zu

<div>
    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <div class="container"></div>
</div>

Mit einem + können Elemente auf der Selben Ebene hinzugefügt werden:

div>label+button

Wird zu:

<div>
    <label for=""></label>
    <button></button>
</div>

Custom Text / Attributes in Emmet

Mittels {} kann ein beliebiger Text angegeben werden:

div>label{Name:}+input+button{Absenden}

Wird zu:

<div>
    <label for="">Name:</label>
    <input type="text">
    <button></button>
</div>

Und ebenfalls eigene Attribute sind problemlos mit [for="name"] möglich:

form>label[for="name"]{Name:}+input#name+button{Absenden}

Wird zu:

<form action="">
    <label for="name">Name:</label>
    <input type="text" id="name">
    <button>Absenden</button>
</form>

Gruppierungen

Wenn Konstrukte – beispielsweise mit vielen Child/Parent Angaben – zu komplex werden, können diese mit Klammern gruppiert werden:

div>(ul>li*3)+h2+(ul>li*4)

Wird zu:

<div>
    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <h2></h2>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</div>

Enter Abbreviation

Wenn mehrere Zeilen im Editor markiert sind, können diese mittels ctrl+alt+enter (Enter Abbreviation) innerhalb von anderen Elementen gewrapped werden. Dies macht beispielsweise bei einer Navigation Sinn:

Home
About
Contact

ctrl+alt+enter

div>ul>li*>a[title=$#]{$#}

Ergibt:

<div>
    <ul>
        <li><a href="" title="Home">Home</a></li>
        <li><a href="" title="About">About</a></li>
        <li><a href="" title="Contact">Contact</a></li>
    </ul>
</div>

Wie bereits zuvor erwähnt werden mit * die Elemente wiederholt, mit $# hingegen das aktuelle der markierten Elemente eingefügt.

Alles in allem

Selbst eine komplette HTML5 Seite, wie das folgende Beispiel zeigt, kann über die gezeigten Abkürzungen und Snippets erzeugt werden:

Sublime Text - Emmet Plugin

html:5>(header>nav>ul>li*4>a)+(.content>article*2>h1+p>lorem15^aside.sidebar)+(footer>p{Copyright 2014})+script:src

Wird zu:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <header>
        <nav>
            <ul>
                <li><a href=""></a></li>
                <li><a href=""></a></li>
                <li><a href=""></a></li>
                <li><a href=""></a></li>
            </ul>
        </nav>
    </header>
    <div class="content">
        <article>
            <h1></h1>
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eaque assumenda id adipisci amet earum, tenetur?</p>
            <aside class="sidebar"></aside>
        </article>
        <article>
            <h1></h1>
            <p>Dolorem odio ab dicta minus, qui molestias! Asperiores delectus sint debitis illum numquam tempore veritatis.</p>
            <aside class="sidebar"></aside>
        </article>
    </div>
    <footer>
        <p>Copyright 2014</p>
    </footer>
    <script src=""></script>
</body>
</html>

Wie das Cheat-Sheet zeigt, bietet Emmet noch viele weitere Abkürzungen.

Was hast Du mit Emmet so für Tricks auf Lager? Zeig es in den Kommentaren :)

ppedv Team Blog: Windows 10: Virtuelle Desktops

Seit 30. September 2014 stellt Microsoft allen Usern eine kostenlose Vorab-Version (Technical Preview) von Windows 10 zur Verfügung. Ein neues Feature, das die nächste Windows-Version mit sich bringt, sind die sogenannten “Virtuellen Desktops”.

Mit den virtuellen Desktops ist es nun möglich geöffnete Programme auf mehrere Desktops zu verteilen – das kann sehr hilfreich sein, wenn man nur einen Monitor hat, man jedoch z.B. mit mehreren Programmen gleichzeitig arbeiten und zwischen diesen hin und her springen muss.

Einen neuen Desktop kann man über das Fenster-Icon, das sich in der Taskleiste rechts neben dem Lupen-Icon befindet, erzeugen.

Windows 10-3

 

 

Danach einfach auf das kleine schwarze Fenster mit dem +-Zeichen klicken.

Um zu einem anderen Desktop zu wechseln bzw. einen Überblick über alle existierenden Desktops zu erhalten, ebenfalls auf das Fenster-Icon in der Taskleiste klicken.

Windows 10-4

Fährt man mit der Maus über ein Vorschau-Fenster eines Desktops, dann wird dieser in der Mitte des Bildschirms etwas vergrößert dargestellt.

Allerdings besitzt nicht jeder Desktop eine eigene Taskleiste. Damit hat man in der Taskleiste die Icons aller geöffneten Programme, die sich auf den unterschiedlichen Desktops befinden. Befindet sich ein Programm allerdings auf einem anderen Desktop als auf dem aktuell Aktiven, dann wird dies durch eine kleine Leiste unter dem Icon symbolisiert.

Windows 10-5

 

Durch die Tastenkombination “ALT + Tabulator” erhält man eine Übersicht über alle geöffneten Programme – auch die, die sich auf einem anderen Desktop befinden. Drückt man mehrmals die Tabulator-Taste (bei gedrückter ALT-Taste), wird das nächste Programm markiert (erkennbar am weißen Rahmen). Erst wenn man die ALT-Taste loslässt, wechselt man zu dem entsprechenden Desktop und dem ausgewählten Programm.

Windows 10-6

 

 

Ein geöffnetes Programm auf einen anderen Desktop zu verschieben, ist (bislang) leider nicht möglich.

ppedv Team Blog: Microsoft bietet 4 kostenlose Zertifizierungsprüfungen für Azure und Office365

Microsoft bietet einem Blog-Beitrag von Andrew Parson zufolge aktuell Prüfungen über Prometric kostenlos an. Damit lassen sich 2 Zertifizierungen erreichen:

Für den Microsoft Certified Specialist in Azure muss mindestens eine dieser beiden Prüfungen abgelegt werden:

  • 70-532: Developing Microsoft Azure Solutions

  • 70-533: Implementing Azure Infrastructure Solutions

 

 Um den Microsoft Certified Solutions Associate in Office 365 zu erreichen, müssen die beiden folgenden Prüfungen abgelegt werden:

  • 70-346: Managing Office 365 Identities and Requirements

  • 70-347: Enabling Office 365 Services

 

Die Voucher zum kostenlosen Ablegen der Prüfungen können von hier bezogen werden: http://borntolearn.mslearn.net/goodstuff/p/mcp.aspx

Das Angebot ist nur begrenzt gültig und maximal bis zum 31. Dezember 2014 verfügbar – schnell sein ist also die Devise!

PS: 70-532 ist ein Beta-Examen!

Holger Schwichtenberg: Rabattcode für Software Quality Days 2015

Die Software Quality Days 2015 finden vom 20. bis 23. Januar 2015 in Wien statt.

Golo Roden: Nachgelegt: Docker-Container im laufenden Betrieb untersuchen, Teil 2

Die neue Version 1.3 von Docker ist verfügbar und enthält interessante Neuerungen. Unter anderem kennt Docker nun ein neues Kommando, um Containern im laufenden Betrieb neue Prozesse hinzuzufügen. Das ersetzt das im vorherigen Blog-Eintrag beschriebene Werkzeug nsenter.

ppedv Team Blog: Windows 10 – Apps im Fenstermodus

Schon unter Windows 8.1 Update 1 gab es die Möglichkeit, Apps über die Titelleiste direkt zu beenden. Zusätzlich konnte man Apps an die Taskbar anheften und über Alt + Tab zwischen Programmen und Apps wechseln. Diese Funktionen werden mit Windows 10 jetzt noch erweitert, sodass Sie nun Apps parallel zu normalen Programmen im Fenstermodus betreiben, und diese genauso minimieren und maximieren können.

fenster

Sie können außerdem die sogenannte Snap-Funktion nutzen, um Anwendungen an bestimmten Stellen des Desktops anzupinnen. Dazu müssen Sie die Anwendung oder App einfach nur in die gewünschte Ecke oder Rand des Desktops ziehen. Windows 10 macht Ihnen hierbei Vorschläge für eine möglichst effiziente Anordnung. Möglich sind hierbei bis zu vier Anwendungen, was gerade bei größeren Bildschirmen im Vergleich zum Vorgänger ziemlich praktisch ist.

veteilt

Durch dieses neue Feature sollen auch die Grenzen zwischen Apps und den klassischen Anwendungen immer weiter verschwimmen. Microsoft will auf lange Sicht diese Grenzen komplett auflösen, sodass es nur noch so genannte “Universal Apps” gibt.

full

ppedv Team Blog: Fileupload mit Angular.JS

Eigentlich müsste es heißen: Der Kampf des Dateiuploads gegen Angular.JS. Das Framework unterstützt uns dabei in keiner Weise. Wir müssen es an mehreren Stellen sogar austricksen.

Die Programmieraufgabe umfasst folgende Bauteile

  • Webservice, der die Datei entgegennimmt und speichert
  • HTML User Interface mit Input Type File
  • JavaScript Code für Ajax und Scope

Um volle Kontrolle über die hochgeladenen Dateien zu haben, bezüglich Typ, Größe oder Speicherort, bleibt nur ein Service am Web Server. In diesem Fall ist dieser per ASP.NET Web API und VB.NET erstellt.

   1:  Public Class fileuploadController
   2:      Inherits ApiController
   3:      <HttpPost>
   4:      Public Sub UploadFile()
   5:          If HttpContext.Current.Request.Files.AllKeys.Any() Then
   6:              Dim f = HttpContext.Current.
Request.Files("UploadedImage")
   7:              If f IsNot Nothing Then
   8:                  Dim fp = Path.Combine(
HttpContext.Current.Server.MapPath("~/upload"),
Path.GetFileName(f.FileName))
   9:                  f.SaveAs(fp)
  10:              End If
  11:          End If
  12:      End Sub
  13:  End Class

 

Das UX wird aus optischen Gründen auf einen Button reduziert, der den Betriebssystem-File-Open-Dialog öffnet und beim Schließen den Upload anstößt. Dadurch können wir das UI per Bootstrap schöner stylen, da die leere Textbox des Type File nicht angezeigt wird. Allerdings muss ein zweiter Button das Click Event des Fileupload-Buttons auslösen.

Das geschieht in Zeile 6 und zeigt bereits eine Reihe von Problemen mit Angular. Eigentlich sollte der Onclick-Handler nicht im HTML-Code auftauchen. Die Alternative ist eine Angular-Direktive mit rund 15 Zeilen Code, mit der dann auch noch ein zusätzliches Attribut in das Input-Element gelegt werden muss. Das ist mehr Aufwand und der Code ist dadurch leider auch nicht besser lesbar.

Außerdem kann man leider die DOM-Selector-Eigenschaften nicht verwenden, auch wenn ein angular.element(‘#id’) uns dies glauben lässt. Damit dieser Code funktioniert, muss erst noch jQuery eingebunden werden, da JQLite diese Selektoren nicht beinhaltet. Dann könnte man aber gleich $(‘#id’) nutzen. Es drängt sich die Frage auf, warum das komplette jQuery Framework überhaupt Overhead erzeugen soll, wenn es die benötigte JavaScript-Funktion bereits gibt. Also wird hier document.querySelector verwendet, um das Click Event durchzureichen.

Noch schlimmer wird es, wenn man aus normalem JavaScript auf das Angular Framework zugreifen muss. Dies ist hier nötig, da die Value Eigenschaft, die die ausgewählte Datei beinhaltet, nicht per ng-model bindbar ist. Auch für dieses Problem lässt sich eine umfangreiche Direktive schreiben oder einfach das OnChange-Event auf ein Event des $Scope durchreichen (Zeile 4)

   1:  <body  ng-controller="uploadController">
   2:      <label for="fileUpload"></label>
   3:      Select <input id="fileUpload" type="file" 
style="visibility:hidden;position:absolute;top:0;left:0"
   4:         onchange="angular.element(this).scope().onChange(this)" />
   5:   
   6:      <input id="btnUploadFile" type="button" value="Upload File"
onclick="document.querySelector( '#fileUpload').click()" />
   7:  <img id="progress" src="img/upload-indicator.gif"  ng-show="warten"/>

 

image

Zusätzlich wird noch ein animiertes GIF verwendet, das die Uploadaktivität visualisiert und hier durchaus elegant per ng-show an die Eigenschaft Warten des $scope gebunden wird.

Zuletzt muss noch die eigentliche Upload-Logik geschrieben werden. Dazu wird ein Formdata-Objekt erstellt und mit den Datei-Meta-Informationen und dem Stream gefüllt. Dann wird per $http der Post auf den Upload-Service angestoßen. Um ein Problem mit Angular und dem benötigten Multipart-Formdata-Header zu umgehen, fügen wir in Zeile 17-19 Workaround-Code ein.

   1:  var app=angular.module("App",[])
   2:    .controller("uploadController", function ($scope,$http) {
   3:     $scope.warten = false;
   4:     $scope.onChange = function (dateien)
   5:      {
   6:        $scope.warten = true;
   7:        var file = dateien.files[0];
   8:        var data = new FormData();
   9:        data.append('UploadedImage', file);
  10:        data.append('FileName', file.name);
  11:        data.append('fileSize', file.size);
  12:        data.append('fileType', file.type);
  13:   
  14:        $http
  15:          .post('/api/fileupload/uploadfile' , data,
  16:                 {
  17:                   transformRequest: angular.identity,
  18:                    headers: { 'Content-Type': undefined }
  19:                  })
  20:                 .success(function () {
  21:                       $scope.warten = false;
  22:                  })
  23:                 .error(function () {
  24:                       $scope.warten = false;
  25:                          alert('error');
  26:                      });
  27:              };
  28:     });

Code-Inside Blog: OpenRA: Open Source Command & Conquer written in C#

If you are familiar with Dune 2 or the Command & Conquer Serie you will definitely love OpenRA.

Project Description

x

From the project site:

OpenRA is a Libre/Free Real Time Strategy project that recreates the classic Command & Conquer titles.

We include recreations of C&C (Tiberian Dawn), C&C: Red Alert, and Dune 2000. These are not intended to be perfect copies, but instead combine the classic gameplay of the originals with modern improvements such as unit veterancy and the fog of war.

OpenRA’s primary focus is cross-platform multiplayer between Windows, OS X, and Linux; however, we include a number of single-player missions, and also support skirmish games against AI bots.

Completely written in C# and on GitHub

I always wanted to take a deeper look at Games, but most Games are written in C/C++ or other crazy languages. OpenRA on the other hand is written in C# and is on GitHub - so Yeah!

x

Game Features

The Game consists of the whole Engine, including AI, Multiplayer, Scripting (interesting for Maps) and so on and the three different Mods:

  • Tiberum Dawn (Command & Conquer 1)
  • Red Alert (Command & Conquer 2)
  • Dune 2000

A Tiberum Sun Mod (the 3rd C&C) is currently under development. All games have been updated with “modern” RTS game elements - I definitely had great fun playing some rounds.

Coding Experience

The GitHub repo has a bunch of batch files and the Visual Studio Solution in it. Sometimes it can be a bit challenging to start and debug the game within Visual Studio, but make sure all dependencies are copied (via make dependencies) or try to switch branches. The best part is that the team is very active and is available via GitHub or in IRC. All you need to do is:

make all
OpenRA.Game.exe

Or run it in Visual Studio.

More information can be found here

This should build the solution and will start the game.

Platform neutral

You can also compile the Game with Xamarin or Mono Develop under OS X or Linux and you don’t need any expensive Visual Studio licence - the “Express”-Version should work, too.

The “Game-loop”

For me the biggest difference between a real Game and a “normal” business application is the Game loop - which is kinda crazy, because it’s a big while-loop. This loop is in charge for rendering and the logic. You can found the OpenRA Game loop in the Game.cs.

Interesting Stuff

If you look deeper at the code you will see some very cool stuff:

  • OpenGL Rendering
  • LUA Scripting
  • Modding via YAML
  • AI Stuff (also configured via YAML)
  • Working with the different assets from C&C & co.

Take a look

As I already said - if you are interested in Game Development, this could be a good start. There is also a special GitHub label for easy tasks if you want to contribute. You can also just enjoy this great game. I’m always open for a quick OpenRA match.

x

Happy Coding… or playing.

ppedv Team Blog: Preisänderungen und neue Features in Microsoft Azure

 

Microsoft stellt eine neue Serie von Standardinstanzen für virtuelle Maschinen und Clouddienste zur allgemeinen Verfügung. Die neue sogenannte D-Serie verfügt über lokale SSD-Platten und schnellere Prozessoren im Vergleich zur bisherigen A-Serie.

 

Die Instanzen sind für den normalen Gebrauch in den Versionen D1 mit 3,5 GB Speicher und 50 GB SSD-Platte bis hin zu D4 mit 8 Prozessoren, 28 GB Speicher und 400 GB SSD Platte verfügbar. Für speicherintensiven Gebrauch stehen vier unterschiedliche Instanzen beginnend bei D11 mit 14 GB Speicher und 100 GB SSD-Platte bis D14 mit 16 Prozessoren, 112 GB Speicher und 800 GB SSD zur Auswahl.

 

Eine detaillierte Preisinformation finden Sie unter: http://azure.microsoft.com/en-us/pricing/details/virtual-machines/.

 

Der Azure Redis Cache steht nun auch zur allgemeinen Verfügung. Dieser verteilte und verwaltete In-Memory Cachespeicher, basierend auf dem Open Source Projekt Redis Cache, gibt Ihnen Zugriff auf einen von Microsoft verwalteten sicheren und hochperformanten Speicher.

 

Der Cache wird in einer Basis- und Standardinstanz angeboten. Die Basisinstanz ist ein einziger Knoten, der sich sehr gut für die Entwicklung und für nichtkritische Arbeitsaufgaben eignet. Die Standardinstanz ist ein replizierter Cache bestehend aus zwei Knoten, für den auch ein Service Level Agreement besteht.

Detaillierte Preisinformationen finden Sie unter http://azure.microsoft.com/de-de/pricing/details/cache/.

 

Ansonsten hat Microsoft Ende September auch noch bei vielen weiteren Diensten in der Cloud die Preise gesenkt.  Eine komplette Übersicht dazu finden Sie unter http://azure.microsoft.com/en-us/updates/azure-pricing-updates/.

ppedv Team Blog: Einige Neuerungen im Windows Server 2015 (Technical Preview) bezüglich Hyper-V

In der aktuell verfügbaren Technical Preview auf den künftigen Windows Server (aktuell unter verschiedenen Namen bekannt, Windows Server 10, Windows Server 2015, Threshold, …) sind bereits einige Neuerungen in Hyper-V erkennbar. Einige davon möchte ich hier kurz ansprechen:

Production Checkpoints vs. Standard Checkpoints

Neben den bisherigen “regulären” Snapshots/Checkpoints (Im Windows Server 2015 als “Standard Checkpoints” bezeichnet) gibt es nun “Production Checkpoints”, die explizit für Maschinen im Produktiv-Betrieb gedacht sind.

Checkpoints1

Hierbei wird mit Hilfe der Datensicherungstechniken des Gastbetriebssystems (bei Windows via VSS, bei Linux über den Systempuffer) ein Snapshot erzeugt, der auf Konsistenz ausgelegt ist. Sollte ein solcher Snapshot nicht möglich sein, wird auf einen regulären Snapshot ausgewichen (bei dem eben keine Konsistenz aller Daten gegeben ist). Wurde der Production Snapshot erfolgreich erzeugt, wird eine entsprechende Meldung ausgegeben:

Checkpoints2

Für den Production Snapshot muss die Windows Server-Sicherung im Gast-System NICHT installiert sein:

Checkpoints3

Laufende Anwendungen werden bei dieser Snapshot-Technik nicht berücksichtigt. Nach einem Revert (Zurücksetzen auf einen Snapshot) muss die VM neu gestartet werden, Anwendungen, die zum Zeitpunkt des Snapshots liefen, gehen dadurch verloren. Allerdings verhält sich das Gast-Betriebssystem so wie nach einem regulären, sauberen Shutdown:

Checkpoints4

Hyper-V Manager Remote Management

Bereits frühere Versionen des Hyper-V Managers haben es ermöglicht, von einem System aus mehrere Hosts unter einer GUI zu verwalten. Dabei fand das Login auf den Remote-Servern immer mit den Credentials des interaktiv angemeldeten Benutzers statt. Der neue Hyper-V-Manager macht es jetzt möglich, alternative Login-Daten anzugeben:

HyperV1

Damit wird es möglich, Maschinen in fremden Domänen, in Workgroups oder in der DMZ anzusprechen.

ppedv Team Blog: Angular 1.3 .. is not a function

Die seit wenigen Tagen verfügbare Angular.JS 1.3 Version bringt eine Reihe von Änderungen mit sich, die auch in fertigen Anwendungen negative Auswirkungen haben können. In diesem Fall war es ein Code-Beispiel für meinen Angular.JS Workshop auf der ADC X in Mannheim und Wien. Das JavaScript Code Beispiel für eine globale Controller-Funktion liefert eine Fehlermeldung im F12 Browser Developer Tools Command Window.

image

Nicht, dass man damit schönen Code schreibt. Aber vorher funktionierte

   1:   <div ng-app="" ng-controller="personController">
   2:      ...
   3:  </div>
   4:   
   5:  <script>
   6:          function personController($scope) {
   7:              $scope.firstName = "John",
   8:              $scope.lastName = "Doe"
   9:          }
  10:  </script>

 

Jetzt muss ein Angular Modul und ein expliziter Controller darin definiert werden.

Wer unbedingt das alte Verhalten benötigt, kann dies erzwingen per

   1:   angular.module('myModule').config(['$controllerProvider',
function ($controllerProvider) {
   2:                        $controllerProvider.allowGlobals();
   3:          }]);

 

Das ist allerdings nicht besonders sinnvoll. Wenn man schon ein Modul anlegt, ist der Controller auch gleich gecoded.

Das Problem entsteht für Anfänger, da viele Blogs diesen kurzen Weg für Angular Sample Code verwenden.

codefest.at [MS]: Eindrücke vom Modern meets Retro - Gaming Hackathon

Dieses Wochenende haben wir mit 40 Teilnehmern einen tollen Gaming Hackathon hinter uns gebracht. Alle Teilnehmer haben einzeln oder in Teams tolle Spielprojekte ausgearbeitet, die sich wirklich sehen lassen können. Einige Impressionen gibt es bereits auf Twitter.

Bei der Preisverleihung hat sich herausgestellt, dass es zwei dritte Plätze mit gleich vielen Stimmen herausgebildet haben, also haben wir beiden drittplazierten Teams ein Windows Phone gegeben.

Die Aufnahmen zu den Vorträgen und Workshops werden in Kürze hier auf Codefest gestellt.

Alle, die noch nicht an unserer Game Development Challenge teilnehmen könnten, haben jetzt noch die Chance weitere tolle Preise zu gewinnen. Einfach bis zum 31. Oktober 2014 euer Spiel in den Windows Store oder Windows Phone Store stellen und gebt uns Bescheid. Wir werden dann am 9. Dezember 2014 die Gewinner ermitteln.

Mehr Infos zur Challenge findet ihr hier. Wir sind schon gespannt auf Eure Einreichungen.

ppedv Team Blog: Angular.JS heilt Krebs

Das könnte man meinen, wenn man Tweets verfolgt. Kaum ein kritisches Wort. Und wenn doch wird der Urheber einmal durch Twitter rauf und runter gebasht. So passiert einem Daniel Steigerwald. Man könnte durchaus Parallelen zu Religionsgemeinschaften ziehen. Kritiker werden darauf verwiesen, eben nicht richtig verstanden zu haben. Der einzige wahre Weg führt durch dieses Framework (und noch 42 andere, die man braucht).

Für die Schmerzen, die man jetzt gerade erleidet, wird eine wundersame Zukunft, oder Jungfrauen, in einem späteren Leben versprochen.

Lebensrealitäten werden ausgeblendet und Absurdes zu State of the Art erhoben. Gestandene Mittfünfziger erscheinen plötzlich im Superman-Kostüm an ihrem Arbeitsplatz in der Bank, um auch mal ein Superheld zu sein.

image

Natürlich nicht zu vergessen, dieser sagenhafte neue Sprit, der 20 Cent mehr kostet an der Tankstelle und bis zu 10% mehr Leistung verspricht. Super Power eben- darunter machen wir's nicht mehr.

image

Derartig ausgestattet flutscht das Leben quasi von selbst. Und den letzten Zweiflern wird der Open Source-getränkte Lappen in den Mund gestopft, um sie zum verstummen zu bringen.

Um meinen Sohn zu zitieren:

“Hallo! gehts noch?”

Angular ist eines von hunderten JavaScript Frameworks. JavaScript ist per Definition immer quelloffen. Es stammt von einer Firma, die ihr Geld mit dem Ausspähen Deiner Daten verdient. Angular ist bei weitem nicht perfekt und fehlerfrei. Es ist schwer zu erlernen. Die meisten Entwickler schreiben nach wie vor keinen Testcode. Es existiert schlicht, weil JavaScript eine geliebte Missgeburt aus dem letzten Jahrtausend ist.

Trotzdem kommt man bei Web-Applikationen nicht daran vorbei. Es wird breit verwendet und hat wirklich nette Funktionen. Aber Angular.js ist keine Silberkugel und heilt keine Programmiererkrankheit. Persönlich finde ich auch, dass man mit Angular und JavaScript im allgemeinen besonders scheusslichen unlesbaren Code schreiben kann.

Wer sich für das Thema aus einer weniger glorifizierenden Perspektive interessiert, kann an meinen beiden ganztägigen #ADCX Hands On Angular Workshops teilnehmen. Am 20.Oktober in Frankenthal http://adc.ms und am 6. November in Wien http://adc.ms/wien.

Golo Roden: Hereinspaziert: Docker-Container im laufenden Betrieb untersuchen

Einen Docker-Container zu starten fällt leicht. Doch was, wenn die darin ausgeführte Anwendung nicht wie gewünscht funktioniert? Einen Container im laufenden Betrieb zu untersuchen, scheint auf den ersten Blick nahezu unmöglich. Ein kleines Werkzeug schafft Abhilfe.

Marco Scheel: Links for 2014-10-13 [del.icio.us]

Jürgen Gutsch: AngularJS, File Upload und “Multipart/Form-Data”

Hin und wieder macht es Sinn, Dateien asynchron im Hintergrund auf den Server zu laden. Rein mit AngularJS ist das allerdings nicht ganz trivial und funktioniert vor allem nicht so wie erwartet.

Angenommen wir haben die Datei per JavaScript schon ermittelt (entweder aus einem Input-Element vom Type “file” oder per Drag&Drop) können wir die Eigenschaften auslesen und zusammen mit der Datei, in ein FormData Objekt packen:

var data = new FormData();
data.append('file', file);
data.append('fileName', file.name);
data.append('fileSize', file.size);
data.append('fileType', file.type);
               
$http
    .post('/api/DocumentApi/Upload/' + id, data)
    .success(function () {
        alert('success');
    })
    .error(function () {
        alert('error');
    });

Dieser Code läuft zwar fehlerfrei durch, allerdings kommt die Datei auf dem Server nicht an. Logisch der Content ist nicht als “Multipart/Form-Data” deklariert. Man sollte also meinen es müsse reichen den Content-Type entsprechend zu setzen:

$http
    .post('/api/DocumentApi/Upload/' + id, data, {
        headers: { 'Content-Type': ‘multipart/form-data’ }
    });

Leider gefehlt. Angular ignoriert diesen Content-Type komplett. Damit die Daten als “Multipart/Form-Data” versendet werden und die Datei auf dem Server ankommt, muss der Content-Type auf ‘undefined’ gesetzt werden. Ist das entsprechend gesetzt, versendet AngularJS die Daten als “Multipart/Form-Data”. (Nachzulesen auch hier bei Jenny Louthan)

Folgende Konfiguration funktioniert dagegen Problemlos:

$http
    .post('/api/DocumentApi/Upload/' + id, data, {
        transformRequest: angular.identity,
        headers: { 'Content-Type': undefined }
    });

Da muss man dann erst mal drauf kommen. ;)

Gregor Biswanger: Roadshow: Einstieg in die Hybrid App Entwicklung

Seit 2009 halte ich regelmäßig Entwickler-Roadshows. Auch dieses Jahr und Anfang 2015 möchte ich die Community in Deutschland, Österreich und in der Schweiz mit einer kostenfreien Roadshow zum Thema „Cross Plattform Entwicklung“ unterstützen.

Doch diesmal wird das keine gewöhnliche Roadshow, sondern eine Cross Community Roadshow. Damit ist gemeint, dass die Roadshow nicht nur wie bisher für Microsoft User Groups stattfindet, sondern ebenfalls für Google Developer Groups und JavaScript User Groups.

Beschreibung

Die Entwicklung von Apps ist nicht einfach und jede "Systemwelt" hat ihre eigenen Tools und Anforderungen. Ob mit Java und Eclipse für Android, mit Objective-C und Xcode für iOS, oder mit den Microsoft-Tools für die Windows-Welt. Bei diesem Vortrag lernen Sie die vielfältigen Möglichkeiten der App-Entwicklung für alle gängigen Plattformen mit nur einer Programmiersprache kennen: HTML5 und JavaScript. Sie steigen mit den Grundlagen des kostenlosen Intel XDK ein und werden dann mit den wichtigsten Frameworks und Vorgehensweisen vertraut gemacht. Mit diesen Infos steigen Sie rasch auf zum versierten Cross-Plattform Entwickler.

Termine

.NET User Group Ingolstadt

03.02.2014

Dotnet Cologne 2014

09.05.2014

.NET User Group Dortmund

06.08.2014

.NET User Group Regensburg

18.09.2014

BASTA! 2014

25.09.2014

.NET User Group Berlin Brandenburg

02.10.2014

Google Developer Group Bremen

15.10.2014

.NET User Group Hamburg

16.10.2014

DevFest Wien

18.10.2014

Advanced Developers Conference Mannheim

21.10.2014 – 22.10.2014

DevFest Karlsruhe

25.10.2014

.NET User Group Stuttgart

29.10.2014

DevFest Zürich

22.11.2014

.NET User Group Bonn

20.01.2015

*

*

*Weitere Termine folgen.

 

Für User Groups

Weitere User Groups die an diesem Vortrag Interesse haben, schreiben mir bitte eine E-Mail an: gregor.biswanger@cleversocial.de

Ich freue mich auf euer zahlreiches Erscheinen!

ppedv Team Blog: Erste offensichtliche Änderungen am neuen Windows Server (Technical Preview)

Der neue Windows Server, der aktuell noch als “Technical Preview” bezeichnet wird, bringt zumindest optisch nicht viele Neuerungen mit. Wenn man aber einfach mal via Servermanager neue Rollen und Features hinzufügt, fällt einem schnell auf, dass es hier doch viel Neues gibt:

Rollen

Hier ist der “MultiPoint Server” als neue Rolle zu finden. Bisher war dies ein eigenständiges Produkt, welches separat heruntergeladen und installiert werden musste.

Features1

Features2

Features3

Bei den Features gefällt mir vor allem die Möglichkeit, Windows selbst neu zu starten (“Soft Restart”), ohne die Hardware (incl. POST und allem was dazugehört) neu starten zu müssen. Dies bringt vor allem bei Updates deutlich kürzere Downtimes.

Die Funktionen werde ich demnächst im Detail testen und darüber berichten.

ppedv Team Blog: Hybrid Apps: Visual Studio 2013 und Apache Cordova für Android

Hybride Applikationen, oder einfach Hybrid Apps, sind Anwendungen, die auf mobilen Geräten, wie Smartphones oder Tablets, installiert werden können. Der Vorteil dieser Anwendungen liegt darin, dass Hybrid Apps mit den Technologien HTML, CSS und Javascript umgesetzt werden können. Somit kann zumindest die gleiche Präsentationsschicht auf unterschiedlichen Plattformen – also Cross-Plattform – verwendet werden. Hybrid-Apps bauen oft auf das Open-Source Framework Apache Cordova auf, das die Plattformen Windows Phone, iOS, Android und Blackberry unterstützt. Näheres zum Thema mobiles Internet und Hybrid Apps, finden Sie in diesem Blogbeitrag.

Aktuell bietet Microsoft die Möglichkeit, Apache Cordova in Visual Studio relativ einfach zu integrieren. Wenn Sie Apps erstellen, müssen Sie jedoch einige plattformspezifische Eigenheiten beachten. In diesem Blogbeitrag betrachten wir kurz, wie Sie Visual Studio 2013 konfigurieren müssen, um eine hybride Applikation speziell für Android-Geräte erstellen zu können.

Cordova Visual Studio


Als ersten Schritt müssen Sie das Apache Cordova Plugin in Visual Studio 2013 installiern. Das Plugin können Sie bequem als Add-On Installer hier herunter laden.

Android Applikationen bauen auf der Dalvik Virtual Machine auf. Diese Ausführungsumgebung übersetzt JAVA Code in Bytecode-Format. Aus diesem Grund muss eine Java Runtime Environment (JRE) installiert werden. Am besten beziehen Sie die JRE direkt von Oracle.

Zusätzlich zur JAVA JRE muss die Android-spezifische SDK (Software Development Kit) installiert werden. Hierzu genügt es, die stand-alone Version der Android SDK zu installieren. Diese finden Sie unter diesem Link. Sobald das SDK installiert wurde, müssen Sie dieses starten und aktualisieren. Navigieren Sie dazu in das Installationsverzeichnis und starten Sie den SDK Manager. In diesem Verzeichnis befindet sich zusätzlich der AVD Manager (Android Virtual Device Manager), mit dem Android-Gerät-Emulatoren erstellt werden können.

Nachdem die Entwicklungsumgebung auf dem Computer eingerichtet wurde, müssen zusätzliche Einstellungen für und auf dem Android-Mobilgerät durchgeführt werden.

Zunächst kann das Smartphone oder Tablet an den Computer mittels USB Kabel verbunden werden. Es ist wichtig, dass die aktuellen USB-Treiber Ihres Mobilgeräts installiert sind. Ist dies nicht der Fall, suchen Sie die aktuellen USB-Treiber in einer Suchmaschine und installieren Sie diese.

Außerdem muss auf dem Android Smartphone USB Debugging aktiviert sein. Diese Entwicklereinstellung ist leider nicht auf jedem Android Mobilgerät ident und sehr oft in einem Untermenü versteckt. Am einfachsten kann diese Einstellung im Internet über eine Suchmaschine gefunden werden. Einfach nach der Gerätbezeichnung und USB Debugging suchen.

Sobald Sie Visual Studio 2013 starten, können Sie eine neue Hybrid App anlegen:

Hybrid App Visual Studio

Alle notwendigen Schritte, um Android Hybrid Applikationen mit Visual Studio 2013 erstellen zu können, haben wir uns nun angesehen. Die App können Sie als mobile Webseite, als Hybrid-App auf dem Gerät oder in einem erstellten Emulator ausführen.

Marco Scheel: Links for 2014-10-12 [del.icio.us]

Johannes Renatus: AngularJS Directive TemplateURLs mit ASP.NET MVC (virtuelle Verzeichnisse)

Wie und wo legt man am besten die HTML Templates für die eigenen AngularJS Direktiven ab? AngularJS bietet hier mehrere Möglichkeiten, zum einen über eine Template URL oder das direkte Definieren von Templates im JavaScript über einen String. Auch beim Angeben der Template URLs gibt es zwei Möglichkeiten wo das Template abgelegt werden kann, entweder […]

codefest.at [MS]: Azure unterstützt NoSQL DocumentDB. Ja, und was soll ich damit?

clip_image001


Genau das hat mich einer meiner Kunden unlängst gefragt, als diese Meldung von Microsoft durch alle verfügbaren „Techie“-Kanäle gespült wurde. Dies hat mir wieder gezeigt, dass man als Trainer und Berater zur Zeit die Möglichkeit hat, aber auch die Notwendigkeit besteht, in diesem – für viele Firmen – neuen Umfeld Aufklärungsarbeit zu leisten. Widmen wir uns somit den Möglichkeiten der Datenspeicherung unter Azure und wann man welches der angebotenen Szenarien verwendet.

Um das Ziel Datenspeicherung zu erreichen, haben wir aber einen relativ weiten Weg zu beschreiten. Fangen wir also einmal mit der generellen Unterscheidung an, wie Daten abgelegt werden können:

Zur Verfügung stehen uns

1. relationale Datenbanken und
2. NoSQL Datenbanken.

Zerpflücken wir einmal 1. und danach 2., dann werden wir sehen, dass Microsoft hier wieder einmal mit Azure sehr innovativ unterwegs ist und uns schon heute Optionen für morgen anbietet!

 

Relationale Datenbanken

Ich selbst war sechs Jahre bei Sybase und kann daher voll und ganz verstehen, dass Microsoft den Source Code von Sybase vor langer Zeit gekauft hat und daraus ein großartiges Produkt mit dem Namen Microsoft SQLServer gemacht hat. Aber was macht relationale Datenbanksysteme so großartig? Ich bin mir ziemlich sicher, dass die meisten meiner Leser gelangweilt an die Decke starren, aber da sollten wir kurz durchtauchen, um möglicherweise im Anschluss eine komplett NEUE Welt (der Daten) kennen zu lernen und zu verstehen.

Den Grundstein für relationale Datenbanksysteme (kurz RDBMS) legte ein gewisser Edgar Codd (von IBM), der im Jahre 1970 (also sogar vor meiner Zeit) zwölf Regeln aufstellte (Codd's 12 rules[Ma1] ), die genau definieren, was denn ein System können sollte, um ein RDBMS zu sein. In den frühen 80er Jahren haben sich dann die ersten Hersteller mit diesem Thema auseinandergesetzt, und – voila – die Datenbanken, so wie wir sie (in den meisten Unternehmen) kennen, haben das Licht der Welt erblickt.

Wir verwenden also einen Datenbankserver, der uns eine oder mehrere Datenbanken zur Verfügung stellt. In einer Datenbank befinden sich wiederum eine oder mehrere Tabellen in einem bestimmten Schema, mit Spalten von einem definierten Datentyp und natürlich unseren hoch geschätzten Datenzeilen – ohne die unsere Datenbank recht leer aussehen würde. Wir finden in unseren Datenbanken Primärschlüssel, Fremdschlüssel und (hoffentlich auch) Indexe. Stored Procedures, Funktionen und Views wollen wir natürlich auch nicht vergessen. Wenn Daten geschrieben/gelesen/gelöscht werden, werden dazu von unseren Applikationen Transaktionen verwendet. Dass unsere Datenbank jederzeit konsistent ist (Stichwort ACID - Atomicity, Consistency, Isolation und Durability – sichergestellt durch Transaktionsprotokoll, Locking Mechanismen und Isolation Level) setzen wir natürlich voraus. Beim Design und der Definition der Tabellen verwenden wir die Normalisierung und als Abfragesprache benutzen wir standardisiertes SQL.

Ich denke, das war es im Schnelldurchlauf - zwar recht kompakt, aber hoffentlich verständlich zusammengefasst. In Summe doch etwas Großartiges, was sich in all den Jahren auf Basis dieser 12 Regeln entwickelt hat!

 

CAP-Theorem

RDBMS sind eine feine Sache, allerdings geraten wir mit den, in den letzten Jahren immer häufiger auftretenden, großen Mengen an Daten ein klein wenig in Schwierigkeiten. Diese wollen nicht mehr so recht in einen einzigen Server hineinpassen (irgendwann hat auch das Aufrüsten mit größeren und leistungsstärkeren Festplatten, zusätzlichem Speicher und stärkeren Prozessoren ein Ende erreicht), also werden diese zu einem verteilten System. Das ist aber nicht der einzige Grund. Neben dem Ressourcenmangel gibt es aber noch weitere Gründe:

· Netzwerk-Bandbreite - die Performance auf einem einzigen Server ist abhängig davon, wie schnell eingehende Anfragen empfangen und ausgehende Resultate gesendet werden können. Wenn die Netzwerklast die Kapazität des Netzwerkes übersteigt, kommt es zu Ausfällen und im Endeffekt zu unglücklichen Anwendern.

· Regionsabhängige Server – möglicherweise wird es notwendig, Anwenderdaten in dem Land zu speichern, in dem diese anfallen (unter Azure gibt es die Auswahlmöglichkeit zwischen 15 Regionen, wo die Daten abgelegt werden können). Gründe dafür können gesetzlicher Natur, seine, compliance, oder eben wieder die Performance (Latenz der Datenzugriffe) sein. Wenn Anwender in verschiedenen Teilen der Welt verstreut sind, ist es eben vermutlich besser, mehr als einen Server zur Verfügung zu stellen.

Wenn zumindest einer dieser eben genannten Gründe zutrifft, dann werden relationale Datenbanken verteilt. Nun, das bringt uns zum sogenannten CAP-Theorem, da solche verteilten UND weiterhin leistbaren Systeme nur zwei, der drei folgenden Eigenschaften (die wir an relationalen Datenbanken so schätzen) erfüllen können:

· (C) Strong Consistency - Konsistenz: Jeder Client (gemeint sind Anwendungen, bzw. die Anwender) sieht zur selben Zeit dieselben Daten, auch bei Datenänderungen – eben auch bei Transaktionen mit 2-Phase-Commits.

· (A) High Availability - Verfügbarkeit: Alle Anfragen von Clients an das Datenbanksystem werden jederzeit und mit akzeptabler Antwortzeit beantwortet.

· (P) Partition-Tolerance - Ausfalltoleranz: Das gesamte Datenbanksystem muss weiterhin stabil laufen, auch wenn einer der eingesetzten Server ausfällt oder neue Server hinzugefügt werden. Auch der Ausfall einer Kommunikationsverbindung muss verkraftet werden können, ohne dass die Clients etwas davon bemerken. Damit Daten auch nach Ausfall eines Servers vorhanden sind, werden sie repliziert auf verschiedenen Servern gespeichert.

Relationale Datenbanksysteme sind am ehesten im Bereich CA zu finden. Konsistenz der Daten hat üblicherweise bei den relationalen Systemen oberste Priorität (mittels Transaktionen und ACID). Den Anforderungen nach Ausfalltoleranz und Verfügbarkeit wird man meist durch sehr hochwertige und sehr leistungsfähige Hardware (im wahrsten Sinne des Wortes) Rechnung tragen.

Grafisch lässt sich das so darstellen:

clip_image003

Was ist aber nun mit CP und PA ? Hier können die NoSQL-Datenbanken eine Lücke schließen – und so betreten wir das Land der NoSQL-Datenspeicherung (und wir können an dieser Stelle auch erahnen, warum).

NoSQL Datenbanken

Beginnen wir zuerst mit der Definition von NoSQL: Wir könnten uns mit dem Namen Not only SQL zufrieden geben, aber da steckt mehr dahinter, nämlich die Datenbanken der nächsten Generation, diese sind

· nicht-relational,
· verteilt,
· Open-Source, sowie
· horizontal skalierbar.

Man könnte somit geneigt sein zu sagen: So ziemlich das Gegenteil von dem, was man (zumindest als Entwickler) bisher so geschätzt hat. Aber es kommt noch dicker, es gibt da noch weitere Anregungen, was eine NoSQL-Datenbank so bietet:

· einfache Replikation,
· ein simples API
· sehr grosse Datenmengen
· und das Allerbeste hebe ich mir für den Schluss auf:

EVENTUELL konsistent und Schema-Frei

Ich hoffe, die alteingesessenen Datenbank-Hasen unter euch sitzen immer noch halbwegs gerade auf dem Sessel (dabei habt ihr möglicherweise ‚ein simples API‘ sogar überlesen, was so viel bedeutet, wie non-SQL als Abfragesprache)? Ja, das ist schon starker Tobak, klingt aber durchaus durchdacht, wenn wir uns die fünf NoSQL-Technologien ansehen, die es am Markt gibt:

· Key/Value Stores – speichern der Daten mit einem Partition Key und einem Row Key.
· Column Stores – quasi eine Erweiterung der Key/Value Stores um eine weitere Gruppierung.
· Document Stores – Speicherung von Objektstrukturen im JSON-Format.
· Graph Databases – wenn die Beziehungen zwischen den Daten im Vordergrund liegen
· Big Data Analytics – Analysieren von (unvorstellbar) großen Datenmengen.

Da ein Bild mehr als 1000 Worte sagen kann, möchte ich die NoSQL-Technologien grafisch veranschaulichen:

clip_image005

Ich möchte nun jede einzelne dieser NoSQL-Technologien beleuchten und deren Einsatzgebiete herausstreichen.

Key/Value Stores

Es gibt hier verschiedene Implementierungen, in Microsoft Azure heißt der NoSQL Key/Value Store, Azure Table Storage. Um Daten im Table Storage zu speichern, wird eine Tabelle (heißt zwar so, hat aber keine Ähnlichkeit mit einer relationalen Datenbanktabelle) mit einem 2-teiligen Schlüssel und weitere Spalten für die Daten selbst benötigt. Dieser 2-teilige Schlüssel besteht aus:

· einem Partition-Key, nach diesem wird die Tabelle partitioniert und
· dem Row Key, dieser identifiziert die Zeile eindeutig INNERHALB der Partition (fast so wie der gewohnte Primary Key, aber eben nur beinahe).

Weitere Entitäten (unsere altbekannten Spalten) können nach Belieben angelegt werden und haben einen Namen, einen Datentyp und (vermutlich) einen Wert.

Ich hatte erst vor kurzem einen interessanten Anwendungsfall für einen Key/Value Store:

Es sollte ein Sicherheitssystem mit sechs Kameras realisiert werden, diese laden die Bilder alle zwei Sekunden in die Azure Cloud (als Blob-Storage) hoch. In dem Key/Value Store wurde folgende Information gespeichert:

· Partition Key: Der Name der Applikation
· Row Key: Die ID der Kamera
· Daten: Der Name des aktuellen Azure Blobs und die Aufnahmezeit

Natürlich wäre es möglich gewesen, eine relationale Datenbank zu verwenden, aber hier war der Preis ausschlaggebend, da der Azure Table Storage mit dem Azure Blob Storage sehr günstig ist und diese Lösung nur auf wenige € im Jahr (ca. €25,--) kommt.

Azure Table Storage ist, wie andere Implementierungen auch, auf Massendaten ausgelegt. Die Partitionen einer einzelnen Tabelle können sich über mehrere Maschinen verteilen. Ein Szenario also, wo wir mit relationalen Datenbanksystemen möglicherweise in Schwierigkeiten punkto Kosten kommen, da sie mit Sicherheit höher liegen. Dieses horizontale Partitionieren der Daten wird Sharding genannt. Windows Azure Table Storage führt das Sharding im Hintergrund aus und skaliert damit automatisch bei großen Datenmengen. Aber wie werden die Probleme gelöst, die bei relationalen Systemen auftreten würden?

Jede Abfrage an einem Key/Value Storage kann nur eine Partition ansprechen, Joins sind nicht möglich. Darauf muss natürlich bereits während der Entwicklung der eigenen Applikation Rücksicht genommen werden. Wie eingangs erwähnt: Auch wir Entwickler müssen umdenken und diese neueren Konzepte erst umsetzen lernen. Daten, die also gemeinsam abgefragt werden wollen, müssen auch innerhalb einer Partition liegen – das gilt übrigens auch für Transaktionen, diese gelten nur über eine Partition.

Column Stores

Microsoft Azure bietet HBase (mit HDInsight, also Hadoop) als NoSQL Column Store Implementierung an. HBase, bzw. Column Store-NoSQL-Datenbanken erinnern stark an eine relationale Datenbank, da die Daten in Tabellen gespeichert werden, Zeilen, Schlüsseln, Spaltenfamilien, Spalten und Werte sind auch vorhanden. Also alles wie gehabt, nur ein neuer Name? Mitnichten.

In HBase ist jede Datenzeile durch einen Key definiert, diese Datenzeile beinhaltet eine, oder mehrere Spalten, welche selbst wiederum Key/Value-Pairs darstellen.

Die Spaltennamen müssen nicht vordefiniert werden, das bedeutet, dass das Schema hier ebenfalls wiederum kein fixes ist – im Gegensatz zu relationalen Datenbanken. Die Spalten in einer Datenzeile werden sortiert nach ihrem jeweiligen Namen abgelegt. Zusätzlich speichert HBase zu jeder Zeile einen Zeitstempel – zur Versionierung - mit ab. Würde ein neuer Wert in eine der Spalten eingetragen, bleibt der alte Wert weiterhin erhalten.

Anwendungsfall gefällig? Facebook-Messaging, dort wird genau diese Technologie verwendet, wobei als Zeilenschlüssel die Benutzer-IDs verwendet werden, als Spalten-Bezeichner Wörter, die in den Nachrichten der Anwender vorkommen, allerdings wird der Zeitstempel anders verwendet, da sich gesendete Nachrichten nicht mehr verändern können, es wird die Nachrichten ID abgelegt.

Die beschriebene Art der Datenspeicherung ist ideal, wenn sehr viele Spalten in einer Datenzeile vorhanden sind und spezielle Bereiche gesucht werden. Dieser Satz, umgelegt auf das FaceBook-Messaging Szenario könnte einen zum Nachdenken bringen, was denn wohl alles mit dieser Technologie möglich ist.

Als Entwickler kann man sich das als geschachtelte Hashtable oder Dictionary, mit einer Tiefe von 2 oder 3 Levels vorstellen.

Was die Performance angeht, ist HBase skalierbar, wenn also mit großen Datenmengen von mehreren Gigabyte, oder sogar Terabyte gearbeitet wird, dann ist HBase interessant. Des Weiteren kann HBase Daten schnell replizieren, sodass im Fehlerfall fehlerhafte Knoten recht problemlos wieder hergestellt werden können.

Document Stores

In einem Document Store werden sogenannte Dokumente gespeichert, darunter darf man sich aber nicht z. B Word Dokumente oder PPT-Dateien vorstellen. Was aber könnte es dann sein?

Ein Beispiel: In einer relationalen Datenbank haben wir Tabellen und Spalten. Also ein festgelegtes Schema für die abzulegenden Daten. Was aber ist, wenn die Struktur, die wir als Entwickler verwenden, nicht in dieses Schema passt? Wie oft mussten wir schon das Datenbank-Schema in die Objekt-Struktur pressen, die man in der Anwendung verwendet? Natürlich wieder genau anders herum, wenn die Applikations-Daten persistiert werden sollen. Das war und ist lästig für den Entwickler. Hier wäre es um einiges einfacher, wenn das in der Applikation verwendete Format durchgängig – in einem Document Store - zur Verfügung stehen könnte.

Ein anderes Szenario wäre ein WCF-Service, welches Daten mittels Entity-Framework einliest und diese an einen HTML/JavaScript Client übertragen soll. Das ideale (universelle) Format dafür ist JSON (JavaScript Object Notation). Die Daten, die übertragen werden sind nun ebenso ein Dokument, welches in einem Document Store abgelegt werden könnte. Also eigentlich ein Objekt oder eine Objektstruktur als Dokument.

Ein weiterer Anwendungsfall wäre ein “Einkaufswagen” in einer Shopping-Applikation. Die abgelegten Produkte haben unterschiedliche Eigenschaften – also Objekte mit unterschiedlichen Strukturen - die durch das lose Schema einer JSON-Datei problemlos vorgehalten werden können – was in einer relationalen Datenbank ungleich schwieriger wäre. So ein Einkaufswagen könnte im JSON-Format so aussehen:

clip_image006­­­

In einer DocumentDB können natürlich komplexere und längere Dokumente gespeichert werden, man stelle sich einen Blog-Eintrag und die zugehörigen Kommentare vor, ein Summenfeld mit der Anzahl der Kommentare, Erscheinungsdatum, usw.

Die Azure DocumentDB befindet sich momentan in der Preview-Phase und kann für die neugierigen Entwickler unter euch getestet werden.

Graph Databases

Was wäre, wenn die Verbindung zwischen den Daten genauso wichtig, oder sogar wichtiger wäre als erst einmal die Daten selbst? Ich durfte drei Jahre lang an einem Projekt zur Bekämpfung von Geldwäsche mitarbeiten, wo wir genau den eben angesprochenen Fall hatten. Es ist interessant, wie Überweisungen, Personen und Firmen in Beziehung stehen und zuerst einmal gar nicht die zugrunde liegenden Daten selbst. In so einem Fall sind Graph Databases der geeignete Anwendungsfall.

Unter Azure gibt es keinen Vertreter dieser Gattung, der populärste ist hier Neo4J, welches aber unter Azure verwendet werden kann.

Wie der Name schon erahnen lässt, werden die Daten als Graph abgelegt. In Neo4J werden die Daten als Knoten bezeichnet, die Verbindungen zwischen den einzelnen Knoten sind Beziehungen. Sowohl Knoten als auch Beziehungen können Eigenschaften aufweisen – die uns nun schon gut bekannten Name/Value Pairs. Neo4J arbeitet (mittlerweile wenig überraschend) ohne festem Schema, somit können die Eigenschaften jede beliebige Information beinhalten.

Eine typische Abfrage in Neo4J beinhaltet den Startpunkt (ein einzelner Knoten im Graphen), die zu matchenden Daten, und die Knoten, zu dem Beziehungen und Eigenschaften zu retournieren sind.

Big Data Analytics

Hier sind wir bei einem meiner Lieblingsthemen angelangt. Hadoop, bzw. unter Microsoft Azure HDInsight. Dazu gibt es einen eigenen Blog-Eintrag, auf den ich an dieser Stell gerne verweisen möchte, da die Beschreibung von MapReduce, Hive und Pig dieses Mal den Rahmen sprengen würde.

Datenkonsistenz in NoSQL-Datenbanken

Da Daten zu mehreren Servern repliziert werden - einer verteilt die Daten an mehrere – stellt sich die Frage der Datenkonsistenz beim Zugriff auf ebendiese, da das Verteilen der Daten Zeit benötigt. Was passiert nun, wenn Clients auf diese Daten in der Zeit während die Synchronisation läuft zugreifen? Welche Daten sind denn nun für diese Clients sichtbar? In der NoSQL-Welt unterscheidet man zwischen Strong Consistency und Eventual Consistency. Aus der relationalen Welt sind wir Strong Consistency (read committed) gewohnt, das heißt alle Clients sehen immer die gleichen (korrekten) Daten, auch, wenn sofort – noch während das Schreiben der Daten läuft - gelesen wird.

Wenn das System nun nur Eventual Consistency unterstützt würden Clients alte Daten geliefert bekommen, da diese eventuell auf einen Server zugreifen, wo die Daten noch nicht synchronisiert wurden. Klingt absurd und unbrauchbar? Nun, ist es wirklich so wichtig in einem Blog die allerletzten Kommentare (sofort) zu sehen? Oder in einem FaceBook Beitrag? Man sieht also, es kommt ein wenig auf die Anwendung an, wofür das System eingesetzt wird.

Zwei weitere Consistency Level, die zwischen den beiden genannten liegen sind Bounded Staleness und Session. Ersterer garantiert konsistentes Schreiben mit verzögerten Lesezugriffen für alle Clients, letzterer garantiert die Datenkonsistenz für den aktiven Client für seine eigenen Lese- und Schreibzugriffe.

Wie sieht das unter Microsoft Azure aus?

· Azure Table Storage verwendet Strong Consistency, garantiert also die aktuellen Daten bei einem lesenden und schreibenden Zugriff durch mehrere, bzw. verschiedene Clients.

· Azure DocumentDB lässt uns die freie Wahl zwischen Strong, Bounded Stateless, Session, oder Eventual Consistency.

· HBase verwendet Strongly Consistent Lese- und Schreib-Zugriffe

Die Wahl des Consistency-Levels beeinflusst natürlich die Performance des Systems, wird Strong Consistency eingesetzt ist das die langsamste Variante für Lese- und Schreibzugriffe, Eventual Consistency die Schnellste.

 

RDBMS und/oder NoSQL?

Wie sollen nun neue Projekte entwickelt werden? Setzen wir in Zukunft NUR NOCH auf NoSQL? Fügen wir die NoSQL-Technologien erst einmal zu dem zuvor gezeigten Bild hinzu, so ergibt sich ein Gesamtbild und wir können uns überlegen, wie wir weiter vorgehen könnten:

clip_image008

NoSQL ist typischerweise eine gute Wahl, wenn es sich um unstrukturierte, bzw. Daten ohne festem Schema handelt. Das Schema muss nicht extra er- bzw. gefunden werden, Erweiterungen mit neuen Feldern sind– in Hinsicht auf die Speicherung - problemlos zu verarbeiten.

Eine denormalisierte Form der Daten wird nicht nur favorisiert, sondern ist sogar notwendig, da keinerlei Joins, zumindest in der Art und Weise wie diese in relationalen Systemen gehandhabt werden, Unterstützung finden.

Lösungen, die mittels NoSQL implementiert werden, lassen sich häufig einfach besser skalieren als relationale Datenbanklösungen. Das Hinzufügen weiterer Datenknoten ist einfach, die Daten werden meist repliziert, daraus ergibt sich in Summe auch einen besseren Schutz gegen Datenverlust.

Allerdings bieten die NoSQL-Lösungen nicht die Möglichkeit von ACID-Transaktionen über mehrere "Tabellen". Desweitern gilt natürlich, dass komplexe und/oder dynamische Abfragen, bzw. Berichte am besten von einem relationalen Datenbanksystem bedient werden. Die Abfragemöglichkeiten von NoSQL-Lösungen sind dafür einfach zu limitiert – was ja auch nicht im Sinne der Erfindung wäre.

Wie sehr häufig im Leben gibt es nicht das allgemein gültige Kochrezept, es muss also nicht immer das Eine oder das Andere sein. Für bestimmte Gesamtlösungen kann ich mir ohne Weiteres eine Hybrid-Form - die Kombination eines relationalen Systems mit einem NoSQL-System vorstellen.

Quellen

Relational Database: http://en.wikipedia.org/wiki/Relational_database
Cod’s 12 rules: http://en.wikipedia.org/wiki/Codd%27s_12_rules
CAP-Theorem: http://de.wikipedia.org/wiki/CAP-Theorem
NoSQL Datenbanksysteme: http://nosql-database.org/
FaceBook
& HBase: https://www.facebook.com/publications/376874985754849/
Neo4J
unter Azure: http://neo4j.com/blog/announcing-neo4j-on-windows-azure/

 

Zusammenfassung

Microsoft ist mit Azure und den angebotenen Storage-Möglichkeiten im NoSQL-Bereich meiner Meinung nach ein Vorreiter und Visionär. Hier wird Technologie geboten, die die meisten Unternehmen noch nicht ausreichend anzuwenden wissen. Die Möglichkeiten, die sich hier für Entwickler und Firmen bieten, um neue Applikationen und Dienste anbieten zu können, sind großartig und werden vermutlich erst in den nächsten Jahren ihr volles Potential entfalten. Wir alle müssen uns erst auf diese Technologien einlassen und ihnen auch das Vertrauen entgegen bringen, das diese meiner Meinung nach auch verdienen. Es sind nicht neue Technologien, da diese größtenteils schon jahrelang im Einsatz, aber der breiten Business-Community bisher verborgen geblieben sind. Microsoft leistet hier mit der Azure Plattform eine großartige Möglichkeit all diese Technologien zu testen und neue Visionen umzusetzen.


Berndt Hamböck ist seit 2007 MCT, darüber hinaus befasst er sich mit Lösungen für komplexe Anwendungsszenarien mit den neuesten Microsoft Technologien. Die Erfahrungen aus der Projektarbeit gibt er in Vorträgen und Trainings weiter und begleitet Entwicklerteams in Softwareunternehmen bei Projekten im Microsoft Umfeld. Folge ihm auf Twitter, um nichts zu verpassen.

Das ist ein Gastbeitrag. Die Meinung des Autors muss sich nicht mit jener von Microsoft decken. Durch den Artikel ergeben sich keinerlei Handlungsempfehlungen. Microsoft übernimmt keine Gewähr für die Richtigkeit oder Vollständigkeit der Angaben.

ppedv Team Blog: Windows 10: Technical Preview

Am 30. September 2014 hat Microsoft bei einem Presseevent in San Francisco die nächste Windows-Version vorgestellt. Große Überraschung: Der Name! Statt Windows 9 wird es Windows 10 heißen. Warum dieser Versionssprung? Microsoft selbst begründet den Schritt mit der immensen Bedeutung des neuen Betriebssystems für das Unternehmen. Windows 10 sei viel mehr als eine simple Weiterentwicklung, sondern der Beginn einer neuen Ära, hieß es zur Präsentation in San Francisco.

Ein alter Bekannter in neuem Gewand zieht in Windows 10 ein: Das Startmenü, das viele Windows 8/8.1-Kritikern vermissten. Allerdings ist das Startmenü keine 1:1-Kopie des Windows 7-Startmenüs, sondern kann neben den gewohnten Einträgen zusätzlich App-Kacheln aufnehmen. Zusätzlich ist es auch skalierbar. Das Startmenü ist jedoch nur auf Desktop-PCs und Notebooks automatisch aktiviert – Touchgeräte erhalten den von Windows 8 bekannten Startbildschirm. Man hat jedoch die Möglichkeit die gewünschte Bedienoberfläche jederzeit auswählen und zu wechseln.

Windows 10-1

Wer sich in Windows 8 mit den Vollbild-Apps nicht anfreunden konnte, wird sich nun freuen: Apps können jetzt in einem Fenster auf dem Desktop ausgeführt werden.

Microsoft reagiert mit Windows 10 nicht nur auf Kritiken von Windows 8-Usern, sondern bringt auch Neuerungen mit. Eine davon ist beispielsweise die Möglichkeit bis zu vier weitere Desktops anzulegen, um geöffnete Fenster auf mehrere Arbeitsflächen zu verteilen.

Windows 10-2

Eine erste Vorab-Version von Windows 10 stellt Microsoft mit der Windows 10 Technical Preview allen Usern kostenlos im Technet Evaluation Center oder über MSDN zur Verfügung.

Im Frühjahr soll noch vor der Build-Konferenz eine weitere Vorab-Version – die Windows 10 Consumer Preview – erscheinen, die dann den Schwerpunkt auf neue Endanwenderfunktionen legen soll. Die Markteinführung von Windows 10 ist für das zweite Halbjahr 2015 geplant. Stimmen die Gerüchte, dann wird für Windows 8-User der Umstieg auf Windows 10 kostenlos möglich sein!

Hendrik Lösch: How-To: Regionen und mehrere Dialoge in WPF darstellen

Eine Sache die bis heute in WPF fehlt, ist eine anständige MessageBox, weswegen man sich diese in aller Regel selbst programmieren muss oder auf die Implementierung der Windows Forms zurückgreift. Aber auch außerhalb der typischen Szenarien die mit den bekannten MessageBoxen abgedeckt werden, ist es immer wieder hilfreich mehrere UserControls innerhalb eines Windows oder in […]

ppedv Team Blog: Lync Meetings, Headset Mikro funktioniert nicht

Seit einiger Zeit fällt mir in Online-Meetings Tastaturgeklappere auf. Ein untrügliches Indiz, dass der andere Teilnehmer kein Headset benutzt. Ich frage dann gerne nach und immer öfter versichert mir mein Gegenüber ein Headset zu benutzen. Für einen schnellen Test kann man das Lautsprechersymbol aus der Taskleiste nutzen. Einfach mit einem harten Gegenstand auf das Mikrophon klopfen.

lync1

In meinem Fall gab es keinen erkennbaren Ausschlag. Also ist das interne Mikro an, obwohl ein Headset in der 3,5 mm-Kombibuchse steckt.

Für einen Aufnahme-Qualitätstest nehme ich gerne die Windows 8.1 (vormals METRO) Recorder App.

lync2

Auch diese liefert das meinen Erwartungen entsprechende Ergebnis.

Die Lösung findet sich an der Buchse. Immer mehr Notebooks haben nur eine Buchse für Kopfhörer und Mikrofon. Ein entsprechender Adapter leitet dann zwar auf einen vierpoligen 3,5 mm-Klinkenstecker, aber das Notebook scheint das Device so nicht richtig zu erkennen.

Die Lösung bringt die Installation des Realtek HD Audio Managers, der beim Einstecken eines Gerätes einen zusätzlichen Dialog anbietet. Um auf den Dialog zu kommen, klicken Sie einfach rechts die Buchse an. Dann wählen Sie: Audioeingang, Mikrofoneingang, Kopfhörer, Audioausgang oder Headset.

lync3

Ich suche noch die Option, beziehungsweise das Setting ohne die Zusatzsoftware.

ppedv Team Blog: Änderung bei Microsofts Update-Strategie

Wie Jim Alkove, Windows Enterprise Program Manager,  in einem Blog-Artikel vor wenigen Tagen bekannt gegeben hat, wird es bei künftigen Betriebssystemen eine Änderung bezüglich Updates geben.

Enterprise-Kunden können dann aus einem von drei Pfaden wählen, der bestimmt, wie Updates verteilt werden. Ein Pfad sieht vor, alle Updates so schnell wie möglich zu bekommen und zu verteilen, um immer up-to-date zu sein. Ein weiterer Pfad sieht vor, nur die kritischen und Sicherheits-Updates zu bekommen. Der dritte Pfad wird ein Mittelweg zwischen den beiden Extremen sein.

Dabei soll auch die Möglichkeit bestehen, die eigenen Benutzer aufzuteilen und gruppenabhängig die Zuweisung zu einem dieser Pfade vorzunehmen.

Sicherheitsupdates und andere kritische Updates erscheinen weiterhin monatlich. Vermutlich wie bisher zum “Patch-Tuesday”.

Nun bleibt also abzuwarten, wie sich das alles entwickelt und wie Microsoft diese Ankündigungen umsetzt.

Holger Schwichtenberg: Cross-Plattform-Apps mit Xamarin am 5. November in Oberhausen

Ein Informationstag über Xamarin für Entscheider und Entwickler.

ppedv Team Blog: Debugging JavaScript mit Internet Explorer 11

Im Teil 2 der Reihe Debugging JavaScript beschreiben wir kurz die rustikale Herangehensweise mit dem Internet Explorer 11. Diese Form des JS-Debuggens ist besonders dann geeignet, wenn ein JavaScript am Client – also zum Beispiel im Browser - interpretiert wird. Um diese Tätigkeit auszuführen, bieten moderne Webbrowser sogenannte Development Tools. In diesem Artikel analysieren wir das Debuggen von JavaScript mit dem Internet Explorer 11 anhand des Beispiels aus diesem Blog Artikel.

Der Sourcecode kann in ein leeres Textdokument kopiert werden, das als index.html benannt wird und zum Beispiel am Desktop abgelegt wird. Der Sourcecode findet sich auch auf JS-Fiddle. Nach Aufruf der Datei index.html mit dem Internet Explorer können Sie die Development Tools mit der Taste F12 starten. Die Funktionalitäten der Development Tools sind mittlerweile ziemlich umfangreich, so kann neben dem Debuggen auch beispielsweise die Performance einer Webseite analysiert werden. In diesem Beitrag beschränken wir uns aber auf das Debuggen von JavaScript.

Wir befinden uns im Debugger der F12 Developer Tools. Ein Breakpoint kann mit Mausklick in die entsprechende Zeile gesetzt werden.

Debugger IE 12

Sobald die Anwendung gestartet wird, kann mit den Menüpunkten auf der folgenden Grafik über die Anwendung iteriert werden.

Iteratioin

Im Kasten rechts neben dem Sourcecode-Fenster können Sie die Variablen mitverfolgen.

image

Sobald die Anwendung fertig durchlaufen ist, können Sie im Menü links auf die Console wechseln.

image

Hier wird die Ausgabe der Variable ‘a’ angezeigt. Grund dafür ist die folgende Codezeile:

console.log(a);

 

Gutes Gelingen beim rustikalen Debuggen!

Sven Hubert: TFS ASAP meets VisualStudio.com

Public preview of TFS ASAP Online started

Visual Studio Online, based on the capabilities of Team Foundation Server with additional cloud services, becomes the online home for more and more development projects. We are proud to announce the public preview phase of TFS ASAP Online which is going to extend VisualStudio.com in the same way as TFS ASAP does for Team Foundation Server.

In the preview phase the most frequently used basic automations known from TFS ASAP are available.

Dependent on the used project template a different set can be activated.

Agile

CMMI

Scrum

Basic automations are free of charge. Premium automations will be available as soon as TFS ASAP Online has finished the preview phase.

During the preview phase an invitation is required to register a VisualStudio.com Account. If you would like to sign up for TFS ASAP Online, please contact us. We are looking forward to receive your feedback.

TFS ASAP meets VisualStudio.com is a post from: AIT Blog

Sven Hubert: WordToTFS 4.3 released

Since we got a lot of customers using WordToTFS outside the German-speaking world, we publish the blog post announcing the new release in English language, too. In the future we will publish any announcements of our tools in English as well.

The release of WordToTFS 4.3 is available for download. There are a lot of new features as well as some bugfixes, which are listed below.

New features in WordToTFS 4.3

  • Pre und Post Operations
    • There is a new operation called RefreshAllFieldsInDocument. It triggers Word to refresh fields (e.g. bookmarks) automatically.
    • Furthermore Pre and Post Operations are available for all Test Specification Reports and Test Result Reports.
  • Download of Test Results
    • Now the Test Result Report provides two modes of folder name structure for download of test results. In the WordToTFS template one can decide between WithGuid und WithoutGuid. Hence, folders can be created in a more human readable way.
  • Improvement of consecutive numbering of Shared Steps
    • For numbering Shared Steps WordToTFS creates a numbered list in the Word document and takes care of the correct indentation.
  • Parameter Values of Test Cases
    • With each test case within a Test Result Report it is now possible to show the parameter values used for test execution. The values are grouped by test iteration.
  • Variables in WordToTFS Templates
    • It is now possible to define variables in WordToTFS templates. Those can be used in the FIeldMappings. This allows flexibly changing the content by modifying the configuration (cf. Figure 1)
      Figure 1: Variables in a WordToTFS Template
      Figure 1: Variables in a WordToTFS Template
    • For using the variables, the new FieldValueType called BasedOnVariable has been introduced. Fields having this type are excluded from synchronization with TFS
  • WordBookmark in particular cells of the WordToTFS tables
    • The new attribute WordBookmark enables one to automatically generate Word bookmarks for a specific Field Mapping for future reference.
  • Bugfix Image compression
    • In some cases images were downscaled each time an item was published into TFS. As a consequence, image quality was reduced with each publish. This bug has been fixed.

 

Install the Update

Attention: This update is available for major release 4, only. Please find the full details of the different versions under http://www.aitgmbh.de/nc/en/downloads/team-foundation-server-tools/ait-wordtotfs-2010.html.

Anyone who has not installed WordToTFS, yet, can download the application from the URI mentioned before for free.

For users of WordToTFS 4.x:

WordToTFS automatically searches for updates regularly. Nevertheless the update mechanism can be manually enforced by using the update button in the WordToTFS ribbon (cf. Figure 2).

Figure 2: Enforce update manually

Figure 2: Enforce update manually

It is very easy to check whether the latest version is already installed. Just open the about box from the WordToTFS ribbon. If the window shows version 4.3.* (cf. Figure 3), the update was successful.

 

Figure 3: About box showing the new version

Figure 3: About box showing the new version

We appreciate any feedback on WordToTFS. We are glad to help you, just contact us.

WordToTFS 4.3 released is a post from: AIT Blog

ppedv Team Blog: Debugging JavaScript mit Visual Studio 2013

JavaScript oder auch kurz JS genannt, ist eine Skriptsprache, die ursprünglich entwickelt wurde, um dynamische Webseiten erstellen zu können. Obgleich heute (2014) die Möglichkeit besteht, JavaScript als serverseitige Skriptsprache zu verwenden, ist der Hauptanwendungsfall doch eher am Client. Sprich JavaScript wird in den meisten Fällen von einem Webbrowser interpretiert. Diese Tatsache führt zu einem Umdenken im Debugging von JavaScript-lastigen Anwendungen speziell für C# Entwickler.

Prinzipiell gibt es zwei verschiedene Möglichkeiten, um JavaScript zu debuggen. Erstens, sehr komfortabel mit Visual Studio 2013, oder zweitens, wenn Sie Visual Studio nicht zur Verfügung haben, auf eine etwas rustikalere Weise: mit dem Browser Ihres Vertrauens. Das kann beispielsweise der Internet Explorer 11 sein. In diesem Blogpost zeigen wir das Debuggen von JavaScript mit Visual Studio. Näheres zum Thema Debugging im Browser erfahren Sie in einem weiteren Blogpost.

Analysieren wir also kurz das folgende Skript mit Visual Studio 2013. Erstellen Sie zunächst eine Default.html-Seite in einem leeren Webprojekt und fügen Sie den untenstehenden Inhalt ein.

<!DOCTYPE html>
<html>
<head>
    <title>Debugging Javascript mit Visual Studio 2013</title>
</head>
<body>
    <p><button id="btnStart">Start</button></p>
    <div id="lblAusgabe"></div>

    <script type="text/javascript">

    window.onload = function () {

        var ergebnis = document.getElementById("lblAusgabe");

        document.getElementById('btnStart').addEventListener("click", function () {

            var a = "blog.ppedv.de";
            //debugger;
            funktionZwei(a);

            function funktionZwei(a) {
                alert(a);
            }
        }, false);
    }
    </script>
</body>
</html>

 

Zur Erklärung: hier wird durch einen Button-Klick im Browserfenster eine Textnachricht als Alert-Box ausgegeben. Als ersten Schritt wird der Kommentar // vor debugger; gelöscht. Diese Anweisung gilt als programmierter Breakpoint. Ein Breakpoint hält das Skript an einer bestimmten Stelle an. Der Breakpoint kann aber auch manuell ohne Programmierung gesetzt werden. Dazu rechte Maus –> Kontextmenü in der gewünschten Zeile, und Breakpoint –> Insert Breakpoint wählen.

Als Nächstes muss der Internet Explorer als ausführender Browser in der Menüleiste aktiviert sein.

Start im Browser

Die Anwendung kann gestartet werden! Nach einem Klick auf den Button Start stoppt die Anwendung.

Breakpoint

In Visual Studio kann nun debuggt werden.

image

Im Fenster links unten ‘Locals’, können Sie die Variablen verfolgen. Wir sehen in der Variable ‘a’ steht der Wert “blog.ppedv.de”.

image

Mit den folgenden Schaltflächen kann über die Anwendung iteriert werden.

image

Einen Einzelschritt können Sie auch mit der Taste F11 ausführen. Mit der besagten Schaltfläche in der Menüleiste kann schließlich das Skript fertig ausgeführt werden:

image

Im Internet Explorer taucht nun ein Pop-Up mit dem Wert aus Variable ‘a’ auf.

image

Als Fazit kann angeführt werden, dass Microsoft Visual Studio eine ausgesprochen komfortable Lösung bietet, um u.a. clientseitiges JavaScript zu debuggen. In einem weiteren Blogbeitrag werden wir das Debuggen von Javascript mit Internet Explorer 11 vorstellen.

ppedv Team Blog: Mobiles Internet kurz erklärt

“The Internet is becoming the town square for the global village of tomorrow.” – Bill Gates

Mit dieser Aussage hat Mr. Gates den Nagel auf den Kopf getroffen. Das Internet nimmt zunehmend mehr Einfluss auf unser tägliches Leben. Kommunikation oder einfache Einkäufe werden verstärkt online durchgeführt und das nicht nur von zuhause aus vom Desktop, sondern verstärkt von unterwegs mit einem mobilen Taschencomputer, dem Smartphone. Ein kurzer Blick auf die Mitfahrenden in der UBahn am Morgen bestätigt diese Tatsache.

Internet goes mobile

In diesem Blogbeitrag möchten wir kurz einen Überblick über die technische Perspektive des mobilen Internets geben.

Mobilies Internet

Prinzipiell setzt sich heute (2014) das mobile Internet aus drei möglichen Szenarien zusammen. Hier gibt es zunächst die Web Apps. Web Apps sind im Prinzip Webseiten, die für eine mobile Verwendung optimiert wurden und bauen sehr oft auf HTML5 auf. In dieser Blogserie stellen wir die Erstellung einer Web App mit HTML5 und Microsoft Visual Studio 2013 vor. Web Apps unterstützen (noch) nicht alle nativen Funktionalitäten von Smartphones und benötigen häufig eine Internetverbindung zum hostenden Server.

Im Gegensatz zu den Web Apps sind Native Apps, Applikationen für das Smartphone, die in einer nativen, also Gerät- und plattformspezifischen Programmiersprache umgesetzt werden. Für Windows Phone wäre dies C#, für Apple Produkte SWING und Objective C oder für Android Java. Daneben gibt es noch weitere Betriebssysteme mit eigenen Entwicklungsumgebungen. Um die Arbeit des Entwicklers leichter zu machen, gibt es seit kurzem die XAMARIN Tools, die es ermöglichen, mit C# native Apps für Apple, Android und Windows Phone zu entwickeln und diese in den jeweiligen App Stores zur Verfügung zu stellen. Native Apps haben den Vorteil alle Funktionalitäten des Smartphones verwenden zu können. Nachteil für den Entwickler ist, dass er alle Entwicklungsumgebungen und Programmierparadigemen auf den jeweiligen Plattformen kennen muss.

Hybrid Apps stellen eine Mischform aus Web Apps und Native Apps dar. Dabei wird eine Web App in einen nativen Container gepackt und kann, wie eine native Applikation, auf dem Gerät installiert werden. Hybrid Apps unterstützen die nativen Funktionalitäten eines Smartphones. Der App-Container baut hier auf das Apache Projekt Cordova PhoneGap auf. Was sie erledigen müssen, um Hybrid Apps für Android mit Visual Studio zu erstellen, erfahren Sie hier.

In zukünftigen Blogbeiträgen werden wir weiter analysieren, wie mittels Microsoft Visual Studio, Xamarin und C# die Erstellung von mobilen Webanwendungen realisiert werden kann.

Ist Ihr Interesse an der mobilen Entwicklung geweckt? Dann können wir nur zu einem Besuch der ADC X in Mannheim oder Wien raten. Die Messe beschäftigt sich speziell mit der Cross-Plattform Entwicklung auf mobilen Endgeräten. Die ADC X Mannheim findet vom 21.-22. Oktober 2014 statt. Die ADC X Wien vom 4.-5. November 2014.

Christian Binder [MS]: TFS Support für das Scaled Agile Framework (SAFe)

Das Scaled Agile Framework beschreibt Ansätze, um Agile Teams im Enterprise zu Skalieren. Hierbei werden mehrere Backlogs definiert, Release Trains und andere Mechanismen etabliert.

image

Folgender MSDN Artikel beschreibt, wie man die SAFe Konzepte in TFS adaptiert und konfiguriert.

Steps to enable SAFe in TFS

Eine TFS 2013 Prozess Vorlage mit den SAFe Artefakten steht auch zum Download bereit.

image

Ich bin sehr an Eurem Feedback zu dem Thema interessiert. Wie relevant das Thema für Euch ist und welche Hürden es in den Organisationen gibt, die diesen oder einen angepassten Ansatz unmöglich machen.

Chris

ppedv Team Blog: Offline Webapp Teil 3: Das HTML5 Cache Manifest

Im dritten und letzten Teil der Serie Offline-Webanwendungen gehen wir auf das HTML5 Cache Manifest mit Visual Studio 2013 ein. In Teil 1 wird das Grundgerüst für die responsive Webseite erstellt und in Teil 2 der Tutorialreihe, wird das localStorage Objekt aus HTML5 in die Anwendung eingebaut.

Der gesamte Sourcecode für die Webanwendung ist auch auf Githup zu finden.

Offline Webseite HTML5

Wie in diesem Blogbeitrag genauer beschrieben, bietet HTML5 die Möglichkeit Daten im Browser zu speichern. Außerdem haben Webbrowser standardmäßig eine Caching-Funktionalität, die Dateien am Client zur rascheren Wiederverwendung abspeichern können. Da diese Caching-Funktionalität leider oft von unterschiedlichen Faktoren abhängig ist und nicht immer ganz zuverlässig funktioniert, wurde in HTML5 das Cache-Manifest eingeführt, um Dateien offline verfügbar zu machen. Daraus resultieren drei wesentliche Vorteile:

1) Funktionalität der Webapp offline bereitstellen

2) Höhere Geschwindigkeit der Webanwendung

3) Auslastung des Servers verringern

Um das HTML5 Cache-Manifest verwenden zu können, müssen in unserem Projekt ein paar Vorkehrungen getroffen werden, die im folgenden kurz beschrieben werden.

Alle Webseiten, die offline zur Verfügung gestellt werden, müssen im <html> Tag, das App-Manifest deklarieren:

<!DOCTYPE HTML>
<html manifest="fuhrpark.appcache">
...
</html>


Weiters muss eine App-Manifest Datei mit der Endung .appcache angelegt werden. Diese Datei kann im Root Verzeichnis der Anwendung abgelegt werden und ist grundlegend folgendermaßen aufgebaut:

CACHE MANIFEST
# Cachbare Dateien angeführt werden
/Default.html
/js/script.js
/css/style.css
# Nicht cachbare Dateien
NETWORK
# Fallback Seite
FALLBACK
/offline.html


In einem dritten Schritt muss noch der IIS Server in Visual Studio konfiguriert werden, denn es ist wichtig, dass die App-Manifest Datei mit dem korrekten Medien-Typ “text/cache-manifest” beschrieben wird. In unserem Beispiel muss der folgende Code in die Web.config Datei eingefügt werden.

  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".appcache"      mimeType="text/cache-manifest" />
    </staticContent>
  </system.webServer>


Voilà, alle Schritte, um eine Webseite Offline verfügbar zu machen, wurden erfüllt. Abschließend kann die Webseite z.B. in Google Chrome mit RIPPLE Plugin auf die Anwendung mit mobilen Endgeräten getestet werden.

Offline Webapp Visual Studio

Den gesamten Source Code können Sie von Githup beziehen. Ein lauffähiges Beispiel dieser Anwendung finden Sie auf diesem Link. Viel Spaß beim Entwickeln!

ppedv Team Blog: Offline Webapp Teil 2: Lokaler Speicher

Nachdem wir im Blog Teil 1 das grundlegende responsive Layout für die offlinefähige Webanwendung mit Twitter Bootstrap erstellt haben, geht es in Teil 2 und Teil 3 um die Offline-Funktionalität von HTML5.

Der gesamte Sourcecode für die Webanwendung ist auch auf Github zu finden.

Nähere Informationen zu lokalem Speicher und Offlinefähigkeit in HTML5 können Sie in diesem Blogbeitrag nachlesen. Es muss nun zunächst das HTML-Grundgerüst angepasst, und das LocalStorage-Objekt eingebaut werden.

 

html5 offline lokaler speicher

 

Im Bereich ‘Erfassung der Kennzeichen’ müssen wir den Inputtype von submit auf button ändern, damit das Formular nicht bei jedem Buttonklick abgesendet wird:

<button id="btnSave" class="btn btn-success" type="button">
<span class="glyphicon glyphicon-plus"></span></button>


In einem nächsten Schritt muss die Tabellenausgabe der Kennzeichenliste so angepasst werden, dass sie anschließend mittels JavaScript dynamisch befüllt werden kann.

<!-- Listendarstellung der Kennzeichen -->
    <div class="container-fluid">
        <h3>Fahrzeugliste</h3>
        <div class="table-responsive">
            <table id="tblKennzeichen" class="table table-striped">
                <thead>
                    <tr>
                        <th>#</th>
                        <th>Kennzeichen</th>
                    </tr>
                </thead>
                <tbody>
                </tbody>
            </table>
        </div>
    </div>


Werfen wir nun einen Blick auf die Datei script.js, welche die eigentliche Funktionalität unserer Anwendung bereitstellt.

Interessant ist hier vor allem das dynamische Befüllen der Tabelle mittels JQuery.

// Keine Werte gespeichert anzeigen 
function drawNoData() { 
    $('#tblKennzeichen tbody').html(''); 
    $('#tblKennzeichen tbody').append('<tr><td>0</td><td>Keine Autos gespeichert</td></tr>'); 
} 

// Zeichne Tabellenzeilen 
function drawRows(data) { 
    var obj = jQuery.parseJSON(data); 

    $('#tblKennzeichen tbody').html(''); 

    $.each(obj, function (key, value) { 
        key = key + 1; 
        $('#tblKennzeichen tbody').append('<tr><td>' + key + '</td><td>' + value + '</td></tr>'); 
    }); 
}


Ein lauffähiges Demo finden Sie unter diesem Link, den Sourcecode können Sie von Github beziehen. Viel Spass mit Tutorial Teil 3. Hier wird das noch ausstehende Cache-Manifest mit Visual Studio 2013 besprochen.

codefest.at [MS]: ADC–Cross Plattform Konferenz in Wien (4.11.&5.11.2014)

Die ADC X ist seit 1997 die Konferenz für “advanced developer” im Microsoft Umfeld und gastiert mit dem Schwerpunkt Cross Plattform Entwicklung auch heuer wieder in Wien. Dabei präsentieren rund 20 Experten tagesaktuelle Themen aus den Bereichen Web, native Apps und Services.

Gerade die stark zunehmende Verbreitung von Smartphones und den damit einhergehenden Änderungen im Nutzerverhalten, erfordert umgehenden Support für mobile Geräte. Die Fragmentierung des Marktes stellt Entwickler und Entscheider vor neue  Herausforderungen. Diese Konferenz gibt die Antworten.

Die Sessions führen durch den Dschungel der JavaScript Frameworks und zeigen wie man mit geringen Aufwand auch native Apps entwickeln kann.

Details…

Für Studenten gibt es einige kostenfreie Tickets, bei Mithilfe am Auf und Abbau.

Zusätzlich stellt die ppedv ein gratis Ticket für Leser des Codefest Blogs bereit. Einfach eine Email an events@ppedv.de. Bei mehrfach Anfragen entscheidet das Los.

Martin Hey: Facebook zeigt falschen Vorschau-Content an

In der letzten Woche war mir aufgefallen, dass bei einer meiner Seiten der falsche Inhalt in der Vorschau angezeigt wurde. Das Problem hatte mehrere Ursachen.


1. IPv6
Das erste Problem ließ sich recht einfach lösen: Ich hatte in der Domain-Konfiguration noch einen AAAA-Record auf die IPv6  des Hosters gesetzt. Offenbar versucht Facebook einen Zugriff über IPv6 durchzuführen. Damit kam der Inhalt der Vorgabeseite des Hosters und damit auch ein hübsches rotes Verkehrszeichen als Bild, was mit meiner Webseite nun so überhaupt nichts zu tun hat.

2. Cache
Nun wurde es aber spannend. Die IP-Zuordnung war korrekt und trotzdem wurde noch der alte Inhalt angezeigt. Problem 2 ist, dass Facebook die Inhalte cacht. Das ist natürlich nur dann ein Problem, wenn man die Inhalte ändert. Glücklicherweise gibt es von Facebook ein Tool (das eigentlich einen anderen Zweck hat), aber hier sehr hilfreich ist - der Open Graph Object Debugger. Hier kann man die Url eingeben und sich ansehen, was Facebook daraus ausliest zum Erzeugen der Vorschau. Und man kann hier auch erzwingen, dass die Daten neu abgerufen werden.

3. Bilder
Letztes Problem bei mir waren Bilder. Auf vielen Webseiten ist es gerade üblich, im Header einen Slider mit Bildern zu haben. Diese Bilder findet auch der Crawler und möchte in der Vorschau eine Galerie anzeigen. Das ist aber nicht immer gewünscht. Nun kann man mit Meta-Informationen ein bestimmtes Bild erzwingen. Der entsprechende Metatag ist:

<meta property="og:image" content="http://komplette.url/zum/bild.jpg" />

Wichtig zu beachten: Das Bild muss mindestens 200 x 200 Pixel groß sein. Und: Größe und Seitenverhältnis definieren, ob das Vorschaubild links neben den anderen Metainformationen angezeigt wird (quadratisches Bild) oder ob sich das Bild über die komplette Breite des Posts zieht.

Sven Hubert: WordToTFS 4.3 veröffentlicht

Das Release von WordToTFS in der Version 4.3 steht zum Download bereit. Es gibt wieder neue Features sowie einige Bugfixes in dieser Version. Nachfolgend die Neuerungen im Überblick.

Neuerungen in WordToTFS 4.3

  • Pre und Post Operations
    • Es gibt eine neue Operation namens RefreshAllFieldsInDocument. Diese sorgt dafür, dass in Word verwendete Felder (z.B. Bookmarks) aktualisiert werden.
    • Pre und Post Operations können zudem nun auch für gesamte Test Specification Reports und Test Result Report verwendet werden.
  • Download von Testergebnissen
    • Im Test Result Report kann man für den Download der Testergebnisse nun zwischen zwei verschiedenen Modi bei der Ordnerbenennung entscheiden: WithGuid und WithoutGuid. Somit können Ordner nun in einer besser lesbaren Form angelegt werden.
  • Verbesserung der Nummerierung bei den Shared Steps
    • Für die Nummerierung der Shared Steps wird in Word eine Aufzählung verwendet, die automatisch die verschiedenen Aufzählungsebenen berücksichtigt.
  • Ausgabe der Parameter Values eines Test Cases
    • Im Test Result Report kann man nun je ausgeführtem Test Case die verwendeteten Parameter Values anzeigen lassen. Dabei wird die Anzeige je durchgeführter Testiteration gruppiert.
  • Variablen im WordToTFS Template
    • Man hat nun die Möglichkeit, im WordToTFS Template Variablen zu definieren, die man in den einzelnen FieldMappings wiederverwendet. Dies bietet die Möglichkeit, flexibel Dokumenteninhalte mittels der Konfiguration auszutauschen (siehe Abbildung 1)
      Abbildung 1: Variablen im WordToTFS Template
      Abbildung 1: Variablen im WordToTFS Template
    • Um die Variablen auch nutzen zu können, gibt es einen neuen FieldValueType namens BasedOnVariable. Felder die diesen neuen Typ haben, sind von der Synchronisierung ausgeschlossen.
  • WordBookmark in einzelnen Tabellenzellen
    • Mit dem neuen Attribut WordBookmark lassen sich pro Field Mapping in Word Bookmarks zur späteren Verwendung in Word generieren.
  • Bugfix Bildgröße
    • In einigen Fällen wurden Bilder bei jedem Speichern in den TFS erneut herunterskaliert, auch wenn dies beim vorherigen Publish bereits geschehen war. Dies hatte zur Folge, dass die Qualität der Bilder mit jedem Publish schlechter wurde. Dieser Fehler ist nun behoben.

 

Update laden

ACHTUNG: Das Update bezieht sich ausschließlich auf die Hauptversion 4. Details zu den Versionen sind auf der Webseite http://www.aitgmbh.de/wordtotfs zu finden.

Wer WordToTFS noch nicht installiert hat, kann sich unter vorher genannter URL kostenfrei registrieren und die Anwendung herunterladen.

Für alle Nutzer der Versionen 4.x:

WordToTFS sucht in der Standardinstallation regelmäßig nach Updates. Wenn Ihnen diese Zeit zu lange dauert, können Sie das Update auch manuell starten. Dazu einfach in Word im WordToTFS Ribbon den Update Button (siehe Abbildung 9) betätigen.

Abbildung 2: Update manuell starten

Abbildung 2: Update manuell starten

Sie können ganz leicht feststellen, ob die aktuelle Version installiert ist. Dazu einfach den About-Dialog über das WordToTFS Ribbon öffnen. Sehen Sie dort die Version 4.3.* (siehe Abbildung 10), wurde das Update bereits erfolgreich installiert.

Abbildung 3: About-Dialog mit der neuen Versionsnummer

Abbildung 3: About-Dialog mit der neuen Versionsnummer

Wir freuen uns über jegliches Feedback zu WordToTFS. Gerne stehen wir Ihnen zur Seite, sprechen Sie uns einfach an.

WordToTFS 4.3 veröffentlicht is a post from: AIT Blog

ppedv Team Blog: Offline Webapp Teil 1: Twitter Bootstrap und Visual Studio 2013

In diesem dreiteiligen Blogbeitrag zeigen wir euch, wie man ‚from scratch‘ eine einfache responsive Webseite erstellt. Im ersten Teil wird die Erstellung der Webapp mit dem Framework Twitter Bootstrap demonstriert. Anschließend, im zweiten und dritten Teil dieser Blogserie, optimieren wir die Webanwendung für eine Offline-Verwendung.

Ausgangspunkt für unsere mobile Webseite ist das folgende Szenario: In einem Beispielunternehmen gibt es einen Fuhrpark, der regelmäßig erfasst werden soll. Die Kennzeichen der Fahrzeuge müssen erfassbar sein. Eine Datenbankanbindung ist jedoch vorerst nicht eingeplant. 

Im ersten Schritt fertigen wir ein Mockup an, das die Webseite kurz skizziert. Um schnell Mockups zu zeichnen, eignet sich zum Beispiel Microsoft Word mit seinen Zeichenwerkzeugen.

Mockup Fuhrpark

 

Als nächstes stellen wir sicher, dass auf unserem Rechner die notwendigen Entwicklungswerkzeuge installiert sind. Für die Erstellung dieser Webseite verwenden wir hier Microsoft Visual Studio 2013 in Verbindung mit Google Chrome und dem RIPPLE Plugin zum Testen für das mobile Web.

In Visual Studio 2013 erstellen wir als Projekt eine neue ASP.NET Empty Web Application und importieren die notwendigen Bibliotheken, also Twitter Bootstrap (3.2.0) und JQuery (2.1.1). Wenn es darum geht, eine möglichst leichtgewichtige und vorrangig mobile Webseite zu erstellen, würde ich zu Zepto.js anstatt von JQuery raten. Das Framework hat die exakt gleiche Funktionalität wie JQuery und ist um einiges kleiner, funktioniert aber nur in modernen Browsern, wie dem Internet Explorer 10+.

Die folgende Grafik zeigt die grundlegende Projektstruktur in Visual Studio:

Projektstruktur

In der Default.html Webseite werden im <head> Bereich die Dateien bootstrap.min.css und die Datei styles.css geladen und vor dem schließenden </body> Tag, die notwendigen JavaScript-Dateien. Im <head> Bereich wird weiter der Metatag Viewport für die Webanwendung gesetzt, um ein optimales Rendering und Zoomverhältnis auf dem Client zu ermöglichen.

<meta name="viewport" content="width=device-width, initial-scale=1, 
maximum-scale=1, user-scalable=no" />


Das Framework Bootstrap, aus dem Hause Twitter, unterstützt seit der Version 2.0 Entwickler bei der Erstellung von responsiven Webseiten, also der Webentwicklung für unterschiedlichste Auflösungen. Die einzelnen Seitenabschnitte Kopfzeile, Erfassungsmaske und Listenausgabe werden in <div> Elemente eingehüllt, die von Twitter Bootstrap mittels CSS-Klassen bearbeitet werden.

<div class="container-fluid">
	<!-- Weitere Elemente -->
</div>


Twitter Bootstrap stellt außerdem eine Vielfalt an Controlls und Grafiken zur Verfügung. Das folgende Codebeispiel zeigt exemplarisch einen Button im Formular:

<button class="btn btn-success" type="submit"><span 
class="glyphicon glyphicon-plus"></span></button>


Tabellen können auch mit Twitter Bootstrap responsiv gestaltet werden. Dafür muss einfach das entsprechende Class-Element im HTML angefügt werden.

<div class="table-responsive">
    <table class="table table-striped">
	<!-- Tablehead und Tablebody -->
    </table>
 </div>

 

Die fertige responsive Webanwendung kann schließlich mit dem RIPPLE Plugin in Google Chrome getestet werden. Dazu einfach aus Visual Studio 2013 die Webanwendung mit Google Chrome starten, das Plugin aktivieren und die gewünschte Zielplattform z.B. iPhone 5 wählen und lostesten!

Bootstrap Visual Studio 2013 Webapp

Der Sourcecode für diesen ersten Teil der Blogserie kann auf JSFiddle genauer analysiert werden:

http://jsfiddle.net/KonstantinK/zzuzjfyr/

In Teil 2 und Teil 3 analysieren wir für euch die Offline-Fähigkeit in einer Webanwendung etwas genauer.

friends header

bloggers headline

links header

 
Don't contact us via this (fleischfalle@alphasierrapapa.com) email address.