Je Monoliet naar Services Ombouwen

In het SDN-magazine zie je veel auteurs vertellen over microservices, maar ook op onze SDN-events of andere conferenties zijn er veel sessies over. Ze vertellen dan altijd dat het belangrijk is om naar microservices over te stappen, want daarmee wordt het leven een stuk eenvoudiger. De voorbeelden die ze geven zijn dat altijd de standaardvoorbeelden van een product-order systeem of ze komen met voorbeelden vanuit een greenfield situatie. De presentaties gaan bijna altijd uit van het niet aanwezig zijn van legacy code of legacy systemen. Maar onze werkelijkheid is vaak veel weerbarstiger.

Veel bedrijven hebben een monoliet en een monoliet is niet iets waar je voor hoeft te schamen. Er zijn maar weinig omgevingen waar niet een vorm van monolithische code of omgeving is ontstaan. Zelfs bij startups begint het altijd met een redelijk puristische manier van ontwikkelen, maar na enkele weken/maanden wint de tijdsdruk van de schoonheid en raakt de software langzaamaan vervuild. Op zichzelf hoeft dat ook helemaal niet erg te zijn. Mits je tijdig refactor-slagen uitvoert en bij iedere volgende aanpassing/verbetering/bugfix je code weer beter achterlaat (incheckt) dan dat je hem gevonden hebt: de Boyscout rule, laat het kampeerterrein schoon achter voor de volgende gebruiker en liefs nog iets schoner. Ook hier voer je dus verbeteringen uit stapje voor stapje, hapje voor hapje. Ik ben een groot voorstander van “Make-it-work-then-make-it-better-then-make-it-pretty”.

“Make it work then make it better then make it pretty”

Want hoe migreer je vanuit een bestaande omgeving naar een service georiënteerde omgeving of microservices. Het antwoord is heel simpel zoals je ook een olifant eet, hapje voor hapje. “Haha wat leuk, neem je ons niet serieus of zo?”. Jazeker wel en ik zal jullie uitleggen hoe ik dat bedoel.

Monoliet naar Services

Door de conferenties en artikelen (waar Microservice behoorlijk gehypet worden) hebben veel bedrijven de wens om over te stappen naar een service georienteerde architectuur en bij voorkeur naar een Microservices architectuur. Maar natuurlijk moet de winkel wel open blijven en dat betekent dat support en bigfixes wel gewoon moeten door blijven gaan. Tenslotte betalen de huidige klanten de rekeningen en organisaties hebben niet de mogelijkheid om voor een paar maanden of soms jaren onder een steen te kruipen om orde op zaken te stellen. Natuurlijk kan dat niet, tenslotte zijn klanten de reden waarom het bedrijf bestaat en zij betalen niet voor een product dat niet verbetert, wordt onderhouden en gewoon stilstaat. Ander risico is dat er een andere partij opstaat en jouw plekje inneemt.

Ik denk ook niet dat je dicht hoeft om tijdens het rijden een wiel te verwisselen. Alleen moet je dan als bedrijf wel een behoorlijke tijd uittrekken om te migreren. Je zult dat wel dubbel onderhoud en dubbele code moeten accepteren. Wat vaak in jaren is opgebouwd, is niet in een paar weken terug te draaien. En doordat je niet alles vanaf de grond opnieuw bouwt, zul je meerdere refactor slagen moeten maken en Projects/files/classes/code meerdere malen zult aanpassen. Het is pas af als jullie puntje op de horizon gehaald is.

Ja, dat is niet exclusief voor Service Oriëntatie! Klopt, want het begint bij het ontrafelen van de kluwen van code en zorgen dat alle onbedoelde maar ingeslopen afhankelijkheden weer ongedaan gemaakt worden. Pas als je de basis op orde hebt, dan kun je de stap voorwaarts maken en nieuwe dingen toevoegen. Ook microservices (hoe hip ook) zijn niet perse nodig. Wel wil je dat verantwoordelijkheden goed verdeeld zijn over de verschillende servers, computer systemen of code.

Eerst moeten we voor ons zelf bepalen, wat de reden is om te migreren naar Service Oriëntatie. Wat zijn de huidige uitdagingen met je applicatie, platform of service? Is het dat het testen niet meer te doen is? Of dat het aanpassen van code op de ene plek betekent dat er op een andere plek code / functionaliteit omvalt? Er te veel afhankelijkheden tussen verschillende onderdelen bestaan? Of dat het deployen een probleem is geworden en gewoon te lang duurt? Of wil de organisatie van het ASP (Application Serivice Provider) model af en omvormen naar overstappen naar een SAAS (Software As A Service) model? Is de applicatie, service of platform eigenlijk niet geschikt voor multi users omgeving? Of is je oplossing niet of nauwlijks in staat op te schalen bij meer gebruik? Is in het algemeen reageren op gewijzigde wensen van je klanten gewoon lastig, omdat er te vlug andere functionaliteit omvalt.

Belangrijk is, dat de reden niet moet zijn omdat iedereen het doet of dat services of erger microservices zo belangrijk lijken in de business. Op zichtzelf hoeft er niks mis te zijn aan een monoliet. Er moeten andere redenen zijn om aan te passen. Ik heb liever een goede monoliet dan een slecht uitgevoerde Service Oriëntatie. Technology is een middel en moet nooit een doel op zichzelf zijn.

Technology is een middel en niet een doel

De formele beschrijving van een Service Orientation Architecture service: “A SOA service is a discrete unit of functionality that can be accessed remotely and acted upon and updated independently, such as retrieving a credit card statement online. SOA is also intended to be independent of vendors, products and technologies.”. Microservices zijn opzichzelf niet heel anders, maar waar we de definitie van een op zichzelf staande eenheid van functionaliteit wel iets strakker wordt neergezet. In een minder goed uitgevoerde Service Oriëntatie omgevingen zijn de services vaak te klein, waardoor de services elkaar aanroepen en eigenlijk niet meer los van elkaar gebruikt worden. Dat resulteert meestal in een Chatty systeem, waarbij services elkaar herhaaldelijk aanroepen en allesbehalve onafhankelijk van elkaar zijn. Iedere aanroep van een service levert weer vertraging op en als het een losse service is. Soms zijn de services dan ook nog eens zo gebouwd, dat ze niet verwachten dat de aanroepende service stuk of niet aanwezig is. En dat gebeurt juist als het zo losgekoppeld is. Waarmee de “updated independently” uit de definitie eigenlijk niet meer kan, andere services rekenen op elkaar en feitelijk heb je dan een monoliet in stukjes.

Belangrijkste in de definitie is volgens mij ook op zichzelf staande functionaliteit. Er staat nergens hoe groot de “op zichzelf staande functionaliteit” moet zijn. Wat er wel staat, alles wat de service nodig heeft om volledig autonoom te kunnen werken onafhankelijk van de rest van de systemen. Even heel gechargeerd, een monoliet is in deze beschrijving dus ook een goede service. Een monoliet herbergt misschien te veel verschillende functionaliteiten. Zoals een ordersysteem, een productsysteem, een klantsysteem etc. Ik schrijf expliciet systeem om aan te geven dat het losse onderdelen moeten zijn. Maar het ordersysteem heeft informatie nodig van de producten en de klanten! Ja, dat klopt, maar het ordersysteem zal niet het adres van de klant updaten in de database. Ieder systeem heeft zijn eigen verantwoordelijkheden. Het ordersysteem gebruikt de data van het klantsysteem. Verandert het adres in het ordersysteem? Dan maakt het ordersysteem een werkbon voor het klantsysteem om dit aan te passen. Voor hier gaat het te ver om hier dieper op in te gaan, lees het artikel van Dennis van der Stelt uit ons vorige magazine eens over het Starbucks model. Vuistregel is, maak je functionaliteit niet te klein en let goed op welke verantwoordelijkheden de functionaliteit heeft. Services zijn ook een middel en niet een doel. Keep it simple, maar om met Einstein te spreken; maak het niet simpeler dan dat.

Terug naar ons initiële probleem. We zien de monoliet als een samengeklonterde functionaliteit, maar feitelijk bestaat deze toch ook uit losse stukken en op zichzelf staande functionaliteit. Echter de functionaliteit is alleen te veel op de achtergrond geraakt door gebruik van technology. Vaak zijn databases te ver uitgenormaliseerd (8st normaalvorm) of is object Oriëntatie te strict doorgevoerd. Heel vaak is door technologische overload de functionaliteit teveel door elkaar heen gaan lopen. De technologie geeft de mogelijkheid en de druk om snel nieuwe functionaliteit er uit te sturen neemt dat ook toe.

Maar als je het goed doet, dan kun je het best weer naar zijn oorsprong ontrafelen. Je zult dan strict bezig moeten zijn met de functionaliteit en de technologie weer een middel laten zijn.

Maak een vertical slice van je functionaliteit

Laagjes zoals in een taart

De volgende stappen kunnen dan gedaan worden. Bepaal een stuk functionalitieit dat op zichzelf staat of had moeten staan. Beschrijf het dan van de user interface tot aan de kern (de dataopslag of de servicebus of wat ook het eindpunt is). En zodra je een afhankelijkheid spot, bedenk dan steeds of deze afhankelijkheid noodzakelijk is en of er andere oplossingen zijn. Als er geen eindpunt is, dan is er misschien een uitdaging met de functionaliteit zelf. Poplulair gezegd maak een verticale doorsnede (vertical slice) van je applicatie. Zie het als de taart met die vele gekleurde laagjes, beschrijf alles van dat ene stuk uitgesneden staart en alleen wat bij dat stuk hoort. Bouw dan dat stuk opnieuw en hergebruik zo min mogelijk eerdere code. Anders word je te vlug weer in de rabbithole getrokken. Bereid je voor op het herhaaldelijk refactoren van de code. Er lijkt geen einde aan te komen, maar uiteindelijk zal het beter worden.

Vertical Slices

Deze strategie maakt het ook mogelijk om de oude flow van de functionaliteit nog beschikbaar te houden en de nieuwe er echt los van te laten. Uiteindelijk is dat ook je doel in Service Oriëntatie. Als je dan volledig tevreden bent met de nieuwe implementatie, dan zet je de wissel om.

Soms kan de aanpassing ook aan de buitenkant gemaakt worden, waardoor bepaalde werkvoorraad niet eens je platform/applicatie of omgeving bereikt. Controle aan de deur. Beschrijf deze functionaliteit zo onafhankelijk mogelijk en als je of het team de behoefte voelt om andere functionaliteit toe te voegen of samen te voegen, stel dan de waarom vraag zo vaak mogelijk. Als je dan nog steeds niet zonder kunt, dan moet je het samenvoegen niet laten.

Maar iedere andere wijziging verstoort het proces. Dus probeer niet gelijk ook volledig nieuwe functionaliteit toe te voegen of bestaande functionaliteit volledig te veranderen. Niet omdat het niet zou kunnen, maar als we technologie of functionaliteit wijzigingen gaan doorvoeren dan worden we afgeleid en wij mensen kunnen helaas niet teveel multitasken. Het onafhankelijk en losgeweken van het stukje functionaliteit is al moeilijk genoeg. Daarom moet je de eenheid ook zo klein mogelijk maken. Dat voorkomt dat de rest van de applicatie/omgeving op slot zit voor aanpassingen of wijzigingen.

Het is te doen, maar je zult wel heel gericht door moeten gaan en je niet laten afleiden. En als je eenmaal begonnen ben, dan kun je eigenlijk niet meer stoppen. Meer dan eens zullen verschillende stukken software door je handen gaan en meer dan eens zal je code aanpassen om deze later weer ongedaan te maken. Dat geeft niet, je doel is op zichzelf staande stukken software/services. Niets is onmogelijk. Maar laat technologie niet de reden zijn! En blijf refactoren.

Macbook Pro Touchbar

Vol verwachting zat iedere Apple Fan te wachten op de nieuwe versie van de Macbook Pro. De verwachtingen waren groot, er werd veel verwacht van de opvolger. De laatste vernieuwingen aan de Macbooks waren alweer een tijdje geleden. Groot was de teleurstelling tijdens de grote Macbook Pro aankondiging van Apple. De innovaties waren niet zo groot als iedereen had gehoopt. Naast de aanwezigheid van 2-4 USB-C / Lightning connectors valt alleen de Touchbar nog op. Dit touch gevoelig schermpje zit op de plaats waar de functie toetsen ooit zaten. De locatie betekent dan ook dat de fysieke functie toetsen niet meer bestaan en dat betekent inclusief een niet meer fysieke Escape toets. Microsoft fans hadden minstens verwacht dat er nu eindelijk een touchscherm toegevoegd zou worden. Zoals verwacht kon de touchbar dus op veel hoongelach verwachten.

Ik heb er nu een tijdje mee gewerkt en het went wel. Hij is volledig configurable en naar je eigen zin in te regelen.

Standaard staan deze items op de bar.

De functies op de Touchbar kunnen door de MacOS applicaties aangepast worden en voor die applicatie handige shortcuts laten zien. De applicatie die ik nu gebruik (Blogo) heeft deze functies toegevoegd. Nog niet helemaal bugvrij, want voor de screenshot was het anders ;-). De mockup die ronddwaalde van de Spotify app is inderdaad een mockup, want de echte integratie met de Touchbar ziet er iets minder grafisch uit.

Er zijn natuurlijk ook onzin applicaties. Zoals deze met het Knight Rider liedje en het beruchte KITT lichtje, wie kent het nog 😉

Of een Piano op de Touchbar, ook leuk.

Maar zoals gezegd je kunt zelf onzinnige applicaties maken of serieus gebruik maken van de Touchbar in je applicaties. Onderstaande demo is geschreven in Swift met Xcode.

De beruchte lemmings.

Er zijn ook handige applicaties, zoals de TouchSwitcher. Met deze app kun je schakelen tussen de verschillende open applicaties, maar je kunt ook nieuwe applicaties openen.

Met velen zal ik gelijk toegeven dat deze versie van de Macbook niet heel veel nieuwtjes bevat. En zeker dat dit niet de verwachte opvolger is voor alle Apple fans. Persoonlijk vind ik het niet zo erg, dat je dongels nodig hebt voor de USB-C poorten. Dat is bij sommige Windows laptops niet anders. Disruptie komt niet door te blijven bij het oude en de bestane oplossingen.

Dat er nog een keer een Touch scherm gaat komen op een Macbook dat geloof ik ook wel. MacOS is mogelijk nog niet zover of de Macbook gebruikers hebben daar nog niet een use case voor. Aan de andere kant als je een touch laptop gebruikt in een kantoor situatie waarbij je veel met Office producten of Business applicaties werkt, dan heb je je laptop meestal aan een niet touch scherm hangen (daar zou Microsoft of hun partners nog eens iets aan moeten doen, een PixelSense monitor voor kantoorgebruik). Ik merk dat ik touch op mijn Surfacebook redelijk vaak gebruik als ik geen apart scherm gebruik, maar eigenlijk alleen maar voor het scrollen door websites of als ik moet klikken op grote knoppen. En vooral dus in Tablet mode. De pen gebruik ik nog niet voor handschrift herkenning, want dat valt nog steeds een beetje tegen.

Wat ik wel mooi vind aan de Touchbar. Het schermpje en je aanraking ontneemt niet je zicht op het scherm. Ik vind de concept telefoons, waarbij het touchscherm aan de achterkant van een telefoon zit, briljant. Dan zie je tenminste wat je doet tijdens het aanraken.

Maar goed, het laatste is nog niet gezegd over de Touchbar. Vriend en vijand zal hem verafschuwen, maar het is zeker weer iets anders. Jammer, dat de bluetooth Keyboards van Apple niet een Touchbar hebben, dat helpt niet mee aan het accepteren van deze nieuwe standaard.

Visual Studio for Mac Preview

Het was natuurlijk al mogelijk om C# en DotNetCore te gebruiken op niet Windows omgevingen met behulp van Visual Studio Core. Daar hoorde MacOS natuurlijk ook bij. Na de overname van Xamarin door Microsoft is Xamarin Studio samengevoegd met de Visual Studio producten en dat heeft geresulteerd in Visual Studio for Mac.

Xamarin Studio was natuurlijk al super om Android en iOS apps te maken op een Apple device. Natuurlijk kun je dat ook doen door Xamarin Studio te gebruiken op Windows en een MacOS device te gebruiken als Build omgeving.

Voorheen kon je alleen een Native MacOS app maken met Xcode (de ontwikkelomgeving van Apple). Daarvoor moet je dan Objective C, C, C++, Swift etc leren en gebruiken. Als je normaal gesproken voor Windows programmeert of multi platform wilt programmeren, dan moet je een nieuw kunstje leren en bestaande libraries herschrijven. Met Xamarin Studio kun je gebruik maken van DotNetCore en C#, veel van je bestaande code kun je een-op-een hergebruiken. Met Visual Studio for Mac is het nu ook mogelijk om een native MacOS applicatie te maken met Xamarin en C#. Hiervoor heb je nog wel Xcode nodig om de Storyboards te kunnen definieren. Voor Android en iOS heeft Xamarin eigen tools en editors ontwikkeld, maar voor MacOS nog niet.

Als je Visual Studio for Mac start krijg je een bekend beeld van je Visual Studio for Windows.

Net als op Windows doe je File->New Project en dan krijg je de keuze aan de verschillende project templates.

Een van de templates is een MacOS applicatie.

Om de visuele controls op het scherm te zetten, dan moet je het Storyboard gebruiken en daarvoor maak je een uitstapje naar Xcode. Zodra je dan de aanpassingen opgeslagen hebt, dan zullen deze gesynced worden met de Visual Studio solution.

Als je de applicatie dan start, kun je uiteraard ook debuggen.

Zoals je gewend bent in Visual Studio / Xamarin Studio kun je meer details zien tijdens het debuggen.

Ik heb nog geen applicaties in de Mac App Store gezet, maar dat zou wel gewoon moeten. De applicatie kun je in elk geval gewoon starten op je Mac-je.

Erg leuk en goed van Microsoft/Xamarin om een vertrouwde ontwikkelomgeving naar andere platformen te halen. Visual Studio Core is natuurlijk al heel erg mooi, maar Visual Studio for Mac is net ietsje uitgebreider en completer.

Feitelijk is Microsoft weer terug waar ze begonnen zijn en is de cirkel weer rond. Microsoft is begonnen als leverancier van ontwikkeltalen en omgevingen op oa Apple computers. Dat is met Visual Studio en DotNetCore zekere weer gelukt. Nu is de markt voor platformen nog groter, dus is herbruikbaarheid van code nog belangrijker.

Visual Studio for Mac is nog een preview, maar inmiddels zien we dat ontwikkelingen elkaar erg snel opvolgen en dus zal deze preview ook met dezelfde vaart doorgroeien. De toekomst voor developers wordt alleen maar mooier.

Paint 3D Preview

Met de volgende major update van Windows 10, ookwel de Creators update genoemd, wordt 3d meer onderdeel van Windows 10. De afgelopen insiders builds van Windows 10 laten al iets meer zien van wat we mogen verwachten. Paint 3D is in preview te downloaden vanuit de Windows 10 App store. We hebben er al mee gespeeld en het werkt verbluffend eenvoudig. Met de laatste insiders build zijn ook een paar problemen met vertragingen verholpen. https://www.microsoft.com/en-us/store/p/paint-3d-preview/9nblggh5fv99 Het werkt prima op een Surface Pro 3, Surface Pro 4 of Surfacebook.

Microsoft Teams

In Office 365 zit al langere tijd het fenomeen Groups. Een Group is een verzameling van Office 365 accounts die gezamenlijk een e-mailadres hebben, een gezamenlijke onedrive voor het delen van bestanden en een teamsite hebben. Het gebruik van Groups is handig om een gelijkgestemde groep gelijke rechten uit te delen. Enige nadeel van dergelijke Groups is communicatie moet nog steeds via losse Skype 4 Business contacten en er is niet een afgescheiden hoekje om samen informatie uit te wisselen. Veel bedrijven wijken dan uit naar tools zoals Slack. Nadeel hiervan is, dat je weer een apart tool hebt met zijn eigen credentials. Vanuit Teams kan ook een meeting ala Skype gestart/gepland worden, dat is met Slack dan weer niet mogelijk.

Daar komt Microsoft Teams met de oplossing. Microsoft Teams is een Office 365 Group met de toevoeging van Chat channels. Een Group heeft dan een Team met daarin binnen meerdere Chat channels. De deelnemer van een groep is automatisch lid en de chat channels kunnen door de leden van de group aangemaakt worden. Dit levert een paar voordelen op, als iemand de group verlaat dan verdwijnt ie ook automatisch uit het team. Teams zijn onderdeel van Office 365 en daarmee heb je credentials, die je toch al gebruikte voor de rest van Office 365. Data blijft dus ook binnen de datacenters van Microsoft en in de buurt van je Office 365 spullen.

Om Microsoft Teams te benaderen zijn er verschillende mogelijkheden. Er is een website (https://teams.microsoft.com en voor alle platformen zijn er apps (Win10, iOS, Android, Macos).

Er zitten nog wel een paar haken en ogen. Zo moet degene die je toevoegt aan een group een Office 365 licentie hebben. Een externe persoon toevoegen van buiten de Office 365 tenant is dan een beetje lastig. Bij Yammer kan je externe personen toevoegen met een Office 365 account, maar zondere Office 365 licentie. Ander bezwaar is dat je nu binnen Office 365 verschillende mogelijkheden om te communiceren hebt: Skype4Business (meer voor meetings en een-op-een communicatie), Yammer (hele Office 365 populatie met soms afgeschermde groups) en Teams (meer voor een projectteam). Op deze manier wordt het veel wisselen tussen verschillende applicaties.

Desalniettemin is het een mooie toevoeging en maakt groepscommunicatie toch weer eenvoudiger. Microsoft Teams is nog in Preview, dus we moeten afwachten welke functionaliteit er nog toegevoegd gaat worden. Het ziet er wel veelbelovend uit.

OneNote Tip: Copy Text from Picture

Je kent dat wel, via Bing/Google of andere search engine een plaatje gevonden met een hele sterke tekst. Het plaatje wil je eigenlijk niet gebruiken, maar de tekst wel. Je kunt dan natuurlijk de tekst overtikken, maar dat is lastig als je net als ik niet 10-vingerig kunt typen.

OneNote is daarvoor DE oplossing.

  1. In een OneNote page plak je het plaatje.
  2. Doe een rechtermuisklik op je plaatje
  3. Kies voor het menuitem “Copy Text from Picture”
  4. En kies voor Paste/Plakken ergens anders.

snip_20160901162233

snip_20160901162224

snip_20160901162217

snip_20160901162158

Top Feature! Erg handig.

Xbox One Development

Je kunt nu ook Windows 10 apps bouwen voor en deployen naar je eigen Xbox One. In de Xbox One app store moet je zoeken op Developer Activation en je krijgt een app. Nadat deze geïnstalleerd is, krijg je een code. Deze moet je dan op de aangegeven URL invoeren; https://developer.microsoft.com/en-us/XboxDevices. Je Xbox wordt dan ingesteld (zie NB).

xbox_06

Meer informatie is hier te vinden. https://developer.microsoft.com/en-us/windows/windows-apps/uwp-on-xbox

Daarna is het ontwikkelen net zo gemakkelijk als voor Windows Core IoT. In Visual Studio doe je File –> New –> Project en vervolgens Windows –> Universal. Bij Run kies je voor Remote Machine en vind je de Xbox One in je netwerk. De Xbox en je ontwikkel PC moeten wel in hetzelfde netwerk zitten.

xbox_01

Daarna Runnen! Het duurt even en dan zal de app op je Xbox openen. De cursor kun je met de Xbox controller.

IMG-20160712-WA0007

Ik vond het erg gaaf!

xbox_02

Op de knop drukken gebeurd dan gewoon met de X button op je controller.

xbox_03

De code is normale .NET Universal App code.

xbox_05

Notabene: Als je de app geïnstalleerd hebt, dan kun je je Xbox niet meer als normale Xbox gebruiken. Spelletjes spelen gaat dan niet meer lukken. Je moet de Developer mode uitzetten om het als normale Xbox te gebruiken.

Happy programming!

Windows 10 IoT Core

Sinds de //Build/ conference is een technical preview van Windows 10 for Raspberry PI 2 beschikbaar. Daarmee komt de belofte van Microsoft (Windows op alle devices) een heel stuk dichterbij.

Uiteindelijk zullen er drie versies van Windows 10 IoT beschikbaar zijn: For Industry Devices, Mobile Devices en Core. Het installeren van de Windows 10 IoT Core op een Raspberry PI 2 is heel eenvoudig.

Meer informatie op http://windowsondevices.com en demo’s http://ms-iot.github.io/content/win10/StartCoding.htm.

win10_core_01

Als je deze richtlijnen volgt, dan zie deze schermen langs komen. De eerste opstarten van Windows 10 IoT Core kan iets langer duren, er worden dan allerlei instellingen gedaan. No worries daarna gaat het echt veel sneller.

WP_20150516_17_33_01_ProWP_20150516_17_33_21_ProWP_20150516_17_35_13_Pro

Als het allemaal klaar is, dan zie je dit.

win10_core_02

In deze vroege versie zijn er aantal dingen nog niet op orde, maar dat zal wel gauw veranderen.

Op een Windows 10 machine met Visual Studio 2015 kun je dan een ‘normale’ Windows Universal App maken. Deze kun je dan deployen naar je Raspberry PI 2 en standaard debug F5 experience werkt dan gewoon.

 win10_core_03

Er zijn in de IoT makers world allerhande componentjes te krijgen en een aantal werken ook gewoon op de Raspberry PI 2 met Windows 10 IoT Core. Kijk goed naar de voorbeelden op http://windowsondevices.com.

WP_20150522_11_21_17_ProWP_20150522_11_25_41_Pro

Inmiddels heb ik een aantal componentjes in bestelling staan en zal ik in een latere blogpost terug komen met uitgebreidere voorbeelden. Dit is leuk Knipogende emoticon

Xamarin: Multi Platform Development

Voor het Windows Platform heb ik al eens applicaties gemaakt. Een aantal van mijn maaksel staan zelfs in de store. Het zijn geen geweldige applicaties, maar ze gaven mij wel inzicht in hoe het werkte. Wat betekent zo’n klein scherm voor development en hoe krijg je zoiets dan in de store?

image

De eerste app staat er nog steeds in, maar ik ben de code kwijt Knipogende emoticon. Ook zijn de eisen aan de apps in de tussenliggende tijd behoorlijk aangescherpt. Al zou ik de code nog hebben, dan komt hij niet meer in de store.

Ook voor het Windows 8 platform heb ik een app. Eigenlijk een paar meer, maar die zijn niet beschikbaar. Een demo app voor Azure Mobile Services en een SDN evaluatie app waar ik al eerder over sprak.

image

http://apps.microsoft.com/windows/en-us/app/three-of-a-kind/a5ab2f2a-c42d-45de-95c6-13a10e5b1256

Maar goed, al een hele tijd wil ik eigenlijk heel graag eens proberen om een app te maken voor Android en iOS. En ik heb het geprobeerd om op mijn iMac met Xcode een app te maken, maar ik raakte heel snel verstrikt in Objective C taal en kon mijn weg niet goed vinden binnen de Apple tools. Binnen de Microsoft wereld is Xamarin dan tool om dat te doen. Een super tool om je vaardigheden in C# te kunnen gebruiken op andere platformen.

Ik had al heel lang het idee staan, maar kon er de tijd en zin niet voor maken om het door te zetten. Nu is het er dan toch van gekomen. Het is een soort Hello World app, maar dan met iets meer dieogang. Maar weer niet zoveel omdat er geen gedeelte code is en al helemaal geen server side code.

Bij mijn vorige werkgever was door Ronald Hubert een Scrum app voor het Windows Phone platform gemaakt. Het idee en de grove vormgeving van de kaarten waren mijn begin punt. Ik heb zijn Windows Phone code niet hergebruikt en zelf een Windows Phone variant geschreven. Dat was makelijk, want dat had ik al eens eerder gedaan.

Je maakt twee schermen, tekent de kaarten op het eerste scherm en op het klik event van de kaart open je het tweede scherm. In het tweede scherm laad je het juiste plaatje met een klik event om terug te gaan naar het hoofdscherm.

In code:

private void imageV_Tapped(object sender, TappedRoutedEventArgs e)
{     Frame.Navigate(typeof(DetailPage), "V");
}

Direct in het klik event van het plaatje vertel je dat er een navigate moet plaats vinden naar de detail pagina met een parameter. Clean en simpel Knipogende emoticon

wp8

Voor Android heb je twee keuzes. Of je werkt vanuit Visual Studio of je werkt vanuit Xamarin Studio. De eerste is meer vertrouwd dan de tweede. Ik heb overigens de applicatie ontwikkeld vanuit de Xamarin Studio.

Feitelijk is hier hetzelfde ritueel als in de Windows Phone app gebruikt.

ImageButton imButton1 = FindViewById<ImageButton> (Resource.Id.imageButton1);
imButton1.Click += new EventHandler (PictureBtn_Click);
void PictureBtn_Click(Object sender, EventArgs e)
{
	ImageButton imgbut = (ImageButton)sender;
 
	var intent = new Intent (this, typeof (NextScreenActivity));
	intent.PutExtra ("picture", (imgbut.Tag == null ? "" : imgbut.Tag.ToString()));
	StartActivity (intent);
}

Zoals je ziet, wezenlijk anders. Je moet de Button op het scherm zoeken en er dan een event aan hangen. In het event moet je new Intent maken en die Intent moet je als een Activity starten.

nadroidvs

androidxs

De iOS variant is natuurlijk niet heel anders. Alleen werkt Apple met een Story board en dwingt meer MVC af. Verder worden er allerlei events en stukken code toegevoegd voor het iOS gedeelte.

image

Screen Shot 2015-02-14 at 13.37.40

Ondanks dat ik C# kon programmeren was het toch 3 keer anders.

Er is ook nog zoiets als Xamarin Forms. Daarmee zou de voorkant ook nog een stuk meer overeenkomen tussen de verschillende operating systems. Dat wordt mij volgende project.

Om de apps vervolgens in de verschillende stores te krijgen was ook steeds anders. Windows Phone en Android leken redelijk op elkaar, de store van Apple was veel meer gedoe.

Deze app is in elk geval te downloaden:

IoT (3) Intel Galileo

In mijn vorige blogpost heb ik al verteld over Microsoft Windows op een Intel Galileo board.  Ik heb toen laten zien dat je een display kunt aansturen met C++ code. Niet lang daarna kwam de tweede generatie van het Galileo board. Deze was weer iets krachtiger.

In mijn vorige blogpost moest ik het LCD display via een breadboard koppelen aan mijn Galileo. Niet ongebruikelijk in de Arduino wereld, maar mooi is anders en erg foutgevoelig voor niet heel technische mensen. Daarom heb ik een Seeed Grove Starter Kit gekocht. Het grote voordeel van deze set, er zitten allerhande sensoren en dingetjes in.

Maar waarom deze post dan? Deze keer heb ik niet alleen een lampje laten knipperen of alleen een tekst laten schrijven op een LCD scherm, maar heb ik een aantal dingetjes gecombineerd. Ik heb een ledje op het board gezet op poort 13, een LED socket op poort 7, een button op poort 3 en een LCD schermpje.

Het losse ledje knippert permanent, maar het andere ledje gaat aan als je op de knop drukt. Het LCD scherm laat zien dat het knopje is ingedrukt.

Eerst deed ik dat weer in de Arduino omgeving. Op de Galileo draait dan niets speciaals.

iot

Maar ja dat is niet leuk. Er kan Windows op draaien, dan moet ik daar ook gebruik van maken. Dus de code uit de Arduino omgeving overgezet naar een Visual Studio solution. De rgb_lcd.h header file geinclude en compile. “Rebuild All succeeded”.

vs

Daarna klikken op Remote Debugger.

image

En we breaken in de eerste beste gezette breakpoint.

WP_20150211_22_04_36_Pro

WP_20150211_22_01_18_Pro

Voordat er gedebugt kan worden, wordt de applicatie gedeployed op de Galileo. Op de C-schijf (het SD kaartje) staat een directory Test met daarin de executable. Door middel van telnet kun je de executable starten. Zoals je hieronder ziet, blijft de applicatie runnen tot je hem stopt. Uiteraard zijn er ook mogelijkheden om hem automatisch met het opstarten van de Galileo te starten.

WP_20150211_001

Volgende uitdaging is wachten op de volgende versie van Windows voor Galileo, Windows 10. Ik hoop dat er dan ook ondersteuning voor .NET / C# aanwezig is. Ik ben benieuwd hoe de vele Arduino modules dan vanuit C# aangestuurd kunnen worden. Inmiddels is aangekondigd dat Windows 10 ook op een Raspberry PI zal draaien. Inmiddels heb ik zo’n ding gekocht en ook daar ga ik uiteraard mee spelen.

Bij Xpirit en Xebia zijn we begonnen met een IoT Makers lab. Samen met collega’s gaan we mooie en leuke IoT oplossingen verzinnen en maken. Uiteraard zal ik daar later op terug komen.