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

Johannes Renatus: JavaScript direkt im Chrome debuggen und editieren (Chrome Workspaces)

Ich muss gestehen bisher habe ich Chrome immer nur zum Debuggen benutzt und den Code dann im Visual Studio entsprechend geändert, gespeichert und dann wieder im Chrome debuggt. Als Entwickler lernt man immer wieder etwas neues dazu und wie ich feststellen musste kann man im Chrome auch schon seit längerem, für lokale Projekte den JavaScript […]

Sebastian Gross: Retrieving calendar events using Google Calendar API

Introduction

Calendars are fun and every big player on the market (Google, Microsoft, Yahoo, you name it) provides its own implementation of one, usually for free. And it’s even more fun to integrate those calendars into your own apps and services. Lucky for us, all major calendar providers offer pretty good support and well documented APIs for us to use in our apps.

In this post you will see how easy it is to set up a simple application that uses the google calendar API to access calendar events.

API Setup

Whenever you want to use a third party API ,you need to register your application as a client in order to receive an API-Key. This API-Key will make sure that your application doesn’t access parts of the API its not supposed to and also (in case of Google) that you don’t use the API too much (later more on that).

So create a Google Account if you don’t have one already and navigate your browser to Google’s developer portal. Here you’ll find many useful information including sample applications and different how-tos.

Our next step is to create a new project in the Google Developer Console. When you visit this page for the first time you should see a message telling you to “create a new project to get started” – and this exactly what we’ll do.

New Project Dialog

New Project Dialog

Enter the name of your app and also a project id, which must be unique between all Google apps, just be a bit creative on this step, nobody will see the project id anyway :). When you’re done hit Create, and a few seconds later you should see your newly created project.

Click on your new project and in the next screen select Enable an API on the right.

Enable APIs

Enable APIs

Now we need to select which APIs should be available to our application. Since we want to access the calendar events, it makes sense to enable the calendar API. Since it’s a pretty long list of different APIs its easier to just enter ‘calendar’ into the filter-textbox. When you successfully located the Calendar API link, click on it and flip the switch to ‘on’.

Flipping the switch

Flipping the switch

Great, now our project is allowed to use the Google calendar API but we still need to create those API Keys i mentioned at the beginning. In order to do that we first need to set up the consent screen, this is a popup which every user of our app will see where he will allow(or disallow) our application to access his account. They usually look something like this:

Example consent screen

Example consent screen

On the right menu select APIs & auth and then – you guessed it – Consent screen. Here it’s important to select the Email Address and to specify a Product Name. These values will later be shown to the user on the consent screen, so make sure the user recognizes your application by this values.

Now let’s generate an API-Key. Select APIs & auth and then Credentials on the menu on the right. Then click on Create new Client ID.

Create a new Client ID

Create a new Client ID

Here you need to choose what type of application you are creating. The code you’ll need to write later will differ based on the type of application you select now. To keep things simple select Installed application as the application type and since we’re going to create a Windows app other as the installed application type. After you’re done you should see something like this:

Generated client ID

Generated client ID

This is it, now we have everything wee need to start writing code.

A few words about the Client ID

As a free user you are allowed to create 500k requests/day to the calendar API (differs dependent on the API). This sounds like a lot at first but you may run into this limitation sooner than you think if your app will be used by more than one user, so maybe you will need to think about how to save requests inside your app in the future.

Setting up the Project

So let’s move on to the interesting part and use the API we just configured. As i mentioned above it will be a Windows Desktop Application Project inside of Visual Studio.

First thing we need to take care of is the download of the libraries which will do all the heavy lifting for us. In our case it is the Google Calendar API library.

Let’s use NuGet to get those libraries into our project. Open the Packet Manager console (Extras > NuGet-Packet-Manager > NuGet-Packet-Manager-Console) and type:

Install-Package Google.Apis.Calendar.v3

A few seconds later you should see the needed libraries added to your references in Project explorer.
Now we should have all needed libararies to authenticate at Google and use the calendar API.

Connect to Google

The first thing our application needs to do is, of course, connect to Google and get the permission by the user to use his or her calendar data. This will be handled by Google automatically when our client application connects for the first time.

CalendarService calendarConnection;
public bool connectCalendar()
{
	ClientSecrets secrets = new ClientSecrets 
	{ 
		ClientId = "xxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com", 
		ClientSecret = "cmqb8LAJcvyyyyy-sVToGwh" 
	};

	try
	{
		UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
			secrets,
			new string[]
			{ 
				CalendarService.Scope.Calendar
			},
			"user",
			CancellationToken.None)
		.Result;

		var initializer = new BaseClientService.Initializer();
		initializer.HttpClientInitializer = credential;
		initializer.ApplicationName = "MyProject";
		calendarConnection = new CalendarService(initializer);
	}
	catch (Exception ex)
	{
		Console.WriteLine(ex.Message);
		return false;
	}
	return true;
}

Lets go step by step through the code. The first step should bring up some memories from the first part of this article, here we’re setting up the API-Key which we generated earlier. We’re creating a ClientSecrets Object to hold this information.

In the next step we’re creating a UserCredential object by calling the AuthorizeAsync method of the GoogleWebAuthorizationBroker class which is provided by the Google API library. We also provide four parameters to this method, the first of which is the ClientSecrets object holding our authentication information.

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
	secrets,
	new string[]
	{ 
		CalendarService.Scope.Calendar
	},
	"user",
	CancellationToken.None)
.Result;

The second parameter is a string-array containing the permissions we would like the user to give us, in this case we’re only asking for access to the calendar, but we could ask for anything google is offering (as long as we have activated the API in the Project settings on the Google Developer Console).

The third parameter is a simple string containing the word “user”, which could be anything you like since it’s only a reference to the user authorization in the internal DataStore holding the granted permission by the user. This parameter gets important when your application manages more than one Google Account at a time and you need to reference different users in your API requests.

Finally, the fourth parameter specifies a CancellationToken, which makes sense, since the method we call is async, but to keep things simple we don’t provide one here.

When this line of code is executed the Google API library will launch a new browser window and promt the user with the question weather he or she would like to accept your request to access the calendar data. If the user consents, this information will be saved in an internal DataStore under the key you provided (“user” in our example here). If you’re interested, you can have a look inside this store, its located in your AppData directory:

[userfolder]\[yourname]\AppData\Roaming\Google.Apis.Auth

You can of course also use your own store to hold this information, you can provide your own store as a fifth parameter to the AuthorizeAsync method.

The next block of code creates the actual connection to the calendar:

var initializer = new BaseClientService.Initializer();
initializer.HttpClientInitializer = credential;
initializer.ApplicationName = "MyProject";
calendarConnection = new CalendarService(initializer);

With the Initializer which holds our credentials(user permission) and the name of our app we can now create a CalendarService which we will now use to acces the actual calendar data.

List of all Calendars

Before we can read calendar events we first need to know where we want to read them from. Because a user can have unlimited calendars on his account we first need to get a list of those and then select the one we want to access. Lucky for us it’s an one liner:

var calendars = calendarConnection.CalendarList.List().Execute().Items;

After this line has been executed, we will have a complete list of calendars available to the user. Every entry in this list will contain every important information about the calendar including the id, which is important for every other action.

CalendarListEntry expanded
CalendarListEntry

Everything we need is provided here

So let’s print all the calendars we have available:

foreach (CalendarListEntry entry in calendars)
{
    Console.WriteLine(entry.Summary + " - " + entry.Id);
}

This should provide us with something like this:

"BWI 14" - "m3ur6kkk9vo1vdrraphiaa3jj8@group.calendar.google.com"
"Sebastian Gross" - "bigbasti@gmail.com"
"patxxx@googlemail.com" - "patxxx@gmail.com"
"Testkalender" - "d7oegsapgo53pgueicn7kiohk8@group.calendar.google.com"
"Contacts' birthdays and events" - "#contacts@group.v.calendar.google.com"
"Day of the Year" - "#daynum@group.v.calendar.google.com"
"Holidays in Germany" - "en.german#holiday@group.v.calendar.google.com"
"Phases of the Moon" - "ht3jlfaac5lfd6263ulfh4tql8@group.calendar.google.com"
"Weather" - "p#weather@group.v.calendar.google.com"
"Week Numbers" - "p#weeknum@group.v.calendar.google.com"

As you can see you get also the calendars you have subscribed to and also the shared calendars of your friends.

Retrieving calendar entries

Now let’s use one of those calendars to read the entries in a timespan.

Events request = null;
ListRequest lr = calendarConnection.Events.List("calendar id (email)");

lr.TimeMin = DateTime.Now.AddDays(-5); //five days in the past
lr.TimeMax = DateTime.Now.AddDays(5);  //five days in the future

request = lr.Execute();

This is a very straight forward way of retrieving calendar events in a given timespan.

Google Calendar Event
Google Calendar Event

Everything specific to this event

Well basically that’s it, now you have a list of the events from your calendar. Do what ever you want.

Creating new calendar events

As you might imagine creating calendar events is as easy as reading them. Let’s create an Event including some Attendees and their rsvp status:

Event googleCalendarEvent = new Event();

googleCalendarEvent.Start = new EventDateTime();
googleCalendarEvent.End = new EventDateTime();

if (AllDay) 
{
	//If you want to create an all day event you don't need
	//to provide the time, only the date
	googleCalendarEvent.Start.Date = DateTime.Now.ToString("yyyy-MM-dd");
	googleCalendarEvent.End.Date = DateTime.Now.ToString("yyyy-MM-dd");
}
else
{
	googleCalendarEvent.Start.DateTime = DateTime.Now;
	googleCalendarEvent.End.DateTime = DateTime.Now.AddDays(1);
}
googleCalendarEvent.Summary = "Its my birthday";
googleCalendarEvent.Description = "I'm becoming one year older";
googleCalendarEvent.Location = "at home";


//Set Remainder
googleCalendarEvent.Reminders = new Event.RemindersData();
googleCalendarEvent.Reminders.UseDefault = false;
EventReminder reminder = new EventReminder();
reminder.Method = "popup";
reminder.Minutes = 60;
googleCalendarEvent.Reminders.Overrides = new List();
googleCalendarEvent.Reminders.Overrides.Add(reminder);

//Attendees
googleCalendarEvent.Attendees.Add(new EventAttendee()
	{
		DisplayName = "Sebastian",
		Email = "my@email.com",
		ResponseStatus = "accepted"
	});
googleCalendarEvent.Attendees.Add(new EventAttendee()
	{
		DisplayName = "Fiona",
		Email = "fiona@email.com",
		ResponseStatus = "needsAction"
	});	
			
calendarConnection.Events.Insert(googleCalendarEvent , "calendar id (email)").Execute();

Conclusion

Google offers really great libraries to use their APIs, they make it incredibly easy to access and authenticate to Google Services. The rest of the APIs works really similar to the examples you saw here, maybe the hardest part is even to setup the API.

If you need some examples you can actually run, you can have a look at my GitHub repository. The project SyncMyCal is a very basic Outlook to Google calendar synchronisation tool which uses the examples above.

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.

friends header

bloggers headline

links header

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