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?

codefest.at [MS]: Global Azure Bootcamp 2015

Willkommen beim dritten Global Azure Bootcamp! Am Samstag, dem 25. April 2015, findet dieses Event in Dutzenden Orten weltweit statt. Das Event wird von der Community für die Community durchgeführt und ist kostenlos. In Österreich findet das Global Azure Bootcamp wieder in der HTBLA Leonding in Oberösterreich statt.

Alle Details und Anmeldung unter https://austriaazurebootcamp2015.eventday.com.

 

Das erste erste Global Windows Azure Bootcamp fand an mehr als 90 Orten rund um die Welt statt. Im März 2014 waren es bereits 136 Veranstaltungsorte – hier wurde unter anderem eine riesige globale Computer-Farm erstellt. In Österreich waren es letztes Jahr bereits fast 70 Teilnehmer, die sich über Azure Grundlagen und Azure Deep Dives informieren konnten.

Auch dieses Jahr wird das Event wieder von der Azure Community perfekt organisiert und ist kostenfrei. Der Veranstaltungsort HTBLA Leonding bietet eine Menge Platz und eine perfekte Infrastruktur. Es wird wieder einen  Basics Track und einen Deep Dive Track geben. Die Inhalte reichen über reine Azure-Themen hinaus und behandelt auch Bereiche wie Office365, Web-Entwicklung, Big Data, u.v.m.

Es gibt nur mehr wenige freie Plätze, also rasch anmelden!

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?

Norbert Eder: npm update: The build tools for Visual Studio 2010 cannot be found

Beim Aktualisieren der NPM Packages für ein Projekt erhielt ich folgende Fehlermeldung:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB8020: The build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found. To build using the v100 build tools, please install Visual Studio 2010 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Upgrade Solution...". [C:\Path\To\Project\node_modules\karma\node_modules\socket.io\node_modules\socket.io-client\node_modules\engine.io-client\node_modules\ws\build\bufferutil.vcxproj]

Ich hatte vor kurzer Zeit meinen Entwicklungsrechner neu aufgesetzt und Visual Studio 2010 dabei nicht mehr installiert. Daher auch erst jetzt dieser Fehler. Abhilfe schaffen kann man dem wie folgt:

npm update --msvs_version=2013

Damit sollte das nun laufen. Wenn noch immer ein Fehler auftaucht, dann könnte eine Aktualisierung des Packages node_gyp der NPM-Installation helfen.

The post npm update: The build tools for Visual Studio 2010 cannot be found appeared first on Norbert Eder.

Norbert Eder: Enthüllt: Wie man die richtigen Features für sein Produkt findet

In der Softwareentwicklung besonders schwierig ist das Finden der richtigen Features für ein Produkt. Hier gibt es in den meisten Unternehmen sehr deutliche Schwächen. Aber was tun?

Meist fehlt eine Gesamtliste der Features (inklusive Ideen, Entwürfe etc.). Diese muss für das beste Ergebnis in eine willkürliche Sortierung gebracht werden.

Nun alle Personen die man involvieren möchte an den Tisch bringen und Schätzungen einfordern.

Es ist kein Problem, die Schätzungen auch via Story Points (als Komplexitätsfaktor) abzulegen (bitte nur darauf achten, dass ein Umrechnungsfaktor auf Stunden gegeben ist, sonst kann man den tatsächlichen Aufwand nicht herausfinden).

Nach dem Schätzen aller Punkte besitzt man nun eine perfekte Basis, aufgrund des zu erwartenden Aufwandes, die besten Features herauspicken zu können.

Dafür muss man die Liste auf Basis der Schätzungen aufsteigend sortieren. Schon hat man die gewünschte Priorität. Idealerweise wählt man noch eine Zahl die als Umsetzungsschwelle bekannt ist.

Alle Punkte mit darüber liegenden Schätzungen werden nicht mehr umgesetzt (außer die Schätzung lässt sich verringern – was in einem nachfolgenden Meeting erreicht werden kann).

So einfach geht das. Alles klaro?

The post Enthüllt: Wie man die richtigen Features für sein Produkt findet appeared first on Norbert Eder.

Norbert Eder: #fotomontag #10

Jeden Montag ein Foto. Der #fotomontag.

Die ersten Frühlingsvorboten zeigen sich bereits in vollster Pracht und machen den kalten, triesten Winter schnell vergessen. Um ein wenig Frühlingsaufbruchsstimmung festzuhalten, dachte ich mir, ein Schneeglöckchen-Foto wäre genau das Richtige. Tja, und so habe ich heute eines aufgenommen.

Schneeglöckchen - Fotomontag - Norbert Eder

Schneeglöckchen

Update: Ich habe mehrfach als Feedback erhalten, dass ich bei diesem Foto einen Blitz verwenden hätte sollen. Ja, das ist korrekt, leider war ich jedoch ohne unterwegs. Ich habe aber versucht, über die Nachbearbeitung eine Verbesserung zu erreichen. Hier das Ergebnis:

Schneeglöckchen - Fotomontag - Norbert Eder

Schneeglöckchen – Nachbearbeitung

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

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

Sven Hubert: Wie man Sonderzeichen und HTML-Tags als Default-Werte in Work Item Feldern verwendet und wie ein paar HTML-Tricks dabei helfen

Möchte man im TFS ein Teamprojekt erstellen, das bestmöglich den eigenen Prozessanforderungen entspricht, so ist der erste Schritt oftmals, das Prozesstemplate, welches zum Erstellen des Projektes verwendet werden soll, anzupassen. Diese Anpassung erfolgt durch die Modifikation der zugrundliegenden XML-Dateien, wobei ein wesentlicher Teil daraus besteht daraus, zunächst die gewünschten Work Item-Typen zu definieren.

Im Zuge der Work Item-Definition werden alle Felder sowie der Zustandsautomaut und das Layout eines Workitems festgelegt, wobei im Rahmen der Felddefinitionen die Möglichkeit besteht bereits im Vorhinein Default-Werte festzulegen.

clip_image001

Der so festgelegte Wert wird dann bei Erstellung eines Work Items des entsprechenden Typs in das Feld eingetragen. Geht man beispielsweise von dem Standard-Prozesstemplate “MSF for Agile Software Development 2013.4″ aus und setzt wie in der Abbildung dargestellt für den Work Item-Typ User Story den Default-Wert für das Feld ‘Description’ auf ‘Default-Wert’, so ist das Ergebnis bei der Erstellung einer neuen User Story wie folgt:

clip_image002

Möchte man in diesem  Kontext jedoch nicht nur einfachen Text sondern Sonderzeichen oder HTML-Tags als Standardwert verwenden so ergeben sich verschiedene Probleme, die es zu lösen gilt.

Also erstes Beispiel betrachte man hierzu eine nummerierte Auflistung, welche als Default-Wert verwendet werden soll. Der zu einer Aufzählung zugehörige HTML-Code sieht im Allgemeinen folgendermaßen aus:

image

Da spitze Klammern jedoch als Sonderzeichen in XML gesetzt sind, kann man diesen HTML-Code nicht ohne Weiteres übernehmen. Stattdessen muss man das jeweilige Sonderzeichen durch dessen HTML-Codierung ersetzen. So wird die öffnende spitze Klammer durch die Zeichenfolge ‘&lt;’ und die schließende spitze Klammer durch ‘&gt;’ ersetzt (siehe HTML-Codes). Im Ganzen gestaltet sich der XML-Code des Feldes also wie folgt:

image

Das Ergebnis beim  Erstellen einer neuen User Story auf Basis diesen Codes sieht dann folgendermaßen aus:

SNAGHTML5b2f9cd

 

Im zweiten Beispiel ist die Problemstellung ähnlich jedoch mit einer Besonderheit. Möchte man also die Satzschablone “Als <Rolle> möchte ich <Ziel>, um <Nutzen>” als Default-Wert festlegen, welche gerade im  Rahmen einer User Story oft zum Einsatz kommt, so muss man wiederum die spitzen Klammern als Sonderzeichen durch ihre HTML-Codierung ersetzen. Darüber hinaus stellt sich die Aufgabe den Interpreter dazu zu bringen, die so erstellte spitze Klammer nicht als HTML zu interpretieren sondern als einfaches Satzzeichen darzustellen. Um  dies zu erreichen ersetzt man zusätzlich noch das ‘&’-Zeichen durch seine HTML-Codierung  ‘&amp;’. Damit sieht die gewünschte Satzschablone im XML-Code folgendermaßen aus….

clip_image004

… und das Ergebnis ist dann…

clip_image005

Mit den Default-Werten kann man den Anwender bei der Bedienung der einzelnen Work Items unterstützen. Möchte man dabei jedoch etwas komplexere Werte einfügen, die sich nur durch HTML-Code darstellen lassen, so muss man etwas in die HTML-Trickkiste greifen. Gewusst wie, ist das aber gar kein Problem.

Wie man Sonderzeichen und HTML-Tags als Default-Werte in Work Item Feldern verwendet und wie ein paar HTML-Tricks dabei helfen is a post from: AIT Blog

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

Paul Mizel: Implementing a timeout in c# with Session/httpContext access

Eine Erweiterung der Task um Drittsystemen die nötigste Zeit zu geben, falls die Systeme nicht Antworten,

geht die Ausführung der Seite weiter, der Kunde bekommt in einer SLA -  Zeit die Webapplication zu sehen.

public static class TaskExtensions
{
    public static async Task TimeoutAfter(this Task task, int millisecondsTimeout)
    {
        if (task == await Task.WhenAny(task, Task.Delay(millisecondsTimeout)))
            await task;
        else
            throw new TimeoutException();
    }
}

 

public class HomeController : Controller

{

    public class IndexViewModel

    {

        public DateTime Date { getset; }

    }    public async Task<ActionResult> Index()

    {

        Session["date"] = DateTime.Now;

        IndexViewModel model = null;

        try

        {

            var task=Task.Run<IndexViewModel>(() =>

            {

                var result=new IndexViewModel();

                System.Threading.Thread.Sleep(1000);

                result.Date = (DateTime)Session["date"];

                return result;

            });

            await task.TimeoutAfter(500);

            model=task.Result;

        }

        catch (TimeoutException ex)

        {

            //Log.Warning("Timeout");

        }

        return View(model);

    }

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

Uli Armbruster: Schlanke Prozesse sind gute Prozesse oder warum wir Kanban einführen

In unserer IT Administration führen wir regelmäßige Retrospektiven durch. Das ermöglichte es uns Kategorien von Problem zu identifizieren, wie sie auf dem Bild zu sehen sind.

2015-03-04 18.36.43

  • Weniger wichtige Aufgaben wurden zuerst erledigt (Priorisierung)
  • Vermeintlich kurze Projekte haben sich stark in die Länge gezogen
  • Aufgaben wurden nicht vollständig erledigt
  • Zuständigkeiten / Ansprechpartner waren nicht klar
  • Aktuelle Projektstände waren nicht transparent
  • Aufgaben blieben bei Externen hängen bzw. blockierten uns
  • Engpässe / Verzögerungen machten uns das Leben schwer
  • Planung war schwierig
  • Häufiges “auf einen Stand bringen” und mehrfaches Besprechen gleicher Punkte

Die Systemadministration ist von Natur aus ein stark vom Tagesgeschäft abhängiges Umfeld mit viel Klein-Klein-Arbeit. Der Anwender ruft an, meldet PC Probleme (Spezifisches hört man selten), der Kollege unterbricht seine eigentliche Tätigkeit wie z.B. die Vorbereitung einer größeren Umstellung und kümmert sich um die Nöten des besorgten Anrufers. Kaum zurück und wieder in die Umstellung vertieft, kommt eine E-Mail, dass die Druckertoner leer sind. Erneut gilt es die aktuelle Arbeit zu unterbrechen.

Darüber hinaus laufen natürlich immer Projekte mit anderen Abteilungen oder Externen (Telekommunikationsanbieter, Dienstleister, etc.), die voran getrieben werden müssen. Selbst der Entwickler-Kollege aus der selben Abteilung ruft an und möchte einen neuen Testserver aufgesetzt bekommen – am besten vorgestern versteht sich.

Kurzum: Ein reges Tagesgeschäft parallel zu großen Projekten und das alles im Umfeld von unterschiedlichen Stakeholdern. So wie es auch in Marketingabteilungen oder Zentralen der Fall ist.

Nüchtern betrachtet handelt es sich um eine Warteschlangensystem. Da Menschen nicht gut darin sind viele Dinge parallel zu machen, vermuten wir hierin eine der Ursachen: Zu viele Dinge werden gleichzeitig erledigt. Außerdem stehen wir Dritten skeptisch gegenüber, welche uns rein gefühlsmäßig ausbremsen. Bei den Telekommunikationsanbietern können wir indes von einer Tatsache sprechen…Darüber hinaus meinen wir diverse weitere Hindernisse erkannt zu haben, die den Arbeitsfluss immer wieder stören.

Um weil wir uns gerne verbessern möchten, eine zu große Umstellung auf einmal eher scheuen und der Evidenz der Vermutung den Vortritt geben möchten, haben wir uns entschieden Kanban einzuführen. Auf einen Nenner gebracht liegen dem 3 Prinzipien und 5 Praktiken zu Grunde.

Prinzipien:

  • Starte mit dem, was du jetzt machst
  • Verfolge inkrementelle, evolutionäre Veränderungen
  • Respektiere initiale Prozesse, Rollen, Verantwortlichkeiten und Job-Titel

Praktiken:

  • Mache Arbeit sichtbar
  • Limitiere den WIP
  • Manage den Arbeitsfluss
  • Mach Prozess-Regeln explizit
  • Führe gemeinschaftliche Verbesserungen durch (basierend auf Modellen)

Alle Regeln werden penibel eingehalten, jedoch ist die erste Regel alle Regeln abzuschaffen, die nicht mehr funktionieren.

Über die ersten Ergebnisse werde ich demnächst berichten. Falls jemand schon gute Erfahrungen primär im Administrationsumfeld gemacht hat, dann würde ich mich über Input freuen. Gerne auch aus der Softwareentwicklung.


Einsortiert unter:CIO Topics, German, Projects Tagged: Agile / Lean, Kaizen, Kanban, Retrospektive

Uli Armbruster: Interview mit der dotnetpro mitgestalten

Am 12. März werde ich mit Tilman Börner ein Online Interview führen. Die Fragen beziehen sich natürlich primär auf die dotnetpro. Ein kleiner Vorgeschmack gefällig?

Kann jeder einfach Autor werden und einen Artikel schreiben?

oder

Wann können wir mit einer Kindle Ausgabe rechnen?

oder

Welche Änderungen sind dieses Jahr nach dem Design Relaunch noch zu erwarten?

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


Einsortiert unter:German, Misc Tagged: Interview, Video

Uli Armbruster: Es gibt keine passive Kaizen-Kultur

Es braucht keine Retrospektiven und dedizierte Kaizen Phasen; schließlich hat das vorher auch alles geklappt und die Verbesserungen haben sich genauso eingestellt.

Aussagen wie diese hört jeder Change Agent früher oder später. Ich will gar nicht abstreiten, dass in jedem Unternehmen mehr oder weniger kontinuierlich optimiert wird. Jedoch geht durch das passive Verhalten viel Potential verloren. Das kann jeder ganz einfach kontrollieren. Der geneigte Leser soll dazu für einen kurzen Zeitraum – beispielsweise 2 Monate – jede Idee protokollieren, welche von Kollegen mit “das müssen wir mal machen” oder “das sollten wir demnächst angehen” kommentiert wird. Im Anschluss ist zu prüfen, was tatsächlich umgesetzt wurde. Ich wäre überrascht, wenn bereits 5% fertig sind. Wohlgemerkt fertig umgesetzt, nicht nur angefangen und wieder liegen gelassen. Ganz im Sinne von stop starting, start finishing. Bereits die Definition von Kaizen drückt das aus:

“Kaizen […] bezeichnet ein methodisches Konzept, in deren Zentrum das Streben nach kontinuierlicher und unendlicher Verbesserung steht.”Wikipedia

Es handelt sich um ein methodisches Konzept. Eine Methode ist ein systematisches Verfahren. Laissez faire im Kontext von Verbesserungen kann aber nicht systematisch sein. Passive Kaizen-Kultur ist also ein Widerspruch.

Ein klarer Indikator dafür für ungenutztes Potential, ist das wiederholte Auftreten des gleichen Problems. Der erste Gedanke, der einem dann kommt, ist: Mist, das wollten wir doch mal machen (siehe Aussage oben). Das können häufig kleine Dinge wie eine fehlende Fahrzeugpoolverwaltung oder eine Verwaltung für die ohnehin nicht gerade reichlichen Besprechungsräume sein. Aber auch komplexere Themen wie die hohe Informationsflut im Zeitalter der Wissensarbeit. Schon mal über eine SharePoint Dokumentenbibliothek oder ein Wikisystem nachgedacht? Und wenn ja, auch realisiert?

Unabhängig von den Implementations-Phasen solcher Ideen/Lösungen, gehören zu einer soliden Kaizen-Kultur auch Retrospektiven. Selbstverständlich werden hier wieder Stimmen laut, die behaupten, dass ich mir doch keine Zeit reservieren muss, in welcher ich reflektiere und nach Verbesserungsmöglichkeiten suche. Das ist leider eine ähnliche Floskel wie:

Wir brauchen keine Mitarbeitergespräche. Wir reden regelmäßig miteinander.

Wer sich aber mit den Themen intensiv beschäftigt und ganz darauf einlässt, stellt einen großen Unterschied fest. Persönlich habe ich sogar den Eindruck, dass durch kurze, oberflächliche Problemanalyse Lösungen entwickelt werden, die das Symptom kaschieren, nicht aber aber die Ursache beheben. Als Change Agent hat sich in dem Fall die sokratische Methode bewährt. Stelle solange W-Fragen (Warum, Wer, Was) bis – wie Goethe sagt – des Pudels Kern gefunden ist.

Der Leser kann sich dazu kurz in Erinnerung rufen wie es bei der Zulassungsstelle bei einer Ummeldung abläuft. An dem einen Schalter beantragt man die Anmeldung. Mit dem Papier geht man an den Schalter neben an. Natürlich muss dort wieder angestanden werden. Nach einer meist längeren Wartezeit wird dort das alte Schild vernichtet und das neue ausgegeben. Damit läuft man wieder an den ersten Schalter und nach noch längerer Wartezeit erhält man dann endlich die Papiere.

Wenn ich jetzt danach frage, wie sich der Prozess optimieren lässt, dann kommt ohne lange Überlegung die Antwort: Na indem am Schalter schneller gearbeitet oder mehr Personal eingestellt wird. Überstunden wären ebenfalls möglich. Das sind zwar alles Optionen, allerdings lange nicht die besten, da diese nur sehr beschränkt skalieren und teuer sind. Vielleicht ist das der Grund, warum bis heute die meisten Kfz Halter sich einen halben Tag Urlaub für das Ummelden nehmen müssen. Eine mathematisch nachweislich bessere Antwort gibt es hier.

Fazit

Keine Frage: Es braucht kleine, kontinuierliche Verbesserungen, damit die Unternehmen diese verdauen können. Evolution statt Revolution (manchmal auch letzteres!). Aber Evolution im Schneckentempo gleicht eher einem Rückschritt, weil die anderen schneller voran kommen. Wer jeden Tag 30 Minuten ins Fitnessstudio geht und sonntags ruht, hat am Ende der Woche auch 3 Stunden trainiert. Und genauso wie Trainings als feste Termine eingeplant werden müssen, bedarf es auch fester Zeiten für Retrospektiven und die Umsetzung der daraus resultierenden Ergebnisse.

Und wenn der Leser immer noch motiviert ist, dann kann er gerne einen Kommentar hinterlassen, ob in seinem Unternehmen bereits Kaizen an der Tagesordnung ist oder nicht und warum respektive warum nicht.


Einsortiert unter:CIO Topics, German Tagged: Kaizen, Retrospektive

Manfred Steyer: Self-Hosting mit Kestrel in ASP.NET 5 bzw. ASP.NET MVC 6

David Fowler vom ASP.NET-Produktteam hat vor einigen Tagen ein Beispiel [1] online gestellt, das zeigt, wie man ASP.NET 5 bzw. ASP.NET MVC 6 im Self-Hosting-Modus betreiben kann. Die bis dato bekannten Beispiele zu diesem Thema verwendeten eine ASP.NET-5-Anwendung, die unter Verwendung von Kommandozeilen-Parameter zu starten war. Die Beispiele von David zeigen hingegen, wie man mit Microsofts Entwicklungs-Web-Server Kestrel mehr Kontrolle über Self-Hosting bekommt, indem man den Self-Host bei Bedarf in einer eigenen Anwendung startet. Somit könnte man den Self-Host in einem Windows-Dienst oder innerhalb einer Windows-Anwendung starten.

Ich habe das Beispiel von David ein wenig erweitert, sodass es zeigt, wie man eine Startup-Klasse, die die gewünschten Middleware-Komponenten aufsetzt und Services bereitstellt, einbinden kann. Das ist zum einen nützlich, wenn man eine Anwendung sowohl via Self-Host als auch in IIS hosten möchte und hilft zum anderen zu verstehen, was beim Hosting in IIS tatsächlich passiert, wenn hier ASP.NET 5 bzw. ASP.NET MVC 6 hochfährt. Das ganze versehe ich hier zur Erklärung auch mit einigen zusätzlichen Anmerkungen.

Das hier betrachtete Beispiel besteht aus einer ausführbaren Program-Klasse, welche via Constructor-Injection einen IServiceProvider sowie einen ILibraryManager injiziert bekommt. Ersterer gibt via DI Zugriff auf alle standardmäßig vorherrschenden Services; letzterer veröffentlicht Informationen über sämtliche eingebundenen Bibliotheken (NuGet-Pakete).

public class Program
{

    private readonly IServiceProvider _serviceProvider; 
    private readonly ILibraryManager _libraryManager; 

    public Program(IServiceProvider serviceProvider, ILibraryManager libraryManager)
    { 
        _serviceProvider = serviceProvider; 
        _libraryManager = libraryManager; 
    }

    public void Main(string[] args) { … }
}

Interessant wird es dann in der Main. Meine Variation prüft, ob es Kommandozeilenparameter gibt. Falls dem nicht so ist, geht sie von standardmäßigen Angaben, die die Nutzung von Port 5000 bewirken, aus. Die Kommandozeilenparameter werden in ein neues Konfigurationsobjekt mit AddCommandLine aufgenommen.

 // 1. Kommandozeilenargumente auslesen
 if (args.Length == 0)
 {
     args = new string[] { "--server.urls", "http://localhost:5000" };
 }

 var config = new Configuration().AddCommandLine(args);

Dann wird ein HostingEnvironment erzeugt. Damit kann u. a. die Startup-Klasse prüfen, in welcher Umgebung die Web-Anwendung läuft. So könnte man zum Beispiel in einer Test-Umgebung zusätzliche Middleware-Komponenten aufnehmen oder die verwendeten Middleware-Komponenten anders konfigurieren. Das HostingEnvironment benötigt eine Referenz auf das aktuelle IApplicationEnvironment. Dieses gibt Auskunft über die aktuelle Programmausführung und kann unter anderem genutzt werden, um den Anwendungs-Ordner zu ermitteln. Um an dieses IApplicationEnvironment zu kommen, nutzt die betrachtete Anwendung den Service-Provider. Schließlich bekommt das erzeugte Hosting-Environment auch noch einen Namen (EnvironmentName).

// 2. Create Hosting-Environment
var appEnv = _serviceProvider.GetService<IApplicationEnvironment>();
var env = new HostingEnvironment(appEnv, new IConfigureHostingEnvironment[] { });
env.EnvironmentName = "Development - SelfHost";

Anschließend wird die Startup-Klasse instanziiert. Im Gegensatz zum Hosting im IIS muss hier die Klasse nicht zur Laufzeit ermittelt werden, sondern kommt direkt zum Einsatz.

Die Methode HostingServices.Create erzeugt anschließend unter Verwendung des ServiceProviders mit den standardmäßig vorherschenden Services eine ServiceCollection, die darauf basiert. Der Unterschied zwischen ServiceProvider und ServiceCollection ist, dass ersterer zum Abrufen von Services und letztere zum Definieren von Services genutzt werden kann. Unterm Strich bewirkt dieses Vorgehen, dass man nun eine ServiceCollection hat, die zum einen die Services aus dem ServiceProvider beschreibt und zum anderen um weitere Services erweitert werden kann.

Danach wird eine LoggerFactory erzeugt und zur Vereinfachung dieser Demo der ConsoleLogger registriert. Somit kann ab sofort auf die Konsole geloggt werden. Diese LoggerFactory wird auch als Service registriert, sodass jede Klasse der gehosteten Anwendung darauf via DI Zugriff bekommt und damit Logger erzeugen kann.

Im Anschluss wird die Methode Startup.ConfigureServices aufgerufen. Diese hat die Aufgabe, jene Services, die die gehostete Anwendung benötigt, zu registrieren. Zu diesem Zweck bekommt sie die ServiceCollection übergeben. Über den zweiten Parameter erhält sie den Logger. Bei der aktuellen Implementierung für das Hosting in IIS ist dieser zweite Parameter optional, d. H. es liegt am Entwickler, ob er der Funktion ConfigureServices diesen zweiten Parameter spendiert. Hier wird zur Vereinfachung davon ausgegangen, dass er einrichtet wurde.

Nach dem Aufruf von SonfigureServices liegt die konfigurierte ServiceCollection vor. Damit die davon beschriebenen Services abgerufen werden können, wird daraus mit BuildServiceProvider ein ServiceProvider erstellt.

// 3. Create Startup-Object and init Services
var startup = new Startup(env);

var services = HostingServices.Create(_serviceProvider);

var loggerFactory = new LoggerFactory();
loggerFactory.AddConsole();
services.AddInstance<ILoggerFactory>(loggerFactory);

startup.ConfigureServices(services, loggerFactory);

var serviceProvider = services.BuildServiceProvider();

Danach wird der ApplicationBuilder erzeugt. Er bekommt den ServiceProvider übergeben. Konfiguriert wird er durch die Methode Configure der Startup-Klasse, welche zusätzlich auch das aktuelle HostingEnvironment bekommt. Configure ist bekanntlichermaßen dafür verantwortlich, die gewünschten Middleware-Komponenten zu registrieren.

Danach erzeugt die Methode Build vom ApplicationBuilder das sogenannte requestDelegate. Das ist eine Methode, die die gesamte durch den ApplicationBuilder beschriebene Pipeline repräsentiert. HTTP-Anfragen können an diese Methode übergeben werden und werden von der Pipeline bearbeitet. Das Ergebnis dieses Unterfangens ist der Rückgabewert von requestDelegate.

// 4. Init Pipeline
var app = new ApplicationBuilder(serviceProvider);
startup.Configure(app, env);
var requestDelegate = app.Build();

Jetzt muss nur noch der Web-Server gestartet und jede an ihn gerichtete Anfrage durch die Pipeline gejagt werden. Das geschieht über die ServerFactory, welche den LibraryManager benötigt, um auf referenzierte Bibliotheken zugreifen zu können. Initialize erzeugt ein Objekt, dass den Server beschreibt. Dazu wird das Konfigurationsobjekt mit dem gewünschten Port übergeben.

Factory.Start startet den Server und nimmt neben dem Info-Objekt einen Lambda-Ausdruck entgegen. Dieser wird für jede empfangene Abfrage ausgeführt. Das übergebene Objekt vom Typ ServerRequest beschreibt dabei die HTTP-Anfrage. Da die Pipeline bzw. der requestDelegate die Anfrage als Instanz von FeatureCollection erwartet, verpacken die vier nächsten Zeilen das ServerRequest-Objekt in solch einer FeatureCollection-Instanz. Diese wird dann an das requestDelegate übergeben, welche die Anfrage abarbeitet und eine HTTP-Antwort retourniert. Diese liefert den Lambda-Ausdruck retour, sodass der Web-Server sie zum Aufrufer zurücksenden kann.

// 5. Start Server
 var factory = new ServerFactory(_libraryManager);
 var info = factory.Initialize(config);
 factory.Start(info, obj => {
     var request = obj as ServerRequest;

     FeatureCollection coll = new FeatureCollection();
     coll.Add(typeof(IHttpRequestFeature), request);
     coll.Add(typeof(IHttpResponseFeature), request);
     coll.Add(typeof(IHttpUpgradeFeature), request);

     var context = new DefaultHttpContext(coll);
     return requestDelegate(context);
 });

 Console.WriteLine("Started ...");
 Console.ReadLine();

Das gesamte Beispiel findet man unter [2].


[1] https://github.com/davidfowl/HostingOptions/blob/master/src/RawWeb/Program.cs

[2] https://www.dropbox.com/s/pdumci9psjp3csb/FlugDemo.zip?dl=0

Martin Richter: Advanced Developers Conference zu native C++ in München Erding vom 05.-06. Mai

Die Konferenz wird unter dem Thema Doing C++ The Right Way stehen. Bernd Marquardt wird als Content Manager mit für den Inhalt verantwortlich sein.

Da die Agenda noch nicht sehr voll ist, bin ich auf die endgültige Themenauswahl doch gespannt. C++11 ist ja fast schon ein alter Hut und Parallelisierung wird auch schon etwas langweilig. ;) Es stehen zumindest altbekannte Namen auf der Rednerliste.

Veranstalter ist die ppedv AG (hinter der Johannes Preishuber steht). Ich habe die Konferenzen der letzten Jahre, an denen ich teilgenommen habe, immer in guter Erinnerung. Sowohl in der Auswahl der Themen und Redner, als auch in der exzellenten Durchführung, mit immer sehr schon gewählten Konferenzorten und Hotels. Letztes Jahr hätten es ein paar mehr Leute sein können, aber das zeitgleiche Champions-League Spiel in München hat doch vielen einen Strich durch die Rechnung gemacht, weil es keine freien Hotelzimmer mehr gab.

Ich denke die Konferenz lohnt sich sicherlich.
Und ganz gespannt bin ich persönlich auf die Abendveranstaltung am Mittwoch, denn hier wird auf den ADC-Konferenzen den Teilnehmern immer etwas wirklich außergewöhnliches geboten und auch diesmal wird wieder zu etwas “Speziellem” eingeladen. Letztes Jahr das Essen in der Flugwerft Schleißheim war schon etwas besonderes.

Ich freue mich auch dieses Jahr wieder dabei sein zu können; alte Kontakte beleben zu können, neue Entwickler kennen zu lernen und Neues aus der C++ Welt zu hören.

ADC

 


Copyright © 2010 Martin Richter
Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.
(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)

Christian Binder [MS]: Open ALM: Lösungen mit TFS und VSO integrieren

Open ALM - Das Ziel ist, eine Plattform zu schaffen, welche über Industriestandards einfach erweiterbar ist und somit die Integration anderer Tools und Plattformen ermöglicht.

image

Zu diesem Zweck haben wir, Ulli Stirnweiß (Lead der .NET User Group Franken) und Karsten Kempe (MVP für Visual Studio ALM), das Thema REST API’s, OAuth 2.0 und Service Hooks mit VSO und TFS 2015 näher beleuchtet. Es gibt schon eine ganze Reihe von VSO Integrationen, die auf diesen Industriestandards aufsetzen - eine Übersicht gibt es hier. Unter folgendem Link findet Ihr ein Video zum Einstieg und Blog Posts zu den VSO REST API’s, OAuth 2.0 und Service Hooks.

Chris

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

friends header

bloggers headline

links header

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