Ik geef training in frontend tools en stacks als HTML, JavaScript, TypeScript, React, Angular en Vue. Ik schrijf boeken en artikelen over tal van (ICT-) onderwerpen. Ik was lead developer en directeur bij Yindo - Jouw digitale bibliotheek. Je kunt mij volgen op Twitter(@PeterKassenaar).

In dit blog vind je persoonlijke artikelen, die niet noodzakelijk tech-gerelateerd zijn.

Views and expressions are my own.

Terug naar de algemene site.

18februari

20% Korting Web Development Library - AngularJS

Web Development Library - AngularJS tijdelijk met vijf euro korting

Binnenkort verschijnt de uitgave Web Development Library – AngularJS. Het is nog niet verschenen, maar voor (zeer) korte tijd kun je het boek bestellen met een korting van vijf euro. Toch een aantrekkelijk idee in deze economisch barre tijden.

  • Normale prijs: EUR 24,95
  • Voorintekening: EUR 19,95

Je kunt je exemplaar reserveren op de sites van

Niet alleen heb je dan een leuke korting te pakken, je weet ook zeker dat je het boek als eerste binnen hebt zodra het is verschenen.

Maar wees er snel bij. De korting is maar geldig tot 21 februari 2015!

Peter Kassenaar
-- 18 februari 2015.

10november

JavaScript: zelf asynchrone- en callbackfuncties schrijven

In webapps hebben we regelmatig te maken met asynchrone JavaScript-functies. Timing is dan belangrijk. Denk bijvoorbeeld aan Ajax-calls naar een externe server waarvan niet bekend is hoe lang ze duren.

Callbacks

Maar ook zelf zul je wellicht asynchrone functies willen schrijven waarvan op voorhand niet bekend is hoe lang de uitvoering duurt. Het is dan een goed idee om de asynchrone functie een callbackfunctie te laten accepteren als parameter.

Je kunt dan de callbackfunctie uitvoeren op het moment dat de asynchrone functie gereed is. Dit is uiteraard met name van belang als je volgende functie afhankelijk is van het resultaat dat de asynchrone functie retour geeft.

Als je jQuery gebruikt, heb je vast wel eens functies als .show(), .hide() of .slideUp() geschreven. Al deze functies accepteren optioneel een callbackfunctie als laatste parameter. Je weet dan zeker dat de callback pas wordt uitgevoerd als de ‘hoofdfunctie’ klaar is.  Hoe schrijf je zoiets zelf?

HTML-code

We schrijven een eenvoudige pagina met de volgende HTML:

<h1>Async functies en callbacks</h1>
<button id="btnAsync">Async</button>
<div id="divFeedback"></div>
<h2 id="divResult"></h2>

Zoals je ziet is er alleen een knop waarop geklikt kan worden en twee divs waarin het resultaat wordt getoond. We schrijven de volgende code in plain JavaScript, dus zonder een bibliotheek als jQuery te gebruiken. Alle volgende functies worden ook geschreven binnen de event handler die het klikken op de knop afvangt:

document.getElementById('btnAsync').addEventListener('click', function () {
  // …
}

1. De asynchrone functie

De functie die we ‘asynchroon’ laten uitvoeren, heeft twee parameters.

  • Het DOM-element waarin het resultaat van de functie wordt geschreven.
  • Een getal waarvan de waarden van 0 tot en met getal bij elkaar worden opgeteld. Deze waarde wordt ook teruggegeven. Als 10 wordt meegegeven, retourneert de functie 1+2+3+4+5+6+7+8+9+10.

Om hier asynchroniteit te simuleren wrappen we de functie in een statement setTimeout(). We geven een vertraging van 3000ms (3 seconden).

 

function asyncFn(el, num) {
     setTimeout(function () {
         // tel alle getallen van 0 tot num bij elkaar op.
        var totaal = 0;
         for (var i = 0; i <= num; i++) {
             totaal += i;
         }
         document.getElementById(el).innerHTML =
			"Async-functie gereed. Totaal: " + totaal;
         return totaal;
     }, 3000); // simuleer vertraging van 3 seconden.
};

2. De JavaScript-call : FOUT

Om de functie aan te roepen zou je de volgende code kunnen schrijven: je roept de functie asyncFn() aan en het resultaat wordt opgeslagen in een variabele totaal. Vervolgens schrijven we het totaal naar het scherm, in de div divResult.

 // ********* Async zonder callback - foutieve uitvoer
 var totaal = asyncFn('divFeedback', 10); 
document.getElementById(
'divResult').innerHTML = 'Klaar! Het totaal is: ' + totaal;

Dat lijkt goed te gaan, maar het resultaat is niet zoals we gehoopt hadden:

async_img_01

Pas na de drie seconden vertraging van de asynchrone functie wordt het correcte resultaat (55) in de pagina getoond.


async_img_02

3. JavaScript – CORRECT

Om er voor te zorgen dat de asynchrone functie goed verwerkt wordt, moeten we zowel de functie zelf aanpassen als het aanroepende statement.

  • De functie moet gereed worden gemaakt om een callbackfunctie als parameter te ontvangen.
  • In de aanroep moeten we de functie meegeven die we willen uitvoeren nadat de asynchrone functie klaar is.

Dit heen en weer schuiven van functies als parameters bij andere functieaanroepen is een van de krachtige (en in mijn optiek: elegante) eigenschappen van JavaScript.

De asynchrone functie passen we bijvoorbeeld als volgt aan:

function asyncFn(el, num, callback) {
         setTimeout(function () {
         // tel alle getallen van 0 tot num bij elkaar op.
        var totaal = 0;
         for (var i = 0; i <= num; i++) {
             totaal += i;
         }
         document.getElementById(el).innerHTML =
                 "Async-functie gereed. Totaal: " + totaal;
         callback(totaal); // callbackfunctie aanroepen, met juiste resultaat als parameter.
    }, 3000); // simuleer vertraging van 3 seconden.
};
En de aanroep van deze functie wordt daarna als volgt herschreven:
// ******* Async met callback - de correcte manier
asyncFn('divFeedback', 10, function showResult(totaal) {
	document.getElementById('divResult').innerHTML =
            
'Klaar! Het totaal is: ' + totaal; });

Hier is goed te zien dat asyncFn() nu wordt aangeroepen met behalve divFeedback en 10 de callbackfunctie als derde parameter. Deze ontvangt op zijn beurt het berekende resultaat als parameter, vanuit de asyncFn. Nu is het resultaat direct naar wens, zoals de afbeelding laat zien.

async_img_03
Om de user experience te verbeteren is het bovendien natuurlijk een goed idee om de bezoeker een melding te geven dat de app bezig is met rekenen. Dat kunnen we bijvoorbeeld doen door een boodschap als ‘Even geduld a.u.b.’  te schrijven in het meegegeven element:

function asyncFn(el, num, callback) {     
document.getElementById(el).innerHTML =
'even geduld...'
;
     setTimeout(
function
() {
        
// ….
    }, 3000); // simuleer vertraging van 3 seconden. };

4. Optioneel: Werken met benoemde functies

Veel programmeurs die zijn gewend te werken met static/compiled languages als Java of C# worden nog steeds een beetje zenuwachtig als ze dat gegoochel met anonieme JavaScript-functies zien als functieparameters. In dat geval mag ook altijd gewerkt worden met benoemde functies (named functions). De code voor aanroepen van de asynchrone functies ziet er dan bijvoorbeeld als volgt uit.

asyncFn('divFeedback', 100, showResult);
//…


function
showResult (totaal) {
     document.getElementById(
'divResult'
).innerHTML =
            
'Klaar! Het totaal is: ' + totaal; }

Een bijkomend voordeel van het werken met named functions is dat de naam van de functie in de call stack wordt getoond bij het debuggen in de Chrome Dev Tools of andere debugger. Het is makkelijker om fouten op te sporen in een serie benoemde functies dan in een stapel anonieme JavaScript-functies.

Samenvatting

In dit artikel heb je gezien hoe je functies schrijft die asynchrone handelingen uitvoeren. Hier werd dat gesimuleerd met een setTimeout(). In werkelijkheid zul je op die plek bijvoorbeeld een Ajax-call naar een externe server uitvoeren.

Je hebt ook gezien hoe je eigen asynchrone functie een callbackfunctie accepteert als parameter en hoe je vervolgens de functieaanroep goed schrijft. Het is gebruikelijk om de callbackfunctie als laatste parameter in te stellen als je eigen functies schrijft.

Meer weten over JavaScript? Lees Web Development Library – JavaScript voor zelfstudie in JavaScript-syntaxis, functies, objecten en modulair programmeren. Volg je liever een op maat gemaakte JavaScript-training met persoonlijke begeleiding? Neem dan contact op!

Peter Kassenaar
-- 10 november 2014.

03november

Anglebrackets conference 2014 - Las Vegas

Evenals vorig jaar zal ik dit jaar de webconferentie Anglebrackets in Las Vegas bezoeken. Dit jaar wordt de hoofdconferentie gehouden van 10 tot en met 13 november in MGM Grand Hotel & Casino in Las Vegas.

anglebrackets conference 2014

Ook in 2013 nam ik deel aan deze conferentie en het was oorspronkelijk niet de bedoeling dat ik opnieuw zou gaan. Ik heb er superveel geleerd over onder meer AngularJS, JavaScript, CSS en Windows Azure.

Maar de closing ceremony van vorig jaar (elke conferentie in de US wordt afgesloten met een groots feest en een vaak humorische keynote) bevatte een verloting. Naast USB-kabels, muismatjes en stickers, was de hoofdprijs een gratis ticket voor de conferentie van 2014.

En wiens badge werd als winnaar uit de grote ton met aanwezigen getrokken? Juist!

Dat betekent dus dat ik dit keer alleen de vlucht- en hotelkosten zelf zou hoeven betalen. De toegang tot de conferentie ($1.795,-)  is gratis. Dat is natuurlijk een buitenkansje dat ik niet mocht laten lopen.

En dus stap ik komende zondag, 9 november, opnieuw op het vliegtuig naar de States. Via een tussenstop in Seattle (thuishaven van onder meer Microsoft, Boeing en Starbucks) vlieg ik naar Las Vegas.

Sessies die op mijn shortlist staan voor een bezoekje zijn onder meer:

    • MOVING FROM ASP.NET AND JQUERY TO ANGULAR AND WEBAPI: A CASE STUDY
    • BUILDING ANGULARJS APPS ON THE MEAN STACK
    • BUILDING CUSTOM ANGULARJS DIRECTIVES - A STEP-BY-STEP GUIDE
    • TESTING ANGULARJS WITH JASMINE, FROM SCRATCH
    • TWITTER BOOTSTRAP COMPONENTS
    • ANGULARJS PATTERNS FOR BUILDING BUSINESS APPS
    • BUILDING HTML5 PERSISTENT APPLICATIONS
    • DESIGNING FOR PERFORMANCE

En dan maar hopen dat er niet te veel overlap is tussen de verschillende sessies. Als elk jaar heeft Anglebrackets topsprekers uitgenodigd. Van de partij zijn onder meer Scott Guthrie, Scott Hanselman, John Papa en Dan Wahlin. En uiteraard Douglas Crockford.

Deze JavaScript-goeroe ontmoette ik vorig jaar ook en na zijn keynote discussieerde ik (kort) met hem over de toekomst van JavaScript en de rol van bekende webpioniers als Douglas Engelbart, Tim Berners-Lee en Marc Andreessen. Het was voor mij een van de hoogtepunten van de conferentie.

Peter Kassenaar (links) en Javascript-hero Douglas Crockford

Ik houd in ieder geval mijn Twitter-feed bij (volg @PeterKassenaar voor status-updates), maar zal proberen ook inhoudelijk te bloggen over de conferentie.

Peter Kassenaar
-- 3 november 2014.

30oktober

Web Development Library - jQuery Mobile

wdl_jqm_covers

Deze week is de uitgave Web Development Library – jQuery Mobile verschenen. In eerdere aankondigingen hiervan zag je altijd de groene cover, die aan de linkerkant staat (=dezelfde kleur als het jQuery Mobile logo). Maar door een technische fout is het omslag helaas in een andere kleur gedrukt.

En omdat het natuurlijk zonde is  - en ook erg duur zou zijn - om tweeduizend boeken in de papierversnipperaar te gooien en nieuwe exemplaren te drukken, is besloten deze editie te handhaven. Je zult in de (web-) winkels dan ook het boek met de oranje cover aantreffen.

Het goede nieuws is dat de inhoud wel goed is gedrukt en dat deze even uitstekend is als met een groene cover het geval zou zijn!

In het boek leer je hoe je websites optimaliseert voor gebruik op een mobiel apparaat (smartphone of tablet) door gebruik te maken van de JavaScript-bibliotheek jQuery Mobile. Nooit meer zoomen-en-verschuiven door je website op een mobieltje! Met een mobiele variant van je website hoef je de code maar één keer te schrijven en ziet je site er goed uit op iPhone, Windows Phone en Android-apparaten.

Specificaties

  • Boek, paperback, 210 pagina’s.
  • ISBN-13: 978-90-5940-760-2 (9789059407602)
  • Geschikt voor opleidingen en zelfstudie
  • Onafhankelijk van gebruikte platform en browser
  • Prijs: EUR 24,95

Van de flaptekst:

“Met dit deel van de Web Development Library leert u snel werken met jQuery Mobile. Dit framework optimaliseert websites voor weergave op een mobiel apparaat. De verwachting is dat medio 2015 websites voor het grootste deel met een mobiel apparaat worden bezocht. Gelardeerd met veel voorbeelden en oefeningen is dit boek uw ultieme inleiding in de kracht van werken met jQuery Mobile. Tot de behandelde onderwerpen behoren:

  • Kennismaken met jQuery Mobile
  • Navigeren met toolbars, buttons en navbars
  • Meer UI-componenten: panels, popups en collapsibles
  • Listviews maken en gebruiken
  • Werken met formulieren
  • Vormgeven met thema’s
  • De jQuery Mobile-API

Meer informatie en downloads bij het boek vind je op www.webdevelopmentlibrary.nl

Direct bestellen

Peter Kassenaar
-- 30 oktober 2015

24oktober

Verwacht: Web Development Library – AngularJS

Cover van Web Development Library - AngularJS

Dit jaar ben ik begonnen met de Web Development Library, een serie boeken die op een wat meer gevorderd niveau ingaat op zaken waar de moderne frontend web developer mee te maken krijgt.

Op dit moment zijn er drie boeken verschenen in deze serie: JavaScript, jQuery en jQuery Mobile. De volgende titel in de reeks is inmiddels bekend: Web Development Library – AngularJS.

Over AngularJS

AngularJS is een populair client-sided MV*-framework, geschreven in JavaScript. Het biedt voorzieningen waar moderne webapps om vragen zoals data binding, routing, dependency injection, controllers, views en modules.

Ik schreef op dit blog al eerder over AngularJS, onder andere een introductie en over bronnen voor AngularJS. Ook is AngularJS verreweg het meest gevraagde onderwerp voor mijn trainingen. Ter indicatie: ruim 50% van al mijn cursussen gaat over AngularJS. Dat betekent dus dat de andere 50% wordt ingenomen door alle overige onderwerpen tezamen (JavaScript, jQuery, PhoneGap, enzovoort). Met andere woorden: Angular is hot.

In overleg met uitgeverij Van Duuren Media is dan ook besloten dat AngularJS het eerstvolgende onderwerp wordt waarover een uitgave zal verschijnen in de Web Development Library.

Concept inhoud

De inhoud van het boek staat nog niet vast en op detailniveau kunnen nog aanpassingen worden doorgevoerd. Op dit moment ziet de concept inhoudsopgave er als volgt uit:

  • Kennismaken met AngularJS
  • Uw eerste AngularJS-applicatie
  • Meegeleverde directives gebruiken
  • Controllers en modules
  • Routing binnen applicaties
  • Gegevensvoorziening met Services en Factories
  • Live gegevens ophalen met $http
  • Werken met interceptors
  • Custom Directives schrijven
  • AngularJS-applicatiets testen

Ik ben het boek op dit moment aan het schrijven. Uitgave wordt verwacht in het eerste kwartaal van 2015.

Wil je op de hoogte gehouden worden van het verschijnen van deze titel? Laat dan een berichtje achter via de contactpagina. Je krijgt dan eenmalig een e-mailbericht als het boek is verschenen.

Peter Kassenaar
-- 24 oktober 2014

10oktober

jQuery Mobile videotutorials

9789059407602-kleinBinnenkort verschijnt in de serie Web Development Library de titel jQuery Mobile. Dit is een boek dat uitgebreid ingaat op het maken van webapps die zijn geoptimaliseerd voor weergave op mobiele apparaten (smartphones, tablets).

Bij deze uitgave heb ik ook een serie videodemo’s gemaakt. Je kunt ze aanvullend aan het boek bekijken om meer te leren over jQuery Mobile. Natuurlijk is het mogelijk uitsluitend de video’s bekijken, maar het gaat veel beter als je ook het boek hebt gekocht ;-).

In de videodemo’s wordt het maken van een jQuery Mobile website/webapp besproken vanaf het beginpunt. Er wordt gekeken wat de werking en architectuur van jQuery Mobile-sites is, daarna worden de visuele widgets besproken die met dit uitgebreide mobiele framework worden meegeleverd: pages, toolbars, panels, listviews, enzovoort.

YouTube

Het maken van de aanvullende video’s is work in progress, het is de bedoeling in de loop van de komende weken het aanbod verder uit te breiden en ook video’s te maken met onderwerpen waarvoor in het boek geen ruimte meer was.

Hieronder de eerste video uit de lijst (http://youtu.be/X7VaAPzCm_w)

 

De totale serie is te vinden als YouTube-afspeellijst: http://www.youtube.com/playlist?list=PLhOYRbbfrvpF5FjupbTLZLCgoQRNy4a22

Om automatisch op de hoogte te worden gehouden als er een nieuwe video in de reeks beschikbaar is, kun je je abonneren: klik op de knop Abonneren, rechts onder de banner van het videokanaal.

youtube_channel

Opmerkingen voor uitbreidingen of verbeteringen zijn zoals altijd welkom! Je kunt ze kwijt bij de video’s zelf, of onder deze blogpost.

Peter Kassenaar
-- 10 oktober 2014.

15augustus

Web Development Library - jQuery

9789059407596Deze maand is het tweede deel in de serie Web Development Library, verschenen. Dit is Web Development Library – jQuery. Het is het logische vervolg op Web Development Library – JavaScript.

Als je als Web Developer nog nooit van jQuery hebt gehoord, heb je waarschijnlijk de laatste vijf jaar onder een steen geleefd. De andere optie is dat je net met je studie, of opleiding bent begonnen. Maar ook als je jQuery al wel kent, betekent dit nog niet dat je met alleen kopiëren en plakken genoeg kennis hebt om sites zelf uit te bouwen met dit uitgebreide JavaScript-framework.

Wat is bijvoorbeeld precies de rol van document.ready()? Mag je meerdere document.ready()’s per pagina hebben? Wat betekent het dollarteken $ in een statement? Hoe maak je effecten en andere visual effects met jQuery? Hoe worden plug-ins aan een pagina toegevoegd en geconfigureerd? Op al deze vragen geeft Web Development Library – jQuery het antwoord!

Specificaties

  • Boek, paperback, 260 pagina’s.
  • ISBN-13: 978-90-5940-759-6 (9789059407596)
  • Geschikt voor opleidingen en zelfstudie
  • Onafhankelijk van gebruikte platform en browser
  • Prijs: EUR 24,95

Van de flaptekst:

“Met dit deel van de Web Development Library leert u snel werken met jQuery. Dit framework tilt de kracht van JavaScript naar een hoger niveau en strijkt tevens de verschillen tussen diverse browsers soepeltjes glad. Gelardeerd met vele voorbeelden en oefeningen is dit boek uw ultieme inleiding in de kracht van werken met jQuery. Tot de behandelde onderwerpen behoren:

  • Kennismaken met jQuery
  • HTML- en CSS-functies in jQuery
  • Events afhandelen in jQuery
  • jQuery-animatiefuncties
  • jQuery en Ajax
  • jQuery-plug-ins
  • Werken met jQuery UI

Meer informatie en downloads vindt u op www.webdevelopmentlibrary.nl.

Direct bestellen

-- Peter Kassenaar
15 augustus 2014

07juli

Web Development Library – JavaScript

9789059407589

Vorige week schreef ik over het ontstaan van de nieuwe serie Web Development Library; inmiddels is het eerste boek in deze reeks verschenen!

De basis van elke moderne webapp is JavaScript. Pas als je JavaScript in enige mate beheerst, is het een goed idee om verder te gaan met jQuery, PhoneGap of andere JavaScript-uitbreidingen. Het is dan ook logisch om de serie te beginnen met een boek over JavaScript.

In dit deel leer je programmeren in JavaScript, ondertussen de belangrijkste programmeertaal op internet. Zonder JavaScript zouden sites als Gmail, Facebook, Twitter en talloze andere niet eens bestaan. In het boek leer je JavaScript programmeren vanaf de basis. Eerst wordt ingegaan op taalconstructies, variabelen, lussen en voorwaardelijke statements.

Later maak je kennis met drie belangrijke JavaScript-pijlers als Functies, Arrays en Objecten. Aan het eind wordt ingegaan op JavaScript-mogelijkheden voor objectgeoriënteerd programmeren (ja, dat kan!), overerving, het maken van eigen modules en bibliotheken.

Specificaties

  • Boek, paperback, 240 pagina’s.
  • ISBN-13: 978-90-5940-758-9 (9789059407589)
  • Geschikt voor opleidingen en zelfstudie
  • Onafhankelijk van gebruikte platform en browser
  • Prijs: EUR 24,95

Van de flaptekst:

“Dit eerste deel van de serie Web Development Library biedt een stevige basis voor het programmeren in JavaScript, de scripttaal die interactiviteit in webbrowsers mogelijk maakt. De auteur gaat uitgebreid in op taalconstructies, opdrachten en de vele mogelijkheden die deze flexibele programmeertaal biedt. Met behulp van voorbeelden en oefeningen ontwikkelt u zich tot een gevorderde JavaScript-programmeur. Tot de behandelde onderwerpen behoren:

  • Kennismaken met JavaScript en JavaScript-gereedschappen
  • Statements, gegevenstypen, variabelen en operatoren
  • Functies, arrays en objecten
  • Programmaverloop
  • Werken met events en event handlers
  • Werken met het document object model (DOM)
  • Gevorderd gebruik van functies
  • Modulair programmeren

Meer informatie en downloads vindt u op www.webdevelopmentlibrary.nl.

Direct bestellen

-- Peter Kassenaar
7 juli 2014