.NET on Raspberry PI 2

In een vorige blogpost heb ik verteld over Windows 10 IoT Core. Grote voordeel is, dat je in C# kunt programmeren en er een grafische schil om heen hebt. Maar het gros van de IoT devices zullen niet aan een monitor hangen of interactie van de gebruiker verwachten. De meeste IoT devicesverzamelen data en geven deze af of controleren een omgeving en verwachten stuurinformatie.

Ondanks dat er verschillende goede redenen zijn om gebruik te maken van Windows 10 IoT Core, het is voor een Microsoft omgeving niet perse nodig. Ook op een NOOBS (New Out of the Box Software) OS kun je prima .NET gebruiken.

Al enige jaren is het Mono project gaande en daar ligt de key van multi platform.

Op je Raspberry PI 2 kun je dan: sudo apt-get install Mono-complete doen. Daarmee wordt Mono op je Rasp gezet.

Met het krachtige Owin mechanisme kun je een ASP.NET website hosten op je Rasp.

6-14-2015 12-45-22 PM

Het resultaat:

6-14-2015 12-23-21 PM

Het is een Webserver waarin je ook een WebApi kunt hosten.

6-14-2015 12-46-19 PM

Het resultaat:

6-14-2015 12-44-29 PM

Best handig. Ik heb ook een voorbeeld waarbij een Raspberry PI 2 informatie in een Azure Storage queue zet. Daarover later meer, want hier horen meerdere bedenkingen bij.

Project Oxford

Tijdens de //Build/ Conference lieten ze hele gave demo zien; de foto herkenningssite (http://how-old.net/).

image

Project Oxford (http://www.projectoxford.ai/) is basis van deze app. Deze API biedt heel veel mogelijkheden. En het mooiste is, je kunt hem ook zelf gebruiken.

image

Er is een hele volledige en goed gedocumenteerde API beschikbaar. Voorlopig zijn de API’s nog gratis, maar erg leuk om mee te spelen.

image

De basis achter deze API is Azure Machine Learning. Er is een gratis e-book over Machine Learning. Deze is erg leesbaar en geeft je de basis van Machine learning.

Tijdens de afgelopen Ignite Conference was er een erg leuke tweede keynote. Deze werd gedaan door de Technology and Research afdeling. Ze vertelde hoe zij al jaren bezig waren met research voor producten die nu beschikbaar kwamen. Zoals bijvoorbeeld PowerBI en de vertaalmachine van Skype etc. Grappige demo over Data analyse en historische data.

Als je in de Big Data zit of daar affiniteit mee hebt, dan zou ik zeker naar deze sessie kijken (Ignite KEY02   The Next Era of Computing: Seeing the Future Before It Happens).

Tijdens een IoT Hackaton hebben we een Raspberry PI 2 gekoppeld aan een camera en de gemaakte foto’s door deze API gehaald. Het werkte erg leuk. Helaas konden we niet gebruik maken van Windows 10 IoT Core.

Windows 10 Development: Small and Big Screens

Met de komst van Windows 10 en het feit dat deze op alle devices aanwezig is, is de Universal app zoals we die kennen in Windows 8.1 weg. Dat maakt het weer een stuk eenvoudiger, maar gelijktijdig ook lastiger.

image image

Voorheen had je een project voor Windows Phone en de schermen van je applicatie in dit project waren alleen voor mobile devices. Als alles in een project zit, dan moet je daar toch anders mee omgaan.

Gelukkig biedt het Windows 10 development SDK een aantal krachtige middelen. Zoals bijvoorbeeld een RelativePanel. Op een RelativePanel kun je van controls vertellen wat hun relatieve positie is ten opzichte van andere controls. Veel handiger dan voorheen, daar zat je te knoeien met margins of absolute posities. Waardoor je raar gedrag kreeg bij andere schermen etc.

image

Nog een mooie is een SplitView, waarbij je een Content en een Pane gedeelte hebt. Tenslotte hebben we al gauw een menu en een detail gedeelte op het scherm staan.

image

Maar hier heb je allemaal niets aan, als er niet een eenvoudige manier is om ze te manipuleren. Tenslotte is het in de XAML / MVVM wereld niet meer gebruikelijk dat je Events afvangt in Code. Daar is dan ook een mooie oplossing voor.

De VisualStateManager, die bestaat uit VisualStates met een StateTrigger en StateSetters.

image

Van de VisualState geef je dan aan wat de MinimalWidth of Height is en met de Setters geef je aan wat er dan moet gebeuren.

image

In mijn SDN evaluatie app voorbeeld ziet dat er dan als volgt uit. De eerste is bij een minimale breedte van 720 en de tweede is het alternatief. Dit werkt ook zo op een Windows Phone met Windows 10, waarbij het toestel in landscape of portrait gehouden wordt.

image  image

Zoals je ziet hebt ik een hamburger menu toegevoegd, wat ik jammer vind dat dit geen control is. Het is een toggle button met een Font (Segoe MDL2 Assets) en een Glyph.

image

Het werkt wel aardig en ik hoop dat ze het nog iets mooier maken.

Leuke sessie op Ignite: BRK2310 From the Small Screen to the Big Screen: Building Universal App Experiences with XAML

(disclaimer ik ben geen XAML goeroe, ik kan er een beetje mee omgaan)

Consume Modern SaaS EndPoints with Visual Studio 2015

We kennen allemaal de functionaliteit van Visual Studio om een Service reference te doen. Hiermee kun je een beschikbare Services eenvoudig in je applicatie consumeren. Vanuit je code kun je dan redelijk eenvoudig bij de methode van de service komen etc. Het gaat voor hier te ver, meer informatie kun je hier vinden.

Service Reference is lastig als de service credentials nodig heeft. De credentials waarmee je de reference maakt, is vaak niet de gewenste voor je toepassing. Daarnaast zijn er vaak services waar je nog enige configuratie aan moet/wilt doen. Via de configuratie bestanden is het niet onmogelijk, maar zonder de juiste documentatie niet eenvoudig.

Soms hebt voor een Service Reference ook nog verschillende componenten/libraries of zo nodig. Daarvoor is de handige toevoeging Visual Studio NuGet toegevoegd. NuGet is anoniem en heel generiek; je kunt als aanbieder componenten aanbieden aan anderen, maar je kunt niet veel zeggen over de configuratie.

Eigenlijk is er behoefte aan een combinatie tussen deze componenten.

In VS2015 zit nu Connected Services. Met Connected Services krijg je een Wizard ter beschikking waarbij je de juiste parameters kunt invullen en de juiste componenten kunt toevoegen aan je eigen project.

Het aantal Connected Services is nog niet groot, maar App Insight, Mobile Services, Storage en Salesforce zijn aanwezig.

Het is een open systeem. Iedereen kan zijn/haar eigen connected services aanbieden en invoegen. Hierbij kan een derde partij een wizard toevoegen.

connectedservices

Wil je de sessie terug kijken, zoek dan naar Ignite sessie BRK3706 op Channel 9 (https://channel9.msdn.com/Events/Ignite/2015/BRK3706).

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:

Windows 10 and Office Apps

Sinds een enige tijd heb ik de nieuwste Windows 10 Technical Preview op mijn Surface Pro 3. De eerste versie van Windows 10 was voornamelijk oppoetsen van Windows 8.1. Was Windows 8 erg gericht op Touch, de eerste Technical preview van Windows 10 was erg gericht op keyboard en muis. Deze nieuwe versie combineert deze twee.

Mooie toevoegingen in deze versie zijn Cortana en Continuum. De eerste kennen we al van de telefoon en in een andere vorm van de XBox. Je kunt dan tegen je PC praten in een gewone zinnen en zij zal antwoorden of de zaken uitvoeren. Het is niet meer zoals vroeger, waarbij de computer maar een beperkt vocabulaire had. Op de telefoon en nu PC kun je Cortana activeren door ‘Hey Cortana’ en daarna praat je tegen haar op een natuurlijke manier. (Op dit moment nog maar beschikbaar in een beperkt aantal landen)

Tijdens de eerste presentatie van de Windows 8 opvolger hadden ze een filmpje met Continuum. Het zou als je het toetsenbord weghaalt van je tablet, dan detecteert Windows 10 dat en geeft de mogelijkheid om automatisch naar Tablet mode te gaan.

10-2-2015 01-41-26

Ik heb er mee geëxperimenteerd en dat werkt wel heel mooi hoor. Ook als je op een Surface het toetsenbord naar achteren klapt zal hij dat detecteren. Wat hij nu nog zou moeten detecteren is, als je hem in een Dockingstation plaatst je niet naar de tablet mode wilt. En nadeel is nog, dat als je in Tablet mode gaat de desktop niet meer echt beschikbaar is. Documenten, shortcuts, apps etc op de desktop zijn niet te verplaatsen/starten of te wijzigen in Tablet mode.

Ook het startmenu is een beetje opgepoetst. Aan de linkerkant is de lijst met alle applicaties een beetje gesorteerd en geordend. De groepen zoals we die op het Start scherm kende zijn weer terug.

Screenshot (4)

In de eerste versie waren de iconen al een beetje opgepoetst, nu is dat nog iets verder doorgevoerd.

Screenshot (5)

Screenshot (6)

Ook nieuw is in deze versie, dat Windows Store apps meer knoppen in de titelbalk hebben. Aan de rechterkant zitten een sluit, Full screen, maximize en minimize knop. Aan de linkerkant zit het menu, dat in Windows 8 nog met een Swipe van rechts naar voren komt. Dit laatste moest wel, omdat de Store apps nu in een eigen Window draaien en rechts swipen niet meer logisch was.

Screenshot (7)

Dit zullen nog niet de laatste aanpassingen zijn. Vele andere zullen nog in de aanloop naar Build en tijdens Build het licht gaan zien.

Nieuw is dat er ook een Touch based versie van Office beschikbaar is. Op alle mobiele platformen Android, Apple en Windows Phone hadden we al mooie mobiele versies van Office. De Android en Apple versies waren wel iets verder dan het Microsoft platform. Maar nu is er op Windows 10 de preview beschikbaar van Word, Excel en Powerpoint. Deze kunnen vanuit de Store gedownload en geïnstalleerd worden.

10-2-2015 01-34-51

En ze zijn redelijk compleet. Ze zien er erg netjes en strak uit.

10-2-2015 01-36-46

Bij het starten van de office producten en het maken van een nieuw document, wordt deze gelijk op je OneDrive geplaatst. Dat is erg handig, want dan zijn je documenten op al je devices beschikbaar. Bijkomend voordeel is, dat dit ook het samenwerken met anderen eenvoudiger maakt. In elk van de Office producten zit nu een “Collaborate with others” knop. Het document op OneDrive wordt dan gedeeld met de persoon waarmee je gaat samenwerken.

Screenshot (2)

Wijzigingen zie je dan real time.

PowerPoint is natuurlijk om te presenteren. Als je dat doet, doet hij als iedere App store app. Hij laat zich Windowized zien.

Screenshot (3)

Binnenkort ga ik dat toch eens proberen tijdens een echte presentatie hoe dat werkt. Wat vreemd is, dat de nieuwe menu items en knoppen op de Titelbalk niet aanwezig zijn bij deze Office apps. Dat had ik eigenlijk toch wel verwacht.

Kortom deze versie van Windows 10 is weer strakker en beter, maar is nog niet helemaal af. De toevoeging van Office is wel erg mooi.

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.

API Management

Het is voor leveranciers van producten bijna onmogelijk om voor ieder platform mobiele applicaties te maken. Natuurlijk kun je dan als leverancier zorgen voor een goede responsieve mobiele website. Het nadeel van deze manier is dat je de capaciteiten en mogelijkheden van een mobiel device niet volledig uit nut.

Daarom zijn er ook leveranciers die hun backoffice via API’s beschikbaar stellen aan de wereld. Meestal wil je dat niet zonder pardon doen en wil je er als leverancier wellicht geld aan verdienen. Dus je wil een Developer portal maken met verschillende groepen, help pagina’s, voorbeeldcode, monitoring, issue lijst, FAQ, maar ook malafide gebruikers/applicaties blacklisten. Kortom het vergt meer dan even het beschikbaar stellen van een paar webservicesje.

Enige tijd geleden had ik ook zo’n droom. Ik wilde voor de SDN een evaluatie app maken. Bezoekers van een SDN event kunnen dan mobiel een evaluatie formulier invullen. Deze evaluatie data wordt in een data store op Azure bewaard. Uiteraard wil ik niet mijn tokens/connectionstrings/passwords etc in mijn mobiele apps opslaan. En aangezien ik niet voor elk device zelf een applicatie kan schrijven, deze gegevens delen met wildvreemde developers.

Screenshot (1)

Dus bedacht ik dat ik een aantal Webapi services beschikbaar moest stellen. Maar zoals hierboven genoemd, had ik behoefte aan eer developers portal om mijn services uit te leggen en wat ze opleveren. Dat is veel werk voor zo’n API als dit. Dit is mijn landingspagina nu; http://sdnevalapp.azurewebsites.net/.

1-7-2015 4-34-32 PM

Gelukkig is daar een oplossing voor op het Azure platform. De API management service (documentatie site).

1-7-2015 4-40-33 PM

1-5-2015 9-53-21 AM

Als je de service gemaakt hebt, dan is er een aparte portal (https://marcelmeijer.portal.azure-api.net/admin) waar je alle instellingen doet, waar je de metrics van je API ziet, de applicaties die aangemeld zijn, welke API het vaakst aangeroepen wordt etc.

1-5-2015 9-53-33 AM

Bij de settings kun je dan de webservices beschikbaar stellen. De verschillende operaties, welke http verb, welke responses er verwacht kunnen worden, welke URL, omschrijving en helpteksten.

1-5-2015 9-56-59 AM

1-5-2015 9-57-15 AM

De URL naar de bron services kan ook on-premises gehost worden. Uiteraard is het dan wel verstandig om de endpoints op deze URL te beveiligen met een Certificaten, UserName/Password combinatie of via OAuth.

Dit is de management portal voor de beheerder van de API(https://marcelmeijer.portal.azure-api.net/admin), voor de ontwikkelaars is er een aparte portal (https://marcelmeijer.portal.azure-api.net/). Deze kan tot op zekere hoogte ook gestyled en aangepast worden.

Deze Developer portal is redelijk compleet. Alle genoemde zaken zijn hier wel te vinden.

1-5-2015 9-53-44 AM

Zo is er een handig overzicht van de beschikbare API’s.

1-5-2015 9-53-59 AM

Van de beschikbare API kun je de beschikbare endpoints zien. Je ziet dan de omschrijving en de  URL om API aan te spreken. Om het endpoint te gebruiken moet je een subscription key meegeven. Het hele idee van deze portal is dan ook om gebruik te reguleren en met behulp van de subscription key is de API per applicatie/ontwikkelaar apart. Aangezien de endpoints aan de basis beveiligd zijn met Certificaten, Username/Passwords of via OAuth, heeft het geen zin om rechtstreeks naar de bron te gaan.

Op deze Developer portal kun je API methode ook uitproberen en de verschillende gedefinieerde HTTP acties uitvoeren. Je krijgt dan de trace en het resultaat te zien.

1-5-2015 9-54-38 AM

1-5-2015 9-54-56 AM

1-5-2015 9-55-30 AM

Helemaal onderaan de pagina kun je per programmeertaal voorbeeldcode krijgen. Alles om de ‘klanten’ van je API te ondersteunen en te helpen.

1-5-2015 9-55-45 AM

Zoals ik in het begin al zei, het beschikbaar stellen van een API is een maar om er een hele developer portal bij te maken is twee. Door deze Azure service kun je je richten op het echte leuke en belangrijkste van de API, de functionaliteit.

Waarom zou je het zelf doen, als je gebruik kunt maken van de expertise van andere. “You can reach further while standing on the shoulders of giants”

Azure Webjobs

Tijdens de afgelopen Microsoft Techdays 2014 deed ik een sessie over Azure Cloud Services. De opname is te vinden op Channel 9. In het begin van Azure waren Cloud services de “way to go”.

Cloud Servies is een krachtig concept, maar er kleefde ook de nodige nadelen aan. Bestaande applicaties konden niet zomaar via de Lift en Shift methode naar de Cloud gebracht worden. Meestal was dit gewoon te wijten aan de applicaties zelf. Weinig applicaties zijn of waren zuiver stateless, asynchroon in de basis en in staat als meerdere instanties naast elkaar te draaien.

In de afgelopen jaren is het Azure platform rijker geworden met verschillende diensten. In plaats van iets zelf te verzinnen of te kopieren van anderen, zijn er nu bestaande tools/producten opgepakt en in samenwerking geschikt gemaakt voor Azure (Hadoop, Docker, etc).

Maar ook is IT development een stuk volwassener geworden. Developers en architecten realiseren zich steeds vaker dat Scale up niet helpt met availability, dat services/servers stuk gaan en dat een internet applicatie de potentie van een miljoenen publiek heeft.

Standaard dogma’s als SOA architecture, Servicebussen of SOAP webservices lijken ook hun kracht te verliezen, Microservices krijgen meer draagvlak en betere tooling. Daarover ga ik zeker nog vaker bloggen.

Terug naar mijn Techdays demo. Die zag er zo uit:

blog2

De solution zag er zo uit. De code is te downloaden of op te vragen. Zoals gezegd bestond het uit een WebRole en een WorkerRole. De WebRole voor het uploaden en bekijken van de plaatjes.

webjob1

De flow van de applicatie zag er zo uit.

 Slide1 

Zoals je ziet, de WebRole moest naast het uploaden ook een bericht op een queue zetten voor de WorkerRole. Aan de WorkerRole kant moet er een mechanisme zijn om de queue leeg te lezen. Zoals ik vertelde in mijn sessie, moet je dan ook het Busy waiting oplossen. Het lezen van de queue is een transactie en dat kost geld. Een belangrijk onderdeel van architectuur op Azure is Cost Based design. Dus wil je het lezen van bijvoorbeeld een queue zo efficiënt en effectief mogelijk houden met het oog op de kosten.

Op Azure zijn tegenwoordig Webjobs beschikbaar. Met deze webjobs is het mogelijk om deze te laten triggeren na het toevoegen van een nieuwe blob op storage. Dat scheelt in mijn geval een bericht op de queue en eigen check actie van de queue. Het hele wachten en kijken of er werk (nieuwe blob op storage) is, wordt nu door het platform verzorgd en geregeld. En wat ik niet hoef te doen, dat scheelt tijd en het platform kan dat efficiënter. Dus de WorkerRole wordt vervangen door een Webjob. De WebRole heeft ook een alternatief. Moest ik voor de WebRole toch nog iets aparts leren, zoals bijvoorbeeld het lezen van de configuratie settings. Met een Azure Website kan ik de technieken gebruiken die ik altijd al gebruikte. En voor de settings zie je in mijn vorige blogpost de oplossing.

Het proces plaatje ziet er dan zo uit.

 Slide2

En de website ziet er na een kleine redesign zo uit.

blog3 

En de code van de Webjob is eigenlijk alleen dit, ongeveer 55 regels.

function1

De WorkerRole besloeg ongeveer het dubbele aantal regels code, waarvan het grootste gedeelte zaken die niets met het proces te maken hebben.

Op deze manier krijg je precies zoals ik altijd zeg tijdens presentaties. We kunnen ons richten op de functionaliteit en het echte werk, de rest wordt overgenomen en geregeld door het Azure platform.

Oke, nu wil ik eigenlijk dat de Client niet op de queue hoeft te kijken, maar op een andere manier genotificeerd wordt.

NB In deze blogpost beweer ik niet dat Cloud Services niet bruikbaar zijn. Voor het hier genoemde scenario waren de uitgebreide mogelijkheden van Cloud Services niet nodig. Kijk op deze page voor een betere vergelijking tussen de mogelijkheden.

Macro in Excel not working after update

Voor het maken van fakturen gebruik ik een Excel 2013 sheet. De sheet maakt gebruik van makro’s. Na de laatste Office updates deed de Excel sheet het niet meer. Er verschenen allerlei errors.

Na enig zoeken op internet kwam ik deze oplossing tegen. Zoek het bestand MSForms.exd, normaal gesproken staat deze in de folder C:\Users\user.name\AppData\Local\Temp\Excel8.0\ en verwijder MSForms.exd. Deze wordt dan opnieuw opgebouwd bij de volgende start van Excel 2013 en alle VBA makro’s werken weer.

Het werkte en zo ook mijn faktuur sheet.