Nederlands (NL-nl)English (United Kingdom)
Domain modelling with the F# type system: Make illegal states unrepresentable
Written by Angelo vd Sijpt   


A review of the Devnology F# Meetup with Scott Wlaschin by Aage ten Hengel

Monday’s meetup focusing on domain modeling with F# was hosted by Infi, at their offices located near the city center of Utrecht. Their kind hospitality, the free pizza and F# stickers got things off to a good start.

Around seven o’clock everybody made their way to the beautiful, old-fashioned lecture hall where Scott would have his talk. After a brief introduction on who the Infi-Team is, Scott began the topic at hand: Domain modeling with F#.

Scott addressed the fundamentals of F# (and functional programming) fast pacing through a couple of slides, but giving room for questions at all times. Scott comes across as a kind, passionate and funny man (“for those who don’t know what a service is, it’s just a microservice without the ‘micro’ in front of it” – addressing the current microservice fad). He has a clear and visual way of explaining what makes functional programming unique.


Functional programming focusses on a few central building blocks: Functions (well, yeah), Composition (chaining functions makes a service, chaining services makes a use-case) and Types, which is the topic of this meetup.

One of Scott’s main points is that Types help you express your domain model in a very concise and explicit way. He has an example of an entire domain model (with about 10 types) on a single slide, as fully functional code. A key point he makes is that you can (and maybe should) type everything; a RegisteredCustomer is something else than a GuestCustomer and this should not be determined by setting (or forgetting to set) a flag on a Customer.

The other main point is that F# allows you to type your domain model in a way so that you could literally could not write incorrect code. He shows a type Payment type which has an Amount field of type PaymentAmount, where the PaymentAmount is of type decimal. At first I thought you could just make the Amount of type decimal, but the way Scott types this model makes sure you can’t accidentally set this field with a value of another type of type decimal. This ability eradicates the necessity of some unit tests and guarantees compile-time correct code.

This was a great talk, despite the 5 min. one-on-one Scott has with one of the audience members, much to the annoyance of some others (for which he apologized afterwards). I’m very much intrigued by F# and functional programming and looking forward to see whether the promises it makes (Conciseness, Rapid development, High Quality software and Fun!) hold up and if I can wrap my brain around it. Some of the tips Scott had I’m even taking back to my cozy OO world.


 
Learn a new language: Pharo
Written by Angelo vd Sijpt   

Dit verslag is geschreven door Kees Kremer (@kremerk). Bedankt Kees!

Learn a  Language: Pharo

Op 1 April mochten we in Arnhem kennis maken met de taal Pharo. Luminis had voor ons haar faciliteiten beschikbaar gesteld.  De meeting werd afgetrapt met pizza en een drankje. 

Daarna begonnen Stephan Eggermont en Diego Lont met de aftrap. Pharo is een open source Smalltalk implementatie met een actieve gemeenschap. Complexiteit van software is een steeds groter probleem, Pharo kan daar een oplossing voor bieden. Het bevat late-binding,  is volledig object georienteerd, gebruikt message passing en heeft goede ontwikkeltooling waarbij de omgeving een constante feedback geeft.

Bij de opdracht die we gingen uitvoeren kregen we direct de  ontwikkeltooling, te zien. De omgeving  was op te starten door het dowloaden van een Pharo-image. Die konden we openen en in dat image zat  zowel het deel van de opgaven als de ontwikkeltooling. We hoefden dus niet een compiler, IDE en opgaven te installeren. Het downloaden van een image voldoet.

De opgave bestond uit het implementeren van “1 euro + 100 cent = 2 euro” . Hiervoor gingen we een test schrijven waarvan het de bedoeling was dat deze ging slagen. Het bijzondere was bij het runnen van de test de Debugger (die ook in het Pharo Image zit) op kwam (1 does not understand: euro) waarna vanuit de debugger de methode euro op getal kon worden gedefinieerd.  Verschillende acties moesten worden uitgevoerd om de test te laten slagen, alles vanuit de debugger. Niet TestDrivenDesign maar DebugDrivenDesign. Blijkbaar kan een debugger hier ook kan worden gebruikt om nieuwe zaken te maken. 

Daarna gingen we op zoek naar mogelijkheden binnen het image. We zagen een deel van het metaprogrammeren, de tooling die de code visualiseert. Daarmee was de  complexiteit van de code in kaart gebracht. We zagen de classbrowser en gingen op zoek en vonden de implementatie van het if statement.

Naast dat we met de taal Pharo kennis maakten, was er ook voldoende ruimte voor discussie en vragen.  Smalltalk is geen mainstream taal, maar in bepaalde hoeken wordt het intensief gebruikt. Zoals plekken waar de software veranderende complexe zaken moet automatiseren  (zoals binnen het bankwezen) of grote database systemen (Gemstone op Pharo).  De Pharo ontwikkelaars gaven aan dat de productiviteit met Smalltalk/Pharo substantieel hoger ligt dan bij andere programmeertalen. Waarna we een discussie hadden over “Stel dat een programmeertaal bewezen efficiënter is  zou management hiervoor durven/moeten/kunnen kiezen?”. Ook hadden we het over de problemen waar we tegen aan lopen, zoals performance bij updaten van grote hoeveelheden gebruikers.  Een leuke levendige discussie.

Deze avond hebben we veel gezien. Het concept van het werken via een image biedt veel voordelen voor een avond zoals deze: iedereen was zo up en running en omdat het image een volwassen ontwikkel systeem aan boord heeft is het eenvoudig om opdrachten uit te werken. Verassend te zien dat hierbij zowel volwassen ontwikkeltooling als alle code beschikbaar is in zo weinig Mb’s.

Voor we het wisten was de avond ten einde. Een geslaagde avond bij Luminis (ze zoeken nog mensen!)

 
Codefest Algoritmiek
Written by Daan van Berkel   

Op 9 September waren wij zeer welkom bij Atos voor een nieuwe Devnology Codefest. Bij een codefest is het de bedoeling echt in de code te duiken, vaak gekoppeld aan een bepaald thema. Dit keer was het thema algoritmiek, in het bijzonder sorteren.

Felienne behandelde wat theorie over sorteren. Zo werd onder andere het verschil uitgelegd tussen comparatieve sorteeralgoritmen, bijvoorbeeld quicksort, en niet comparatieve sorteeralgoritmen, zoals bucketsort. Daarnaast werden enkele eigenschappen die sorteeralgoritmen kunnen bezitten besproken zoals stabiliteit.

Na de theorie was het tijd om de laatste hand, en voor sommige de eerste hand, aan hun gekozen sorteeralgoritme te leggen. Na een klein uur van intens coderen was het tijd om de resultaten met elkaar te delen. De spits werd afgebeten door een insertionsort geïmplementeerd in Scratch.

InsertionSort in Scratch

Scratch is een visuele programmeertaal ontwikkeld aan MIT om kinderen bekend te maken met programmeren. Dit maakte het mogelijk om een kat te laten miauwen wanneer de lijst gesorteerd was.

Na de Scratch implementatie volgende nog vele even bijzondere ideeën. Zo werd in een oplossing SQL gebruikt om data te sorteren, zonder direct de query mogelijkheden van SQL te gebruiken.

Sorteren in SQL

Felienne gaf een voorproefje van een deel van haar Strangeloop praatje door een (goed leesbaar!) sorteeralgoritme in Excel te demonstreren.

Excel excelleert in sorteren

Daarna volgde nog implementaties in D, een implementatie zonder if-while-case te gebruiken in JavaScript

Zelf sorterende bomen in JavaScript

en een zeer elegante implementatie van quicksort in Haskell.

De klap op de vuurpijl was een implementatie van een wel heel bijzonder sorteeralgoritme, genaamd bogosort. Het idee achter dit algoritme is om net zo lang de lijst te schudden tot dat deze door toeval op volgorde is gekomen.

 
<< Start < Prev 1 2 3 4 5 6 7 8 9 10 Next > End >>

Page 1 of 30

Meetings

Prijzen sponsors

JetBrains logo



Pictures

Bekijk alle foto's van Devnology op Flickr.

Why meet up?

Devnology meetings are aimed to bring together passionate developers to exchange ideas and experience, to discuss and network - geek to geek.

About us

We focus on concepts of software development. For new developments we will dig into the underlying principles and concepts and try to place this in a broad perspective of existing platforms and solutions. Read more...