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.

Xbox One Development (2)

Met de Windows 10 Update is ook de DEV mode op de Xbox One aangepast. Je kunt nu, net als bij Windows IoT Core, kijken naar het device via een website. Op deze website kun je apps uploaden, stoppen, starten etc. Redelijk uitgebreid wel.

xboxdevicesite

Daarnaast is er een nieuwe Dev Companion app voor Windows 10. Deze is iets meer gericht op de developer functionaliteit van je Xbox ten opzichte van de ‘normale’ Xbox app. Feitelijk doet hij dan een Remote Desktop connectie maken met je Dev Xbox One.

devmodecompanion

Samen ziet dat er zo uit.

snip_20160901164225

Best wel gaaf hoor als je ook nog eens aan het developen bent. Je hebt dan wel een grote monitor nodig Winking smile

snip_20160901164217

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 on Raspberry PI 2

Het mooie van Windows 10 op zowel je Raspberry PI 2 als op je computer/laptop is dat je op een manier kunt te ontwikkelen. Een Universal Windows App voor je laptop Windows zal zonder veel aanpassingen kunnen draaien op een Raspberry PI 2.

Het is heel eenvoudig. In Visual Studio maak je een Universal Windows App. Door F5 kun je hem op je computer testen. Dat duurt even, maar dan zul je zien dat deze app gewoon start.

Om dezelfde app op de Raspberry PI te starten moet een aantal stappen doorlopen. Je normale computer is een x86/x64 solution Platform. Een Raspberry PI is gebaseerd op ARM technologie net als vele mobile devices.

image

Als je het solution Platform ARM gekozen hebt, dan zal Visual Studio kiezen voor Device. Dat klopt als je een Universal Windows App maakt voor een Windows 10 Phone of Tablet. Voor een Raspberry PI moet je kiezen voor Remote Machine.

Daarna moet je wat gegevens van de Raspberry PI opgeven. Vaak zal de Raspberry PI ook automatisch gedetecteerd worden.

image image

Dan weer F5. Visual Studio gaat builden, packagen en Deployen.

image

Zonder enige aanpassingen aan de code kun je dezelfde app draaien op een Raspberry PI 2. Leuk he. One OS voor alle devices.

In onderstaande filmpje demonstreer ik het live.

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)

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

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:

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.

Visual Studio 2015 Preview: C# 6

Op 12 en 13 november was er het Connect(); event van Microsoft in New York. De keynote was live te volgen en de gezamenlijke Nederlandse communities (WAZUG, DotNed, VB Central en natuurlijk de SDN) hadden een avond georganiseerd om samen de keynote te bekijken. Als je er niet bij was of de keynote gemist hebt, dan kun je dat op je gemak nakijken op Channel 9. Het waren niet de minste sprekers: Scott Guthrie, S. Somasegar, Brian Harry en Scott Hanselman.

Tijdens dit event liet Microsoft zien dat de woorden van de CEO Satya Nadella, Mobile First, Cloud First, niet zomaar een loze opmerking was. Dit statement gaat door heel Microsoft heen en zit verweven in alles wat zij doen en laten. Dat kwam duidelijk naar voren in de keynote.

Er waren een aantal aankondigingen, een daarvan is dat Microsoft het .NET platform als Open Source beschikbaar stelt op GitHUB. Dat betekent dat iedereen een Pull request kan doen en zo eigenhandig bugs etc. kan oplossen. Deze aanpassingen kun je dan weer terug sturen en Microsoft zal ze (na testen etc.) overnemen. How cool is dat! De eerste pull request kwam binnen het uur dat de spullenboel open stond.

Een andere aankondiging was een preview van Visual Studio 2015. Deze preview bevat ook previews van ASP vNext en C# 6. Hoewel er geen nieuwe taal elementen aan C# zijn toegevoegd, is de taal en tooling wel geoptimaliseerd. Alle aanpassingen die gemaakt zijn, hebben tot doel om het de developer eenvoudiger te maken.

In deze blogpost een paar van de veranderingen.

Code moet niet alleen eenvoudiger maar ook cleaner gemaakt kunnen worden. Zoals bijvoorbeeld een relatief simpele methode als hieronder. De function body is eigenlijk overbodig.

11-22-2014-15-57-00

En het kan korter door gebruik te maken van een Lambda arrow (=>). Deze kende we al, maar nu kan het ook voor deze gebruikt worden. Er komt straks nog een mogelijkheid aan.

11-22-2014-15-57-001

Clean code en duidelijk begrijpbaar en leesbaar.

Nog zo’n mooie toevoeging. De volgende code constructie herkent iedereen wel.

11-22-2014-16-00-57

Met de nieuwe Elvis operator kan dat een stuk korter. De ?. (met een beetje fantasie zie je een kuif met ogen) operator hoef je niet meer te checken of het object NULL is.

11-22-2014-16-01-07

Uiteraard werkt dit ook met methodes is de Class: x?.Calc(1,2); Vind ik iets gevaarlijker, want de Calc methode wordt niet uitgevoerd als x NULL is. Als je niet goed over je tests of structuur let, dan kan dit tot onverwachte situaties leiden.

Nog een veelvoorkomende constructie. We maken strings voor meldingen op en we doen dat natuurlijk netjes met de string.Format methode. Super simpel en redelijk leesbaar, nadeel je moet wel goed tellen en de welke waarde waar komt is niet in een oogopslag duidelijk.

11-22-2014-16-03-39

Dus dat moest anders. Simpel \{<variable>} en de code is gelijk een stuk gedocumenteerd. Natuurlijk kun je ook de formatting regels van string.Format meenemen, volledige vrijheid over de uiteindelijke tekst.

11-22-2014-16-03-391

Bovenstaande is een field van een class/object. Doordat ik hem public heb gemaakt, kun je hem manipuleren. Dat is natuurlijk niet helemaal netjes en eigenlijk zou je properties moeten gebruiken. Nadeel van properties op dit moment is, dat deze zowel een getter als een setter moeten hebben. In C# 6 is die verplichting er niet meer, een property kan alleen een getter hebben.

En als je dan gebruik maakt van de lambda arrow, dan gebeurd dat automatisch voor je. Dat het geen field is, dat zie je door de Code lens referentie teller. Maar ook als je de waarde van de property wilt aanpassen, dan krijg je een compiler waarschuwing.

11-22-2014-16-04-47

11-22-2014-16-01-54

Zo zijn er nog meer aanpassingen en wijzigingen, daarover later meer