Build 2015 – dag 1

I den inledande keynoten på Build 2015 så märktes tydligt hur viktig Azure-plattformen har blivit för Microsoft. Efter en kortare inledning av Microsofts VD Satya Nadella fick moln-chefen och utvecklar-idolen Scott Guthrie ta över scenen. Han inledde med några intressanta och imponerande fakta – bland annat:

  • Det finns nu över en miljon servrar i Azure-klustret
  • 1,4 miljoner SQL Databases körs i Azure
  • 425 miljoner användare finns registrerade i Azure Active Directory

Därefter var det dags för att visa och demonstrera applikationsbehållar-tekniken Docker i Azure med Dockers VD och Azure CTO:n Mark Russinovich. Docker, som nu också går att köra i Windows, kommer att få stor betydelse för distribuering och skalning av lösningar i Azure framåt.

Sedan klev utvecklar-idol och Scott nummer 2 upp på scenen: Scott Hanselman. Hanselman körde en demo av Azure App Service och visade en ny Android emulator i Visual Studio.

Men den riktigt stora skrällen var när han demonstrerade ett helt nytt IDE som går att köra både i Linux, Mac och Windows: Visual Studio Code. Programmet i sig är en Node.js-applikation skriven i TypeScript/JavaScript. Eftersom Microsoft själva använder själva Visual Studio Code för att utveckla Visual Studio Code så lämpar den sig utmärkt för just Node.js-utveckling (men är inte begränsad till det).

Därefter ägnade han en stund åt ett gäng spännande nyheter för Azure SQL Databases och data-plattformen i stort:

  • SQL Data Warehouse – data warehouse som en tjänst
  • Transparent Data Encryption för att förenkla kryptering av data i Azure SQL Databases
  • Fulltext-sök i Azure SQL Databases. När det gäller sök tycker jag man först och främst ska kolla på Azure Search som alternativ, men för legacy-system kan det vara intressant.
  • Azure Data Lake för att lagra och arbeta med stora mängder ostrukturerad data.
  • SQL Database elastic pool. Det här är en riktigt intressant funktion för de scenarion där man hanterar en databas per kund/avdelning/område och behöver kunna dimensionera dessa utifrån varierande användningsgrad. Med elastic pool kan du säga att du vill ha en resurspool med en viss nivå av garanterad prestanda och de ingående databaserna delar på denna prestanda.

Hanselman lämnade sedan scenen och det var dags för en kortare demo av några nyheter i Office bl.a. kring SAP-integration.

Sedan var det dags för det som många hade väntat på: nyheterna för utvecklare i Windows 10.

Terry Myerson berättade om den gemensamma Windows Store som kommer finnas för alla versioner av Windows oavsett vilken device det körs på samt Windows Store for Business för att möjligöra publicering av interna företags-appar.

Därefter om de fyra olika sätten som du kan utveckla Universal Windows Apps på – appar som kommer kunna köras i Windows, Windows Phone och kommande versioner av Windows:

  1. Webb-sajter. Kapsla in din webb-sajt och kör som en app.
  2. Win32 and .NET. Det blir nu möjligt att använda dina befintliga Win och .NET-kunskaper även för Store-appar.
  3. Java och C++ från Android-appar. Windows Phone får möjighet att exekvera kod från Android-appar. Fortfarande rätt oklart exakt vilka begränsningarna blir för detta, men förmodligen så finns det ett antal specifika API:er som inte är direkt portabla,
  4. Objective-C för iOS. Genom ett verktyg kan du porta ett Objective-C-projekt till en Visual Studio-solution som sedan kompileras och kan köras i Windows Phone. Även här råder viss oklarhet exakt vilka begränsningarna kommer att vara.

Efter det tog Joe Belfiore över scenen. Han är en av mina favorit-presentatörer vad gäller Windows-delarna från Microsoft, kör alltid med en avslappnat skön stil, utan att vara insäljande.

Den liten skräll för en tid sedan var att Internet Explorer kommer upphöra som varumärke – nu annonserades vad namnet på webbläsaren i Windows 10 kommer att bli: Microsoft Edge.

Joe snackade lite med Cortana, visade lite av det nya Windows 10-gränssnittet och annonserade den nya imponerande ‘Continuum for phones’-funktionen som betyder att du kan köra ut program från telefonen på en stor skärm, koppla in tangentbord & mus och arbeta med dem som om du hade en dator.

Holo Lens Demo

Holo Lens Demo

Därefter avslutades keynoten med några fullkomligt lysande demos av Microsoft Holo Lens, vilket fick en fullkomlig våg av ha-begär skölja genom publiken – otroligt cool teknik med massvis med intressanta tillämpningar.

Det ska bli mycket intressant att se vad keynote dag 2 på Build har att bjuda på, jag misstänker att Microsoft kan ha ytterligare några äss i rockärmen att förvåna folk med.

Internet of things: Lego-robotar, Azure och Raspberry Pi

Active Solution där jag arbetar är ett väldigt kunskapsintensivt företag. Det vi gör är ju att erbjuda vår kompetens och långa erfarenhet till våra kunder för att hjälpa dem skapa lösningar. Då vill det till att vi håller våra verktyg vässade, hela tiden är på tårna och lär oss mer om ny teknik, nya metoder och förbättrar processer.

Under förra året beslutade vi oss därför för att satsa på något lite annorlunda vad gäller kompetensutveckling. Vi valde att skapa ett antal forsknings- och utvecklingsprojekt, för att tillsammans arbeta med saker som kanske ligger lite utanför det vi gör i vanliga kundprojekt. Hela tiden med målet att dela med oss av våra lärdomar och att arbeta tillsammans med nya roliga tekniker och metoder.

Det här resulterade i flera intressanta projekt med spännande resultat, bl.a. en Team Dashboard som en Chrome Cast-applikation med uppdateringar från Visual Studio Online som kan berätta när du tagit sönder bygget (självklart med Javascript-baserad talsyntes :-) samt att vi blev det första företaget i Sverige som migrerade en EPiServer site i produktion till Azure Web Sites. Det har varit grymt kul, inspirerande och lärorikt att ta del av de olika projekten under våra gemensamma luncher där de olika teamen fått berätta om sina lösningar i “lightning talk”-stil.

LegoMindstormsRobot

Ett av projekten har gått ut på att koppla ihop Lego Mindstorms-robotar med Raspberry Pi-datorer och kontrollera dessa över Internet via Azure.
Kring det här har vi även byggt ett spel som vi har tagit med oss på ett antal konferenser, TechDays, TechX och nu senast den fantastiskt trivsamma Swetugg-konferensen. Vi har fått väldigt många förfrågningar om vi inte kan lägga upp en beskrivning av hur vi integrerat robotarna med Raspberry Pi och hur vi styr dem, så här kommer en beskrivning av lösningen.
All kod som körs i robotarna finns tillgänglig på GitHub.
Själva robotarna består av tre delar:
1. Lego Mindstorms. Delar ihopbyggda från Legos EV3-modell av Mindstorms, i vår egen-patenterade proffsiga Robot-design.
2. Raspberry Pi B med Wifi-dongel. Wifi-donglarna har vi märkt är i lite varierande kvalitet och funkar olika bra med Raspberry Pi. Asus Wifi-donglar har vi märkt fungerar bra med Raspberry Pi B.
3. BrickPi. BrickPi är ett specialbyggt kort för att styra Lego-robotens motorer och läsa av sensorer via en Raspberry Pi. Går att beställa från Robotshopen.se http://www.robotshopen.se/se/art/brickpi-starter-bundle.php
Styrningen av Robotarna sker via en vanlig webbsida som körs i en Azure Web Site. Via Ajax-anrop så skickas meddelanden ut via en SignalR hub. http://signalr.net/
I Raspberry Pi:n kör vi sedan en Node.Js-server som använder ett SignalR-paket för att koppla upp sig via webbsockets mot Azure-siten. När ett meddelande tas emot via SignalR så använder vi ett färdigt C-bibliotek från BrickPi för att kommunicera styrmeddelanden till motorerna.
Här finns en film som beskriver lösningen:

Vi använder även Microsofts Azure SDK för Node.js för att kontinuerligt skicka ”heatbeat”-meddelanden till Azure ServiceBus – för att kontrollera att robotarna lever och är igång.
Från början trodde vi att styrningen av robotarna också skulle kunna hanteras genom att skicka meddelanden via Azure ServiceBus. Det visade sig dock att fördröjningen blev alldeles för lång när vi gjorde så. Det beror inte på ServiceBus:en i sig (den har en fördröjning som mäts i millisekunder) utan berodde på implementationen i Node.js-paketet. I många fall kan man ju leva med en fördröjning på ett par sekunder, men det funkade dåligt för att styra robotar…

Runt vårt Robot-scenario så byggde vi också ett spel: CandyPush. Det går ut på att låta två robotar tävla mot varandra för att putta ner så mycket godis i två hål i en spelplan som möjligt under tidsbegränsning. Sedan har vi två USB-kopplade vågar under spelplanen som mäter hur mycket godis som puttats i. Vågarnas resultat skickas upp i Azure Storage för att avgöra resultatet.

CandyPush in action!

För att prata med vågen används Hid Library, ett generellt bibliotek för kommunikation med USB-enheter. Kod och info finns på github, github.com/mikeobrien/HidLibrary; NuGet-paket under namnet Hid Library.
Enhetens identitet utgörs av tillverkarens Vendor ID samt modellens Product ID. Förutom dessa måste man känna till formen på data som levereras från enheten. I övrigt är kommunikationen enkel.
I nedanstående demokod scannar vi efter anslutna enheter som matchar vågens identitet. Vi initierar kommunikationen och anropar ReadReport med en callback som anropas då vågen har ett värde att rapportera (vilket sker ca 2 ggr per sekund). I call back-metoden ReadHandler kan aktuellt mätvärde läsas ut.

public class Program
{
    private static HidDevice device;

    private static void Main(string[] args)
    {
        ConnectScale();
        Console.ReadLine();
    }

    private static void ConnectScale()
    {
        const int DymoVendorId = 0x0922;
        int[] M5ProductIds = { 0x8005 };

        device = HidDevices.Enumerate(DymoVendorId, M5ProductIds).First();
        // We assume at least one connected scales.

        device.OpenDevice();
        device.ReadReport(ReadHandler);
    }

    private static void ReadHandler(HidReport report)
    {
        if (report.ReadStatus == HidDeviceData.ReadStatus.Success)
        {
// Byte 4-5 contains current scales reading
            var weight = BitConverter.ToUInt16(report.Data, 3);
Debug.WriteLine("Vikt: {0} g", weight);
        }

        device.ReadReport(ReadHandler); // Poll again 
    }
}

Här hittar du koden för att integrera Lego-robotarna med Azure.

Presentation från DevSum14 – Azure Web Sites IRL

Idag talade jag på den som alltid mycket trivsamma konferensen Developer Summit. Min presentation handlade om Windows Azure Web Sites utifrån tre olika kundprojekt vi har arbetat med på Active Solution.

Bilderna från min presentation finns här.

Det demoprojekt som jag visade finns här.

Tack Cornerstone för ännu en lyckad DevSum-konferens!