Ook voor vandaag staan er weer een aantal interessante sessies gepland, een overzicht is te vinden op de TechDays website. Ook zal vandaag weer volop herrie gemaakt worden op twitter via hash tag #techdaysnl.
De eerste sessie voor vandaag is die van Jesus Rodriguez over het combineren van NodeJS en Azure. Hij noemt zich trouwens Hackerpreneur 🙂
NodeJS is een platform gebaseerd op de Chrome Javascript engine en die draait dus op de server. Hier wordt dus Javascript aan de server kant gedraaid en is in korte tijd zeer populair geworden. Het is beschikbaar als open source onder de MIT licentie.
Een webserver die op naar een poort luistert, is slechts 3 regels Javascript code. Hier zit wel een fluent notatie achter maar dat is natuurlijk best een goed voorbeeld van de kracht van NodeJS.
Het is daarbij Single Threaded en Event Driven. dit zijn de ingrediënten voor een schaalbare oplossing. De architectuur van de run-time is zeer eenvoudig, zeker vergeleken met IIS. Maar het is dan ook vooral interessant voor CRUD operaties en niet echt voor actie met veel CPU acties zoals video-encoding.
Het kan zelfstandig gehost worden met een node.exe maar er is ook een IIS extensie beschikbaar. De huidige Windows versie verscheelt weinig met de Linux implementatie.
IIS Node draait binnen IIS en is daardoor schaalbaar over meerdere processoren. In een web.config moet dus de iisnode handler toegevoegd worden als module in de web.config. Daarmee gaat je website reageren op node.js.
NodeJS kan ook binnen Azure draaien. Het kan zowel als web role (IISNode) als worker role (node.exe) toegepast worden. Er is powershell ondersteuning en er is een Azure SDK speciaal voor NodeJS.
Daarna kwam een demo rond het deployen naar Azure via Git? Ik zie zelf het verband niet echt met het onderwerp van de presentatie…
Je moet wel opletten als je lokaal test en daarna deployed naar Azure. Lokaal gebruik je een hard gecodeerde poort, bv. 1111. Maar het script moet op Azure aan de host environment vragen wat de poort is die toegewezen wordt.
Hij liet ook een tooltje (npm) zien waarmee lokaal met NodeJS getest kon worden terwijl dit met Azure kennis rekening gehouden wordt. Met tooling kan dan bv. een website op afstand aangemaakt worden met NodeJS logica er in vanaf je eigen dosprompt. De powershell hulp doet iets vergelijkbaars, kies je eigen wapens dus.
NPM ondersteunt ook andere leuke toollie zoals Express, socket.io, Jade, redis, coffee-script en async communicatie.
Een andere demo liet het uploaden van een simpel chat programmaatje zien van minder dan vijftig regels javascript code. Wederom werd deze naar azure gedeployed maar werd nu eerst de site vanaf de dosprompt in Azure aangemaakt en daarna de code via git er bij Azure ingeschoven?
NodeJS kan ook binnen Azure weer de Azure servicebus aanroepen. Hiermee kan de servicebus heel lichtgewicht ontsloten worden. Ook Topics werd gedemonstreerd. Het is verder niet gedemonstreerd maar dit geldt ook voor andere Azure services via andere te installeren packages.
Als laatste werd Windows Azure Mobile Services aangehaald. Deze zijn ook op NodeJS gebaseerd. Microsoft ondersteunt dit dus echt met ‘eat your own dogfood’.
Hierna ben ik naar de sessie van Paula JanuszKiewicz. Zij houdt zich bezig met penetratie testen. De sessie gaat over Malware 2.0: The case of the most dangerous cyberspies.
De scope van de sessie is vooral om de mogelijkheden te bekijken van wat malware echt kan uitrichten. Waar kan deze bij? Hoe verbergen zij zich? Hoe wordt het geïnstalleerd en start het zichzelf
Wil je meer weten over de presentatie inhoudelijk, kijk dan op haar website.
De sessie gebruikt Stuxnet als kapstok. Deze malware was gesigned met valide certificaten en probeerde in een bepaald land centrifuges bij uranium verrijking kapot te maken… Dit is niet bepaald een grap zoals alle puntjes met pacman op te eten.
Paula houdt een perfect verhaal op hoe Stuxnet zich heeft kunnen verspreiden en hoe het gestart werd.
Vervolgens werd ons een zero day getoond die gisteren gevonden is. Het draaide rond het laden van dlls die niet gesigned zijn. Als je dit combineert met password testen op de juiste vorm (kleine letters, hoofdletters, etc.) dan heb je een hack 🙂
Er volgen nog een paar interessante hacks. Wat opvalt, is dat het eigenlijk heel eenvoudig is om vreselijke code uit te voeren. De zaal was erg stil en onder de indruk. En wat nog meer opvalt dat een hacker weinig beperkt wordt om op verschillende gebieden zijn code uit te voeren.
De pauze is geweest. Op naar de sessies van Roy Janssen over Mobile Services voor Windows (Phone) 8 applicaties.
Eerst nog wat reclame.
Azure Mobile Services bestaat uit:
– autorisatie (bv. vanuit Facebook)
– Push notificaties (nu wel makkelijk)
– Data access
– etc.
En het is door Microsoft helemaal gebouwd met NodeJS. En het is ook beschikbaar voor Android en IOS (naast de Windows stack). Mooi toch? Microsoft heeft er gewoon templates voor staan.
Het is beschikbaar voor MSDN gebruikers voor een jaar lang. Maak dus ook een betaalde versie waarmee je je Azure kosten kunt gaan dekken.
De demo toont hoe je data centraal laat aanmaken. Wat heb je nodig om dit te maken? Ten eerste moet je de SDK downloaden. En je krijgt al direct een SqlAzure database. En je mag ik je app.xaml.cs een MobileServiceClient instance refereren. Aanroepen moet met Async await opgelost worden.
App store applicaties moeten ook met Azure Mobile Services geassocieerd worden. Dit om te voorkomen dat 3e partijen jouw services kunnen consumeren.
Er is ook getoond hoe een Mobile Services SqlAzure tabel aangemaakt moeten worden. Interessant is ook dat je kunt aangeven onder welke authenticatie omstandigheden je CRUD acties mag doen.
En je hoeft geen kolommen te definiëren. Het model entiteit met dezelfde naam in de code genereert via Json overdracht de kolommen op Azure.
De Crud acties op de client moet dus allemaal awaitable geïmplementeerd worden.
Roy heeft portable class libraries toegepast om zijn demo geschikt te maken voor zowel Windows 8 als voor Phone 8. Dit betekent dat je dus entiteiten en andere gezamenlijke klassen eenmalig kunt schrijven en dus later kunt delen. Er zijn dus geen dubbele code oplossingen gezocht te worden.
Push notification was voor Windows Mobile best lastig. Er moest zelf een notificatie server gebouwd worden. Maar Mobile Services biedt gewoon de mogelijkheid om een notificatie channel aan te laten maken. Zie het als een hele grote link. Je await gewoon een channel aanvraag. Op Azure zie je dan een Push channel tabel aangemaakt worden. En hier maak je een ViewModel voor. Maar let op! Voorkom dat je hetzelfde kanaal niet meerdere keren aanmaakt. Dit doe je door de standaard scripts op Azure kant inregelen. Dit kan ook weer uitgebreid worden met het weggooien van channels die niet meer gebruikt worden (onthoud datum laatste succesvolle access).
En aan de Azure kant kun je bij CRUD acties extra code laten uitvoeren (zie het als een trigger). Hierbij kun je dus ook notificaties laten genereren, aan de server kant voor alle cliënts. Maak aan de cliënt kant wel in je manifest gewag van de notificaties toestemming wens. Houd er dus ook in je code rekening mee dat gebruikers geen notificaties willen.
Er is weer een Catch. De notificatie is voor WP8 net iets anders als in Win8 opgelost. Je moet dus overal in je code en serverside scripts (het is tenslotte NodeJS) je code voorbereiden op die twee situaties, bv. met een IF THEN ELSE.
Bigger, Faster, Stronger. Dit is de titel van Mads Kristensen over Asp.Net optimalisatie. Gelukkig wordt dit steeds makkelijker door tooling. En optimalisatie is steeds belangrijker. Want een langzamere site betekent minder bezoekers, minder omzet, etc.
Mads demonstreert met optimalisatie test sites een site maar dan een hele oude versie :-). Ter leering ende vermaek. En die gaan we optimaliseren.
En waarom Asp.Net omdat optimalisatie van de front-end veel interessanter is. De backend maakt maar 13 procent van de communicatietijd uit.
Asp.Net 4.5 maakt je site al minimaal dertig procent sneller als je deze alleen al installeert op de server!
De Asp.Net Performance website die getest wordt, heeft een hele lijst aan tips staan. YSlow is een browser plugin die ook veel vertelt over trage sites. En PageSpeed van Google is ook erg handig om je site te fixen.
Een score van 100% is overkill maar meer dan 90% is wel een goede start 🙂
Gzippen van teksten van je pagina’s is al een makkelijke configuratie fix. Alles wordt gecomprimeerd over het lijntje gegooid. Plaatjes zippen geeft geen winst want die zijn vaak al gecomprimeerd… Win2008R2 doet dit al automatisch overigens.
Vervolgens wordt browser caching / expires headers aangedragen. Ook dit is op de server in te regelen. Maar als een browser MOET expiren, dan kan je dit forceren door een andere fysieke paginanaam te gebruiken of een ‘fingerprint’ mee te sturen. De cliënt stuurt dan een dynamische aanvraag naar dezelfde pagina met een timestamp van de laatst aanvraag.
En vervolgens heeft Mads Bundling laten zien. Alle javascript en/of css wordt dan samengevoegd in 1 bestand en gecomprimeerd dus dat scheelt ook. Bundling kan in MVC4 toegepast worden maar het zit ook in de WebEssentials. Let wel op de volgorde waarin gebundeld moet worden want er is een volgordelijkheid in referentie (jQuery wilt graag vooraan staan). En denk ook aan de minified versies om over de lijn sturen.
Je cliënt script kan/moet overigens gewoon achteraan in de pagina zetten en niet in de head (dat maakt je pagina alleen maar trager). Maar als dit niet kan, bv. door partial views, gebruik dan de defer optie (en of async attribuut). Dit werkt bij de nieuwere websites meestal veel beter. Goed testen!
CSS moet juist wel in de head van de pagina 🙂 HTML5 laat het overal toe maar dit is vanuit performance perspectief vreemd.
Minification van eigen code kan met eigen bundles. Maar het kan ook met Web Essentials. Onduidelijk, ik zag niet goed of dit ook vanuit een web-project automatisch kan zoals met afgeleide, geneste bestanden in je project
Plaatjes moet je zo groot aanleveren als dat je ze wilt aanleveren op de site. Denk ook aan het verwijderen van exif informatie. Hier zijn websites voor. En er is zelfs een VS2012 extension die dit doet. dit kan tientallen procenten schelen.
En als je de plaatjes ook nog samenvoegt tot 1 plaatje (een sprite) win je ook eea.. En Plaatjes kunnen ook geminified worden 🙂 Nog leuker is de byte array van de plaatjes gewoon in de plaatjes plaatsen. Web essentials heeft hier een optie voor (optie op de HTML). Plaats dit in een class als je meerdere keren hetzelfde plaatje toepast. Er is ook nog een Nuget package die dit doet met “?embed” achter de naam van het plaatje. En hoe er rekening mee dat je een fix voor IE 6 en IE7 moet toepassen als je deze ook moet ondersteunen. En als je de CSS ook gzipped, dan heeft dit maar voor enkele procenten impact op de grootte.
Als laatste kun je de html minifyen. Dit wordt afgeraden (er zijn soms ook belangrijke spaties, denk bv. aan PRE, en er zijn nog geen foutvrije parsers van HTML) maar het is wel cool. Dus html regex parse code hier.
En uiteindelijk kan je ook nog voor HTML5 offline caching kiezen. De pagina worden dan maar 1 keer opgehaald en voor een bepaalde tijd lokaal gehouden. Mooi toch? Directe beschikbaarheid op de cliënt zonder web-verkeer.
Er zullen vast wel mee optimalisaties zijn, maar die zijn niet getoond.
Laurent Bugnion geeft voor mij (en nog een klein groepje survivors) de laatste sessie van de TechDays. Waarom deze sessie? Vorig jaar heb ik mogen genieten van zijn MVVMLight toolkit. Daarom, giving back.
En omdat het over de design language van MS gaat. Dus:
– Pride in craftsmanship
– fast and fluid
– authentically digital
– do more with less
– win as one
dit slaat allemaal op Metro, de grafische taal die uitgestraald wordt met Win8, Phone7/8, Xbox, etc.
Grappig: ‘underline’ wordt afgeraden. Dit wordt nu herkend als link en is dus verwarrend.
Daarna geeft Laurent een aardige uiteenzetting over de combinatie van tekst en beweging. O.a. de Pulp Fiction intro is hierbij aangehaald.
Ook wordt Skueomorfism aangehaald. Dit betekent dat het echte leven nagetekend wordt. Zo heeft de boeken-app van Apple boekenplanken in een kast. Dit heeft geen toegevoegde waarde voor de gebruiker. Microsoft vraagt designers dit weg te laten.
Laurent haalt ook de IMDB app voor Phone 8 aan. Overigens had hij daar de xap van. Zit hij in het ontwikkelteam?
Hij heeft ook aan de Nick app gewerkt. Grappig bovenaan het scherm zit een klodder slijm. Dit nodigt kinderen aan te swipen op die plek en dan komt een hulp balk tevoorschijn. dit zet er altijd al dus dit lijkt op Skeuomorfism. Maar hij vergelijkt het meer met de Windows knop op een Windows Phone. als die gelocked is, en je drukt op die knop dan krijg je een kleine swipe animatie. dus het verraadt een mogelijke gesture.
En hiermee zijn de TechDays 2013 afgesloten. Ik kan terugkijken op twee dagen waarin ik zeer intensief bezig ben geweest met nieuwe technologieën en nieuwe ideeën voor de toekomst heb opgedaan.
Op korte termijn ga ik met Azure Mobile Services aan de gang. Ook al omdat dit via een MSDN account is uit te proberen (net als alle andere Azure diensten overigens).
Thuis ga ik nu snel Phone 7 apps in elkaar zetten. Helaas kan mijn laptopje geen volledige hardware-virtualisatie aan blijkt de Phone 8 emulator niet te kunnen draaien. En bij gebrek aan een echt device valt er dus niks te testen en kan ik ook geen screenshots aanmaken die verplicht zijn voor de shop.
(Dit is een blog is life bijgewerkt. Sorry voor de typos die ik er niet uit heb kunnen halen)