ppedv Team Blog: SharePoint – Nutzungsmöglichkeiten (Teil 2)

Social Features

In SharePoint 2013 gibt es die MySite. Das ist ein zentraler Bereich, den jeder Mitarbeiter als seinen persönlichen Startpunkt ins Intranet ansehen kann und an diesem er über alle Neuigkeiten, Änderungen oder ihn betreffende Updates, sowie Aktivitäten seiner Kollegen informiert wird. Für den Newsfeed gibt es sogar eine App fürs Smartphone.

image

Außerdem bietet Lync die Möglichkeit direkt aus Sharepoint mit Kollegen zu kommunizieren. Sei es direkt über Lync, also Instant-Messaging oder Videotelefonie, oder über Outlook.

image

Newsfeed

Newsfeeds gibt es an vielen Stellen im Sharepoint. Zum einen steht jeder erstellten Website im Standard ein Newsfeed zur Verfügung, aber auch unsere MySite hat einen Newsfeed. In diesem werden alle Informationen übersichtlich dargestellt, von Personen oder Gruppen denen ich folge. Das ist vergleichbar mit den Neuigkeiten in Facebook. Dort werden auch alle relevanten Informationen von Personen mit denen ich befreundet bin oder Seiten die ich geliked habe angezeigt.

image

Auf der rechten Seite gibt es zusätzlich noch eine Übersicht über alle Personen, Dokumenten, Websites oder Kategorien denen ich momentan Folge. Durch einen klick auf den jeweiligen Punk öffnet sich ein Untermenü zur Bearbeitung.

image

Ich kann die MySite aber noch viel weiter individualisieren indem ich mir meinen Kalender anzeigen lasse, meine Kontakte darstellen oder eine Verknüpfung zu Outlook herstelle. Dadurch kann ich die MySite so einstellen, dass Sie mir auf einen Blick alle für mich relevanten Informationen anzeigt.

OneDrive

Ich kann direkt in Sharepoint meine Daten von OneDrive Business anzeigen, bearbeiten oder mit anderen Benutzern teilen. Sofern eingestellt, bietet OneDrive auch die Möglichkeit meine Dokumente offline verfügbar im Windows-Explorer zu speichern, sodass ich auch ohne Internetverbindung Zugriff auf diese habe.

image

Uli Armbruster: Programmieren – aber bitte nur von 8-17 Uhr

Zu meinem letzten Blogbeitrag Was ist denn bitte ein C# Experte gab es auf Twitter noch eine Diskussion darüber, ob der Job eines Entwicklers ein 8-17 Uhr Beruf ist. Dieser Beitrag soll eher dem Gespräch dienen, weil Twitter dazu nicht geeignet ist. Ich kann mir vorstellen, dass es hierzu bei 5 Personen 6 Meinungen geben wird. Konsequenterweise wird es deshalb in Betrieben auch häufig zu Problemen kommen, wenn völlig unterschiedliche Meinungen und Ansätze herrschen. Ich sage dazu:

Entwickeln ist keine 8-17 Uhr Tätigkeit.

Was ich aber damit meine: Es sollte keine feste Grenzen geben, da ich als Entwickler nicht auf Knopfdruck kreativ sein kann. Ein Maler kann genauso wenig immer von Montags bis Freitags von 8-17 Uhr Bilder kreieren. Ich treffe damit keinerlei Aussage darüber, ob mehr als 8 Stunden gearbeitet werden sollen. Oder weniger. Vielmehr glaube ich:

Nur Ergebnisse sind entscheidend, nicht die aufgebrachte Zeit

In dem Sinne: Work smart, not hard. Ich bin auf eure Meinungen gespannt!


Einsortiert unter:CIO Topics, German, Personalführung Tagged: Stellenausschreibung

Kay Giza [MS]: Microsoft auf der W-JAX 2014: Gewinnspiel, Infos, Session - eine Zusammenfassung

Vom 4. bis 6. November 2014 findet in München die W-JAX 2014 statt (die Konferenz für Java- & Enterprise-Technologien). Wir von Microsoft sind ebenfalls vor Ort, mit einem Stand, Microsoft-Experten, einem großen Gewinnspiel und zahlreichen Informationen, Gutscheinen und vielem mehr. In diesem Blogpost finden Sie eine Zusammenfassung... [... mehr auf Giza-Blog.de]


This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2013 Kay Giza. All rights reserved. Legal

Alexander Schmidt: TechEd 2014 Tag 2

Ein paar Bemerkungen zu Tag 2 auf der TechEd Europe 2014 und grundsätzliches zu dieser Veranstaltung.

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

Uli Armbruster: Tipps zum Customer Relationship Management in kleinen und mittleren Unternehmen

Mit folgendem Webcast möchte ich kleine und mittlere Unternehmen (KMU) einen groben Überblick geben, was es bei der Auswahl von Customer Relationship Management (CRM) Systemen zu beachten gilt. In 20 Minuten mache ich eine kurze Analyse und erkläre den unterschied von funktionalen und nicht-funktionalen Anforderungen. Dabei ist es wichtig zu wissen, dass die nicht-funktionalen zwar nicht sichtbar sind, aber durchaus teuer werden können. Am Schluss nenne ich dann einige Produkte, die sich primär in interne und externe Lösungen (Stichwort Cloud) kategorisieren lassen. Bei der Auswahl wird dann der Rückschluss auf die Anforderungsanalyse gezogen.

 

Hier geht es zum Video. Wer sich fragt, welches Programm ich zur Aufbereitung verwende. Es handelt sich um den MindManager der Firma MindJet.

CRM

Hier sind noch weiterführende Informationen:


Einsortiert unter:CIO Topics, German, Projects Tagged: Beratung, CRM, Video

Alexander Schmidt: TechEd 2014 – Erste Eindrücke

Erste Eindrücke von Tag 1 der TechEd 2014 in Barcelona.

Holger Sirtl: Event-Tipp: Webinar “Eine Einführung in Microsoft Azure”

Für alle, die sich am ersten Überblick über Microsoft Azure verschaffen wollen, habe ich einen Event-Tipp: Morgen werde ich im Rahmen eines Webinars eine Einführung in Microsoft Azure geben. Dabei gehe ich auf die absoluten Grundlagen ein, d.h. Es wird mehr um einen Überblick als um eine tiefen Einstieg in Bits und Bytes geben. Das Webinar richtet sich demnach an alle, die gerade in Microsoft einsteigen oder eine Testphase in Erwägung ziehen.

image

Das Webinar findet am Donnerstag, den 30. Oktober 2014 von 14:00-15:00 Uhr statt.

Inhalt wird unter anderem sein:

  • Die Historie von Microsoft Azure
  • Die Infrastrukturdienste von Microsoft Azure
  • Die Plattformdienste von Microsoft Azure
  • Kleine Demos, die zeigen, wie man sich in Microsoft Azure zurecht findet

Weitere Informationen

Karsten Kempe: Visual Studio Integrate – Rest API, OAuth & Service Hooks

channel-9-logoIm Mai dieses Jahres habe ich zum ersten Mal über die Integrationsfähigkeit von Visual Studio Online zu anderen Tools und Services, sowie dessen Anbindung an mobile Geräte, berichtet. Die Rest API befindet sich zwar immer noch im Preview-Stadium, große Teile davon können jedoch schon benutzt werden. Zusammen mit Christian Binder (Technical Evangelist und ALM Architect von Microsoft) und Ulrike Stirnweiß (Senior Developerin der conplement AG) habe ich ein Video zum Thema “Visual Studio Integrate” aufgenommen, welches inzwischen in der TechTalk Videothek auf Channel 9 veröffentlicht wurde. Viel Spaß beim Anschauen!

Ausschlaggebend für dieses Video war, dass Marco Richardson, Ulli Stirnweiß und ich einen Showcase entwickelt haben, der die Technologien der Visual Studio Integration Plattform verwendet – Rest API, OAuth und Service Hooks. Im TechTalk zeige ich euch an Hand unseres Showcases, wie man Visual Studio Online sinnvoll erweitern kann, und gebe Euch ein paar Basics im Umgang mit der neuen Rest API, mit der Authentifizierungsvariante OAuth und mit den Service Hooks. Ulli Stirnweiss zeigt Euch außerdem einige Code-Snippets und verrät nützliche Tipps. Aber seht selbst!

In den nächsten Wochen werden Ulli und Ich einige weitere Beiträge zu Visual Studio Integrate veröffentlichen, in denen Ihr weitere Tipps und Tricks finden könnt.

[1] http://www.visualstudio.com/integrate/get-started/get-started-overview-vsi

[2] http://channel9.msdn.com/Blogs/TechTalk/Episode-16-TFS-Online-REST-API

 

ppedv Team Blog: SharePoint – Nutzungsmöglichkeiten (Teil 1)

In dieser Reihe von Blogartikeln soll es um die Ziele und den Nutzen von SharePoint gehen.

 

Microsoft Content Management

In den letzten Jahren ist die Organisationen verschiedener Inhalte immer schwieriger geworden. Das liegt auch daran, dass die Inhaltquellen immer unterschiedlicher werden. Waren es früher nur Dokumente und E-Mails, kommen heutzutage noch unzählige andere Daten aus Videos, Websites, Sofortnachrichten und vielem anderen hinzu. Die Strukturierung dieser Daten ist oftmals ein großes Hindernis, welches das effektive Nutzen dieser Daten deutlich erschwert und somit die Produktivität des Unternehmens verringert.

Integrierte Funktionen wie die Workflows vereinfachen die Arbeit mit wiederkehrenden Prozessen deutlich und minimieren Arbeitszeit und Fehleranfälligkeit. Damit lassen sich diverse Genehmigungsvorgänge wie Urlaubsanträge, Spesenabrechnung, etc. ohne E-Mail-Verkehr lösen.

image

Außerdem lassen sich endgültige Dokumente automatisch nach den gesetzlichen Bestimmungen und Unternehmensrichtlinien abspeichern. Überwachungsprotokolle geben zudem den Nachweis der ordnungsgemäßen Speicherung gegenüber externen Prüfern. Außerdem lassen sich bestimmte Datensätze mit einer Sperre belegen, welche sie vor dem löschen schützen.

image

Dokumentenverwaltung

Mit strukturierten Inhalten innerhalb eines zentralen Dokumentenrepositories lässt sich durch die integrierte Suche und die Möglichkeit durch Dokumente zu navigieren viel Zeit sparen.  Außerdem lassen sich vertrauliche Informationen, mit der integrierten Rechteverwaltung, vor unbefugten Zugriff schützen. Zusätzlich können Sie mit DokumentenWorkflows den Werdegang des Dokuments beobachten und sich Warnmeldungen oder Aufgaben anzeigen lassen.

image

Websiteverwaltung

Durch benutzerfreundliche Bereitstellungstools lassen sich Websiteinhalte einfach und schnell, von berechtigten Benutzern und  ohne Eingriff der IT-Abteilung, verfassen und veröffentlichen. Dabei wird ein einheitliches Erscheinungsbild beibehalten, welches von dem Unternehmen selbst erstellt und implementiert werden kann. Auch die Navigation muss nur einmal zentral erstellt werden.

image

Formularverwaltung

Mit Workflows können Sie manuelle Prozesse automatisieren und so Ihre Geschäftsprozesse optimieren. Es besteht auch die Möglichkeit mit InfoPath eigene elektronische Formulare zu erstellen und diese einheitlich zu verteilen. Um die Dauer von Ausfallzeiten zu minimieren lassen sich Formulare außerdem parallel aktualisieren.

image

 

 

Kay Giza [MS]: T-14: Microsoft Technical Summit in Berlin (Konferenz: 11.-13.11.14)

In zwei Wochen findet vom 11. bis 13. November 2014 in Berlin die wichtigste deutschsprachige Konferenz für Entwickler und IT-Professionals von Microsoft statt: Microsoft Technical Summit 2014: Pure Technology Ich werde auch vor Ort sein und mich über Ihren Besuch am Microsoft Stand sehr freuen. Was gibt es zwei Wochen vor dem Technical Summit zu berichten? Hier eine kurze Zusammenfassung von... [... mehr in diesem Blog-Eintrag auf Giza-Blog.de]


This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2013 Kay Giza. All rights reserved. Legal

Hendrik Lösch: Überblick: Multiplattformentwicklung mit Microsoft

Schon vor einigen Monaten habe ich auf dem Saxonia Forum, einer Veranstaltung bei der mein Arbeitgeber die Saxonia Systems AG ihren Kunden Trends und Technologien vorstellt, einen Vortrag darüber gehalten wie mit Microsoft Technologien plattformübergreifend entwickelt werden kann. Auch wenn der Vortrag selbst bei Youtube schon einige Wochen verfügbar ist, habe ich bisher nicht darauf […]

Fabian Deitelhoff: Portable Class Library: Unterschiede der Profile

Kürzlich habe ich einige Beiträge zu Portable Class Libraries verfasst. Jedes Mal, wenn ich darüber geschrieben habe, war ich mir nicht ganz sicher, wo ein Profil einsetzbar ist und was die Hauptunterschiede sind. Nach kurzer Recherche mittels Google bin ich auf die Seite http://embed.plnkr.co/03ck2dCtnJogBKHJ9EjY/preview gestoßen.

Hinter der URL verbirgt sich eine simple Seite, die alle Portable Class Library-Profile auflistet. Der Stand ist auf dem Niveau von Visual Studio 2013, Update 2 mit Xamarin 3. Standardmäßig werden sogenannte Legacy-Profile ausgeblendet. Damit sind Profile gemeint, die beispielsweise nicht die Klasse HttpClient beziehungsweise die Schlüsselwörter async/await unterstützen. Neben der Profil-Nummer, dem Namen und den unterstützten Frameworks, ist auch das jeweilige NuGet-Target aufgeführt. Unter diesem Target, respektive Verzeichnis, befinden sich die Assemblies, wenn das Profil zum Einsatz wird.

Ich finde die Seite sehr übersichtlich. Da es sich – so vermute ich zumindest – um ein Community-Projekt handelt, kann ich nicht genau sagen, wie aktuell die aufgeführten Daten sind. Mir hat die Aufstellung allerdings schon des Öfteren geholfen und für einen ersten Überblick ist die Seite immer einen Blick wert.

Uli Armbruster: Was ist denn bitte ein C# Experte?

Die Bezeichnungen Senior Developer, Solution Architect und wie sie alle heißen sollen andeuten, dass es sich um jemanden mit Erfahrung handelt. In dem ein oder anderen Bewerbungsschreiben lese ich dann auch gerne “Experte”. Für mich sind das aber – und ich denke der Leser stimmt mir zu – alles relative Aussagen. Vor allem in Anbetracht der Produkt- und Themenvielfalt in der Programmierung.

Sicherlich kennt (wohlgemerkt: kennt, nicht kann) kein .NET Experte alle Programmiersprachen. Dann brechen wir das weiter runter. Sicherlich kennt kein C# Experte alle .NET Klassen. Ok, dann brechen wir es nochmal weiter runter. Sicherlich kennt kein C# BCL Experte die ganzen Facetten der Klasse String (Anmerkung: Wenn ein Leser dies anzweifelt, dann möge er sich diesen Artikel zu Gemüte führen).

Von daher tue ich mich logischerweise schwer, wenn ich von solchen Jobtiteln lese. Nichtsdestotrotz habe ich eine unsere Stellenausschreibungen genauso tituliert. Damit wollte ich ausdrücken, dass wir nach Kandidaten suchen, die sich schon längere Zeit mit der Materie beschäftigen. Ein wenig präziser schreibe ich: “Mindestens 5-jährige Berufserfahrung”. Erfahrung bedeutet nicht gleich tiefgreifende Kompetenz oder überragendes Know How. Ich hoffe der geneigte Leser stimmt mir zu. Aber für ein ganz grobes Profil und die Vermeidung völlig ungeeigneter Bewerbungen (wenn denn überhaupt so viele da wären…) muss das reichen.

Jetzt stellt sich mir die Frage wie sich ein sagen wir mal ausbaufähiges Fundament feststellen lässt. Krisztina nennt in ihrem Blogbeitrag ‘Are you nerd enough to code with us’ z.B. Clean Code, SOLID, TDD, etc.. Klar ist, dass mit den eigenen Ansprüchen vorsichtig umgegangen werden sollte. 100%ige Profiltreffer oder Kandidaten, die uns stark ähneln, gibt es nicht. Ganz abgesehen davon gingen bei einer homogenen Abteilung die Benefits des Melting Pots verloren. Den Mehrgewinn durch Vielfalt. Was suche ich also? Ich versuche es beispielhaft an der deutschen Sprache festzumachen: Wer unserer Sprache mächtig ist (Grammatik, Rechtschreibung, Umfang), der wäre für mich ein geeigneter Kandidat, wenn es darum ginge unseren schönen badischen Dialekt zu erlernen.

Und dabei setzt nun meine eigentliche Frage an: Woran mache ich es fest, dass jemand besagtes solides Fundament beherrscht. Im übertragenen Sinne die deutsche Sprache. Letzteres ist übrigens genauso schwierig zu prüfen, wie ersteres. Hier ein paar Beispiele, die ich zur Diskussion stelle:

  • Ist das Schlüsselwort ‘yield’ bekannt?
  • Worauf soll ich achten, wenn ich Programmcode gemäß dem Don’t Repeat Yourself-Prinzip analysiere
  • Wozu dient das MVVM Entwurfsmuster im Kontext von WPF

Klar ist, dass die Fragen zum Themenschwerpunkt des Bewerbers passen sollten. Jemand, der bisher nur Backend-Code geschrieben hat, kennt sich verständlicherweise nicht mit WPF und MVVM aus. Nach 5 Jahren Entwicklung sollte aber jeder Entwickler (sogar PHP Developer Zwinkerndes Smiley) das DRY-Prinzip kennen.

Was meint ihr? Wie lotet ihr das aus? Habt ihr auch die Situation, bei der ihr denkt: Also die Bewerbung hat überhaupt nicht gepasst? Eione kleine Bitte noch: Fachkräftemangel ist ein Thema für sich. Darum geht es mir in diesem Artikel nicht. Wer sich dafür interessiert, findet dieses Video vielleicht interessant.


Einsortiert unter:CIO Topics, Development, German Tagged: heco, Stellenausschreibung

ppedv Team Blog: Geo-Location Felder mit Google API befüllen

Die Idee ist ganz simpel. Da SharePoint nun Geo-Location Felder bietet (siehe mein Blogeintrag zu Geo-Location) möchte ich die Koordinaten einer Adresse automatisch über ein Webservice von Google ermitteln lassen und in die Liste eintragen. Dafür verwende ich einen Workflow der beim Anlegen eines Listen-Items automatisch gestartet wird.

Zunächst wird die Liste im Visual Studio mit dem Editor angelegt:

image

Zu beachten sind die beiden Felder “Location” und das hidden-Field: “LocationTXT”. Dieses wird aufgrund einer Einschränkung der Workflow Engine benötigt. Location-FieldValues können nicht per Workflow gesetzt werden. Dazu später noch mehr.

Workflow

Der Workflow wird zusammen mit der Liste in einem SharePoint Projekt definiert. Im wesentlichen werden aus dem aktuellen Item die Felder Straße, Ort, PLZ und Land ermittelt und in Workflow Variablen geschrieben.

Dann setze ich die URL für den Serviceaufruf zusammen. Im ersten Schritt wird die Adressangabe zusammen gesetzt:

image

Der gesamte Ausdruck ist: Strasse.Replace(" ","") +"+" + PLZ + "+" + Ort + "+" +Land

Google erwartet alle Wörter durch + getrennt.

Die gesamte Uri wird so zusammengesetzt:

image

Der Ausdruck ist:  "http://maps.googleapis.com/maps/api/geocode/json?address=" + URLAddress

Danach wird ein http-Send aufgerufen. Als URI wird der zuvor gebildete Ausdruck verwendet. Wird das Googl API mit unserer Adresse in Wien, 150 Märzstrasse 1, aufgerufen erhalten wir folgendes Json-Objekt:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "1",
               "short_name" : "1",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Maerz Street",
               "short_name" : "Maerz Street",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Rudolfsheim-Fünfhaus",
               "short_name" : "Rudolfsheim-Fünfhaus",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Vienna",
               "short_name" : "Vienna",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Vienna",
               "short_name" : "Vienna",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Austria",
               "short_name" : "AT",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "1150",
               "short_name" : "1150",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "Maerz Street 1, 1150 Vienna, Austria",
         "geometry" : {
            "location" : {
               "lat" : 48.2006027,
               "lng" : 16.3370802
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 48.20195168029149,
                  "lng" : 16.3384291802915
               },
               "southwest" : {
                  "lat" : 48.1992537197085,
                  "lng" : 16.3357312197085
               }
            }
         },
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

 

D.h. im Object “geometry” finden wir Länge und Breite der Position. Nun kann der Response in seine Einzelteile zerlegt werden. Hierfür bietet die Activity “GetDynamicValueProperties” die richtigen Möglichkeiten. Es wird der Pfad im JSon-Objekt angegeben und der Inhalt in eine Variable geschrieben. Die Einstellungen sind hier:

image

Nun stehen uns innerhalb des Workflows die Variablen lat und lng mit den Werte zur Verfügung.

Update des Geo-Location Feldes

Innerhalb einer Listen Deklaration mit XML kann ein Wert für ein Location Feld mit “POINT(lng, lat)” angegeben werden. Leider kann ich diesen Textausdruck nicht mittels ItemUpdate aus dem Workflow heraus in die Liste schreiben. Es gibt noch die Möglichkeit per REST-API Werte zu schreiben, aber ob über diesen Weg die Location geschrieben werden kann ist fraglich. Ich habe es noch nie probiert.

Nachdem meine Lösung bereits eine Farm-Solution ist, habe ich einen kleinen Umweg über einen Event-Receiver gewählt. Der Workflow schreibt in das Feld “LocationTXT” die Variablen Inhalte von “lng” und “lat”, zur Trennung wird ein Pipe (|) verwendet. Der Event-Receiver erstellt den Location-Datentyp und schreibt diesen in das Location-Feld.

Der Code für den Event-Receiver:

    public class SetLocationFieldValue : SPItemEventReceiver
    {
        /// <summary>
        /// An item is being updated.
        /// </summary>
        public override void ItemUpdating(SPItemEventProperties properties)
        {
            base.ItemUpdating(properties);
            string txt = (properties.AfterProperties["LocationTXT"] ?? "").ToString();
            string[] teile = txt.Split('|');
            double lat = 0;
            double lng = 0;
            double.TryParse(teile[0].Replace(".",","), out lng);
            double.TryParse(teile[1].Replace(".", ","), out lat);

            SPFieldGeolocationValue v = new SPFieldGeolocationValue(lat, lng);
            properties.AfterProperties["location"] = v;
        }
    }

 

Als Ergebnis haben wir nun eine Liste, in der automatisch die Geo-Location Information aus der eingegebenen Adresse ermittelt wird.

Dieses und ähnliche Beispiele für SharePoint – CrossPlattform stelle ich am 4.11.2014 in Wien bei der ADXC, der Konferenz für Cross Plattform Development (www.adcx.ms/wien) vor.

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

Holger Schwichtenberg: Microsoft streicht Sprachfeatures aus C# 6.0 und Visual Basic 2015

Primärkonstruktoren und die Deklaration innerhalb von Ausdrücken werden zurückgestellt.

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

Code-Inside Blog: Using WebDeploy as Non-Admin

The goal of this post is to enable WebDeploy for Non-Admin & IIS Users.

IIS Requirements

Of course: WebDeploy itself - install this via the Web Platform Installer. Keep in mind that the “Non-Admin” WebDeploy Stuff will only work on Windows Server SKUs.

Make sure you install everything from the Web Deploy Installer!

x

A common problem is that the “Management Service Delegation” is missing. If this is the case, please check if it is installed.

IIS Manager

If everything is installed you should see “IIS Manager Permissions”, “IIS Manager Users”, “Management Service” and the “Management Service Delegation”.

x

IIS Manager: Management Service - “Enable remote connections”

After the installation make sure the Management Service is running and the the default Port 8172 is not blocked on the Firewall and that “Enable remote connection” is checked.

x

IIS Manager: Management Service Delegation

Inside the Management Service Delegation you can create rules for the Deployment. You need this “Delegation” feature because this service is in charge of the actual deployment process. Your “Non-Admin” account has no rights, but with the correct rules the service will make those changes.

x

These rules were already included in my Azure VM, but the most important one is the “contentPath, iisApp”-provider-rule:

x

With this in place you can deploy into an existing application.

IIS Manager: Setup Users and manage the permissions inside the site

Now the basic setup is done and you will need to create users in the “IIS Manager Users”.

x

Now go to you site and add the user to the “IIS Manager Permission” list.

x

Testing with Visual Studio

The best way to test it is via Visual Studio. Make sure you just write the Server name in the “Server” textbox - without HTTP://…. Otherwise you will may see this Error Message “Error Code: ERROR_USER_NOT_ADMIN”. Non-Admin Deployment is only supported via HTTPS, even if the certificate is not valid, the deployment will work, but if you try to connect via HTTP you will get this error. This was a hard learning experience for me.

x

Hope this helps!

Maybe it can help you too.

codefest.at [MS]: Unity kommt nach Wien

Nachdem ihr schon einiges über Game Development hier gefunden habt, kommt jetzt die nächste spannende Veranstaltung. Am 6. und 7. November veranstaltet Subotron Workshops gemeinsam mit einem Evangelisten von Unity, der nach Wien einreist, um Euch Rede und Antwort zu stehen.

Am 6.11 findet ein Hands-On Lab für Unity mit Andy Touch statt. Am 7.11. habt ihr dann die Gelegenheit einzelne Projekt im Workshop mit Andy durchzugehen.

Wenn ihr viel mit Unity arbeitet, dann lasst Euch diese Chance nicht entgehen. Um Anmeldungen wird gebeten. Mehr Infos findet hier für das Hands-On Lab und den Workshop.

Und nicht vergessen, mit Spielen, die ihr in den Windows/Phone Store diesen Monat noch einreicht, habt ihr die Möglichkeit noch tolle Preise zu gewinnen!

Code-Inside Blog: WinJS for Windows Store Apps: Free eBook, Videos and how you could use it with Angular.js

With the “new” Universal Apps and the outlook of a single platform with Windows 10 I’m still not happy with the combination of XAML and C#. The problem is not C# - just let me say that I’m not a huge fan of XAML. So lets see how WinJS might work. Microsoft published a free eBook recently about WinJS and I found some other interesting videos.

Free ebook: Programming Windows Store Apps with HTML, CSS, and JavaScript, Second Edition

The eBook is available on the Microsoft Virtual Academy as a simple PDF - no signup required.

Channel 9 Serie

There are 2 episodes about WinJS development on Channel 9

Build 2014: WinJS and Windows Phone

This session “What’s new in WinJS: The Road ahead” was in the Build 2014 lineup and shows how you can use WinJS in Windows Phone Apps (as Univeral App I guess) and the current roadmap.

Using WinJS with Angular.js?

You can’t talk about Javascript Apps without mentioning Angular.js. The Javascript Engine running your JS App on Windows 8 and Windows Phone 8.1 has some limitations based on security reasons. As far as I know you can’t use the pure Angular.js in Windows Store Apps, but there is a project on GitHub to smooth the experience.

Also Iris Classon blogged about a demo app with WinRT components, Angular.js and WinJS on Windows Phone 8.1.

If you are still interested in WinJS you might want to check out these sites:

Manfred Steyer: Klassenbasierte Middleware für Web-Apps und Web-APIs in ASP.NET MVC 6 mit vNext

Neben der im letzten Beitrag gezeigten funktionalen Möglichkeit zur Umsetzung einer Middleware-Komponente kann der Entwickler hierzu auch auf das objektorientierte Paradigma zurückgreifen. Auch diese Komponenten können in sämtlichen vNext-Projekten, darunter MVC-6-Projekten, welche auch die Möglichkeiten der Web API beinhalten, genutzt werden. Hierzu definiert er eine Klasse, wie jene im nächsten Listing. Per Definition nimmt der Konstruktor eine Instanz von RequestDelegate entgegen. Dieses Delegate zeigt auf eine Funktion, die die nächste registrierte Middleware zur Ausführung bringt. Der Konstruktor kann darüber hinaus auch noch weitere Objekte erwarten. Beispielsweise erwartet die betrachtete Middleware auch eine Instanz des im nächsten Abschnitt genauer betrachteten Interfaces IConfiguration, mit der sie auf Konfigurationseinträge zugreifen kann.

Neben dem Konstruktor hat eine klassenbasierte Middleware auch eine asynchrone Methode Invoke, welche einen HttpContext erwartet und einen Task retourniert, aufzuweisen. ASP.NET vNext ruft diese Methode auf, um die Middleware zu aktivieren.

Wie schon die im letzten Abschnitt betrachtete Middleware, prüft auch diese, ob der Aufrufer einen gültigen Zugriffs-Code übergeben hat. Diese Prüfung findet jedoch nur statt, wenn über die Konfiguration ein anonymer Zugriff verboten wurde. Wurde ein anonymer Zugriff erlaubt oder war der Zugriffs-Code korrekt, bringt die Middleware über den Delegate next die nächste registrierte Middleware in der Aufrufkette zur Ausführung. Ansonsten wird die Anfrage mit dem Statuscode 401 (Unauthorized) beendet.

public class VerySimpleAccessCodeMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IConfiguration _configuration;

    public VerySimpleAccessCodeMiddleware(RequestDelegate next, 
                                            IConfiguration configuration)
    {
        _next = next;
        _configuration = configuration;
    }

    public async Task Invoke(HttpContext context)
    {

        string allowAnonymous = _configuration.Get("access:anonymous:allow");
        if (allowAnonymous == null) allowAnonymous = "false";
        bool bAllowAnonymous = Convert.ToBoolean(allowAnonymous);

        if (!bAllowAnonymous) {

            string accessCode = context.Request.Query["accessCode"];

            if (accessCode != "geheim") {
                context.Response.StatusCode = 401; // Unauthorized
                context.Response.Headers.Append("WWW-Authenticate", "AccessCode");
                return;
            }
        }

        await _next(context);
    }
}

Um eine klassenbasierte Middleware zu registrieren, verwendet der Entwickler die Erweiterungsmethode UseMiddleware, welche innerhalb des NuGet-Pakets Microsoft.AspNet.RequestContainer im Namespace Microsoft.AspNet.Builder zu finden ist. An den ersten Parameter übergibt er den Typ der Middleware; an alle anderen Parameter jene Objekte, die ASP.NET vNext an den Konstruktor dieser Middleware übergeben soll. Demnach wird die Middlware wie folgt registriert, wenn man davon ausgeht, dass config eine Instanz von IConfiguration ist.

app.UseMiddleware(typeof(VerySimpleAccessCodeMiddleware), config);

Manfred Steyer: Unterlagen zu meinem Vortrag über die Zukunft von ASP.NET und MVC 6 inkl. Web API am Microsoft Pizza-Abend in Graz

Nachfolgend findet man die Unterlagen (Programmbeispiele und Folien) meines Vortrags zu ASP.NET vNext und MVC 6, welches auch ASP.NET Web API beinhalten wird, beim Microsoft Pizza-Abend an der FH CAMPUS 02 im Oktober 2014 gehalten habe.

Darüber hinaus platziere ich nachfolgend noch mal den besprochenen Rabatt-Code, mit dem man noch bis DI, 28. 10. 2014 unseren Infotag zur Zukunft von .NET vergünstigt buchen kann:

     MSPIZZA14

Informationen zu diesem Infotag findet man hier.

Informationen zu unserem berufsbegleitenden Master-Studiengang für Führungskräfte in der Software-Entwicklung findet man hier.


Download

Link zum Infotag

ppedv Team Blog: Windows 10 – Das Startmenü - eine der wichtigsten Neuerungen und die neue Suche

Laut Windows-Chef Terry Myerson nutzen weltweit 1,5 Milliarden Menschen Windows. Für viele Nutzer war die Optik von Windows 8 eine gravierende Umstellung. Mit der Kacheloptik waren viele Nutzer überfordert, das moderne Aussehen ist nicht sonderlich gut angekommen, jetzt schraubt Microsoft zurück und fügt wieder ein Startmenü ein, welches kaum anders aussieht wie das vorige in Windows 7.

Nun hat Microsoft den Nachfolger vorgestellt. Er heißt nicht wie erwartet Windows 9,
sondern Windows 10.

Menü ist wandelbar

Das aus alten Windows-Versionen bekannte Startmenü ist nun nicht nur zurück, sondern es scheint wieder vollständig zu sein und es lässt sich individuell anpassen. Wem die „Kachel-Optik“ von Windows 8 nicht gefallen hat, der soll vom neuen (alten) Design angesprochen werden. Nach der Installation von Windows 10 ist das zunächst der Standard.

clip_image001

Auf Wunsch sind aber die Kacheln nach wie vor da. Zum einen in der rechten Menüspalte neben der Programmliste integriert, zum anderen nach einer entsprechenden Umstellung der Optionseinstellungen. Im Startmenü sind die Kacheln in verschiedenen Größen verfügbar. Per Rechtsklick lassen sich diese von der Größe her verändern. Leider sind nicht für alle Apps alle Größen verfügbar. Weiterhin kann der Benutzer festlegen, welche Programme angezeigt werden, d.h. jedes Programm und jede installierte App kann per Rechtsklick ins Startmenü integriert werden.

clip_image003

Umstellung des Start-Menüs auf Kachel-Optik

Die Umstellung des Start-Menüs lässt sich über einen Rechtsklick auf die Taskleiste und über den Register „Start Menu“ vornehmen, indem das Häkchen vor „Use the Start menu instead of the Start screen“ entfernt wird.

clip_image004

Um die Einstellung einzurichten muss sich der Benutzer jedoch abmelden, denn dieses Fenster erscheint dann, wenn ein Wechsel vorgenommen wird.

clip_image005

Danach sieht der Benutzer nach Betätigen der Windows-Taste wieder die aus Windows 8 bekannte Kachel-Optik.

clip_image007

Neue Suche

Eine verbesserte Suchfunktion gibt es jetzt in Windows 10 und ein neues Lupen-Symbol in der Taskleiste. Neben der klassischen Dokumentensuche kann auch direkt über das Windows-Menü in Interneteinträgen (mit der Suchmaschine Bing) gesucht werden. Außerdem blenden in Windows 10 Kacheln Live-Informationen ein, wie das aktuelle Wetter oder etwa neue E-Mail-Nachrichten.

clip_image008

Sobald der Benutzer auf die Schaltfläche mit der Lupe klickt und ein Stichwort eingibt, werden in dem Suchfenster Ergebnisse sowohl systemseitig, wie auch Fundstellen aus dem Internet gefunden und angeboten. Ein Klick auf das jeweilige Suchergebnis öffnet dann wie im Beispiel darunter die Search-App mit dem Suchergebnissen von Bing.

clip_image010

ppedv Team Blog: Windows 10 Technical Preview: Neue Version

Am 21. Oktober veröffentlichte Microsoft eine neue Version der Windows 10 Technical Preview: Build-Nummer 9860. Die neue Version wird über Windows Update verteilt, kann aber auch vom User direkt über die PC-Settings installiert werden. Hierfür im Startmenü (bzw. auf dem Startbildschirm) nach “PC Settings” suchen. Dort findet man unter “Update und recovery” den Eintrag “Preview builds”. Neue ISO-Images gibt es nicht – man muss also immer die “alte” Preview-Version installieren und dann über den beschriebenen Weg updaten.

Windows 10 - 2 -1

Laut Microsoft wurden in der neuen Build über 7000 Änderungen vorgenommen – die wenigsten davon sind jedoch sichtbar:

1. Neue Animationseffekte beim öffnen und schließen von Fenstern und beim wechseln zwischen verschiedenen Desktops.

2. Mit der Tastenkombination [Windows] + [Shift] + [Pfeiltasten] lassen sich nun Apps zwischen mehreren Monitoren hin- und herverschieben.

3. Es wurde das aus Windows Phone bekannte Benachrichtigungscenter “Notifications” implementiert. Die entsprechenden Benachrichtigungen lassen sich über ein Taskleisten-Symbol öffnen.

Windows 10 - 2 -3

Die Einstellungen zu diesem Feature und welche Apps Benachrichtigungen anzeigen sollen, kann man in den “PC settings” unter “Search and apps” –> “Notification” finden.

Windows 10 - 2 -2

4. In den “PC settings” befindet sich nun ein Eintrag “DataSense”. Dieses Feature ist bereits aus Windows Phone 8.1 bekannt und zeigt an, wie viele Daten über die Unterschiedlichen Verbindungen übertragen wurden.

Windows 10 - 2 -4

5. Ebenfalls in den “PC settings” stehen nun auch unter “Battery Saver” neue Energiesparfunktionen zur Verfügung.

Windows 10 - 2 -5

Microsoft möchte nun ca. alle 3 Wochen einen neuen Preview-Build zur Verfügung stellen.

codefest.at [MS]: Videos der Vorträge und Workshops vom Modern Meets Retro Hackathon

Wie versprochen, haben wir die Vorträge und Workshops an unserem Gaming Hackathon aufgenommen. Diejenigen, die nicht dabei waren, haben daher die Möglichkeit, sich in aller Ruhe die Sessions anzusehen. Und natürlich habt ihr noch weiterhin die Möglichkeit, an unserem Gewinnspiel teilzunehmen und Preise zu gewinnen.

Speaker: Klaus Hartinger
Firma: Root9 Medialab
Titel: Tipps & Tricks aus der Spieleindustrie
Abstract: Klaus Hartinger gibt wertvolle Tipps & Tricks aus seiner langjährigen Erfahrung in der Casual Games Branche und den Einsichten, die er aus 200+ produzierten Spielen gewonnen hat.

Speaker: Bernadette Thalhammer
Firma: Sproing Interactive Media
Titel: Slide Shooter Game mit Unity
Abstract: Bernadette Thalhammer entwickelt gemeinsam mit den Teilnehmern ein Slide Shooter Game in Unity

Speaker: Bernhard Raml
Firma: Sproing Interactive Media
Titel: Problemlösungskompetenz in Unity
Abstract: Bernhard Raml zeigt, wie man verschiedene Situation, auf die man in der Entwicklung mit Unity stoßen kann, lost.

Speaker: Christian Feldbacher
Firma: V-Play
Titel: Wie macht man ein Flappy Bird Spiel mit V-Play
Abstract: Christian stellt die 2D Spiele-Engine V-Play vor und zeigt wie man ein einfaches Flappy Bird Spiel damit entwickeln kann.

Speaker: Helmut Krämer
Firma: Tieto
Speaker: Andreas Jakl
Firma: Mopius
Titel: Entwickeln mit Kinect v2
Abstract: Helmut Krämer und Andreas Jakl stellen die neue Kinect v2 vor und erklären anhand eines Tic Tac Toe Spieles, wie man am besten mit ihr entwickeln kann.

ppedv Team Blog: Angular Controller as

Wenn ich so darüber nachdenke, gibt es in Angular.js mindestens immer zwei Möglichkeiten eine Aufgabe zu lösen. Eine Direktive kann eine Funktion oder ein JSON Objekt zurück liefern. Ein Service kann eine Factory oder ein Service sein. Alles leicht verwirrend. In die Kategorie, muss das auch noch sein, fällt die Scope Freiheit eines Controllers.

Üblicherweise wird jedem Controller der Scope per Dependency Injection üergeben und damit eine Singleton Instand erstellt. Es gib auch eine Alternative Variante ohne $Scope.

Dabei wird eine “Controller as” Syntax eingesetzt, die sozusagen einen Alias erzeugt, der dann als Objektträger herhalten muss.

   1:    <div ng-controller="mycontroller as hannes">
   2:          {{hannes.count}}
   3:          <button ng-click="hannes.click()">plus</button>
   4:    </div>
   5:    

 

Der zugehörige Controller wird aber gänzlich anders codiert. Zunächst wird wie üblich die App als Modul erzeugt und darin ein Controller definiert, der auf eine Controller Methode verweist. Dieser ist allerdings Parameterlos. Die Propertys des Scopes werden per this erzeugt. Das fühlt sich aus C# Entwicklersicht fast natürlich an.

JavaScript typisch, wird per Prototype das bestehende Objekt um eine Funktion, hier click, erweitert.

   1:    var App = angular.module('App', []);
   2:    App.controller('mycontroller', myfunction)
   3:    function myfunction() {
   4:        this.count = 0;
   5:      };
   6:   myfunction.prototype.click= function () {
   7:       this.count++;
   8:     };

 

Auch wenn ich die Variante mit $scope optisch weniger gelungen finde, werde ich wegen der Konsistenz innerhalb von Angular diesen Weg nicht verwenden.

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

codefest.at [MS]: AngularJS und Xamarin Workshops im Rahmen der ADCX in Wien (6.11.2014)

Im Rahmen der diesjährigen Advanced Developer Conference (http://adc.ms/wien) in Wien, gibt es am 6.11. zwei sehr aktuelle Workshops.

AngularJS und ASP.NET
Hier lernen Sie von Hannes Preishuber wie man mit Visual Studio 2013 und ASP.NET in die Welt der Single Page Applikationen einsteigt. Es kommt das aktuell führende JavaScript Framework Angular.JS in Kombination mit ASP.NET Web API zum Einsatz.
Wer seinen Notebook mitbringt kann direkt mit programmieren.
Hannes hat mehrere Bücher zu ASP.NET verfasst, war MVP und ist CEO der ppedv.

Xamarin Forms
Ganztages Workshops zu Cross Plattform Entwicklung mit C#. Xamarin Forms ist heute die einfachste Möglichkeit native für IOS, Android und die Microsoft Plattform Anwendungen zu entwickeln. Das alles auf Basis von .NET und C#. Trainer ist Timur Zanagar, langjähriger Experte für XAMARIN.

Alle Infos und Buchung…

clip_image002

Manfred Steyer: Unterlagen meiner Session zu OAuth 2.0 und OpenId Connect auf der Jazoon 2014 in Zürich

Nachfolgend findet man meine Unterlagen, die ich bei meiner Session zu OAuth 2.0 und OpenId Connect auf der Jazoon 2014 in Zürich verwendet habe.

Download

Holger Schwichtenberg: "Microsoft loves Linux" bekennt Satya Nadella

Wer hätte vor 10 Jahren gedacht, dass ein Microsoft-Chef dies sagen würde?

Manfred Steyer: Unterlagen zur Session über OAuth 2.0 und OpenId Connect mit ASP.NET Web API und MVC #adcx

Nachfolgend findet man die Unterlagen zu meiner Session über den Einsatz von OAuth 2.0 und OpenId Connect in ASP.NET Web-API- und MVC-Projekten, welche ich heute auf der ADC X in Mannheim gehalten habe. Die Folien veranschaulichen die einzelnen Flows mit Fokus auf Authorization Code Flow und Implicit Flow. Daneben veranschaulichen sie die Funktionsweise von OAuth 2.0 für SSO und wie OpenId Connect dabei unterstützt.

Die Beispiele demonstrieren, wie man die auf den Folien gezeigten Möglichkeiten mit ASP.NET Web API und ASP.NET MVC nutzen kann. Das erste Beispiel ist ein ASP.NET-MVC-Projekt, das im via OAuth 2.0 das Recht bekommt, im Namen des Benutzers auf Facebook zu posten. Das zweite Projekt zeigt die Entwicklung eines eigenen OAuth-Servers für ASP.NET Web API. Als Front-End kommt ein AngularJS-basierter Client  zum Einsatz. Das letzte Beispiel zeigt, wie man mit ASP.NET Web API und MVC einen eigenen OpenId-Connect-Server implementieren kann. Dazu kommt ein Fork der OAuth-Middleware-Komponenten von Microsoft zum Einsatz.


Downloads

Manfred Steyer: Unterlagen zur Session zu ASP.NET vNext: Web API, MVC 6 & Co. #adcx

Nachfolgend die Unterlagen von meiner Session zu ASP.NET vNext von der ADC X in Mannheim. Die Folien motivieren, warum die aktuellen Breaking Changes notwendig sind. Das Beispiel zeigt die Projekt-Struktur von vNext-Projekten, sowie wie ASP.NET Web API im neuen ASP.NET MVC 6 aufgeht.


Downloads

codefest.at [MS]: Windows Store App Steuern mit Kinect V2 for Windows

Im Zuge der Codeweek gab es einige Veranstaltungen rund um das Thema Software / Softwareerstellung. Unter anderen gab es 2 Sessions mit mir zum Thema “Kinect for Windows V2 3D Tracking & mehr”.

Am 11. Oktober war es soweit, Andreas Jakl von Mopiusund ich durften am Gaming Hackathon eine Stunde lang ein wenig den Kinect Sensor vorstellen und anhand ein paar Beispielen demonstrieren, was man alles so anstellen kann. Unser Track wurde aufgezeichnet und steht auf Channel 9 bereits zur Verfügung!

In diesen Post möchte ich auf unser doch recht simpel gestaltendes Beispiel ein wenig näher eingehen und auch zeigen, wie einfach es ist eine Windows Store App durch den Kinect V2 Sensor steuerbar zu machen.

TickTackToe

So sieht (bzw. sollte) unser fertiges “Tic Tac Toe” Sample aus. Als Basis haben wir eine einfache “Blank” Universal App genommen:

Template

Als erstes wurde das Phone Projekt gelöscht, da wir ja nur eine Windows Store App mit unseren Sensor steuern wollen.

Step 1: 3x3 Grid anlegen, worauf wir Buttons für unsere Interaktion platzieren.

<Grid x:Name="BoardGrid"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="*"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button x:Name="b00" Content="" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b01" Content="" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b02" Content="" Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b10" Content="" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b11" Content="" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b12" Content="" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b20" Content="" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b21" Content="" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b22" Content="" Grid.Column="2" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> </Grid>

Die Buttons wurden nach ihrer Position am Grid benannt um später besser den Status des geklickten Feldes auswerten zu können.

Im Code-Behind (ja wir verwenden für dieses der Einfachheit halber keinen MVVM-Pattern, Code Binding etc um es einfacher zu gestalten) legen wir uns einmal ein paar notwendige Felder/Variablen an:

public sealed partial class MainPage : Page { private FieldValues _playerTurn; private FieldValues[,] _board; private enum FieldValues { Empty, X, O, }

Wobei _playerTurn den jeweiligen Spieler (X / O) beinhaltet und im _board wir die jeweilige Farbe gesetzt.

Um auch das Spielbrett zu initialisieren definieren wir ResetGame():

private void ResetGame() { _playerTurn = FieldValues.X; _board = new FieldValues[3, 3]; var boardGrid = BoardGrid; foreach (var fieldObj in boardGrid.Children) { var fieldBtn = fieldObj as Button; if (fieldBtn != null) { fieldBtn.Background = new SolidColorBrush(Colors.Black); } } }

Hier setzen wir, dass der Spieler “X” beginnt, initialisieren wir das Spielbrett und setzen uns die Farbe Schwarz in die jeweiligen Felder.

Jetzt brauchen wir noch die Aktion, die beim Drücken auf das jeweilige Feld das Feld in der Spielerfarbe einfärbt und auch den Spieler “wechselt” (von Spieler “X” auf Spieler “O”):

private async void FieldClick(object sender, RoutedEventArgs e) { var btn = (Button) sender; var btnName = btn.Name; var row = int.Parse(btnName.Substring(1, 1)); var col = int.Parse(btnName.Substring(2, 1)); SetField(row, col); SetFieldColor(row, col, btn); await CheckWinner(); }
Aus dem Button-Namen ermitteln wir uns die Row und Column und setzen auch die Farbe und den jeweiligen Spieler:
private void SetFieldColor(int row, int col, Button btn) { var fieldValue = _board[row, col]; Color fieldColor; switch (fieldValue) { case FieldValues.Empty: fieldColor = Colors.Black; break; case FieldValues.X: fieldColor = Colors.Red; break; case FieldValues.O: fieldColor = Colors.Blue; break; } btn.Background = new SolidColorBrush(fieldColor); }

Hat der Spieler “X” gedrückt wir das Feld Rot, war der Spieler “O” dran wird es blau. Um den Gewinner feststellen zu können müssen wir noch am jeweiligen Feld festlegen, wer nun gedrückt hat:

private void SetField(int row, int col) { if (_board[row, col] == FieldValues.Empty) { _board[row, col] = _playerTurn; if (_playerTurn == FieldValues.X) { _playerTurn = FieldValues.O; } else { _playerTurn = FieldValues.X; } } }

Gleichzeitig wechseln wir den Spieler.

Nun noch den Gewinner ermitteln und fertig ist das “Tic Tac Toe” Spiel:

private async Task CheckWinner() { var winner = FieldValues.Empty; // Check rows for (int row = 0; row < 3; row++) { if (_board[row, 0] == _board[row, 1] && _board[row, 1] == _board[row, 2]) { winner = _board[row, 0]; break; } } // Check columns for (int col = 0; col < 3; col++) { if (_board[0, col] == _board[1, col] && _board[1, col] == _board[2, col]) { winner = _board[0, col]; break; } } // Check diagonals if (_board[0, 0] == _board[1, 1] && _board[1, 1] == _board[2, 2]) { winner = _board[1, 1]; } if (_board[0, 2] == _board[1, 1] && _board[1, 1] == _board[2, 0]) { winner = _board[1, 1]; } // Check winner if (winner != FieldValues.Empty) { var winnerDlg = new MessageDialog("Winner: " + winner); await winnerDlg.ShowAsync(); ResetGame(); } // Check for tie - all field taken var isTie = true; foreach (var curField in _board) { if (curField == FieldValues.Empty) { isTie = false; break; } } if (isTie) { var winnerDlg = new MessageDialog("Tie! Play again."); await winnerDlg.ShowAsync(); ResetGame(); } } }

Hier werden einfach die Rows, Columns und die Diagonale ausgewertet.

Nun wird es spannend, wir wollen nun unser simples “Tic Tac Toe” mit Gesten steuerbar machen.

Wir brauchen dazu:

  1. Einen Kinect for Windows V2 Sensor
  2. Kinect for Windows SDK 2.0 derzeit noch in Public Preview
  3. Einen halbwegs leistungsstarken Rechner (i7, USB 3.0, 4GB Ram)

Nach installation des SDK’s den Sensor einfach anstecken und testen ob alles geklappt hat.

Jetzt müssen wir einfach die Referenzen hinzufügen:

Referenzes

Im Manifest müssen wir Zugriff auf die Webcam und Micro erlauben, sonst kann der Sensor aus der App heraus nicht angesprochen werden:Manifest

 

Jetzt fehlen nur noch ein paar Zeilen Code in der App.Xaml.Cs und unser Projekt kann nun auch per Geste gesteuert werden:

// Initialize Kinect KinectRegion = new KinectRegion {Content = rootFrame}; Window.Current.Content = KinectRegion; // Ensure the current window is active Window.Current.Activate();

Fertig !  -  die komplette Lösung könnt ihr hierherunterladen!

Wie Ihr seht ist für reine Gestensteuerung die eigentliche App der viel größere Aufwand als die Implementierung der Kinect. Um Bodypoints auslesen zu können, 3D tracken etc. ist natürlich etwas mehr Implementierungsaufwand notwendig, mehr dazu in einen der folgenden Posts Zwinkerndes Smiley

Bei Fragen tweet me.


Ich bin seit 1992 in der IT Branche als Developer tätig, und habe im laufe der Jahre neben Technologie Wissen auch jede Menge Prozesswissen aus dem Bankenbereich und Industriebereich ansammeln können. Dies ermöglicht es mir neue Technologien auf konkrete Anwendungsbeispiele zu übertragen. Im Tieto’s Future Office Team– dass sich hauptsächlich mit dem „Neuen Arbeiten“ beschäftigt, bin ich als Mobility Evangelist tätig, und habe die Aufgabe neueste Technologien zu evaluieren und für unsere Kunden einsetzbar zu machen. Unter anderem testen wir auch den Einsatz von Kinect und Google Glass für unsere Kunden.

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.

Sven Hubert: Aller Anfang ist schwer – Projektbegleitende Grundlagenschulung für Entwicklungsteams

Der Titel sagt es bereits: “Aller Anfang ist schwer“ – dies gilt besonders für den Umstieg auf eine neue Technologie im Bereich der Software-Entwicklung. Ändern sich dann auch noch die Entwicklungswerkzeuge, ist das Chaos perfekt. Dennoch ist irgendwann die Zeit gekommen, da Technologien wie Borland C++ oder die Microsoft Foundation Classes nicht mehr dem Stand der Technik entsprechen und somit ein Umstieg nötig ist.

Mit unserem Schulungskonzept ist dieser Umstieg parallel zum Tagesgeschäft möglich. Durch einen kurzen Fragebogen wird zunächst der Wissensstand aller Entwickler erfasst, um diesen möglichst schnell auf einen homogenen Stand zu bringen. Um arbeitsfähig zu bleiben, werden mindestens zwei Schulungsgruppen zu je 4 bis 8 Personen gebildet. Die Gruppen werden an unterschiedlichen Tagen geschult. Dies erhöht die Flexibilität, da die Teilnehmer bei Terminkonflikten zwischen den einzelnen Gruppen tauschen können.

Der Gesamt-Umfang der Schulung umfasst in der Regel 12 Tage pro Gruppe. Um das vermittelte Wissen verarbeiten zu können, sollte maximal ein Schulungstag pro Woche stattfinden. Um das erlernte Wissen direkt anzuwenden, wird parallel zu den Schulungsterminen eine Aufgabe bearbeitet. Diese steigert sich in ihrer Komplexität von Schulung zu Schulung und wird, wie alle Schulungsbeispiele, speziell auf die Fachdomäne zugeschnitten. Während der Bearbeitung der Übungsaufgabe steht den Teilnehmern selbstverständlich ein Trainer vor Ort oder virtuell zur Seite.

Jeder Schulungstermin beinhaltet Elemente aus den drei Kategorien Handwerkliche Umsetzung, Entwicklungsgrundlagen und Framework, Technologie und Sprache. Im Verlauf der Schulungen variieren die Schwerpunkte.

Themen

Die Inhalte sind in drei Schulungsblöcke Beginner, Einsteiger und Fortgeschritten untergliedert. Dies ermöglicht es auch erfahrenen Teammitgliedern zu einem späteren Zeitpunkt einzusteigen.

Schulungsblöcke

Die gesamte Durchführung wird individuell an die Bedürfnisse der Teilnehmer angepasst. Den typischen Taschenrechner als erste Übung wird es also nicht geben! Die Erarbeitung von Coding-Guidelines mit den Teilnehmern ist dabei ebenso denkbar, wie die Vermittlung von Wissen über unternehmensinternen Frameworks oder andere Bibliotheken.

Wie eingangs schon gesagt, der Anfang ist schwer – die Aufgabe jedoch nicht unmöglich. In keiner anderen Branche ist der Wechsel auf eine neue Technologie so spannend wie in der Software-Entwicklung. Sie müssen keine neuen Maschinen kaufen, ihr bisheriges Wissen nicht komplett über den Haufen werfen, sondern nur dazu lernen. Also trauen Sie sich! Wir helfen Ihnen dabei!

Aller Anfang ist schwer – Projektbegleitende Grundlagenschulung für Entwicklungsteams is a post from: AIT Blog

Jürgen Gutsch: Drop-Zone per AngularJS-Direktive definieren

Das ziel ist eine Drop-Zone per AngularJS-Direktive zu definieren, in das Dateien für den Datei-Upload, oder was auch immer gedroppt werden können. Es muss also möglich sein, ein Callback zu übergeben, welches ausgeführt werden soll, wenn der Drop-Vorgang abgeschlossen wird. Der Callback soll dabei eine Methode des aktuellen AngularJS-Controllers sein:

ng-dropzone="handleDrop()"

Wir benötigen hierfür eine neue JavaScript Datei mit folgendem Inhalt:
(Dieser Code setzt voraus, dass, dass ein AngularJS Module mit dem Namen “myNgApp” existiert, andernfalls muss einfach der Name angepasst werden.)

(function () {
    'use strict';

    angular
        .module('myNgApp')
        .directive('ngDropzone', dropTarget);

    dropTarget.$inject = ['$window', '$parse'];

    function dropTarget($window, $parse) {

        var directive = {
            link: link,
            restrict: 'A'
        };
        return directive;

        function link(scope, element, attrs) {
           
            element.on('drop', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
                $parse(attrs.ngDropzone)(scope);
            });
            element.on('dragover', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
            });
            element.on('dragenter', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
            });
            element.on('dragleave', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
            });
            element.on('dragend', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
            });
        }
    }
})();

Mit element.on() kann ich beliebige Events auf das Event registrieren. In diesem Fall sind es alle Events die eine DropZone abfangen sollte. Wichtig ist nur das erste Event, alle anderen können allerdings genutzt werden, um ein visuelles Feedback zu geben, wenn man mit der Maus ein Element über diese Zone draged, die Zone mit Drag-Zustand verlässt, oder das dragen beendet, indem die CSS-Klassen der DragZone geändert werden. (Ich verzichte hier auf die Beispiele für den visuellen Effekt)

Hinweis für Visual Studio Nutzer:
Das Visual Studio Add-In “SideWaffle” ist übrigens eine enorme Hilfe beim erstellen von Modulen, Controller, Services, etc. für AngularJS, da es unter anderem vorgefertigte Datei-Templates für AngularJS liefert.

Diese Direktive kann ich nun auf alle HTML-Elemente anwenden die als Drop-Zone genutzt werden können. Am besten ein DIV-Element dass so formatiert ist, dass es für den USer eindeutig als Dro-Zone erkannt wird. Das Element darf auch Unterelemente beinhalten.

Folgende Zeile Code im ersten Event parst den Wert unseres Attributes und führt ihn im aktuellen Scope aus. Auf die Art wird unsere Callback-Methode im AngularJS-Controller gefunden.

$parse(attrs.ngDropzone)(scope);

Die Callback-Methode kann beliebig viele Parameter haben die über unser Attribut gesetzt werden können. In diesem Beispiel werden keine Argumente übergeben und die Methode ruft intern eine Methode uploadDocuments in einem AngularJS-Service auf und übergibt sowohl die Datei-Liste aus dem event objekt, als auch einen CallBack der im Erfolgsfall ausgeführt wird.

$scope.handleDrop = function () {
    $upload.uploadDocuments(event.dataTransfer.files, function () {
        reloadDocuments();
        alert('success');
    });
};

Die Eigenschaft dataTransfer im event Objekt ist Teil der HTML5 Drag & Drop API und enthält in unserem Fall Dateien die per Drag & Drop auf die DropZone gezogen wurden.

Die Methode im Upload-Service tut dann die eigentliche Arbeit. Da auch mehrere Dokumente in die Drop-Zone geschoben werden können, müssen wir die File-Collection in einer Schleife durchgehen und verarbeiten. In folgendem werden zusätzlich die Dateieigenschaften file.name, file.size und file.type ausgelesen und an den Server gesendet:

this.uploadDocuments = function (files, callback) {

    if (files.length > 0) {
        for (var i = 0; i < files.length; i++) {

            var file = files[i];

            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/Document/', data, {
                    transformRequest: angular.identity,
                    headers: { 'Content-Type': undefined }
                })
                .success(function () {
                    alert('TODO: handle success');
                    callback();
                })
                .error(function () {
                    alert('TODO: handle error');
                });
        }
    }
};

Auf die Stolperfalle beim Upload von Dokumenten habe ich in meinem letzten Beitrag schon hingewiesen. Die Lösung ist im obigen Beispiel bereits implementiert.

Christian Binder [MS]: Seid Ihr dabei? – Tech Summit 2014

Ich werde mit Neno Loje eine Session zu “Planning and Managing the modern Application LifeCycle” auf dem Tech Summit 2014 halten. Ich plane auch den TFS Support für das Scaled Agile Framework (SAFe) kurz anzusprechen, auch wenn es nicht im Abstract erwähnt ist.  Zudem bin ich beide Konferenztage vor Ort. Wer Lust auf einen kurzen Austausch vor hat einfach melden, hab noch etwas Luft Smile

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

codefest.at [MS]: Windows 10–Was ändert sich für Entwickler?

 

Das ist ein Gastbeitrag von Christian Nagel. Offizielle Informationen von Microsoft zu Development für Windows 10 werden in den kommenden Monaten veröffentlicht.

 

Windows 10 wurde announced und steht in einer ersten Version zum Testen zur Verfügung. Der Desktop steht wieder mehr im Vordergrund. Das Start Menü ist zurück. Diese neuartigen Apps laufen jetzt auch in einem Fenster. Was ändert sich damit für Entwickler? Können wir das Neuartige Zeugs jetzt vergessen und uns wieder auf Windows Forms konzentrieren?

dreamstime_s_38877532_universalstudios

Image © Ciolca | Dreamstime.com - Universal Studios, Florida Photo

Nein, nein, nein. In Wirklichkeit ändert sich für Entwickler mit Windows 10 gar nichts. Naürlich kommt eine neue Version der API. Natürlich wird es neue Features in der API geben. Aber den großen Wechsel für Entwickler hat es am Client schon mit Windows 8 gegeben. Auch Windows 10 setzt auf die Windows Runtime. Nach Version 1 bei Windows 8, Version 2 bei Windows 8.1 kommt jetzt wahrscheinlich Version 3 mit Windows 10.

Die gleiche Runtime wird es beim Windows Phone und der Xbox geben. Mit dem Konzept der Universal Apps können wir Applikationen für die gesamte Windows Plattform schreiben. Bei Universal Apps steht zwar nur ein Subset von .NET zur Verfügung, mit XAML nicht alle Features die es bei WPF gibt, es gibt aber auch die Windows Runtime die für Deskop Applikationen so nicht zur Verfügung steht.

Nicht das gesamte .NET Framework? Ja, es ist ein eingeschränktes Subset. Mittlerweile ist das aber so vielfältig dass kaum etwas abgehen wird. Mit Entity Framework 7 ist sogar diese API für Windows Store Apps verfügbar. Ein reduziertes .NET Set wird es auch in der nächsten Version der Server-Plattform geben, wie hier schon erwähnt wurde.

Nicht alle Features von WPF bei XAML in Windows Store Apps? Ja, es fehlt doch einiges. Bestimmte Brushes gehen ab wenn man vorher WPF programmiert hat, es fehlen Features beim Binding, und einiges mehr. Mit der Zeit wird aber mehr und mehr im XAML von Windows Store Apps angeboten. Es geht sogar so weit dass auch bei WPF Features abgehen die es bei Windows Store Apps gibt, wie z.B. die Header Property in TextBox Controls.

Mit Universal Apps sind wir nicht auf den Desktop gebunden. Diese Apps können auch auf dem kleineren Bruder vom Surface Pro 3 (das Surface 2) laufen, und auch auf dem Windows Phone. Mit Hilfe von Xamarin.Forms kann man die Liste der mobilen Devices auch noch um iPhone, iPad und Android erweitern.

Mit Windows 10 gibt es sogar noch mehr Gründe auf Universal Apps zu setzten. Wenn “Full-Screen” bisher störte, diese Apps laufen bei Windows 10 jetzt auch in einem Window.

Die Unterstützung von Windows 7 mit eigenen Apps kann langsam auslaufen – dann gibt es keinen Grund mehr nicht auf Universal Apps zu setzen. Und wenn die Unterstützung von Windows 7 noch lange erforderlich ist gibt es auch Möglichkeiten (z.B. Portable Libraries) jetzt schon für Universal Apps vorauszuplanen.

Informationen zu Windows 10 für IT Pros und Entwickler gibt es beim Tech Forum am 13. November

Christian Nagel

CN innovation

 

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.

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 :)

Note: There is a rating embedded within this post, please visit this post to rate it.

friends header

bloggers headline

links header

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