From The Death Star to Open Source .NET Core by Scott Hanselman

Ingediend door Dirk Hornstra op 04-feb-2019 22:50

Op 2 februari heeft Scott Hanselman anderhalf uur gesproken op het podium van het Theater de Parade in Den Bosch. Ik volg Scott al enige tijd via Twitter en toen ik zag dat hij naar Nederland zou komen was dat kaartje snel geboekt. Het algemene verhaal over dat bezoek kun je op mijn persoonlijke website terugvinden: link.

Tijdens deze anderhalf uur heb ik natuurlijk een aantal foto's gemaakt (bewijs: ik was erbij!), maar heb ook in mijn kleine notitieblok aantekeningen gemaakt van de punten die hij besproken heeft. Want als er 90 minuten van alles en nog wat besproken wordt, dan blijven daar nog wel eens zaken niet van hangen, terwijl het wel interessant is.  Eerst nog even een linkje wat ook op mijn persoonlijke website staat, de link naar de podcasts: directe link.

De verschillende .NET varianten komen voorbij. Scott noemt Rotor, ik zie dat dit een eigen versie van .NET voor FreeBSD is op de wikipedia-pagina van Mono. Mono was de open source variant die gebouwd is om ook C# op andere platformen te kunnen compilen. Ik heb dit zelf nog gebruikt op een Raspberry Pi, om zo mijn eigen scrape-taken via CRONTAB te kunnen laten draaien. Die Rotor was zoals je op de wikipedia-pagina kunt zien is niet open source en ook het vrijgeven van de sourcecode werd ook deels gedaan (geen garbage collection, geen just in time compiler).

We zien daarna een overzicht van de .NET Frameworks zoals die ook op deze pagina te zien is, het Windows .NET Framework, .NET Core en Xamarin: https://blogs.msdn.microsoft.com/cesardelatorre/2016/06/27/net-core-1-0-net-framework-xamarin-the-whatand-when-to-use-it/

Volgens Scott kun je Mono als "clean .NET" beschouwen. Dit is gebouwd om C# te kunnen compilen, waarbij niet naar de "oude broncode" gekeken is. Scott noemt "Ahead Of  Time", dat heb ik even  nagezocht. Hiermee kun je jouw code "pre-compilen" zodat de opstarttijd verkort wordt, minder geheugengebruik, etc. Meer uitleg staat hier: https://www.mono-project.com/docs/advanced/aot/

Ik heb hier nog jitter 64 bit genoteerd, dat zal zijn dat je op je 32 bit machine voor 64 bits kunt compilen. En natuurlijk dat je met de compiler sourcecode kunt compilen waarbij de executable de compiler is die dit compileert (ik begin een beetje "inception" te voelen hier), dat zal in dit geval Roslyn zijn: wikipedia-link.

Scott doet heel veel in de powershell. Zo bladert hij tussen 2 mappen om te laten zien hoe hij de gegenereerde DLL van het ene project kan koppelen in het andere. Met dat switchen heeft hij een trucje, met pushd zet hij de huidige map op de stack, als hij vanuit een andere map terug wil hoeft hij alleen maar popd te doen. Historie is terug te zien via de F7 toets. Mocht je nog eens een batch-file moeten maken, doe er je voordeel mee!

Vervolgens krijgen we wat commando's:


dotnet new /?
je ziet wat je allemaal kunt maken, .net core empty, console, classlib, etc.

dotnet run /?
het uitvoeren van je project.
dotnet build /?
het builden van je project. hiermee startte Scott het programma wat gecompileerd is, want als je run doet, dan moet het elke keer builden (en lijkt het dus een traag programma te zijn).
ildasm
hiermee kun je het entrypoint en machine-instructies van je DLL zien (en executable).
process explorer (van sysinternals)
een uitgebreidere taskmanager

Hoe kan het dat de DLL die Scott maakt zowel op Windows werkt als in Ubuntu als op de Raspberry Pi? Omdat de .NET Sdk gebruikt wordt, netstandard 2.0. De .NET code heeft een standaard structuur waarbij elk item in zijn eigen namespace zit (System.Text.RegularExpressions voor de reguliere expressies op tekst, System.Net voor webrequests etc.). Scott gaat even los op Node waar hij een HTTP-call wilde bouwen en vervolgens 17 verschillende manieren met allemaal in te laten externe functies nodig had. Het probleem is volgens hem dat daar geen base-class is (wat andere mensen dan net het sterke punt vinden). 

We krijgen meer commando's:


dotnet add reference
ander project toevoegen (bijvoorbeeld class library)
dotnet new sln
nieuwe solution-file toevoegen
dotnet new razor
nieuw razor project aanmaken

dotnet new blazor
blazor is nog experimenteel (en ik moet mijn versie op mijn pc updaten, want blazor kent deze nog niet). met blazor kun je met web-assemblies in je HTML ook C# code gebruiken. In je HTML dit plaatsen:
@functions{
// c# code 
//....
}
mono wordt dan meegeladen in een web assembly. Is het uitzoeken en uitproberen waard!
dotnet new serve
volgens mij een eigen webservertje, maar ook dit ondersteunt die versie van mij nog niet.
dotnet publish -r linux-arm 
publiceren van je applicatie voor een bepaalde runtime (in dit geval op een mac compilen voor de raspberry)

Oude WinForms applicaties kunnen volgens Scott overgezet worden naar de .NET Standard Library. Zo laat hij een 15 jaar oude applicatie zien, Memory. Dit heeft hij omgezet naar een applicatie in de browser (en het ziet er nog beter uit ook). Ik heb hier nog iets staan over .NET en Go dat het naar ASM gecompileerd wordt, waardoor alles portable wordt. Echt specifieke Windows-zaken worden niet ondersteund (register van Windows bijvoorbeeld), maar volgens Scott was daar met JSON en interfaces nog wel wat aan te doen.

Scott werkt op een Mac, hij heeft een Pro Pi bij zich (Kickstarterproject), in een soort kleine laptop zit een touchscreen en een soort raspberry, LCD display en nog wat zaken. In Visual Studio kan hij met de nieuws System.Device.GPio die leds aansturen. Hij heeft een SSH verbinding met de raspberry, zet zaken over met scp -4 en daar zit weer een debugger tussen en het werkt ook nog eens.  Ik heb hier nog iets staan over een launch.json en launchremoteconsole.

Ook laat Scott ons een microcontroller zien van Wilderness Labs waarop .NET Core draait, het is een Kickstarter-project: link. Die stick boot in mscorlib, om het bij te werken moet je de boel flashen. 

Hierna heb ik nog iets staan over mscorlib opensource en een ecosysteem met pluggable stuff.  Scott verwacht dat alle WebForms en MVC applicaties over zullen gaan naar de Cloud en de .NET Standard Library.

Afsluitend is het volgens Scott "a cool time to be a developer" en daar heeft hij helemaal gelijk in!