Build 2015 – dag 2

Om Build keynote dag 1 i mångt och mycket handlade om att annonsera en mängd spännande nyheter, handlade keynote dag 2 mer om hur du kan använda teknikerna, med fler hands on kod-exempel i Visual Studio som visade hur man faktiskt bygger Universal Platform-appar.

Men vi fick också veta att nu finns det som hintades om i gårdagens Holo Lens demo med en Raspberry Pi tillgängligt: Windows 10 IoT Core. Goda nyheter för oss som har väntat på att få köra Windows på Raspberry 2 eller Arduino.

En annan sak som överraskade positivt var att Microsoft nu satsar hårdare på media och audio-API:er för Windows. Kul också att det svenska företaget Propellerhead lyftes fram som exempel på keynoten.

Andra nyheter som presenterades var Vorlon för att fjärrdebugga javascript, Project Oxford som tillhandahåller REST-api:er från Microsoft Research för ansiktsigenkänning, taligennkänning, bildanalys och språkförståelse samt GitHub Enterprise for Azure.

how-old.net

how-old.net

En rolig demosajt som heter how-old.net har gjorts tillgänglig för att visa på styrkan i dessa API:er samt Azure Stream Analytics. Den drog klädsamt av 7 år på min ålder när jag testade den :-)

En stor del av keynoten handlade också om Internet of Things och Machine Learning, illustrerat med uppkopplade kossor. En Microsoft-chef som jag inte sett tidigare, Joseph Sirosh,  höll i denna del – och han var helt briljant talare. Du kan se en tidigare inspelning av samma föredrag här.

Inte lika många kioskvältare på dag 2:s keynote, utan mer praktiskt hands on demonstrationer, men ändå med tillräckligt mycket nyheter insprängda för att hålla igång känslan av ett Microsoft som nu ligger långt ovanför konkurrenter vad gäller innovationshöjd.

 

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.

TechX Azure – Introduktion till Azure SQL Database

Idag hade jag förmånen att få medverka på Microsofts Azure TechX-konferens. Konferensen var fullsatt med över 250 deltagare som tagit sig till Microsofts kontor utanför Kista för att få ta del av tre parallella spår under två dagar fullspäckade med intressanta dragningar. Kul!

Den mest spännande dragningen jag själv gick på tyckte jag var Robert Lucianis föredrag om Machine Learning. Grymt intressant, inte bara ur ett specifikt teknikperspektiv, utan om något som kommer omvälva hela vår arbetsmarknad – i takt med att smarta maskiner kommer ta över mer och mer av vad vi gör idag. Tyvärr så spelade inte just den sessionen in, men du kan se en intro film om ML i Azure på Channel9 här.

Precis som på TechDays hade vi även med oss vårt IoT-robotprojekt, med uppkopplade legorobotar, vågar och “Candy Push”-godistävling: TechXRobot

Introduktion till Azure SQL Database

Min egen session handlade om Azure SQL Databases. Powerpoint-bilderna som jag visade finns här: Introduktion till Azure SQL Database.pptx.

I presentationen nämnde jag en viktig aspekt: nämligen vad som INTE stöds i Azure SQL Database idag. Här finns Microsofts dokumentation kring vad som inte stöds i Azure SQL Database idag.

De demos jag gjorde av SQL Management Studio var gjorda med Management Studio 2014 samt en uppdatering som gör det möjligt att bland annat högerklicka och välja “Edit Top 200 rows” och “Design” precis som du är van vid från lokala SQL-databaser. En bra genomgång av vad som är nytt i Azure SQL Databases med den nya v12-versionen (som alltså motsvarar SQL Server 2014) finns här.

För att undersöka resursutnyttjandet jämfört med de “DTU”:er, Database Throughput Unit – som du har tillgång till i en viss version av Azure SQL Database så körde jag följande script (finns tillgängligt på MSDN här):

-- dm_db_resource_stats

SELECT
AVG(avg_cpu_percent) AS 'Average CPU Utilization In Percent',
MAX(avg_cpu_percent) AS 'Maximum CPU Utilization In Percent',
AVG(avg_data_io_percent) AS 'Average Data IO In Percent',
MAX(avg_data_io_percent) AS 'Maximum Data IO In Percent',
AVG(avg_log_write_percent) AS 'Average Log Write Utilization In Percent',
MAX(avg_log_write_percent) AS 'Maximum Log Write Utilization In Percent',
AVG(avg_memory_usage_percent) AS 'Average Memory Usage In Percent',
MAX(avg_memory_usage_percent) AS 'Maximum Memory Usage In Percent'
FROM sys.dm_db_resource_stats;

Följande SQL-script är intressant om du vill undersöka en äldre “Web”- eller “Business”-version av Azure SQL Database för att se vad den motsvarar i den nya modellen:


-- DTU mapping, kan bara köras i gamla Web/Business Master db
WITH DTU_mapping AS
( SELECT *
FROM ( VALUES (1, 10,'Basic'), (2, 20,'S0'), (3, 40,'S1'), (4, 100, 'S2')
, (5, 200, 'P1'), (6, 400,'P2'), (7, 1600, 'P3')
) AS t(id, percent_of_S2, target_edition)
), rc as
( SELECT start_time, end_time
, (SELECT Max(v)
FROM (VALUES (avg_cpu_percent)
, (avg_physical_data_read_percent)
, (avg_log_write_percent)
) AS value(v)) as [avg_DTU_percent]
FROM sys.resource_stats
WHERE database_name = 'NamnPåDinDB'
)
SELECT rc.*
, (SELECT TOP(1) t.target_edition
FROM DTU_mapping AS t
WHERE t.percent_of_S2 > CAST(1.2*rc.avg_DTU_percent as int)
ORDER BY t.percent_of_S2) as target_edition
FROM rc;

En utförlig artikel om hur du ska dimensionera Web och Business-version finns här.

Slutligen så visade jag en demo av Elastic Scale som hjälper dig att skala ut Azure SQL Databases på flera instanser. Den demo jag visade på utskalning av Azure SQL Dataabases finns här.

Microsoft släpper IaaS-tjänsten ‘Windows Azure Infrastructure Services’

Idag annonserades att den hett efterlängtade IaaS-tjänsten i Windows Azure – som nu fått namnet ‘Windows Azure Infrastructure Services’ – har nått det man kallar för ‘General Availability’ – det vill säga att tjänsten nu är definitivt lanserad och supporteras brett mot alla kunder.

Microsoft har nu realiserat visionen om det dynamiska datacentret – där kunder kan skapa och köra virtuella maskiner lokalt, för att sedan enkelt flytta dessa till molnet och tillbaka vid behov.

Det här kommer naturligtvis ge många nya möjligheter för Microsoft-teknikinriktade företag och organisationer som vill bygga nya tjänster med befintliga produkter, flytta redan existerande lösningar till molnet eller skapa hybridlösningar där delar av lösningen utnyttjar fördelarna med Windows Azure.

Men målgruppen för Windows Azure Infrastructure Services är bredare än så. Bland de färdigpreppade virtuella maskiner som finns att tillgå i tjänsten finns också ett antal färdiga Linux-distributioner. Microsoft har ambitionen att ta en rejäl del av marknaden för att köra även Linux-baserade system i molnet.

Det har under en längre tid pågått en märkbar prispress mellan Microsoft och Amazon. I samband med det här släppet passar Microsoft också på att annonsera prissänkningar – både på virtuella maskiner och plattformstjänster med 21 – 33%. Detta förutsatt att du bokar upp dig för 6 eller 12 månaders användning av tjänsterna.

I samband med detta annonserades också två nya intressanta storlekar på virtuella maskiner: en med 28 GB minne och 4 cores processor och en med hela 56 GB minne och 8 cores processor – för de större, minnesslukande och mer krävande applikationer.

Windows Azure blir nu en mycket stark utmanare till Amazon AWS även på IaaS-området, ett område där Amazon tidigare har varit starkt dominerande. Något som talar för Microsoft är möjligheten att få all support samlad hos en och samma leverantör – oavsett om det gäller applikationsplattformen – Sharepoint, BizTalk, SQL Server – eller det underliggande operativsystemet eller själva driften av dessa. När du utnyttjar Windows Azure Infrastructure Services för att köra Microsoft-produkter kommer du kunna vända dig till en och samma leverantör, något som naturligtvis är högintressant för många kunder som vill konsolidera sina miljöer och ensa bland sina leverantörer.

Läs mer på Windows Azure-teamets blogg: http://blogs.msdn.com/b/windowsazure/archive/2013/04/16/the-power-of-and.aspx

Category: azure

Visual Studio 2012 och bakåtkompatibilitet med äldre projekt

En av nyheterna i Visual Studio 2012 är möjligheten till s.k. ‘Project Round Tripping’ – d.v.s. du ska kunna skapa ett projekt i VS 2010 SP1 och sedan öppna det i VS 2012, editera och spara dina ändringar och sedan öppna upp det igen i VS 2010 SP1 utan problem.

Så – life is all good och dina projektmedlemmar kan välja mellan använda VS 2012 eller VS 2010 SP1 helt utan några problem?

Nja… Många projekttyper stöds inte alls av VS 2012 – t.ex. MSI setup-projekt och BizTalk 2010 R2. Andra kräver ändringar och kan sedan fungera med Round Tripping medan vissa kräver en upgrade som gör att de inte går att använda i tidigare versioner. Här finns listan över projekt och kompatibilitet för VS 2012 (RC).

Så – viss försiktighet är att rekommendera, men för de enklare fallen så fungerar det alltså att projektmedlemmar använder VS 2010 SP1 och VS 2012 om vart annat.

Vad gäller sida-vid-sida installation av VS 2012 med VS 2010 så har jag själv inte upplevt några problem med RC-versionen, men har sett på Stackoverflow och andra ställen att flera haft problem både med tidigare betan och RC:n. En del av problemen beror på att .NET 4.5 är en s.k. Inplace upgrade, vilket gör att den inför buggfixar och ändringar i beteendet för CLR och BCL (även för 4.0!). Förhoppningsvis problemen minimerade i och med releasen av VS 2012/.NET 4.5.

Scott Hanselman har skrivit en post om versioneringen av .NET 4.5 – kommentarerna som innehåller mycket av problemställningarna är extra intressanta.

Här finns mer info kring MS tankar med ‘Project Round Tripping':

http://blogs.msdn.com/b/visualstudio/archive/2012/03/28/round-tripping-with-visual-studio-11.aspx

http://blogs.msdn.com/b/zainnab/archive/2012/06/05/visual-studio-2012-compatibility-aka-project-round-tripping.aspx

Category: Visual Studio 2012

Windows Azure Web Sites

Web Site Gallery

I och med de stora annonseringar som gjordes av Microsoft den 7 juni kring Windows Azure släpptes också en förhandstitt av den nya ”Web Sites”-funktionaliteten.

Web Sites ger möjlighet att extremt snabbt komma igång med publika websiter genom några enkla steg. Först måste du anmäla ditt intresse att vara med i förhandstitten och koppla den till ett befintligt konto i Windows Azure.

När det är gjort får du också tillgång till den nya portalen i Windows Azure – en mycket trivsam komplett omskrivning av portalen, där man skippat Silverlight och gått helt på HTML-spåret för total plattforms-interoperabilitet (*donk* – ytterligare en spik i kistan för SL som RIA-teknik…).

När du har tillgång till förhandstitten kan du enkelt skapa nya Web Site:s genom portalen; antingen helt tomma siter eller genom att välja någon av de färdiga mallar med allt från ramverk för e-handel -som Drupal Commerce – till bloggplattformar som t.ex. WordPress – som finns tillgängliga i ”Web Gallery”:

Väljer du en färdig plattform eller ramverk som behöver en databas kommer den skapas tillsammans med Siten som en s.k. ”Linked resource” som också är ett nytt begrepp. Linked resources gör det enklare att hantera Sites och tjänster, databaser samt (snart) Storage tillsammans i Windows Azure.

Om du skapar en helt tom site kan du även välja att skapa en databas tillsammans med den, antingen en SQL Server eller MySQL-instans.

Nu kommer det riktigt trevliga: när du skapat din site kan du antingen öppna den direkt i WebMatrix eller ladda hem en publiceringsprofil som du kan importera i Visual Studio. Publiceringsprofilen gör det möjligt att använda Web Deploy för att publicera din site – det går på några sekunder och du slipper vänta på att en instans ska startas i Azure, något som brukar ta allt från ett par minuter till en kvart.

Din site kommer sedan att köras i en miljö (IIS) som delas av andra kunder. Därför är Web Sites inte något för lösningar som från första stund har höga krav på garanterad prestanda. Å andra sidan ger Microsoft dig möjlighet att sätta upp tio stycken Web Sites helt kostnadsfritt under ett år.

Shared vs Reserved

Du kan dessutom när som helst gå över till reserverad kapacitet vid behov. Det gör Web Sites till ett perfekt insteg när du t.ex. vill testa en tjänst och kunna skala ut först om och när den blir populär. Åtminstone i dagsläget kommer dock alla Web Sites i en och samma region att uppgraderas till reserverad kapacitet, ifall du väljer att göra det.

Här kan du läsa om priserna när du går från delad till dedikerad server.

Du kan anmäl dig för att testa Windows Azure Web Sites här.

Category: azure

Presentation och demokod från DevSum

Developer Summit som gick av stapeln förra veckan var verkligen en lyckad konferens med väldigt många fantastiska sessioner, inte minst keynoten dag två från Aral Balkan som talade om vikten av att designa för människor och att skapa förutsättningar för bättre användarupplevelser. Otroligt inspirerande!

Själv höll jag en session om ASP.NET Web API – här finns bilderna jag visade.

De demonstrationer jag visade med ASP.NET Web API finns här.

Category: Konferenser, devsum

Windows Azure-seminarier i Örebro och Linköping den 5/6

Den 5 juni håller jag två seminarier om Windows Azure i SweNugs regi:

Det första seminariet är ett frukostseminarie i Örebro och innebär en djupdykning i Windows Azure-plattformen – där jag bland annat kommer gå igenom Worker Roles och Azure Service Bus samt hur du migrerar befintliga system till Windows Azure. e-man står för lokal och en lättare frukost, föreläsningen drar igång vid 8.30 men dörrarna öppnar 08.00.

Vart: Nikolaigatan 3, Örebro
När: 08.00-11.00 den 5:e Juni
Anmäl dig här.

Det andra seminariet är ett kvällsseminarie i Linköping och innehåller en introduktion till Windows Azure-plattformen, där jag kommer gå igenom grunderna i plattformen, demonstrera vilka tjänster som finns och hur du kan skapa en webbaserad applikation som körs i Windows Azure. Seminariet börjar kl 18.00 och Sigma står för lokal och något att äta.

Vart: Teknikringen 10, Linköping
När: 18.00-20.00 den 5:e Juni
Anmäl dig här.

Category: azure, seminarie