codefest.at [MS]: Microsoft Unity Camp und GameCraft

Wir haben wieder zwei spannende Events im Mai für euch, die in Richtung Spiele-Entwicklung gehen.

image

Am Freitag, 15. Mai 2015 findet das Microsoft Unity Event statt. Wir werden hier einen Technischen Evangelisten von Unity dabei haben, der euch Unity 5 vorstellen wird. Danach gehts weiter mit dem Hands-On Workshop Teil. Es wird zwei Tracks geben:

  • Unity Workshop: Hier entwickelt ihr ein erstes 2D Spiel. Dieser Track ist auch für Einsteiger in Unity bzw Spiele-Entwicklung geeignet. 
    Voraussetzung: eigener Rechner mit Unity3D
  • Unity Porting Lab: In diesem Track zeigen wir, wie ihr ein Unity Spiel als Windows Store/Windows Phone App portiert. Bitte nehmt hierfür ein Unity Spiel mit, dass ihr schon entwickelt habt. Wir geben euch Tipps und Unterstützung, damit ihr am Ende des Workshops euer Spiel für die Windows App Stores portiert habt.
    Voraussetzung: eigener Windows 8.1 Rechner, Visual Studio, fertiges Unity Spiel

Für beide Tracks gibt es einen Teilnahmebeschränkung von 30 Teilnehmern. Ihr könnt auch ab sofort hier anmelden.

 

image

Am Samstag, 16. Mai 2015 holen wir die irische GameCraft für euch nach Wien. Die Game Craft ist ein eintägiger Game Jam, der in Irland gegründet ist. Im Prinzip ist es ein Hackathon, wo ihr das am Vortag Erlernte gleich anwenden könnt und eure eigene Ideen umsetzen könnt. Wenn ihr eure Skills (sei es Development, Game Story, Art Assets, etc) an einem Spiel anwenden wollt, seid ihr hier richtig. Das Thema für das Event werdet ihr an dem Tag erfahren.

Für die GameCraft könnt ihr euch hier anmelden.

Wir freuen uns auf ein spannendes Wochenende mit euch!

Karsten Kempe: Visual Studio Enterprise Edition

VisualStudioLogoUnd es gibt ihn doch – den Osterhasen. Und er trägt ein Visual Studio Branding! Gestern wurde bekannt, dass Microsoft zur Einführung der neuen Visual Studio Version eine neue Edition einführen wird. Visual Studio Enterprise wird die Features von Visual Studio Premium und Visual Studio Ultimate vereinen. Damit macht Microsoft vielen Entwicklern, die schon lange auf Ultimate-Features zu erschwinglichen Preisen gewartet haben, ein großes Ostergeschenk.

Mit Visual Studio 2015 baut Microsoft seine Produktpalette um und vereinfacht das Editionsmodell. Es wird drei Visual Studio Editionen geben: Visual Studio Community, Visual Studio Professional und Visual Studio Enterprise.

VS2015_Editions

Interessant ist ebenfalls die Bekanntgabe, dass alle Kunden von „Visual Studio Premium mit MSDN“ automatisch zu „Visual Studio Enterprise mit MSDN“-Kunden hochgestuft werden. Alle “Visual Studio Professional”-Nutzer haben in den nächsten Wochen die Möglichkeit, „Visual Studio Premium mit MSDN“ zu einem rabattierten Preis zu erwerben und würden dann ebenfalls von einem kostenlosen Upgrade auf Visual Studio Enterprise profitieren. Die genauen Bedingungen könnt ihr hier nachlesen oder bei Eurem Lizenz-Partner erfahren.

[1] https://www.visualstudio.com/vs-2015-product-editions#offer
[2] http://blogs.msdn.com/b/visualstudio/archive/2015/03/31/announcing-the-visual-studio-2015-product-line.aspx

 

Norbert Eder: Neues Familienmitglied: Sony Alpha 6000

Seit gestern habe ich vermutlich den Ersatz für meine Canon EOS M Hause:

Sony Alpha 6000

Sony Alpha 6000

In den nächsten Tagen und Wochen werde ich wohl ausreichend testen und sehen, ob die Kamera wirklich das erfüllen kann, wofür ich sie mir angeschafft habe. Mehr dazu später. Vorerst habe ich ein paar hilfreiche Links für jeden der mit einer Sony ILCE startet:

Fotos werden folgen!

The post Neues Familienmitglied: Sony Alpha 6000 appeared first on Norbert Eder.

Holger Schwichtenberg: Einblicke in die Planung für Visual Studio

Microsoft hat erstmal eine "Feature Timeline" für die Entwicklungsumgebung Visual Studio veröffentlicht. Diese enthält Ankündigungen für Features, die in Visual Studio 2015 und später erscheinen werden

Marco Scheel: Links for 2015-03-30 [del.icio.us]

Code-Inside Blog: JSON.NET deserialize to abstract class or interface

Base Class & Implementations

public abstract class BaseFoo
{
    public string FooBarBuzz { get; set; }
}

public class AFoo : BaseFoo
{
    public string A { get; set; }
}

public class BFoo : BaseFoo
{
    public string B { get; set; }
}

When we deserilize it we need somehow a “marker”-property and I use the “FooBarBuzz” property from the BaseFoo-class as my marker. If it contains “A”, then it is implementation “AFoo” and “B” for “BFoo”.

Serialize

The serialization part works as expected:

AFoo a = new AFoo();
a.FooBarBuzz = "A";
a.A = "Hello World";

BFoo b = new BFoo();
b.FooBarBuzz = "B";
b.B = "Hello World";

List<BaseFoo> allFoos = new List<BaseFoo>();
allFoos.Add(a);
allFoos.Add(b);

var result = JsonConvert.SerializeObject(allFoos);

Resulting Json:

x

Deserialize and boom…

If we continue now and just use the typical code we get a nice exception:

var test = JsonConvert.DeserializeObject<List<BaseFoo>>(result);

Exception:

Additional information: Could not create an instance of type ConsoleApplication6.BaseFoo. Type is an interface or abstract class and cannot be instantiated. Path ‘[0].A’, line 1, position 6.

Introducing a simple JsonConverter

The exception is pretty clear, because JSON.NET has no knowledge about our convention. The way to go* is to write a JsonConverter. I found a couple of implementations on StackOverflow, but this one seems to be the easiest and best option.

* Small Update based on the comment from Michael: JSON.NET can also include the TypeName in the JSON as a “$type” property. If this is not an issue for you, then just add the “TypeNameHandling.Auto” to the JsonSerializerSettings and it will work. In my actual scenario I want a clean JSON output, without JSON.NET magic. That’s the reason for the converter.

public class FooConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(BaseFoo));
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JObject jo = JObject.Load(reader);
        if (jo["FooBarBuzz"].Value<string>() == "A")
            return jo.ToObject<AFoo>(serializer);

        if (jo["FooBarBuzz"].Value<string>() == "B")
            return jo.ToObject<BFoo>(serializer);

        return null;
    }

    public override bool CanWrite
    {
        get { return false; }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

When we read the JSON we look for our “FooBarBuzz”-property and serialize it to the correct implementation.

Let’s use our new JsonConverter

Just create a new instance of the Converter and apply it to the DeserializeObject method and you are done.

JsonConverter[] converters = { new FooConverter()};
var test = JsonConvert.DeserializeObject<List<BaseFoo>>(result, new JsonSerializerSettings() { Converters = converters });

Easy, right?

The full sample can be viewed on GitHub

Karsten Kempe: Who broke the build – Teil II

VS_BuildManagementIm ersten Teil der Serie “Who broke the Build” habe ich beschrieben, was mich dazu bewogen hat ein Tool zu entwickeln, welches die Ergebnisse eines Nightly-Builds visualisiert und per Mail an alle Entwickler verschickt. In Teil zwei werde ich Euch erklären, wie genau die Applikation funktioniert und Euch ein paar ausgewählte Code Snippets dazu zeigen.

Der Build Notification Service

Im Kern ist der Build Notification Service eine .NET Konsolenapplikation, welche die TFS-Client API verwendet, um eine Verbindung zum Team Foundation Server herzustellen. Der Service verwendet das TFS-Client-Object-Model, um auf die Build Information eines TFS Team Projekts zugreifen zu können. Der Dienst liest alle beendeten Build Definitionen der letzten 24 Stunden aus und verschickt deren Ergebnis als Email im html-Format über die Exchange Web Services an alle Mitglieder einer Mailing-Liste.

Who broke the build - Mailing List

Eine Verbindung zum TFS aufbauen

Um die gewünschten Informationen des TFS Build-Systems zu erhalten, muss der „Build Service“ des Team Foundation Servers angefragt werden. Um diesen Dienst anzusprechen wird eine Instanz der TFSTeamProjectCollection Klasse benötigt, welche die GetService(Type)-Methode implementiert, über die wiederum eine Instanz von IBuildServer geladen werden kann.

// Lade Konfigurations- und Verbindungsinformationen
Config config = LoadConfigInformation();
Uri uri = new Uri(config.Url);
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(uri);
IBuildServer buildService = tfs.GetService(typeof(IBuildServer)) as IBuildServer;

Alle notwendigen Parameter, wie z.B. die Collection-Url oder der Team Projekt Name, werden aus einer Konfigurationsdatei ausgelesen und als die entsprechenden Parameter übergeben.

Build Details abfragen

Wenn der „Build Service“ des Team Foundation Server erfolgreich geladen werden konnte, lässt sich mit Hilfe einer Build Detail Spezifikation IBuildDetailSpec die Auswahl der zu ladenden Build-Ergebnisse einschränken. In der Build Detail Spezifikation wird beispielsweise angegeben in welchem Team Projekt Build Definitionen gesucht, wie viele Builds pro Definition abgefragt und wie das erwartete Ergebnis sortiert werden soll.

Besonders wichtig an dieser Stelle ist der Parameter InformationTypes der Build Detail Spezifikation. Durch diesen Parameter kann die Informationstiefe der Abfrage gesteuert werden, um nicht benötigte Information im Vorfeld auszufiltern und somit die Antwortzeit zu reduzieren. Durch das explizite Setzen von NULL, werden weder assoziierte Work Items, noch assoziierte Changesets oder Error Details über den Build Service ausgelesen, wodurch die Response-Zeit der QueryBuilds-Methode drastisch reduziert wird.

// Erstelle IBuildDetailSpec, um die Antwort der Build-Abfrage einzuschränken
// Maximal einen Build per Definition
// Sortiert nach FinishTime
// Keine zusätzlichen Informationen laden (z.B. Error Details, etc.)
// Nur Builds aus den letzten 24 Stunden
 
IBuildDetailSpec buildDetailSpec = buildService.CreateBuildDetailSpec(config.TeamProject"*");
 
buildDetailSpec.MaxBuildsPerDefinition = 1;
buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending;
buildDetailSpec.InformationTypes = null;
buildDetailSpec.MinFinishTime = DateTime.Now.AddHours(-24.0);
 
var htmlBody = string.Empty;
var buildQueryResult = buildService.QueryBuilds(buildDetailSpec);

Verarbeiten der Build Informationen

Die Ergebnisse der Abfrage werden im Array buildQueryResult.Builds vom Typ IBuildDetail hinterlegt und werden zur weiteren Verwendung der Reihe nach ausgewertet und in ein Html-Template eingefügt. Die zum Einsatz kommende Html-Vorlage ist vergleichsweise primitiv und sieht wie folgt aus:

<b>{1}</b> Start Time: End Time: <a href=”{4}”>Details…</a>   {2} {3}
<table width=”400″>
<tbody>
<tr>
<td width=”60″>
<img alt=”" src=”{0}” width=”50″ height=”50″ />
</td>
</tr>
</tbody>
</table>

Jeder einzelne Platzhalter wird durch einen Wert aus dem Array der Build-Ergebnisse ersetzt. Diese Prozedur wird so oft durchlaufen, wie es abgeschlossene Build Definitionen im Array gibt. Wenn alle Teil-Html-Vorlagen ausgefüllt sind, werden sie in eine große Html-Vorlage zusammengefügt und anschließend als Email verschickt.

Verwenden der Exchange Web Services

Die Emails des Build Notification Service werden über die managed API der Exchange Web Services (EWS) verschickt. Die EWS bieten dafür ein relativ einfaches Objektmodell, um Nachrichten zu verschicken. Für detaillierte Informationen zu den Exchange Web Services empfiehlt es sich den Bereich „Get started with the EWS Managed API“ der MSDN genauer zu studieren.

Bevor eine erste Email versendet werden kann, muss der Exchange Service instanziiert und die entsprechenden Credentials zur Authentifizierung gesetzt werden. In diesem Beispiel kommen die Default Credentials zum Einsatz, da die Applikation innerhalb der Domain ausgeführt wird und die Nachrichten über einen on-premise Exchange Server verschickt werden.

// Initialisiere den ExchangeService und setze Default Credentials
ExchangeService eService = new ExchangeService();
eService.UseDefaultCredentials = true;

Als letzten Schritt der Initialisierung muss noch die Service URL gesetzt werden. Dafür wird in diesem Fall der AutodiscoverService geladen, um die Benutzereinstellungen des aktuellen AD-Users zu laden. Aus dessen Response kann dann eine valide URL entnommen werden, die vom EWS verwendet werden kann.

// Lade Autodiscover Service der Exchange Web Services und lade User-Einstellungen
AutodiscoverService autodiscoverService = new AutodiscoverService();
GetUserSettingsResponse response = autodiscoverService.GetUserSettings(smtpAdresse,
UserSettingName.InternalEwsUrl);
eService.Url = new Uri((string)response.Settings[UserSettingName.InternalEwsUrl]);

Der Rest ist dann straight-forward. Die Instanz des EWS wird in eine EmailMessage induziert und mit den entsprechenden Informationen angereichert. Als Email Body wird die Html-Vorlage mit allen Build Definitionen verwendet und die Empfänger werden aus der Konfiguration gelesen und angehängt.

Der Trick mit den Status Bildern

Damit der Status eines Builds durch ein Image in der Email visualisiert werden kann, wird der Status-Platzhalter aus der Html-Vorlage nur mit einer Content-Id befüllt (z.B. cid:picOK). Diese Content-ID wird kurz vor dem Verschicken der Email mit einem Mail-Attachement verknüpft, welches die gleiche Content-ID bekommt. Dadurch wird der Text aus der Html-Vorlage durch das Attachement ausgetauscht und ein Status-Bild angezeigt.

Wiederkehrender morgendlicher Task

Wie eingangs angesprochen soll den Entwicklern ein Feedback über die Build Läufe der letzten Nacht gegeben werden. Da der Build Notification Service eine Client Anwendung ist und das TFS Client Object Modell verwendet, muss die Anwendung auf einem Rechner ausgeführt werden auf dem Visual Studio installiert ist. Am einfachsten ist es einen täglichen Task im Task Scheduler anzulegen und so das Konsolenprogramm zu starten.

Transparenz belebt das Geschäft

Damit sind die Grundlagen geschaffen und es kann täglich eine Mail generiert werden, die den Status aller relevanten Nightly Builds visualisiert und an alle Entwickler verschickt. Somit verfügt jeder über den gleichen Informationsstand. Aber Mails sind geduldig und können ignoriert, verschoben oder gelöscht werden. Somit ist die Mail nur so gut wie jedes andere Informationsmedium auch – Team-Mitglieder, die sich schon immer gekümmert haben, freuen sich über die Übersicht. Die Anderen können sich nach wie vor ihre Verantwortung drücken.

Auf der Manage Agile 2013 Konferenz in Berlin hielt Uwe Henker den Vortrag „Human Factors and SCRUM“. Herr Henker beschrieb in seinem Vortrag wie Transparenz und die Visualisierung von Ergebnissen eine Verbesserung im „Gesamtsystem“ herbeiführen können. Aufbauend auf dieser These wurde der Logarithmus des Build Notification Service weiterentwickelt, um den Prozess noch transparenter zu machen. Der Dienst soll nun zusätzlich aus einem fehlgeschlagenen Build das potentiell verantwortliche Entwicklungsteam bestimmen und diese Information über die tägliche Status-Mail
verbreiten. Dabei geht es weniger darum einen Schuldigen zu finden, sondern um eine erste Anlaufstelle für die Fehlersuche zu nennen. Es soll ein erster Kümmerer gefunden werden, der auch die Lage beurteilen kann – da der Fehler schließlich irgendwo in dessen Code aufgetreten ist.

Implementieren lässt sich das relativ einfach. Der „Build Service“ muss lediglich für eine bestimmte Build Definition die Build Details abrufen.

// lade Liste der Verantwortlichen aus den verschiedenen Bereichen
// lade zusätzlichen Informationen für konkrete Build Definition
// prüfe den Build Status und suche Verwantwortlichen
IDictionary&lt;string, string&gt; map = LoadResponsibles();
IBuildDetail buildDetail = buildService.GetAllBuildDetails(buildDefinition.Uri);
if(buildDetail.Status == BuildStatus.Failed)
{
WhoBrokeTheBuild(buildDetail, tfs, map);
}

Nachdem Laden der Build Details wird der Status des Build überprüft. Im „Nicht-Gut“-Fall wird dann nach einem Kümmerer aus der Liste der möglichen Verantwortlichen gesucht. Dazu werden in der WhoBrokeTheBuild()-Methode die Build Errors der Build Definition abgefragt und ausgewertet.

// Build Errors über InformationNodeConverters laden
List errors = InformationNodeConverters.GetBuildErrors(buildDetail);
foreach (IBuildError err in builderrors)
{
// do something
// search for responsible in map
}

Der Name des Kümmerers bzw. des Teams wird nun solange gezeigt, bis der Fehler bereinigt wurde oder durch einen neuen Kümmerer (neuer Fehlerfall) ersetzt wird.

Fazit

Einige Wochen nach der Einführung der Build Status Email bleibt festzustellen, dass diese neue Transparenz zu etwas höherer Qualität geführt hat. Die Builds laufen stabiler und auftretende Fehler, werden schneller bereinigt. Allerdings ist auch festzustellen, dass sobald der Logarithmus keinen Kümmerer ausfindig machen kann, sich auch kein Verantwortlicher freiwillig meldet – und sich dadurch die Fehlerbehebung wieder verzögert.

Was also bleibt? Zum einen die Erkenntnis, dass der Algorithmus noch wesentlich besser werden muss und das die Qualität einer Software immer nur so hoch ist wie die Motivation seiner Entwickler.

Mögliche Sinnvolle Erweiterung

Zugegebenermaßen ist der Build Notification Service ein wenig „dumm“, da er im Moment nur ein einziges Team Projekt überwacht und auch nicht zwischen Teams unterscheidet. D.h. eine Fokussierung und Kanalisierung der Information ist im Moment nicht möglich. Deswegen wäre eine sinnvolle Erweiterung für die Zukunft, die Überwachung von Teams und Team Projekten konfigurierbar zu machen.

Eine weitere Erweiterung könnte die Abschaffung der klassischen Mailing-Liste sein, die jetzt in der Konfigurationsdatei hinterlegt werden muss. Wenn man den Team-Gedanken aus der ersten Erweiterung aufgreift, könnte es sich durchaus lohnen einen Mechanismus zu schreiben, der die Mitglieder aus den jeweiligen Teams ausliest, deren Mail-Adresse bestimmt und ihnen die teamrelevanten Build-Informationen zuschickt.

Weitere Ideen oder Anregungen könnt Ihr gerne im Kommentar hinterlassen. Ich würde mich freuen.

[1] dotnetpro 02/14 Andy Grothe – Sie haben Post

[2] http://msdn.microsoft.com/de-de/magazine/jj553516.aspx

[3] http://msdn.microsoft.com/en-us/library/office/jj220499(v=exchg.80).aspx

[4] http://msdn.microsoft.com/de-de/library/bb130146.aspx

 

Norbert Eder: #fotomontag #13

Jeden Montag ein Foto. Der #fotomontag.

Ich habe eine neue Leidenschaft entdeckt. Die S/W-Fotografie. “Ja, das musste doch kommen” werden sich so manche denken. Vielleicht muss das auch Teil der Entwicklung sein.

Das nachfolgende Foto ist aus einer Spielerei entstanden und anfangs dachte ich mir dabei auch nicht viel. In Lightroom erwischte ich mich dann als ich einige Minuten auf das Foto starrte und gedanklich in die Ferne (eigentlich in die Höhe) glitt. Für mich ist das ein richtiges Nachdenkbild, oder etwa nicht?

Die Wolkenlampe

Die Wolkenlampe

Hast du eine Meinung zum Foto? Ja? Dann lass sie mich doch bitte wissen und bewerte es in den Kommentaren.

The post #fotomontag #13 appeared first on Norbert Eder.

Johnny Graber: 5 Punkte für bessere Präsentationen

Präsentationen und Vorträge vorzubereiten bedeutet meist viel Arbeit. Während Tagen wenn nicht gar Wochen wird an der Vorbereitung intensiv gearbeitet und oft braucht es viel Überwindung um vor das Publikum zu treten. Ich finde es immer schade wenn diese viele Arbeit am Ende in einer Präsentation resultiert, die wegen Kleinigkeiten hinter ihren Möglichkeiten zurückbleibt.

Da mir oft die immer gleichen Punkte auffallen, möchte ich heute einige kleine Anpassungen zur Verbesserung zeigen. Weitere Ideen sind als Kommentar sehr willkommen.

 

Keine Wand aus Text

Ein Foliensatz soll die wichtigsten Punkte der Präsentation aufnehmen. Während man über die richtige Balance zwischen Hintergrundinformationen und Stichworten debattieren kann, so sollte doch niemals eine Folie komplett mit Text gefüllt sein. Noch schlimmer ist nur noch diese Folie als Ganzes vorzulesen…

Ist tatsächlich so viel Text notwendig gibt es bessere Alternativen: Sei dies ein Handout, ein eigenständiges Dokument, ein oder mehrere Blogeinträge. Welche dieser Varianten besser geeignet ist hängt stark vom Publikum ab. Alle sind aber besser als die Wand aus Text, die einem entgegen der weit verbreiteten Ansicht auch im Nachhinein nicht hilft die gewünschten Informationen aufzufinden.

 

Lesbare Schriftgrösse

Mit der Wand aus Text geht meist auch eine sehr kleine Schrift einher. Da man viel zeigen will muss halt die Schrift entsprechend klein ausfallen. Die Folge davon sind Folien, die man ab der 2. Reihe nicht mehr lesen kann. Wozu wollte man aber nochmals so viel Text einfügen? Genau, damit das Publikum die wichtigen Informationen lesen kann…

Als einfache Grundregel für Schriftgrössen gilt aus meiner Sicht: Wenn die Schrift auf dem Bildschirm nicht zu gross wirkt ist sie auf der Leinwand viel zu klein. Daher sollte man ruhig 2 Schriftgrade höher einsteigen und je nach Raumgrösse sogar eine noch grössere Schrift wählen. Ein Technikcheck vor der Präsentation kann dann für die Feinabstimmung verwendet werden um auch der hintersten Reihe eine lesbare Folie zu bieten.

 

Lesbare Diagramme und Code

Was für den Text gilt muss auch für Diagramme und Code beachtet werden. Soll anhand eines Diagramms gezeigt werden wie sich gewisse Werte entwickeln, müssen diese vom Publikum auch gesehen werden können. Zu oft wird aber weder im Kontrast noch bei der Farbwahl oder der Liniendicke ans Publikum gedacht…

Düne Linien in Diagrammen lassen sich oft sehr einfach mit einer stärkeren Linie ersetzen. In Kombination mit klar unterscheidbaren Farben ist dies meist alles was nötig wäre. Bei Quellcode geht es sogar noch einfacher: Alles was man in Visual Studio machen muss ist die den Zoomfaktor auf 200% zu stellen oder das kleine Werkzeug ZoomIt verwenden.

 

Zeitraster einhalten

Nur die wenigsten Präsentationen sind so wichtig das man den ganzen Tag danach ausrichtet. Meist ist eine Präsentation nur ein Punkt von vielen der an diesem Tag erledigt werden soll. Ein pünktlicher Start und ein rechtzeitiges Ende der Präsentation sind daher unerlässlich.
Nichts ist mühsamer als ein Präsentator der seine Zeit massiv überzieht und sich in unwichtigen Details verliert. Dies führt nicht nur zu Verspätungen der nachfolgenden Termine sondern geht auch sehr schnell ins Geld…

Besser machen kann man dies in dem man seine Präsentation mit 5 Minuten weniger Zeit plant. So kann man auch auf einige Fragen eingehen und ist nicht bereits am überziehen. Eine Uhr oder ein Wecker hilft ebenfalls dabei die Zeit im Auge zu behalten, falls das gewählte Präsentationsprogramm dies nicht selber anbietet.

 

Live-Coding vermeiden

Auch wenn es einige Leute gibt die ohne weiteres vor Publikum fehlerfreien Code schreiben können, so trifft dies für die meisten Präsentatoren nicht zu. Es gibt wesentlich spannendere Möglichkeiten um eine Präsentation zu gestalten als mit einem vollen Saal Fehler zu suchen…

Code soll ruhig gezeigt werden. Gerade wenn es um Details geht sind Code-Beispiele sehr hilfreich. Allerdings genügt es meistens diese zu zeigen, ohne dafür den Code vor Publikum einzutippen. Will man schrittweise den Code für eine Anwendung ergänzen empfiehlt es sich Git zu verwenden und von einem Commit zum nächsten zu springen.

 

Fazit

Obwohl diese 5 Punkte sehr subjektiv sind können diese doch zu besseren Präsentationen führen. Damit ist zwar noch keine erfolgreiche Präsentation garantiert, doch kommt man so leicht in die Gruppe der angenehmeren Präsentationen.


Einsortiert unter:.Net, dnugBern, webDotNet Tagged: .Net, Lernen

Christina Hirth : Spartakiade – Marathonlauf für Entwickler

Am Wochenende von 21-22. März hat im Berlin die vierte Spartakiade stattgefunden. Die Idee der Veranstaltung ist einfach: eine Open Space-(Un)Konferenz, die ausschließlich aus Workshops besteht.

Ich habe bisher noch nie geschafft, die Spartakiade zu besuchen. Bis jetzt. Mein Urteil: volle Punktzahl. Diese zwei Tage machen zusammen mit den anderen Open Space Events (Developer Open Space in Leipzig, Open Space Süd in Karlsruhe und Shorty Open Space, der immer spontan via Twitter organisiert wird ) die Sache rund.

Wir waren über 100 Teilnehmer, die in den 2 Tagen 19 Workshops besucht haben. Unsere Coaches genau so wie die Organisatoren sind really most valuable persons der Community, die mehr als unseren Dank verdienen: ein großer fetter Dank von mir nochmal an euch alle (ich hätte Angst, dass ich jemanden vergesse, deshalb schreibe ich hier keine Namen. Aber sie sind alle auf der Homepage der Spartakiade zu finden).

Ich meine, es ist schon großartig, dass wir die Workshops unter traumhaften Bedingungen, in den Räumlichkeiten von Immobilienscout24 haben dürften. Aber einen vollen Kofferraum Gadgets zu besorgen um das Workshop “Smart Things” vorzubereiten, oder neben der Arbeit sich in das Thema Graphdatenbanken einzuarbeiten UND die Präsentation an die 15 oder so “ausgehungerten” Entwickler vorzustellen –  nur um zwei von den Workshops zu erwähnen – , das macht man nicht mal so. Genauso wenig, wie für das Mittagessen mal 1 bis 3 Stunden im verregneten und kalten Berlin neben dem Grill auf der Straße zu stehen und für den zweiten Tag sich einen Burger-Wagen auszudenken, dann ist das schon viel viel mehr, was man normalerweise tun muss. Sowas entsteht nur durch voller Hingabe.

Ich habe hier keine Details über die Workshops, die ich besucht habe, genannt, weil sie auf jedem Fall eigene Blogposts verdienen. Ich kann nur eine Bemerkung eines Kollegen zurückgeben: “die Kosten, die durch dieses Wochenende entstanden sind, sind peanuts im Vergleich dazu, wie viel wir gelernt haben und wie viel return-of-investment aus dieser Investition entstehen wird!”

Johannes Renatus: MP3s zusammenführen / mergen mit dem copy Befehl und der csid3lib

Manchmal sind es die kleinen Dinge über die man sich als Softwareentwickler freut. So z.B. am letzten Wochenende an dem ich beschlossen hatte ein paar alte Hörspiele die immer auf mehrere MP3 Dateien aufgeteilt waren zu einer Datei zusammenzufügen und zumindest den Titel und das Album entsprechend einzutragen, denn der Ordnername in dem sich die […]

Manfred Steyer: Eigene Komponenten mit Angular 2

Eine der Stärken von AngularJS ist seit jeher die Möglichkeit, mit Direktiven eigene Komponenten zu schaffen. Ab Angular 2 basieren diese Direktiven auf Web Components. Dieser Beitrag zeigt anhand eines Beispiels, wie man damit eigene Steuerelemente erstellen kann. Im Zuge dessen geht er auf die folgenden Aspekte, die sich durch die Umstellung auf Web Components nun anders gestalten, ein:

  • Binden von Ereignissen in eigenen Komponenten
  • Binden von Werten in eigenen Komponenten
  • Transclusion
  • Kommunikation zwischen Komponenten

Das hier gezeigte Beispiel bezieht sich auf die aktuell vorliegende Alpha-Version von Angular 2. Details können sich somit noch ändern. Trotzdem gibt dieses Beispiel ein Gefühl dafür, wie Angular 2 aussehen wird.

Überblick über das hier gezeigte Beispiel

Das hier besprochene Beispiel, welches via GitHub zum Download bereit steht, zeigt die Erstellung einer benutzerdefinierten Auswahlliste. Der Benutzer kann eine der angebotenen Optionen per Klick aktivieren. Diese wird daraufhin mit blauen Hintergrund hervorgehoben dargestellt.

Implementierung der Direktive

Die Implementierung der vorgestellten Direktive besteht aus einer Web-Component (Direktive). Hierbei handelt es sich um eine Klasse mit dem Namen OptionBox (siehe nächstes Listing). Dadurch, dass sie mit der Annotation @Component markiert wurde, erkennt Angular 2 sie als Web-Component. Die Eigenschaft selector von @Component legt über einen CSS-Selector fest, welches HTML-Element die Komponente repräsentieren soll. Der verwendete Wert optionbox führt dazu, dass Elemente mit dem Namen optionbox (<optionbox>…</optionbox>) diese Aufgabe wahrnehmen. Die Eigenschaft bind definiert hingegen, dass das Attribut selected dieses Elements an die gleichnamige Eigenschaft der Klasse zu binden ist. Diese Eigenschaft spiegelt den ausgewählten Wert wieder.

Die Annotation @Template legt fest, wie die Komponente darzustellen ist. Anstatt dazu auf eine Template-Datei zu verweisen, legt sie im betrachteten Fall das Template über die Eigenschaft inline fest. Es besteht lediglich aus einem content-Element, das die Transclusion durchführt. Mehr dazu später.

Die Klasse OptionBox lässt sich mittels @EventEmitter eine Funktion injizieren, mit der sie ein gebundenes Ereignis auslösen kann. Den Name des Attributs, über das der Entwickler das Ereignis bindet, übergibt sie an @EventEmitter. Somit erwartet Angular 2 im gezeigten Fall eine Eigenschaft changed, über die die Anwendung das Event-Binding festlegt. Diese Funktion hinterlegt OptionBox in der Eigenschaft changed. Mit der Eigenschaft options, welche ein Array repräsentiert, verwaltet OptionBox die einzelnen Auswahlmöglichkeiten. Diese werden durch Instanzen der Klasse Item wiedergespiegelt. Über die Methode registerOption nimmt die OptionBox die einzelnen Item-Objekte entgegen.

Mit der Methode select gibt die OptionBox ihrer Umgebung die Möglichkeit, sie auf eine Auswahl hinzuweisen. Dazu nimmt select das gewählte Item entgegen und verstaut ihren Wert (value) in der Eigenschaft select. Dann löst sie das besprochene changed-Ereignis aus und geht sämtliche Optionen durch. Im Zuge dessen setzt sie bei den Items, die diese Optionen repräsentieren, die Eigenschaft selected. Diese drückt aus, ob die jeweilige Option gewählt wurde. Beim übergebenen Item setzt select diese Eigenschaft auf den Wert true; bei allen anderen auf false.

import {Component, Decorator, Template, If} from 'angular2/angular2';
import {EventEmitter} from 'angular2/src/core/annotations/events';
import {Item} from 'item';

@Component({
    selector: 'optionbox',
    bind: {
        'selected': 'selected'
    }
})
@Template({
    inline: '<content></content>'
})
export class OptionBox {

    options: Array<Item> = [];
    selected;
    changed;

    constructor(@EventEmitter('changed') changed: Function) {
        this.changed = changed;
    }

    registerOption(option: Item) {
        this.options.push(option);
    }

    select(option: Item) {

        this.selected = option.value;

        this.changed();

        for (let o of this.options) {
            o.selected = (option == o);   
        }
    }

}

Komponente für Auswahlmöglichkeiten

Wie im letzten Absatz bereits angemerkt, repräsentiert die Klasse Item in diesem Beispiel eine einzelne Auswahlmöglichkeit. Auch hierbei handelt es sich um eine Web-Component, welche mit @Component annotiert ist. Diese Annotation legt fest, dass Item-Komponenten durch HTML-Elemente mit dem Namen item darzustellen sind (selector), sowie, dass Angular 2 das Attribut value an die gleichnamige Eigenschaft binden soll. Die Annotation @Template teilt Angular 2 mit, dass eine Item-Komponente mit dem Template item.html darzustellen ist, sowie, dass dieses die Direktive If benötigt. Die Eigenschaft selected gibt Auskunft darüber, ob das Item ausgewählt ist und bei optionBox handelt es sich um eine Referenz auf die OptionBox, in der sich das Item befindet. Letztere lässt sich der Konstruktor injizieren. Dazu nutzt er die Annotation @Parent, welche festlegt, dass die gewühlte OptionBox-Komponente das Parent-Element der Item-Komponente im DOM ist. Um nicht das Parent-Element, sondern einen beliebigen Vorgänger zu referenzieren, könnte der Entwickler stattdessen die Direktive @Ancestor heranziehen.

Der Konstruktor registriert das Item bei der gefundenen OptionBox-Komponente durch Aufruf deren registerOption-Methode. Daneben weist Item auch eine Methode select auf. Diese gibt der OptionBox bekannt, dass sie gerade vom Benutzer ausgewählt wurde.

import {Component, Decorator, Template, If, Parent} from 'angular2/angular2';
import {OptionBox} from 'optionBox'

@Component({
    selector: 'item',
    bind: {
        'value': 'value'   
    }
})
@Template({
  url: 'item.html',
  directives: [If]
})
export class Item {

    selected = false;
    optionBox: OptionBox;

    constructor(@Parent() optionBox: OptionBox) {
        this.optionBox = optionBox;
        optionBox.registerOption(this);
    }

    select() {
        this.optionBox.select(this);
    }
}

Das Template der Item-Komponente findet sich im nächsten Listing. Da der den Web-Components zugrundeliegende Mechanismus Shadow-DOM die Styles von Komponenten von den Styles der restlichen Anwendung abschottet, definiert das Template ihre eigenen Styles. Hierbei handelt es sich um Styles für Klassen boxOn und boxOff, welche dem Darstellen der ausgewählten bzw. nicht ausgewählten Optionen dienen.

Das div-Element stellt die Option dar. Ihre Bindings [class.boxOn] und [class.boxOff] legen fest, dass Angular 2 in Abhängigkeit der Eigenschaft selected die Klasse boxOn bzw. boxOff zuweisen soll. Das div-Element enthält einen Link, dessen Beschriftung den Wert der Eigenschaft value wiederspiegelt. Darüber hinaus führt die Nutzung von *if dazu, dass das Template ausgewählte Optionen mit einem Stern kennzeichnet. Daneben bindet es über ein Event-Binding das click-Ereignis des Links an die zuvor besprochene Methode select, welche sich in der Item-Komponente befindet.

<style>
    .boxOn { … }
    .boxOff { … }
</style>
<div [class.boxOn]="selected" [class.boxOff]="!selected"><a (click)="select()"> {{value}} <span *if="selected">*</span></a> 
</div>

Auswahlliste verwenden

Zum Testen der OptionBox benötigt man eine weitere Komponente, welche die Web-Anwendung oder zumindest einen Teil davon wiederspiegelt. Die Implementierung dieser Komponente findet sich im nachfolgenden Listing. Sie nennt sich App und weist, wie gewohnt, die Annotationen @Component und @Template auf.

Die Aufgabe dieser Komponente besteht im Verwalten einer Versandart. Dabei handelt es sich um einen String, den sie über die Eigenschaft versandart verfügbar macht. Zum Ändern der Versandart bietet sie eine Methode changed an.

Um Angular 2 anzuzeigen, dass es sich bei dieser Komponente um jene Komponente, welche die Anwendung repräsentiert, handelt, wird sie am Ende an die Funktion bootstrap übergeben.

import {Component, Template} from 'angular2/angular2';
import {bootstrap} from 'angular2/angular2';
import {OptionBox} from 'optionBox';    
import {Item} from 'item';

@Component({
    selector: 'app'
})
@Template({
  url: 'app.html',
  directives: [OptionBox, Item]
})
class App {

    versandart = "<nicht gewählt>";

    changed(art) {
        this.versandart = art;
    }

}

bootstrap(App);

Das Template für App findet sich im nächsten Listing. Es bindet das Stylesheet von Twitter Bootstrap ein und weist ein Html-Element optionbox auf. Ein Value-Binding verknüpft die Eigenschaft versandart von App mit dem Attribut selected von OptionBox. Das Attribut #box legt fest, dass die dargestellte OptionBox-Instanz über das Handle box erreichbar sein soll. Dieses Handle kommt beim Event-Binding für das Ereignis changed zum Einsatz. Es legt fest, dass beim Auslösen dieses Ereignisses die Funktion changed der App-Komponente aufzurufen ist. Dabei ist der aktuelle Wert von selected zu übergeben. Dies ist notwendig, da Angular 2 zur Steigerung der Leistung auf das von React bekannte Flux-Muster setzt und somit lediglich One-Way-Binding anbindet. Die Nutzung jener Objekte, die bei der Arbeit mit Formularen eine Art Two-Way-Binding ermöglichen sollen, wird in einem separaten Beitrag beleuchtet.

Innerhalb des optionbox-Elements repräsentieren item-Elemente, hinter denen Item-Komponenten stehen, die einzelnen Auswahlmöglichkeiten. Diese Elemente platziert Angular 2 im Template der OptionBox-Komponente an der Stelle, welche mit dem content-Element markiert wurde. Diesen Vorgang nennt man auch Transclusion. Die Ausgewählte Option zeigt das Template zusätzlich am Ende an.

<style>
    @import url('bower_components/bootstrap/dist/css/bootstrap.css');
</style>

<h2>Direktiven-Sample</h2>

<optionbox #box [selected]="versandart" (changed)="changed(box.selected)">
    <item value="Per Express"></item>
    <item value="Per Einschreiben"></item>
</optionbox>

<div>
    Gewählt: {{ versandart }}
</div>

AngularJS-Anwendung ausführen

Was noch fehlt, ist eine HTML-Seite, welche die gezeigten Komponenten darstellt und EcmaScript 6 simuliert. Diese Seite, welche aus dem Quick-Start-Beispiel von angular.io entnommen wurde, findet sich im nachfolgenden Listing. Wichtig hierbei ist die Nutzung des Elements app, hinter dem die gleichnamige Komponente steht. Der Aufruf von System.import am Ende importiert die nach EcmaScript 5 übersetzte Datei app.js und bringt sie zur Ausführung. Der darin zu findende bootstrap-Aufruf registriert App als Komponente. Durch Nutzung des Modulsystems von EcmaScript 6 werden alle anderen benötigten Skripte geladen und von System nach EcmaScript 5 transpiliert. Hierzu nutzt das Quick-Start-Sample von angular.io den Transpiler Traceur.

<html>
  <head>
    <title>Angular 2 Direktiven-Demo</title>

        <script src="dist/es6-shim.js"></script>
        <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css">

    </head>
  <body>

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

    <script>

      // Rewrite the paths to load the files
      System.paths = {
        'angular2/*':'angular2/*.js', // Angular
        'rtts_assert/*': 'rtts_assert/*.js', //Runtime assertions
        'flugService': 'flugService.js',
        'css/bootstrap.css': 'bower_components/bootstrap/dist/css/bootstrap.css',
        '*': '*.js'
      };

      // Kick off the application
      System.import('app');
    </script>

  </body>
</html>

 

Link zum Beispiel

Manfred Steyer: AngularJS-Buch erscheint diese Tage

Diese Tage erscheint unser AngularJS-Buch bei O'Reilly. Die Web-Site dazu findet man unter www.angular.at. Bestellt werden kann es unter anderem bei Amazon.

Hans-Peter Schelian: Lebbe geht weider

10 Tote und 1000 Verletzte pro Tag allein auf Deutschen Strassen,

Jahr für Jahr

und niemanden interessiert es wirklich.

Aber 1 mal (in Worten ein mal) in vielen Jahren 150 Tote bei einem Flugzeug …. 
soll ich Unglück sagen, und die Menschheit steht Kopf.

  • Die Medien verändern Ihre Landschaft, 
  • Satire Sendungen werden nicht gesendet
  • Nachrichtensendungen wiederholen und überholen sich selbst.

Ich weiß dass es für die betroffenen schlimm ist, auch, und vor allem für Eltern, 
Eltern von Kindern die sie zu Grabe tragen müssen.

Eltern sollten Ihre Kinder nie zu Grabe tragen müssen, sondern Kinder sollten irgendwann Ihre Eltern betrauern.

Mir erschließt sich aber trotzdem nicht:

  • Warum die Opfer eines Flugzeugabsturzes bedauernswerter sind als andere Opfer.
  • Warum eine ganze Nation in Schockstarre verfällt
  • Warum viele die Opfer, die sie nicht mal kennen, nun betrauern als wenn es Ihre Angehörigen wären

Lassen wir doch den Angehörigen von Opfern den Raum den sie brauchen um Ihre Trauer ausleben zu können.

Aber bitte, lasst uns, die gerade keine Opfer zu beklagen haben auch nicht in Panik verfallen.

Hat jemand den kurzen Ruck gemerkt als die Welt einen ganz kleinen Moment aufgehört hat sich zu drehen,
um der Opfer des Flugzeugabsturzes zu gedenken.

  • Nicht?

Den gab es auch nicht!

Ich sage jetzt nicht: 

“Bitte versteht mich nicht falsch, natürlich tun mir die Opfer der Katastrophe und deren Angehörigen leid aber…..”

Nein, das sage ich nicht, denn ich unterscheide nicht zwischen Opfern eines Flugzeugunglücks und anderen Opfern.

Und ich habe nicht die Zeit und die Kraft mich jeden Tag um die 10 Toten auf unseren Strassen und die X Toten durch andere Unglücke auf der Welt kümmern zu können.

Lasst und doch, die aus unserem eigenen sozialen Umfeld scheidenden betrauern, aber hören wir auf mit Sensations- und Massenbeileid von uns völlig unbekannten.

Für die lebenden, geht das Leben halt weiter!

(PS: Ich habe hier extra nicht auch noch Opfer von Verbrechen, Gewalttaten und Krieg mit ins Spiel gebracht )

Marco Scheel: Links for 2015-03-27 [del.icio.us]

codefest.at [MS]: Azure Subscriptions verknüpfen

Ihr habt mehrere Azure Subscriptions und wollt diese zusammen nützen? Wenn ihr beispielsweise ein BizSpark Nutzer seid, habt Ihr die Möglichkeit mit geringem Zeitaufwand eure 5 Subscriptions mit je 150$ kostenloser Consumption zusammenzulegen und dadurch bis zu $750 an Azure Services kostenlos zu nutzen! Hört sich gut an? Wir zeigen Euch im Folgenden wie Ihr das zum Beispiel machen könnt:

1. Loggt Euch im Azure Portal ein

2. Erstellt ein virtuelles Netzwerk VNet1 (mit z.B. Virtual Network Adress Space: 10.10.0.0/16 und Local Network Adress Space 192.168.0.0/16)

3. Erstellt ein zweites virtuelles Netzwerk VNet2 (mit z.B. Virtual Network Address Space 192.168.0.0/16 und Local Network Adress Space 10.10.0.0/16)

4. Erstellt ein Dynamic Routing VPN Gateway für jedes VNet (VNet1Remote, VNet2Remote)

5. Ersetzt die VPN IP des lokalen Netzwerks mit der neuen IP, welche von Azure zur Verfügung gestellt wurde (VNet1 à VNet1Remote; VNet2àVNet2Remote)

6. Legt IPsec/IKE mit Azure PowerShell fest

a. Azure Publish Setting File downloaden

b. Importiert das Azure Publish Setting File:
Import-AzurePublishSettingsFile C:\Users\<UserProfile>\Downloads\<SubscriptionName>credentials.publishsettings

c. Wählt die Azure Subscription aus:
Select-AzureSubscription «<SubscriptionName>»

d. Legt einen gemeinsamen Schlüssel fest
Set-AzureVNetGatewayKey -VNetName <VNET Name> -LocalNetworkSiteName <VNET Name> -SharedKey A1B2C3D4

e. Wiederholt die Schritte für alle weiteren Subscriptions

Nun könnt Ihr Eure Virtuellen Maschinen auf den virtuellen Netzwerken erstellen. Im nächsten Schritt verbindet Euch mittels RDP mit den Virtuellen Maschinen und startet dort den Server Manager. Im Server Manager aktiviert die Ping Inbound Rule und zum Schluss „pingt“ auch Eure VMs gegenseitig an, um die Erreichbarkeit zu überprüfen.

Easy oder? :)

Beim nächsten Azure Onboarding Workshop wird es auch die Möglichkeit geben, das Zusammenlegen der Subscriptions vor Ort mit unseren Azure Experten durchzugehen. Ihr könnt die Möglichkeit auch nutzen um Fragen zu stellen und den besten und kostengünstigsten Weg für Eure Lösung auf Azure zu finden.

Viel Spaß und gutes Gelingen!

Marco Scheel: Links for 2015-03-25 [del.icio.us]

Sven Hubert: ALM Days 2015 – ein Rückblick

Am 11. und 12. März hat sich in Düsseldorf auf den ALM Days 2015 wieder einmal die Möglichkeit geboten, Neuigkeiten über Microsofts ALM Plattform Team Foundation Server zu erfahren sowie reichlich Social Networking zu betreiben. Under dem Motto “Software Engineering war nie spannender” öffneten sich die Tore und in der Tat, es gab einiges zu erfahren. Neben vielen Experten aus dem ALM-Umfeld außerhalb von Microsoft gab es auch wieder Möglichkeiten mit Microsoft direkt in Kontakt zu treten und sich z.B. über die Produktstrategie sowie die internen Erfahrungen mit agilen Entwicklungsprozessen und der “Cloud Cadence” zu informieren. In diesem Beitrag stellen wir die Folien und Videos zu unseren Konferenzbeiträgen bereit und zeigen noch ein paar Eindrücke in Bildern.

Zunächst die Vortragsfolien, zu den fünf von AIT mitgestalteten Vorträgen:

 

Ein Highlight war die TFS Geburtstagsparty. Wenngleich noch immer nicht 100%ige Klarheit herrscht, ob der TFS nun neun oder zehn Jahre alt geworden ist ;) (Insider für die Konferenzteilnehmer), gab es eine Geburtstagsfeier mit stilechtem Minecraft TFS Geburtstagsvideo und Geschichten aus den TFS-Anfangszeiten von Martin Woodward , Sam Guckenheimer sowie Munil Shah (v.l.n.r.; alle von Microsoft).

Minecraft - klein

TFS-Geschichten - klein

Da alle sechs deutschsprachigen VS ALM MVPs vor Ort waren, haben wir auch gleich noch ein kleines “Familienfoto” geschossen. Dort zu sehen sind v.l.n.r.: Christian Binder (Microsoft), Nico Orschel (AIT, VS ALM MVP), Martin Woodward (Microsoft), Neno Loje (VS ALM MVP), Sam Guckenheimer (Microsoft), Thomas Rümmler (AIT, VS ALM MVP), Marc Müller (4techture, VS ALM MVP), Karsten Kempe (conplement, VS ALM MVP) sowie Thomas Schissler (artiso, VS ALM MVP).

MS MVP Familientreffen - klein

Als Premiumpartner der ALM Days waren wir natürlich auch wieder mit einem eigenen Ausstellerstand vertreten.

AIT Stand klein

Auch in diesem Jahr haben wir – schon fast in Tradition – wieder ein Gewinnspiel mitgebracht. Diesmal durfte sich der glückliche Gewinner über ein Fujitsu Lifebook freuen. Herzlichen Glückwunsch noch einmal an dieser Stelle! Vielen Dank auch noch einmal an Sam Guckenheimer, der sich wieder als “Losfee” bereiterklärt hat, den Gewinner zu ziehen.

Gewinner - klein

Aus unserer Sicht waren die ALM Days 2015 eine äußerst gelungene Veranstaltung mit vielen Neuigkeiten aus der Community sowie von Microsoft selbst. Auch das Networking ist nicht zu kurz gekommen und wir haben viele unserer Kunden, Partner & Co. getroffen. Alles in allem eine runde Sache. Wir freuen uns schon auf die nächsten ALM Days!

ALM Days 2015 – ein Rückblick is a post from: AIT Blog

Christian Binder [MS]: DevOps – Entwickelst Du noch oder lieferst Du schon?

in Zusammenarbeit mit der Artiso, möchte ich auf folgende Roadshow hinweisen, die das spannende Thema DevOps aufgreift. DevOps als logische Evolution von Agile nicht nur für Anwendungen im Web – absolut empfehlenswert.

Details unter - http://www.devops.de/

image

Termine der Roadshow:

25.06.2015 München
14.07.2015 Stuttgart
24.09.2015 Köln

codefest.at [MS]: Azure im Rahmen eines Hands-On-Workshop einfach ausprobieren?

Für all jene, die “die Cloud” – also in unserem Fall Azure – einfach mal “angreifen” wollen, haben wir schon in der Vergangenheit eine Reihe kostenloser Hands-On-Workshops veranstaltet.

Um der Nachfrage gerecht zu werden, haben wir für den 1.4.2015 einen zusätzlichen Termin eingeschoben.
Somit gibt es bis zum Juli noch (zumindest) 3 Termine, um sich mit diesen neuen Technologien vertraut zu machen.

Nähere Infos und Anmeldung…

Fabian Deitelhoff: Meine Erfahrungen mit Affiliate Links von Amazon

Geld mit seinem Blog verdienen!? Wer möchte das nicht? Faul auf Bali in der Sonne liegen und das Klingeln der Kasse leise zwischen dem Rauschen der Wellen wahrnehmen. :) Nun, so einfach ist es natürlich nicht. Zumindest nicht in Gänze, denn mit Einschränkungen ist das schon machbar.

Einen Aspekt, um mit seinem Blog Geld zu verdienen, möchte ich gerne in diesem Beitrag erläutern. Ebenso wie die Gründe, warum ich mich dafür entschieden habe und natürlich auch, wie es läuft. Dazu gehört auch, im Sinne der Transparenz, einen Blick hinter die Kulissen zu werfen. Also im Grunde die Beantwortung der Fragen wie viel ich tatsächlich mit den Links einnehme und wohin das Geld überhaupt fließt? Diese Fragen und ein paar Dinge mehr möchte ich in diesem Beitrag erläutern.

Einkommensarten

Grundsätzlich gibt es zwei Wege beziehungsweise Richtungen, um mit seinem Blog oder Webseite Geld zu verdienen. Da gibt es das sogenannte aktive Einkommen. Dabei dient das eigene Blog beziehungsweise die eigene Webseite als Werbeplattform, über die Interessenten auf eigene Dienstleistungen aufmerksam werden. Beispielsweise, weil man als Freelancer unterwegs ist und sein Wissen anbietet. Das funktioniert zum Beispiel über Beiträge zu diversen Themengebieten, über die potenzielle Kunden auf die eigene Internetpräsenz gelangen. Ich bezeichne das deshalb als aktives Einkommen, da für das Geld immer noch eine direkte Tätigkeit notwendig ist. Der so ergatterte Auftrag erledigt sich nun mal nicht von alleine. Wie bei der klassischen Werbung in Print- und Onlinemedien auch, dient es nur dazu, auf sich selbst beziehungsweise seine Dienstleistungen aufmerksam zu machen.

Die zweite Einkommensart möchte ich mal als passives Einkommen bezeichnen. Passiv aus dem einfachen Grund, weil dafür nur einmal etwas getan werden muss. Zumindest theoretisch. Beispiele sind hier Affiliate Links, eigene Bücher und sonstige Produkte, die von Lesern und Leserinnen erworben werden können. Ist der Beitrag mit den Affiliate Links erst einmal geschrieben, können die Links immer und immer wieder angeklickt werden und so, im besten Fall, ein stetiges wenn auch kleines Einkommen im Hintergrund generieren. Passiv eben, weil ohne aktives Zutun. In der Praxis sieht das etwas anders aus. Prinzipiell stimmt das zwar, aber die Beiträge und Bücher wollen erst einmal geschrieben werden. Und auch andere Produkte müssen erst erschaffen werden. Hinzu kommt, dass ein gutes Blog gepflegte Beiträge braucht. Auch das kostet Zeit. Ebenso wie das Beantworten von Anfragen interessierter Leserinnen und Leser. Da aber deutlich mehr Leute diese Art der Angebote nutzen können ohne jedes Mal eine gesonderte Dienstleistung erbringen zu müssen, fällt das für mich unter passives Einkommen.

Einnahmequellen

Zur Unterteilung nach verschiedenen Einkommensarten kommen noch diverse Einnahmequellen hinzu. Zum einem meine ich damit diverse Programme beziehungsweise Anbieter. Amazon ist bei weitem nicht der einzige Anbieter, der Affiliate Links zur Verfügung stellt. Zudem gibt es unzählige Möglichkeiten, diese Links, oder generell Werbung, in das eigene Blog zu integrieren. Auch hier habe ich lange überlegt. Auf die verschiedenen Anbieter möchte ich gar nicht groß eingehen. Amazon blieb für mich übrig, weil das (nahezu) jeder kennt und auch (nahezu) jeder dort bestellt beziehungsweise schon mal bestellt hat.

Noch wichtiger war für mich aber die Möglichkeiten zur Integration der Links in die eigenen Beiträge beziehungsweise allgemein in den eigenen Blog. Amazon stellt es beim Affiliate-Programm frei, ob es sich um reine Text-Links handelt, oder ob ein Bild beziehungsweise Bild + Text bevorzugt werden. Ich wollte keine stark sichtbare Werbung “schalten”. Also keine großen Bilder in der Sidebar oder gar Banner oder ähnliches. Nachvollziehen kann ich den Schritt auf anderen Blogs zwar, trotzdem nervt es mich etwas zu sehr, weswegen ich darauf verzichtet habe. Deshalb ist es bei mir bei reinen Text-Links geblieben, die ich von Zeit zu Zeit, nämlich wenn es im Kontext des Beitrags Sinn ergibt, in den Text einstreue. Massives Link-Dropping, also das starke Einbinden von Links in Texten, auch wenn sie kaum Sinn ergeben, wird es bei mir nicht geben. Falls ihr doch mal über so einen Beitrag stolpert oder euch sonstwie die Links negativ auffallen, freue ich mich immer über Kommentare direkt hier im Blog oder über sonstige Kanäle.

Bewerbung & Auszahlungsarten

Seit dem 25. August 2014 bin ich Amazon Affiliate Partner beziehungsweise Mitglied im Amazon PartnerNet, wie es so schön heißt. Um Mitglied zu werden, ist eine weitere Anmeldung erforderlich. Der Prozess ist einfach und unkompliziert. Neben einigen persönlichen Angaben sind hauptsächlich Infos zum eigenen Angebot erforderlich. Also was wird auf der eigenen Webseite/dem eigenen Blog beworben etc. pp. und welche Kategorien sind für Werbelinks hauptsächlich interessant? Anschließend erfolgt eine Prüfung durch Amazon. Verläuft alles glatt, wird der Account freigeschaltet und es kann losgehen. Die Freischaltung hat bei mir nicht lange gedauert. Ob das immer so ist, kann ich natürlich schlecht sagen.

Im Allgemeinen gilt, dass die monatlichen Erträge solange kumuliert werden, bis die Mindestsumme für eine Auszahlung erreicht beziehungsweise überschritten ist. Erst dann wird der Gesamtbetrag der bis dahin erzielten Werbekostenerstattungen ausbezahlt. Klingt erstmal doof. Auf der einen Seite ist das absolut verständlich. Wenn ich nur einige Cent oder Euro pro Monat über das PartnerNet erziele, müsste Amazon mir das Geld trotzdem immer überweisen. Und das für jeden Teilnehmer und jede Teilnehmerin des Programms.

Bei der Auszahlung der Beträge bietet Amazon verschiedene Zahlungsarten an: Amazon-Gutscheine, Überweisung und die sogenannte Scheckauszahlung. Das Auszahlungsminimum für die Auszahlungsarten Banküberweisung und Gutschein beträgt EUR 25,00 netto; das Auszahlungsminimum für Scheckauszahlung beträgt EUR 50,00 netto. Auch hier gibt es also eine Unterteilung. Ich habe mich für die Banküberweisung entschieden, da ich recht wenig bei Amazon einkaufe und das Geld direkt für den Blog nutzen möchte. Mehr dazu im Kapitel Verwendungszweck. Die Grenzen finde ich sehr fair. 25 Euro ist akzeptabel. Ebenfalls fair finde ich, dass es zwischen Banküberweisung und Amazon-Gutschein keinen Unterschied gibt. Hier hätte ich Amazon zugetraut, die Gutschein-Grenze niedriger beziehungsweise die Grenze für Banküberweisungen höher anzusetzen, um die Leute einfach auf die Gutschein-Schiene zu bringen.

Die Gutschreibung von Transaktionen geschieht im Übrigen zeitversetzt. Die ersten Umsätze meiner Partner-ID sind aus September 2014, wurden allerdings erst im November 2014 meinem PartnerNet-Konto gutgeschrieben. Diesen Zeitverzug gilt es am Anfang zu berücksichtigen, falls mit den Einnahmen bestimmte Dinge querfinanziert werden sollen. Wobei sich das vermutlich eh schlecht planen lässt.

Aktueller Stand meiner Einnahmen

Nun aber zur alles entscheidenden Frage: wie viel bringen die Affiliate-Links eigentlich ein? Die Antwort darauf ist ja nicht unerheblich, denn wäre der Ertrag zu gering, könnte ich mir den Aufwand auch einfach sparen. Zusätzlich stellt sich natürlich noch für jeden die Frage, was unter einem zu geringen Ertrag zu verstehen ist.

Die Abbildung 1 zeigt eine Übersicht meiner Einnahmen über das Amazon PartnerNet. Jeweils die Einnahmen für die einzelnen Monate. Am Anfang noch sehr überschaubar, hat es sich in den vergangenen Monaten deutlich gesteigert. Und das bei der Tatsache, dass ich die Affiliate Links höchstens bei zwei bis drei Blogposts überhaupt eingesetzt habe. Momentan sinkt es wieder, was aber in der aktuellen Übersicht noch nicht erfasst ist.

Abb. 1: Liste aller Auszahlungen im Amazon PartnerNet-Portal.

Abb. 1: Liste aller Auszahlungen im Amazon PartnerNet-Portal.

Ein Ausschnitt eines aktuellen Monats ist in Abbildung 2 zu sehen. Diese Übersicht macht auch deutlich, dass die Beträge in der Regel recht überschaubar sind, was die Unterschiede in der Werbekostenerstattung in Prozent deutlich machen. Abhängig vom gekauften Produkt, der Kategorie und weiteren Kriterien. Am oberen Rand ist vermerkt, wann die Liste das letzte Mal aktualisiert wurde. Das geschieht immer um 01.00 Uhr Nachts. Es handelt sich also nicht um eine Echtzeitdarstellung.

Abb. 2: Ausschnitt der Verkäufe/Einnahmen im Februar.

Abb. 2: Ausschnitt der Verkäufe/Einnahmen im Februar.

Zu guter Letzt zeigt Abbildung 3 noch die Gesamtauswertung für den Februar 2015. Für meine paar Euro müssen schon etliche Euro über Amazon bestellt werden. :) Auch die Anzahl zurückgeschickter Artikel ist vermerkt. Zurückgeschickte Artikel sind natürlich nicht so gut, da die daraus resultierende Werbekostenerstattung wieder vom Konto abgezogen wird.

Abb. 3: Gesamtauswertung für den Februar 2015.

Abb. 3: Gesamtauswertung für den Februar 2015.

Diese Zahlen zeigen für mich, dass der Einsatz der Affiliate Links schon jetzt ein Erfolg ist. Selbst wenn die Erlöse in Zukunft deutlich sinken sollten. Was ich mit dem Geld mache, habe ich kurz im Abschnitt Verwendungszweck geschildert.

Verwendungszweck

Abschließend möchte ich noch kurz auf die Frage eingehen, wofür ich denn das Geld verwende. Auch wieder, weil ich Transparenz mag. Der Grund, warum ich diesen Beitrag überhaupt schreibe.

Mein initialer Gedanke war, so viele Einnahmen über die Amazon Affiliate Links zu generieren, dass ich damit die Kosten für den Server bezahlen kann. Nicht mehr und nicht weniger. Im Moment bin ich noch auf einem sehr kleinen Hosting-Paket von Goneo, das mich lediglich 5.95 EUR pro Monat kostet. Eventuell werde ich das noch aufstocken, um etwas mehr Leistung/Performance zu erhalten. Allerdings steht auch noch mal eine kritische Prüfung des Blogs an, was Plugins etc. pp. angehen, um unnötiges rauszuwerfen. Von diesem Vorhaben, dass Geld für die Serverkosten zu verwenden, rücke ich natürlich auch nicht ab. So wie es im Moment aussieht, lassen sich die knapp sechs Euro pro Monat recht gut über die Amazon Affiliate Links generieren. Damit habe ich am Anfang gar nicht gerechnet.

Aber auch alles was darüber hinaus geht, und das scheint nach jetzigem Stand schon einiges zu sein, möchte ich ausschließlich in den Blog oder in Blog relevante Dinge investieren. Eine Reinvestition sozusagen. Für mich zählen da insbesondere WordPress-Themes zu, die ich mir dann vermutlich nicht mehr selber erstellen, sondern auch mal zu einem kostenpflichtigen greifen werde. Natürlich nur, wenn es sich wirklich lohnt. Eventuell werde ich von den Einnahmen auch das ein oder andere Buch kaufen, das dann ja eh wieder nach einer Rezension hier verlost wird.

Was auch immer ich konkret mit dem Geld mache, ich werde es zu 100% in den Blog stecken, denn daher kommt das Geld nun mal auch. Und ich bin sehr dankbar, dass es anscheinend so viele direkte und indirekte Unterstützer gibt! Herzlichen Dank an dieser Stelle von mir!

Fazit

Mit diesem Beitrag habe ich einen kleinen Einblick in die Welt der Amazon Affiliate Links gegeben. Als allgemeine Übersicht für alle, die vielleicht auch mit dem Gedanken spielen, ob diese Option für passives Einkommen vielleicht auch etwas für den eigenen Blog ist.

Mindestens genau so wichtig ist mir aber die Transparenz, die ich hoffentlich durch diesen Beitrag erreiche. Ich persönlich reagiere ziemlich schnell allergisch auf Werbung. Insbesondere bei privaten Blogs. Werbung hat natürlich seine Berechtigung und ist für die ein oder andere Seite völlig unverzichtbar. Auch gut gemachte Werbung beziehungsweise moderat/nicht störend präsentierte Werbung finde ich okay. Meistens ist das allerdings nicht der Fall. Da Affiliate Links natürlich auch eine Art von Werbung sind, wollte ich den Fakt, dass ich sie einsetze, sowie die Einnahmen daraus, gerne veröffentlichen.

Bei Fragen aller Art freue ich mich über Kommentare, E-Mails oder sonstige Kontaktaufnahmen.

codefest.at [MS]: Live dabei sein mit dem Microsoft //build Keynote-Streaming!

Live dabei sein mit dem Microsoft //build Keynote-Streaming!

Keine Karten für die //build in San Francisco bekommen? Nicht traurig sein, denn wir holen Euch die Keynote der //build nach Österreich!

Vom 29. April bis zum 1. Mai findet auch heuer wieder die //build statt. Für alle Entwickler ist die //build ein "Must Event". Das zeigt sich auch Jahr für Jahr daran, dass diese Veranstaltung regelmäßig ausverkauft ist. So auch heuer wieder.

Damit Ihr zumindest die Keynote im //build Feeling erleben könnt laden wir Euch ein mit uns gemeinsam die Keynote in Kinos in Wien, Linz und Graz zu erleben!

Wir holen einfach die Keynote der //build zu uns in ein Kino ganz in der Nähe. Im Live-Stream erfahren wir quasi zeitgleich alles genauso als wären auch wir vor Ort in den USA. Also: ab ins Kino, Popcorn ausfassen, zurücklehnen und live dabei sein!

Apropos Popcorn – mit Eurem Ticket für das Keynote Streaming bekommt Ihr zusätzlich eine Karte für einen unterhaltsamen Abendfilm im Anschluss an die Keynote, Popcorn und Softdrink inklusive!.

Wo & Wann: 29. April 2015 um 17:15 Uhr im

Die Agenda unseres Live-Streaming Events von der //build:

  • 16:45 Einlass ins Kino (und Gutscheinausgabe)
  • 17:15-17:30 Begrüßung der Teilnehmer im Kinosaal
  • 17:30-19:30 //build Keynote Streaming
  • 19:30-20:00 Pause zur Erledigung menschlicher Grundbedürfnisse
  • 20:00-22:00 Abendfilm

Wie könnt Ihr mit dabei sein?
Ganz einfach: Ihr braucht nur einen der folgenden beiden Online-Kurse in der Microsoft Virtual Academy (MVA) abzuschließen. Die kostenlosen Online-Trainings der Microsoft Virtual Academy (MVA) unterstützen Euch dabei, Euer Know-How zu aktuellen Technologien zu erweitern.

Als Nachweis bitte einfach Eure absolvierten Kurse im Profil veröffentlichen. Dazu:

  1. auf https://www.microsoftvirtualacademy.com/MyMVA/MyProfile.aspx im Abschnitt Persönliche Daten “Meine Profildaten für alle Nutzer freigeben“ und
  2. in Mein Status in der MVA die „Tracks“ aktivieren.

Bei der Anmeldung gebt bitte als Einladungscode die Nummer Eures MVA-Profils an. Diese findet Ihr z.B. wenn Ihr Zum öffentlichen Profil navigiert Also z.B. “102682” wenn das Euer Profillink ist: http://www.microsoftvirtualacademy.com/Profile.aspx?alias=102682

Bei Fragen, Wünschen und Komplikationen aller Art erreicht Ihr mich wie gewohnt unter meiner E-Mail Adresse.

Wir sehen uns im Kino!

Gerhard Göschl, Marketing Leiter - IT-Spezialisten und Software Entwickler

Microsoft Österreich GmbH
Gerhard.Goeschl@Microsoft.com

PS: Ihr möchtet die Entwicklungsprodukte von Microsoft vorab schon einmal ausprobieren? Im MSDN Evaluierungscenter finden Ihr kostenlose Testversionen aller wichtigen Produkte für Entwickler. Probiert doch auch den kostenfreien Testzugang zu Microsoft Azure

Live dabei sein mit dem Microsoft //build Keynote-Streaming!

Jürgen Gutsch: Playing aroud with SignalR 3 and ASP.NET 5

In einem kleinen Projekt möchte ich ASP.NET 5 und und SignalR nutzen. Es geht darum, Daten die, von einem Sensor kommen, direkt per Web-Socket auf den Client zu publizieren, sobald dieser den Push aktiviert.

In diesem Beitrag geht es nicht um die komplette Implementierung, sondern nur um das einbinden von SignalR in ein einfaches ASP.NET 5 Projekt.

Wie auch der Rest von .NET Core, ist SignalR 3 im Moment (als ich das hier geschrieben habe) in der Beta 3 Verfügbar. Das heißt per NuGet sollte nach der Pre-Releases gesucht werden, wenn man die aktuellen SignalR Pakete laden möchte, die zur .NET Core passen.

SignalR einbinden

Dafür ergänze ich die Referenzen in der project.json um einen weiteren Eintrag

"Microsoft.AspNet.SignalR.Server""3.0.0-*"

Der Platzhalter in der Version garantiert mir, dass ich immer die die letzte Pre-Release Version bekomme. Im Produktivbetrieb wäre es dann wohl eher eine komplette Versionsnummer, die dann ein fertiges Release markiert.

Die komplette Referenzliste sieht bei mir im Moment so aus:

"Kestrel": "1.0.0-beta3",
"Microsoft.AspNet.Diagnostics": "1.0.0-beta3",
"Microsoft.AspNet.Hosting": "1.0.0-beta3",
"Microsoft.AspNet.Mvc": "6.0.0-beta3",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta3",
"Microsoft.AspNet.StaticFiles": "1.0.0-beta3",
"Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta3",
"Microsoft.AspNet.SignalR.Server""3.0.0-*"

Während Visual Studio sofort nach dem Speichern der project.json die Referenzen aktualisiert, wird das unter Linux per Hand erledigt. Im aktuellen Projektverzeichnis wird folgender Befehl abgesetzt:

[code language="JScript"]$ kpm restore[/code]

Die Server-Seite

Nun muss SignalR noch aktiviert werden. Dafür muss die Startup.cs bearbeitet werden:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseErrorPage();
        app.UseStaticFiles();
        app.UseServices(services =>
        {
            services.AddMvc();
            services.AddSignalR(options =>
            {
                options.Hubs.EnableDetailedErrors = true;
            });
        });
        app.UseSignalR();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action}/{id?}",
                defaults: new {controller = "Home", action = "Index"});
        });
        app.UseWelcomePage();
    }
}

Unter UseServices wird SignalR und seine Abhängigkeiten registriert, ebenso werden detaillierte Fehlermeldungen aktiviert.

app.UseSignalR(); fügt die dann benötigte MiddleWare hinzu, die dann für den WebSocket verantwortlich ist.

Für den ersten Start reicht das aus. Der WebSocket ist per Default unter http://localhost:5004/signalr/ erreichbar. Wer das ändern möchte, kann dass in der Methode UseSignalR konfigurieren.

Ab jetzt können SignalR Hubs erstellt werden, die dann auch automatisch erreichbar sind:

[HubName("sensors")]
public class GpioHub : Hub
{
    private static readonly ICollection<string> Users = new Collection<string>(); 

    public GpioHub()
    { 
        StartSendSensorData(); 
    }
    private async void StartSendSensorData() 
    {           
        while (true)
        {
            await Task.Run(() => SendSensorData());

            Thread.Sleep(TimeSpan.FromSeconds(1));
        }
    }

    private void SendSensorData()
    {
        if (!Users.Any())
        {
            return;
        }

        var rnd = new Random();
        var currentSensorData = new
        {
            X = rnd.Next(0, 90),
            Y = rnd.Next(0, 90),
            Z = rnd.Next(0, 90)
        };

        Clients.Clients(Users.ToList()).showessage(currentSensorData);
    }

    public void Enable(string connectionId)
    {
        Users.Add(connectionId);
        Clients.Client(connectionId).enabled();
    }

    public void Disable(string connectionId)
    {
        Users.Remove(connectionId);
        Clients.Client(connectionId).disabled();
    }
}

Die Sensor-Daten hier sind fake und es ist hier auch völlig egal um was für Sensordaten es sich handelt. ;)

Jede Sekunde werden neue Daten erzeugt und an alle Clients gesendet die sich mit Enable() für den Push registriert haben. Wird Disable() aufgerufen, wird der aktuelle User aus der Liste genommen und bekommt keinen Push mehr. Somit kann der User eine Echtzeit-Überwachung eines Sensors aktivieren.

Die Client-Seite

Clientseitig kommt bei mir (wie fast immer) Bootstrap und AngularJS zum Einsatz um eine schnell funktionierende UI zu erhalten. Diese habe ich dieses mal manuell dem Projekt hinzugefügt, da die entsprechenden NuGet Pakete die Datei- und Ordnerstruktur unter Linux nicht anlegen können (Das Paket ist installiert aber die JavaScript Dateien stehen nicht zur Verfügung) und Bower wollte auf die schnelle nicht funktionieren. Das Ziel sollte es aber sein, alle Clientseitigen Pakete über Bower zu installieren.

SignalR auf dem Client benötigt jQuery. Auch das habe ich manuell in das Projekt geholt. Somit habe ich am ande folgende Referenzen in der _Layout.cshtml:

<script src= "/Scripts/angular.js"> </script>
<script src= "/Scripts/angular-route.js"> </script>
<script src= "/scripts/jquery-1.8.2.js"> </script>
<script src= "/scripts/jquery.signalr-2.0.3.js"> </script>
<script src= "/signalr/js"> </script>

Die letzte Referenz geht auf die SignalR Middleware und stellt die clientseitige API zu unseren WebSockets, sprich zu unserem Hub zur Verfügung.

Weitere Referenzen die hier nicht aufgelistet sind, sind mein AngularJS Modul, die AngularJS Controller, Services, Directives, etc.

In einem SensorController.js halte ich den Zugriff auf den WebSocket per SignalR. Üblicherweise wäre das in einem Service oder einer Factory perfekt aufgehoben.

Zu aller erst wird die Client API aufgebaut über die Methoden des Controllers aufgerufen werden:

var sensors = $.connection.sensors;

$.extend(sensors.client, {
    enabled: function () {
        enabled();
    },
    showessage: function (message) {
        showessage(message);
    },
    disabled: function () {
        disabled();
    }
});

$.connection.hub.start()
    .then(init);

function init() {

}

Nachdem die Verbindung gestartet ist, könnte optional eine weitere Initialisierung stattfinden, auf die ich hier verzichte. Man könnte beispielswese ausgeben, ob der Hub erreichbar ist oder nicht.

Der Rest des Controllers (bei dem die ‘Controller As’ Syntax genutzt wird) könnte dann so aussehen:

var vm = this;
vm.status = "disabled";
vm.data = {
    X: 0,
    Y: 0,
    Z: 0
};
vm.enable = enable;
vm.disable = disable;

function enable() {
    sensors.server.enable($.connection.hub.id);
}
function disable() {
    sensors.server.disable($.connection.hub.id);
}

function enabled() {
    vm.status = "enabled";
    if (!$scope.$$phase) {
        $scope.$apply();
    }
}
function showessage(message) {
    vm.data = message;
    if (!$scope.$$phase) {
        $scope.$apply();
    }
}
function disabled() {
    vm.status = "disabled";
    if (!$scope.$$phase) {
        $scope.$apply();
    }
}

Im Groben war’s das schon. NUn können wir das Web starten, indem wir im Projetverzeichnis $ k kestrel aufrufen.

Das Web ist nun unter http://localhost:5004/ erreichbar. 5004 übrigns ist der Standard-Port, der in den Projekttemplates in der project.json hinterlegt ist.

So kann ich mich nun dran machen die echten Sensoren anzubinden :)

Marco Scheel: Links for 2015-03-24 [del.icio.us]

Jens Häupel [MS]: Office 2016 IT Pro and Developer Preview

Letzte Woche wurde die erste Preview Version von Office 2016 enthüllt.

Einige neue Features:

Outlook:

  • MAPI-HTTP Protokoll: die RPC-basierte Synchronisation wurde ersetzt durch eine auf HTTP basierende
  • Netzwerk-bezogene Aktivitäten wurden in den Hintergrund verbannt, um bei “klapprigen” Netzwerken das User Interface nicht warten zu lassen
  • Multi-Factor Authentication : Neben dem Passwort kann auch noch ein Rückkanal verwendet werden, der dann weitere Infos zur Authentifizierung fordert
  • Bessere Konfiguration für Outlook Cached Mode : Man kann jetzt festlegen, wie viele Tage zurückgreifend die Mails heruntergeladen und lokal gehalten werden sollen :: Das spart erheblich lokalen Speicherplatz
  • FAST-basierte Suche in Exchange
  • Es gibt endlich wieder ein dunkles Farbschema mit mehr Kontrast (etwas, was ich bei Office 2013 schmerzlich vermisse)

image

Click-to-Run Deployment:

  • Ein neuer BITS reagiert sensitiver auf verfügbare Netzwerkkapazitäten
  • Integration mit System Center Config Manager, um Admins mehr Möglichkeiten zu geben, die monatlichen Updates zu verteilen
  • Flexibles Update Management trennt zwischen Security und Feature Updates, womit Admins ersters immer durchlassen aber letztere zurückhalten/verzögern können
  • Einfachere Device Aktivierung über alle User aus dem O365 Admin Portal

Im BlogPost von Kirk Koenigsbauer kann man schon einiges nachlesen, aber das Interessanteste schien mir folgendes zu sein:

Macros and Add-ins - We’re not making any changes to Macros or Add-ins in this release. It’s rare that “no changes” is a something we’d want to highlight, but we think it’s worth celebrating the consistency in the programming model across releases.

Damit sollten Add-Ins und Makros, die in Office 2013 laufen, auch in 2016 laufen.

Damit ist Office 2016 aber noch nicht Feature Complete. Mit weiteren Updates und neueren CTPs kommen weitere Features hinzu. Wer Interesse hat, Office 2016 jetzt zu testen, der sei auf das Preview Programm verwiesen. Ich habe übrigens Office 2016 auf einem Windows 10 Technical Preview in einer VM in Azure laufen. Mit einer MSDN Subscription bekommt man einiges an Rechenzeit geschenkt und eine VM mit Windows 10 TPE kann man innerhalb von 5 min provisionieren lassen. So kosten einem 50 h Testen im Monat keinen Cent.

In der VM in Azure sollte man dann besser Outlook ohne cached Mode laufen lassen.

codefest.at [MS]: Azure with Pleasure

Die Cloud ist flexibel, die Cloud gibts auch „hybrid“, die Cloud ist die Zukunft, orakelt es im Moment aus allen Richtungen. Schön und gut, denkt ihr vielleicht, doch was kann ich jetzt konkret damit anfangen - „Skalierbarkeit“ und andere Schlagworte beiseite?

 

Als BizSpark Mitglied bzw. Als MSDN Abonnent habt Ihr monatlich 115 Euro gratis Azure-Consumption zu Verfügung um genau das herauszufinden. Hier gibts Beispiele, was man dabei in der Praxis anstellen kann:

Als Entwickler von Android, iOS, Windows Phone und/oder Windows 8 erhaltet Ihr beispielsweise:

  • 2 Units Basic Mobile Services
  • 5GB Azure SQL Database Web/Business
  • 100GB Azure Storage (Block BLOBs für langlebige nicht-sturkurierte Mobile-Service Datenspeicher, z.B.: Hochgeladene Dokumente, Bilder, Videos, etc.; lokal redundant)
  • 1 Unit Basic Notification Hubs (500,000 pro Unit)
  • Bandbreite (50GB)

Sind Web Applikationen eher Euer Gebiet? Dann probiert folgende beliebte Konfiguration:

  • 2 Basic/Small Web-Site Instanzen (1.6GHz CPU, 1.75GB RAM)
  • 100GB Azure Storage (Block BLOBs für langlebig nicht-sturkurierte Mobile Service Datenspeicher, z.B.: Uploaded Documents, Bilder, Videos, etc.; lokal redundant)
  • 3GB Azure SQL Datenbanken für Web/Business
  • Bandbreite (50GB)

Ihr könnt sogar Eure eigene Oracle Cloud auf Azure einrichten. Dazu einfach Oracle Express herunterladen und auf einem Windows Server installieren, der auf MS Azure läuft. Dieser Blogpostzeigt wie’s geht!

Wie gesagt: Als BizSpark Member fallen KEINE KOSTEN für Euch an. Im Gegenteil: Ihr spart Euch Zeit und Aufwand, denn Microsoft kümmert sich um das Managment der Server-Infrastruktur.

Für Projekte wo Ihr bestehende Server in die Cloud schieben wollt könnt Ihr mit dem Azure Cost Estimator exakt planen, welche Ausgaben für Eure spezifischen Anforderungen anfallen würden.

Und da die besten Geschichten immer das Leben schreibt: Was macht denn Ihr so mit Eurem Microsoft Azure Guthaben? Erzählt uns davon und bekommt vielleicht einen Raspberry Pi 2 Model B geschenkt!!

Viel Spaß beim Ausprobieren!

Wie ich mein Azure Kontingent nutzen kann

Holger Schwichtenberg: Die Diskussionen um das Schlüsselwort "var" in C# gibt es immer noch

Die Verwendung von "var" in C# ist keine untypisierte Programmierung und auch nicht automatisch ein schlechter Programmierstil.

Christian Binder [MS]: ALM Days 2015 Recordings

Nach dem Event ist vor dem Event und so starte ich, wie auf den ALM Days versprochen, mit dem Link zu den Aufnahmen der Vorträge.

Auf der ALM Days Website - Hier
Auf Ch9 – Hier  (Upload läuft noch)

Zudem möchte ich die Gelegenheit nutzen, mich nochmal ganz herzlich für die Teilnahme zu bedanken und hoffe, dass Sie einige Inhaltliche Impulse für sich haben mitnehmen können. Und natürlich würde ich mich freuen, Sie auf den nächsten ALM Days wieder begrüßen zu dürfen.

Chris

Marco Scheel: Links for 2015-03-23 [del.icio.us]

Kazim Bahar: Windows 10 SDK steht zum Download bereit

Developers, Developers, Developers … Überraschenderweise hat Microsoft noch vor der BUILD Konferenz, die im April stattfinden...

codefest.at [MS]: Wir suchen Ihre Azure basierten Lösungen!

Wir wollen Partnern die Möglichkeit geben Ihre Lösungen auf Microsoft Azure einem größeren Publikum zu präsentieren. Daher rufen wir alle Lösungsanbieter dazu auf Ihre Azure basierte Lösungen bei uns bekannt zu geben.
Wenn Sie kostenlose Test Versionen Ihrer Lösungen für Kunden bereitstellen wollen, dann sagen Sie uns Bescheid, und wir helfen Ihnen diese Lösungen am Österreichischen Markt bekannter zu machen.

Wer kann mitmachen?
Jeder Partner der eine Lösung hat die Microsoft Azure nutzt. Egal ob der Kunde seine eigene Azure Subscription benötigt, oder die Azure Subscription von Ihnen bereitgestellt wird. Jeder ist willkommen.

Wie können Sie mitmachen?

  1. Sie sind bereit für potentielle neue Kunden kostenlose Testinstallationen Ihrer Lösung in einer Azure Subscription einzurichten und bereitzustellen.
  2. Sie senden eine E-Mail mit einer Kurz-Beschreibung Ihrer Lösung und eine Anleitung wie der Kunde die kostenlose Teststellung nutzen kann an "Austria ISV Solution".
  3. Wir bewerben Ihre Test-Angebote in unseren Kanälen anhand Ihrer Beschreibung und helfen Ihnen so Ihre Lösungen noch erfolgreicher am Markt zu positionieren.

Was kostet Sie das?
Es ist Ihre Lösung, und Sie richten eine Test Stellung für den Kunden ein. Darüber hinaus müssen Sie uns einfach nur die Informationen schicken die wir zum Bewerben benötigen. Wir nehmen Sie dann auf unseren diversen Kommunikationskanälen völlig kostenfrei mit.

Klingt Interessiert?

Dann schicken Sie uns einfach Ihre Lösungsbeschreibung an "Austria ISV Solution" (mailto:atisvsolution@microsoft.com) und schon kann es losgehen!

Norbert Eder: #fotomontag #12

Jeden Montag ein Foto. Der #fotomontag.

Vergangenen Samstag fuhr ich zusammen mit zahlreichen Fotobegeisterten vom Knipserklub zur Gärtnerei Höller in Stainz. Hier gibt es aktuell Schmetterlinge im tropischen Gewächshaus zu bewundern. Für mich war dieser Ausflug sehr lehrreich, da ich selten bis nie in diese Richtung fotografiere. Daher fehlt mir hier auch ein wenig das Equipment und ich musste auf ein altes, lichtschwaches Tele zurückgreifen. Wider Erwarten kamen aber doch einige Fotos zusammen, mit denen ich zufrieden bin. Nachfolgend möchte ich eines derer zeigen.

Schmetterling

Schmetterling

Hast du eine Meinung zum Foto? Ja? Dann lass sie mich doch bitte wissen und bewerte es in den Kommentaren.

The post #fotomontag #12 appeared first on Norbert Eder.

Karsten Kempe: Who broke the build – Teil I

VS_BuildManagementAutomatische Build-Mechanismen, wie sie beispielsweise der TFS 2013 bietet, sind in modernen Entwicklungsprojekten kaum noch wegzudenken. Automatische Builds unterstützen die tägliche Arbeit einer Entwicklungsmannschaft, helfen beim Schreiben von qualitativ hochwertigen Code und bei der Integration unterschiedlicher Software-Module. „Nightly Builds“ können z.B. jede Nacht die Qualität des aktuellen Source Code Standes prüfen und so den Entwicklern ein Feedback über Ihr Tagwerk zur Verfügung stellen. Diese Feedback-Option ist gut und kann die Source Code Qualität steigern – aber nur, wenn diesem Feedback auch Beachtung geschenkt wird.

Wenn mehrere hundert Entwickler, in verschiedenen Abteilungen, an diversen Modulen arbeiten und versuchen erst zum Ablauf eines Entwicklungszeitraums, alle Module zu einer lauffähigen Version zusammenzufügen, kann es durchaus ein böses Erwachen geben. Module, die unabhängig voneinander entwickelt worden sind und dazu gedacht waren eng zusammenzuarbeiten, können nicht integriert werden. Vermeintlich einfache Schnittstellen können nicht mehr verwendet werden, weil der Ersteller kurz vor Schluss noch eine Änderung eingecheckt hat. Und der Tag des Release rückt immer näher.

Dank Continuous Integration und dem Einsatz von geeigneten Werkzeugen (z.B. TFS 2013), lässt sich die Komplexität bei der Integration von Source Code und der Erstellung von Software besser beherrschen. Automatische Builds spielen dabei eine entscheidende Rolle. Sie geben Feedback zur aktuellen Softwarequalität und dem Integrationsstand aller Module.

Ein Build für alle Fälle

Continuous Integration Builds

Ein Build kann „persönlich“ oder „unpersönlich“ sein. Ein persönlicher Build wird normalerweise von einem Entwickler ausgelöst und liefert Informationen zurück, die für die auslösende Person von Interesse sind. Ein Continuous Integration Build, auch CI-Build genannt, wir in der Regel immer dann ausgelöst, wenn ein Entwickler Source Code in die Versionskontrolle aufgenommen hat. Der CI-Build prüft genau den Source Code Stand, der unmittelbar nach dem Eincheckvorgang auf dem Versionskontroll-Server liegt und gibt je nach Konfiguration Feedback über Kompilierbarkeit, Testbarkeit oder Code-Qualität.

Ein Nachteil an diesem Build-Typ ist, dass eventuell negatives Feedback vom Entwickler ignoriert werden kann und damit Source Code in die Versionskontrolle gelangt und dem Gesamt-System schadet. Entweder weil sich der Versionsstand nicht mehr kompilieren lässt, Testfälle fehlschlagen oder allgemein die Code-Qualität nicht mehr gewährleistet ist.

Um diesem Nachteil zu entgehen, gibt es im Team Foundation Server einen sogenannten Gated Check-In. Dieser Build-Typ prüft den einzucheckenden Source Code vor der Aufnahme in die Versionskontrolle. Damit ist er sogar noch ein bisschen persönlicher, da potentiell nur der Source Code des auslösenden Entwicklers auf Validität geprüft wird.

Build Mechanism

Fällt die Rückmeldung des Gated Check-In negativ aus, muss der Entwickler reagieren und Anpassungen an seinem Code vornehmen, sonst würde der Source Code nicht in die Versionskontrolle aufgenommen werden und der Entwickler könnte somit nicht seinen Teil zum Gesamtsystem leisten.

Geplante (scheduled) Builds

Die geplanten Builds, oft auch Nightly-Builds genannt, sind eher unpersönliche Builds. Sie prüfen alle Check-Ins eines Tages und somit Code von verschiedenen Entwicklern oder Abteilungen. Dieser Build-Typ wird häufig nachts durchgeführt, weil erstens alle Check-Ins auf Integrität geprüft werden sollen und zweitens oft auch ein erweitertes Set von automatisierten Tests zur Ausführung kommt. Dadurch ergeben sich meist auch längere Laufzeiten und höhere Last auf dem Build Server, wodurch sich die Ausführung in der Nacht anbietet. Daher auch der Name „Nightly Build“.

Da dieser Build eher global und unpersönlich ist, wird sein Feedback oftmals ignoriert. Manchmal scheinen die Entwickler gar zu denken „wenn ich mich nicht kümmere, dann wird es schon jemand anderes tun“. Aber das ist schade! Denn so leidet der Grundgedanke des globalen Feedbacks und die Qualität des Source Code Standes wird gefährdet. Und langfristig eventuell auch die Auslieferung der Software.

Eine Frage der Motivation

Geprägt durch diese Erfahrung, könnte man sich durchaus die Frage stellen, ob es irgendwie möglich ist, Entwickler zu mehr Verantwortung zu motivieren. Oder vielmehr den Sinn dafür zu schärfen, sich für etwas verantwortlich zu fühlen, das nur als Gemeinschaftswerk Erfolg haben kann. Neben zahlreichen Appellen an das Team-Gefühl und der Wichtigkeit der Builds, scheint mir auch die Optimierung der vorhanden Informationen wichtig zu sein. Grundsätzlich stellt der Team Foundation Server zahlreiche Möglichkeiten zur Informationsbeschaffung und Build-Überwachung bereit (z.B. TFS Web Access, Team Explorer im Visual Studio, Build Notification Client, etc), aber all das scheint manchmal nicht auszureichen. Zugegeben, die Motivation eines Mitarbeiters kann nicht durch ein paar nette Werkzeuge und Automatismen gesteigert werden. Dazu sind ganz andere Faktoren wichtig, die ich aber an dieser Stelle nicht diskutieren möchte. Aber manchmal hilft es auch, die Motivation für eine Sache zu steigern, wenn es um das persönliche Ehrgefühl geht. In der dotnetpro Ausgabe 02/2014 schreibt Andy Grothe über den Abruf von Build-Status Information über die TFS-API. Inspiriert von diesem Artikel entstand ein ähnliches Tool, welches aus einem TFS 2013 die Nightly-Builds ausliest, die Informationen in ein html-Format schreibt und dann die Information per Mail über die Microsoft Exchange Services an alle Entwickler verteilt.

MailResult_short_2

Im zweiten Teil von “Who broke the Build” werde ich erklären, wie so ein Mechanismus aussehen könnte. Und um das Beispiel möglichst einfach zu halten, ist der Mechanismus in eine Konsolenapplikation implementiert, die auf dem TFS App Tier als Scheduled Task ausgeführt wird.

[1] dotnetpro 02/14 Andy Grothe – Sie haben Post

 

Marco Scheel: Links for 2015-03-22 [del.icio.us]

Uli Armbruster: Nachgefragt – Interview mit Daniel Marbach zu MSpec

In einem Online Interview habe ich Daniel Marbach zur Zukunft des Open Source BDD Frameworks MSpec befragt. Herausgekommen ist eine Aufnahme, die es jetzt auf YouTube gibt. Die Fragen wurden nicht vorab abgesprochen, um ein authentisches statt ein werbelastiges Gesprächs zu führen.

 

image

Auf das Bild klicken um zum Video zu gelangen

 

An dieser Stelle möchte ich noch die Community aufrufen sich an der Weiterentwicklung zu beteiligen. Open Source Projekte leben von freiwilligen Helfern und Daniel macht da eine sehr gute Arbeit und ein tolles Produkt!

Fragen

  • Machine.Specifications
  • Was ist eigentlich ein BDD Framework
  • Stärken
  • Schwächen
  • Roadmap
  • Wie steht es um die Zukunftssicherheit
  • Tipps und Tricks
  • Ergänzende Frameworks
  • Gute Tests

 

Show Notes


Einsortiert unter:Development, German Tagged: BDD, Interview, MSpec, Video

codefest.at [MS]: Raspberry Pi 2 Model B geschenkt bekommen!!

Ihr interessiert Euch für die neuesten Technologien?

  • Ihr werft mit Begriffen um Euch wie IoT (Internet of Things), Connected Home, Connected Devices, ….?
  • Ihr seid schon heute aktiv in der Cloud unterwegs, oder sogar darin zu Hause?
  • Und Schlussendlich: Ihr wollt von uns einen Raspberry Pi 2 Model B im schicken Gehäuse geschenkt bekommen?

Dann einfach hier weiterlesen.

Wir wollen alle belohnen die sich schon heute aktiv mit den neuesten Technologien bzw. den Anwendungen von morgen beschäftigen. Daher vergeben wir 50 Raspberry Pi 2 Model B inklusive eines schicken Gehäuses zum Ausprobieren, zum Experimentieren oder zum Umsetzen neuer Ideen rings um das Thema "Services in der Cloud".

Als kleine Anregung: Neulich haben wir die Azure IoT Suite angekündigt (http://blogs.microsoft.com/iot/2015/03/16/microsoft-announces-azure-iot-suite/)  die sich aus den unterschiedlichsten Azure IoT services zusammensetzt: Azure Event Hubs, Azure DocumentDB, Azure Stream Analytics, Azure Notification Hubs, Azure Machine Learning, Azure HDInsight, und Microsoft Power BI.

Wir geben Euch jetzt die Möglichkeit mit diesen Services konkret zu experimentieren. Und vielleicht belohnen wir Eure Kreativität sogar mit einem von 50 schick "verpackten" Raspberry Pi 2 Model B. Alles was Ihr dazu braucht ist ein aktiver Microsoft Azure Account den Ihr z.B. über Eure BizSpark Mitgliedschaft bekommt, oder mittels der Nutzungsbasierten Bezahlung erwerbt.

Ein paar Beispiele aus der Praxis was man mit Microsoft Azure und den Azure IoT Services so alles machen kann:

Connect the dots

Lasst Eure Kreativität sprießen setzt Eure Ideen um und gewinnt!!

Microsoft Azure Nutzungs und Abrechnungsdaten

Wie nehme ich teil?

Schickt uns eine Mail an Azure-AT@Microsoft.com warum Ihr glaubt, dass gerade Ihr einen unserer begehrten Raspberry Pi 2 bekommen solltet. In der Mail beschreibt Ihr Euer "Services in der Cloud" Szenario, Eure Idee, eventuell ja sogar schon Eure Umsetzung.

Als Beleg für Eure Vertrautheit mit Microsoft Azure schickt uns doch bitte auch einen Screenshot Eurer Microsoft Azure Nutzungs und Abrechnungsdaten so dass wir das Kaufdatum, die Abo-ID und den Grad Eurer aktiven Nutzung erkennen können.

Wer darf mitmachen?

Teilnahmeberechtig sind alle neuen österreichischen Subscriptions die ab dem 20. März 2015 entweder als Nutzungsbasierte Bezahlung bzw. im Rahmen des BizSpark Programmes angelegt wurden und Microsoft Azure aktiv nutzen.

Wir wollen ja dass Ihr euch wirklich mit dem Thema beschäftigt und so z.B. ein paar Virtuelle Maschinen betreibt oder andere Services aufsetzt und nutzt.  Hier sei auch nochmals auf die obigen Azure IoT Services als Anregung verwiesen.

Als Richtwert wo wir einen aktiven Azure Nutzer sehen sei beispielsweise ein einmonatiger Betrieb eines virtuellen Windows Server in der Größe "A1 - Standard" genannt. Ihr könnt für Eure Einreichung natürlich beliebige Microsoft Azure Services nutzen und kombinieren. Je nachdem welches Szenario Ihr im konkreten umsetzt.

Wer wählt die Gewinner aus, und bis wann?

Eine erfahrene Jury aus Technologie Experten und Business Fachleuten bewertet die Einreichungen nach Kreativität, Pragmatismus und Umsetzbarkeit bzw. Umsetzung und wählt unter allen Einreichungen die besten aus.

Es gibt zwei Möglichkeiten teilzunehmen:

  • Einreichen bis 30. April: Bekanntgabe von 25 Siegern bis 15. Mai
  • Einreichen bis 30. Mai: Bekanntgabe von 25 Siegern bis 15. Juni

Viel Spaß beim Nachdenken, und viel Glück beim Einreichen!!

PS: Erfahrungsgemäß sind bei der ersten Runde die Chance größer. Also schnell einreichen!!

PPS: und hier noch: “Das Kleingedruckte”

Veranstalter ist die Microsoft Österreich GmbH.

Für die Teilnahme in Runde 1 sind die Einreichungen bis 30. April 2015, für die Teilnahme in Runde 2 bis 30. Mai 2015 per E-Mail an Azure-AT@Microsoft.com zu schicken. Die Vergabe der Gewinne erfolgt nach Beurteilung durch unsere Fachjury bis 15. Mai 2015 sowie bis 15. Juni 2015. Die Gewinner werden per E-Mail verständigt und erklären sich mit der Veröffentlichung des Vornamens und des Anfangsbuchstabens des Nachnamens auf codefest.at einverstanden. Der Versand der ausgelobten Preise erfolgt ausschließlich in Österreich.

Teilnahmeberechtigt sind alle Teilnehmer mit einer österreichischen Microsoft Azure Subscription die entweder als Nutzungsbasierte Bezahlung bzw. im Rahmen des BizSpark Programmes ab dem 20. März 2015 neu angelegt wurden und Microsoft Azure aktiv nutzen. Eine Microsoft Azure Subscriptions die als Nutzungsbasierte Bezahlung  angelegt wird erfordert eine gültige ("echte") Kreditkarte bei der Anmeldung.

Explizit Ausgenommen sind Mitarbeiter von Microsoft und deren Angehörige sowie Amtsträger bzw. „Government officials“. Minderjährige sind teilnahmeberechtigt, wenn der gesetzliche Vertreter in die Teilnahme und in diese Teilnahmebedingungen vorher eingewilligt hat.

Wir behalten uns vor, die Teilnahmebedingung zu ändern, das wird hier entsprechend veröffentlicht. Der Rechtsweg ist ausgeschlossen und die Ausbezahlung in bar nicht möglich. Mit Ihrer Teilnahme stimmen Sie diesen Teilnahmebedingungen vollständig und bedingungslos zu.

Durch das Absenden Ihrer Daten willigen Sie in die Speicherung Ihrer Daten durch die Microsoft Corporation in den USA und der Microsoft Österreich GmbH ein. Die erhobenen Daten dienen einzig der Auslosung und Benachrichtigung der Gewinner, sie werden nicht zu anderen Werbezwecken genutzt oder an Dritte weitergegeben. Diese Einwilligung können Sie jederzeit mit Wirkung für die Zukunft widerrufen. Ein Widerspruch ist an Microsoft Österreich GmbH, Am Europlatz 3, A-1120 Wien, oder an austria@microsoft.com zu richten.

 

Update: Da wir gefragt wurden: Ja, der Raspberry Pi 2 Model B kommt inklusive eines schicken Gehäuses! Ist jetzt auch im obigen Text ersichtlich. Danke!

codefest.at [MS]: Gewinne ein Ticket für die ausverkaufte Build 2015

Die //build Developer Konferenz war heuer innerhalb kürzester Zeit ausverkauft. Wenn ihr unter diejenigen seid, die nicht mehr dazugekommen sind, ein Ticket zu kaufen, so habt ihr noch eine Möglichkeit an ein Ticket zu kommen.

Gestern wurde ein Contest angekündigt, bei dem man eines von 5 //build Tickets gewinnen kann. Flug und Aufenthalt sind nicht inkludiert. Um an diesem Wettbewerb teilzunehmen, müsst ihr die “Know it. Prove it” Challenge aus der Microsoft Virtual Academy abschließen und anschließend einen Tweet mit eurem Grund für die Teilnahme der //build nach einem bestimmten Schema tweeten.

Der Wettbewerb läuft nur bis zum 25. März, daher müsst ihr schnell handeln, wenn ihr dabei sein wollt. Die genauen Teilnahmebedingungen und weitere Infos findet ihr hier.

Wir wünschen euch viel Erfolg!

Kay Giza [MS]: 40 Tonnen Microsoft: Hole Dir den Microsoft TechTruck kostenfrei auf Dein Event, zu Deiner Firma oder in Deine Gegend

40 Tonnen Microsoft - kostenfrei auf Deinem Event, in Deiner Firma, in Deiner Gegend? Technologie zum Anfassen, Möglichkeiten zum Networking, erstklassige Vorträge und Expertenwissen – das sind nur einige der Vorteile, die ein Besuch im Microsoft TechTruck bietet. Holen Sie sich daher den Microsoft TechTruck kostenfrei! Mehr Informationen, Bilder und weiterführende Infos in diesem Blogeintrag auf Giza-Blog.de [... 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

Kay Giza [MS]: Teilnehmer der Microsoft Office TechCamps berichten - jetzt noch freie Plaetze sichern!

Die Microsoft TechCamps, Hand-on Labs (Level 300) erfreuen sich großer Beliebtheit. Vielen Dank für die große Nachfrage und die tolle Interaktion vor Ort. Tipp: Jetzt schnell einen der freien und kostenfreien Plätze sichern und anmelden, es lohnt sich: http://aka.ms/OfficeTechCamps Teilnehmer der Office TechCamps berichten, ein Auszug aus den Feedbacks... [... 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

Norbert Eder: 11 Tipps um Meetings zu verbessern

Meetings sind für uns Softwareentwickler ja schon grundlegend eine Herausforderung, weil unbeliebt. Softwareentwickler wollen am Rechner sitzen und Code schreiben, nicht in einer Runde mit anderen, um ein Thema zu besprechen, dass ohnehin zuwenig Komplexitätsgrad besitzt. So oder so ähnlich denken viele Softwareentwickler. Vermutlich (oder ganz sicher) geht es auch anderen in Meetings ähnlich. Das liegt aber auch durchaus daran, dass Meetings gerne gänzlich falsch aufgesetzt sind.

Nachfolgend möchte ich auf einige Punkte eingehen, die mir über die vergangenen Jahre immer wieder aufgefallen sind:

  • Keine Terminserien: Viele Meetings gibt es nur als Serie. Selbst wenn es nichts zu besprechen gibt, findet das Meeting statt. Dass die anberaumte Zeit (oder länger) dann tatsächlich gesprochen wird, wird als Zeichen der Sinnhaftigkeit gesehen. In Wahrheit werden nur Themen gesucht über die man sprechen könnte, ohne dass eine Notwendigkeit besteht. Also lieber bei Bedarf ein Meeting anberaumen bzw. wirklich nur in ganz seltenen Fällen Serien anlegen.

  • Vorsicht mit kurzfristigen Meetings: Kurzfristige Meetings sind in Ordnung, wenn es sich um Gespräche im Rahmen von bis zu 20 Minuten handelt. Alles was darüber liegt, sollte unbedingt geplant und frühzeitig bekannt gemacht werden.

  • Ziel definieren: Schon mal die ersten Minuten eines Meetings mit der Frage “Worum geht es da jetzt genau?” verbracht? Ganz sicher sogar. Was fehlt ist ein Ziel für das Meeting und dessen Kommunikation. Jeder muss vor dem Meeting wissen, was damit erreicht werden soll. Kann ein Ziel nicht definiert werden, besteht wenig Anlass für das Meeting.

  • Agenda und nicht davon abweichen: Es muss eine klare Agenda für das Meeting geben (und dieses muss zum definierten Ziel passen/führen). Diese Agenda sollte den Teilnehmern ausreichend vor der Zusammenkunft mitgeteilt werden. Werde im Zuge des Meetings neue Themen ausgemacht, sind diese in einem neuen Meeting zu besprechen (so sie nicht direkt relevant sind).

  • Zielgruppe definieren: Es ist wenig zielführend, alle möglichen Personen zu einem Meeting einzuladen, nur um niemanden auf den Schlips zu treten, oder damit jeder seine Meinung kundtun kann. Viel besser ist es, die relevante Zielgruppe einzuladen, also Mitarbeiter, die tatsächlich zum Thema etwas beitragen können und das Meeting innerhalb der anberaumten Zeit zum Ziel führen können.

  • Möglichkeit der Vorbereitung geben: Neben der Agenda sind oftmals weitere Dokumente für ein Meeting maßgeblich. Diese sollten den Teilnehmern vor dem Meeting zur Verfügung stehen, so dass eine Vorbereitung möglich ist. Gerne werden Dokumente ausgedruckt ins Meeting gebracht und dann den Teilnehmern vorgelegt. Resultat ist, dass über Themen nicht diskutiert werden kann, oder alle zuerst am Lesen sind und dem Start des Meetings nicht folgen.

  • Protokollieren + Verteilen: Für sehr viele Meetings werden keine Protokolle geschrieben bzw. nicht verteilt. Resultat sind Meetings zu denselben Themen mit denselben Inhalten und denselben Ergebnissen, jedoch ohne Durchführung irgendeiner Aufgabe. Reine Zeitverschwendung. Protokolle ermöglichen es zudem anderen Personen, Informationen des Meetings bzw. zu Ergebnissen nachlesen zu können (und dadurch müssen sie beispielsweise im Meeting nicht anwesend sein).

  • Aufgaben/greifbare Ergebnisse als Resultat: Meetings müssen Aufgaben oder klare und zufriedenstellende Ergebnisse aufweisen können. Dies bedeutet, dass das vorgenommene Ziel erreicht werden sollte.

  • Nicht überziehen: Es ist niemandem geholfen, wenn ein Meeting für eine bestimmte Zeitdauer angesetzt wurde, jedoch keiner die tatsächliche Dauer kennt, da Meetings grundsätzlich überzogen werden. Idealerweise hat jeder einen Tagesplan, der durch solche Meetings gehörig durcheinander kommt.

  • Nicht palavern: Die vierte Zusammenfassung, die dritte gleiche Erklärung, Geschichten die angeblich etwas beitragen sollen, usw. Das verzögert nur unnötig und ist wenig konstruktiv. Bei der Sache bleiben, sich kurz und knackig halten.

  • Persönliche Befindlichkeiten hintanstellen: Oftmals stehen in Meetings persönliche Befindlichkeiten im Vordergrund. Genau das soll es nicht sein. Menschen kommen zusammen, um gemeinsam die bestmögliche Lösung zu finden. Das sollte von allen bedacht und beachtet werden. Schließlich profitieren alle von einem guten Ergebnis.

Zusätzlich kann ich nachfolgendes Video von Christian Heilmann zum Thema empfehlen. Einfach mal reinschauen, es zahlt sich aus.

Zu guter Letzt kann ich noch einen weiteren Tipp mit auf den Weg geben: Für manche Meetings zahlt sich auch eine alternative Location aus. Abwechslung (auch gerne, wenn es schön ist, im Freien) steigert die Kreativität und kann sehr gute Ergebnisse liefern.

Welche Erfahrungen und/oder Tipps habt ihr?

The post 11 Tipps um Meetings zu verbessern appeared first on Norbert Eder.

Uli Armbruster: Interview mit Daniel Marbach mitgestalten

Am 18. März wird mir Daniel Marbach ein Video Interview zu dem BDD-Framework Machine.Specifications geben. Ein kleiner Vorgeschmack gefällig?

Wodurch hebt sich MSpec von anderen BDD-Frameworks ab?

oder

Welche Features sind gerade in der Pipeline?

oder

Welche anderen Frameworks ergänzen MSpec gut?

Das Video veröffentliche ich dann auf meinem YouTube Channel. Ihr könnt die Richtung des Gesprächs mitgestalten, indem ihr mir rechtzeitig eure Fragen in die Kommentare postet.


Einsortiert unter:.NET Framework, Development, German Tagged: BDD, Interview, MSpec, TDD, UnitTest, Video

codefest.at [MS]: Mobile Developer After-Work: Xamarin

Am 9. April dürfen wir bei Microsoft den 7. Mobile Developer After-Work begrüßen. Die Vorträge drehen sich diesmal rund um cross-Plattform Entwicklung mit Xamarin.

Als Neuerung wird es bei diesem Mobile Developer After-Work, nach einer gemeinsamen Keynote von Xamarin, eine technische Vortragreihe und parallel dazu eine Vortragsreihe für IT-Entscheider geben. Damit sollen nicht nur Entwickler sondern auch Entwicklungsleiter, Projektmanager oder generell Entscheidungsträger angesprochen werden.

Eine mobile App mit mindestens 4* Bewertungen für drei Plattformen zu entwickeln und zu pflegen bedeutet viel Arbeit – und damit einen enormen Kosten-Aufwand. Xamarinlöst dieses Problem – nur 1x Entwickeln und 3x native Apps erhalten! Damit stellt Xamarin aktuell eine der attraktivsten Lösungen für das Cross-Plattform App-Development dar und wird sowohl von Entwicklern, als auch von Auftraggebern heiß diskutiert.

Xamarin bietet für Visual Studio Kunden mit MSDN spezielle Konditionen sowie eine Trial-Version.

Der After-Work startet so wie der Name schon sagt um 17 Uhr – Agenda & Anmeldung

Uli Armbruster: Nachgefragt – dotnetpro Interview mit Tilman Börner

In einem Online Interview habe ich Tilman Börner über die digitale Zukunft der dotnetpro und die Anforderungen an potentielle Autoren befragt. Herausgekommen ist eine Aufnahme, die es jetzt auf YouTube gibt. Die Fragen wurden vorab nicht abgesprochen, um eine Gesprächsatmosphäre zu schaffen, wie sie bei einer Kaffeepause üblich ist.

Danke nochmal Tilman!

 

Interview mit Tilman Börner

 

Fragen

  • Angehende Autoren
    • Formale Anforderungen an einen potentiellen Autor
    • Formale Anforderungen an einen Artikel
    • Von der Idee bis zum fertigen Artikel: Das Prozedere kurz erläutert
    • Was macht einen guten Autor aus?
  • Änderungen am Magazin
    • Gibt es gerade einen Umbruch?
    • Finden Themenverschiebung statt?
  • Die Digitale Welt
    • Wird es vollwertige Ausgaben für Android und Kindle geben?
    • Wann bekommt die Homepage einen neuen Anstrich?

 

Show Notes


Einsortiert unter:German, Misc Tagged: Interview, Video

Norbert Eder: #fotomontag #11

Jeden Montag ein Foto. Der #fotomontag.

Dieses Foto stammt noch aus der Zeit, in der ich (leider) meist den Automatik-Modus an hatte und meine Fotos nicht im RAW-Format speicherte. Dennoch spricht es mich persönlich an, auch wenn ich Angst hatte, er könnte gerade eine plötzliche Hungerattacke erleiden. Wer sich diesen Löwen in Natura ansehen möchte, kann dies im Tierpark Herberstein tun.

Löwe Tierpark Herberstein

Löwe Tierpark Herberstein

Hast du eine Meinung zum Foto? Ja? Dann lass sie mich doch bitte wissen und bewerte es in den Kommentaren.

The post #fotomontag #11 appeared first on Norbert Eder.

Albert Weinert: Wie ergattert man ein Ticket zur dotnet Cologne 2015

Letztes Jahr war die dotnet Cologne in 30 Minuten ausverkauft, jetzt am Mittwoch den 18. März 2015 um 12 Uhr MEZ startet die Anmeldung zur dotnet Cologne 2015. Und wer ein Ticket ergattern will der sollte wirklich um 12 Uhr am Rechner sitzen. Den ich erwarte dass es diesmal noch schneller gehen wird.

Wie schafft man es um 12 Uhr nun auch Tickets zu bestellen?

Dies kann man in drei Punkten zusammen fassen.

  • Man hat einen funktionierenden Login
  • Daten wie Adresse und Firmenname sind schon korrekt im System
  • Das Anmelde-System muss funktionieren

Dazu kann man sich schon jetzt im System anmelden und diese Daten bearbeiten => Zum Anmelde-System der dotnet Cologne

Vorhandener Login

Wenn man einen Login hat, z.B. aus den letzten Jahren oder man hat sich schonmal zu einem Treffen der .net user group Köln angemeldet. So kann man ihn wieder verwenden, wenn man das Login nicht mehr kennt. So kann man sich einfach ein neues Kennwort setzen, und erhält dabei eine Mail mit Benutzernamen und einem Link zum Kennwort eintragen.

Neuer Login

Hat man keinen Login so muss man eine neue Registrierung durchführen.

Daten erfassen

Wenn man nun einen Login hat und sich im System anmeldet kann man seine Persönlichen Daten ändern, und am 18. März ab 12 Uhr sich bei der dotnet Cologne 2015 anmelden.

Beim bearbeiten der Daten füllt man diese vollständig aus.

Wichtig ist dass die Daten richtig erfasst sind. Man hat zwar bei der Anmeldung die Möglichkeit diese anzupassen, aber dann verliert man wichtige Sekunden. Diese Angaben stehen später auf der Rechnung.

Anmeldung durchführen

Der große Tag ist gekommen und die Anmeldung startet Punkt 12 Uhr. So kann man sich nach der Anmeldung (am besten schon 1-2 Minute vor 12 Uhr) im System zur Veranstaltung anmelden. Und muss die schwierige Entscheidung treffen Privat oder Firma

Alle Vor- und Nachteile werden dort erklärt.

Private Anmeldung

Wenn die Daten richtig erfasst sind, müssen nur noch die AGBs bestätigt werden und Anmelden geklickt werden, und mit viel, viel, viel Glück ist man unter den ersten 80 Teilnehermn die den Super Early Bird erhalten. Letztes Jahr war um 12:00:04 der 1. Super Early Bird und um 12:00:41 der letzte. Schlappe 40 Sekunden. Also strengt euch an. Als Privat-Person kann man nur eine Anmeldung durchführen.

Wichtig ist es sofort zu bezahlen, denn wenn nicht innerhalb einer Woche bezahlt wird verfällt die Anmeldung (ihr werdet Informiert) damit Anmeldungen von der Warteliste entsprechend nachrutschen können. Wir machen keine Ausnahmen oder Extra-Würste. Besonders nicht in Bezug auf Überweisungsdauer. Die Fristen sind bekannt und einhaltbar. Nach der Zahlung (weil wir nicht den Rechnungen hinterherlaufen können für den Preis) erhaltet Ihr auch eine Rechnung, dies ist jedoch ein manueller Prozess die Zahlung zu verbuchen.

Landet man auf der Warteliste zahlt man erst nachdem man nachgerutscht ist.

Firmen-Anmeldung

Als Firma kann man sich natürlich auch amelden.

Die Besonderheit hier ist dass man mehr als ein Ticket bestellen kann, bis zu 5 pro Vorgang und man direkt eine Rechnung erhält (es sei den man landet auf der Warteliste, dann kommt die Rechnung erst wenn man nachrutscht).

Sind die Daten erfasst, nur noch die Anzahl der Tickets auswählen, die AGBs aktzeptieren und auf Anmelden klicken.

Weil es eine Community Konferenz ist zählen die Firmen-Tickets nicht zu den verschiedenen Early Birds.

Im Gegensatz zu den letzten Jahren müssen die Firmen die Mitarbeiter nicht sofort eintragen, sondern müssen dies nach der Anmeldung machen. Was unvorbereitet zu einem erheblichen Zeitnachteil führen konnte.

Bis zu 4 Anmelde-Vorgänge kann jede Firma durchführen.

Das System muss funktionieren

Dies ist der Teil der bei uns liegt. Das Anmelde-System ist in einer Zeit entstanden wo der Ausverkauf der dotnet Cologne noch Wochen dauerte. Und wir, speziell ich, hatte damals nicht im Traum dran gedacht dass man mal in 30 Minuten ausverkauft sein könnte. Und letztes Jahr hat es dann sehr gekracht im Gebälk. Auch war es als ASP.NET MVC Lernprojekt gestartet worden. Das merkt man dem Code auch an ;)

Dieses Jahr sind wir hingegangen, haben gemessen, geprüft wo die Problem liegen und haben dann Schritt für Schritt den Anmelde-Vorgang optimiert. Sowohl auf der .NET Seite als auch in der Datenbank. Wobei fast alle Probleme mit dem Zugriff auf die Datenbank zu tun hatten (NHibernate, speziell mit LINQ, ist eine Bitch). Diese sind nun alle behoben (hüstel, Klopf auf Holz).

Das Anmelde-System funktioniert nun besser als je zuvor, und es sollte damit möglich in knapp 40 Sekunden ausverkauft zu sein. Und ich möchte dass Ihr uns Zeigt dass Ihr dies auch wirklich schafft. Also habt eure Daten aktuell und findet euch kurz vor 12 Uhr bei der Anmeldung ein.

Dem Code sieht man sein Alter natürlich immer noch an, für eine Neu-Entwicklung hat wie immer mal wieder die Zeit nicht gereicht.

Hendrik Lösch: Windows Phone 8: Keyboard schließen nach Enter

Ich war etwas überrascht als ich mitbekam, dass es keine Suchbox für Windows Phone gibt, immerhin ist diese ja in Windows 8 enthalten. Andererseits hatte ich mit der unter Windows 8 auch nicht so viel Spaß, da sie kein sauberes MVVM zuließ. Besonders interessant war sie eigentlich für mich auch nur deshalb, da ich nach […]

Manfred Steyer: Web APIs mit ASP.NET MVC 6: Serialisierung mit Formatter beeinflussen

Um die (De)Serialisierung bei ASP.NET MVC 6 zu beeinflussen, kann der Entwickler beim Start der Anwendung die standardmäßig eingerichteten Formatter konfigurieren bzw. die genannten Auflistungen manipulieren, sprich weitere Formatter hinzufügen oder bestehende entfernen. Ein Beispiel dafür findet sich im nachfolgenden Listing. Es zeigt die Methode ConfigureServices der Klasse Startup, welche sich in jedem ASP.NET-MVC-6-Projekt befindet und die Web-Anwendung beim Hochfahren initialisiert. Die Aufgabe von ConfigureServices ist es, austauschbare Komponenten über den Dependency-Injection-Mechanismus von ASP.NET zur Verfügung zu stellen. Diese Komponenten, welche sich auch Services oder Dienste nennen, hinterlegt ConfigureServices in einer vom Web-Server übergebenen Auflistung des Typs IServiceCollection.

Zu diesen Komponenten zählen auch die Services, auf die sich ASP.NET MVC abstützt. Die Erweiterungsmethode AddMvc fügt diese hinzu. Die Methode Configure gibt dem Entwickler die Möglichkeit, die hinzugefügten Komponenten zu konfigurieren. Dazu führt er als Typparameter den Typ jener Komponente, über die Konfigurationsoptionen festzulegen sind, an. Im Fall von ASP.NET MVC nennt sich diese Komponente MvcOptions. Der erste Parameter dieser Methode ist ein Lambda-Ausdruck, welcher eine Instanz dieser Komponente entgegennimmt und sie konfiguriert.

Listing 1 durchforstet die Auflistung InputFormatters um den standardmäßig vorherrschenden JsonOutputFormatter zu finden. Dabei ist zu beachten, dass die Auflistung OutputFormatterDescriptor-Objekte, welche – wie der Name schon vermuten lässt, OutputFormatter beschreiben – beinhaltet. Über ihre Eigenschaft Instance verweisen diese Objekte auf den jeweiligen Formatter. Deswegen findet im betrachteten Fall auch mit Select eine Projektion auf diese Eigenschaft statt. Die LINQ-Methode OfType filtert anschließend nach dem gewünschten Typ und FirstOrDefault liefert ein einzelnes Objekt retour. Damit diese LINQ-Methoden zur Verfügung stehen, ist der Namensraum System.Linq einzubinden.

Der auf diesem Weg ermittelte JsonOutputFormatter bietet sich über seine Eigenschaft ReferenceLoopHandling ein Konfigurations-Objekt an. Um die Arbeit mit diesem Objekt zu veranschaulichen, setzt das betrachtete Listing dessen Eigenschaft ReferenceLoopHandling auf Ignore. Das hat zur Folge, dass der Formatter Zyklen in den zu serialisierenden Objektgraphen ignoriert. Ein solcher Zyklus ergibt sich zum Beispiel, wenn zwei Objekte gegenseitig aufeinander verweisen. Gerade beim Einsatz von Entitäten mit bidirektionalen Beziehungen ist dies häufig der Fall. Der Standardwert von ReferenceLoopHandling nennt sich Error. Diese Einstellung bewirkt, dass der Formatter beim Vorfinden eines Zyklus eine Ausnahme auslöst. Der Vollständigkeit halber wiederholt das betrachtete Listing dieselben Schritte für den JsonInputFormatter. Informationen über die vielen zur Verfügung stehenden Konfigurationsoptionen finden sich unter [1].

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().Configure<MvcOptions>(options =>
    {
        var jsonOutput = options
                               .OutputFormatters
                               .Select(d => d.Instance)
                               .OfType<JsonOutputFormatter>()
                               .FirstOrDefault();

        jsonOutput.SerializerSettings.ReferenceLoopHandling = 
                             Newtonsoft.Json.ReferenceLoopHandling.Ignore;

        var jsonInput = options
                               .InputFormatters
                               .Select(d => d.Instance)
                               .OfType<JsonInputFormatter>()
                               .FirstOrDefault();

        jsonInput.SerializerSettings.ReferenceLoopHandling = 
                             Newtonsoft.Json.ReferenceLoopHandling.Ignore;

    }
}

[1] http://www.newtonsoft.com/json

codefest.at [MS]: Coding Dojo in Wien, am 27.3.2015

Die Visual Studio User Group Wien organisiert am 27.3.2015 einen Coding Dojo in Wien.

“Dieser Abend steht unter dem Motto lernen durch Austausch. Zu Gast ist der Gründer der .NET Coding Dojo Gruppe aus München Ilker Cetinkaya und Dennis Wagner.

Gemeinsam werden die beiden helfen, Kenntnisse über Software-Entwicklung zu erweitern. Das Ziel des Treffens ist es, in einer gelösten, lockeren Atmosphäre gemeinsam ein Code Kata (eine Programmieraufgabe) zu stemmen und dadurch Neues zu erlernen.

Dies ist ein kostenfreies Event der #VSUGW Visual Studio User Group Wien. Location Host ist die ppedv gmbh.”

Details und Anmeldung…

Golo Roden: Abgesichert: Docker auf CircleCI mit TLS ausführen

CircleCI ist eine Cloud-Plattform für Continuous Integration und Continuous Delivery. CircleCI lässt sich detailliert anpassen und integriert verschiedene Dienste wie MongoDB, RabbitMQ und Docker. Allerdings ist Docker weder per TCP noch per TLS angebunden. Wie lässt sich das ändern?

Golo Roden: Ein Container voller Himbeeren: Docker auf dem Raspberry Pi

Der Raspberry Pi dient vielen Webentwicklern als Einstieg in das Internet der Dinge. Das Deployment basiert auf SSH und ist daher zwar mächtig, allerdings auch umständlich. Außerdem erfordert die verwendete ARM-Architektur speziell angepasste Anwendungen. Warum also nicht Docker auf dem Raspberry Pi ausführen, um das Problem zu lösen?

friends header

bloggers headline

links header

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