Nederlands (NL-nl)English (United Kingdom)
Verslag Tetris codefest
Gepubliceerd door freek   

Dit verslag is geschreven door Mendelt Siebenga(@mendelt) . Bedankt Mendelt!

Op woensdag 7 April waren we welkom op het Delftse kantoor van OGD voor het Devnology Tetris Codefest. De OGD heeft een makkelijk bereikbaar kantoor aan de rand van Delft met op de bovenste verdieping een kantine voorzien van bar, dakterras, flipperkast en een arcade machine. Kortom een goede plek om met een stel programmeurs een avond lang in code te duiken.

Natuurlijk moest er eerst gegeten worden. Onder het genot van enkele biertjes, frisdrank en de indrukwekkende hoeveelheid chinees die door onze gastheer was besteld werden alvast de verschillende Tetris implementaties waar iedereen mee bezig was geweest besproken.

Na het eten kregen de deelnemers nog een half uur de tijd om de laatste hand te leggen aan hun code, hierna gingen we van start. Het was leuk om te zien dat er grote verschillen waren in aanpak. De meest in het oog springende versies waren de Tetris compiler in ANTLR en Tetris in SQL.

De ANTLR versie gebruikte een met ANTLR gegenereerde parser voor het inlezen van tekst-bestanden met Tetris spelsituaties waarna een stukje Java code zich gedroeg als speler en de juiste zetten deed. De resulterende spelsituaties werden weer in een tekst-bestand weggeschreven en kon als invoer dienen voor de parser waarna de java code een volgende zet kon verzinnen. Hiermee was meteen de grootste onvolkomenheid in traditionele Tetris implementaties geëlimineerd, de menselijke speler.

De SQL versie gebruikte een database voor het opslaan van spelsituaties. Alle logica zoals het draaien van stenen en dergelijke was in SQL geschreven. De gebruikersinterface was geschreven in C#. Veel van de logica in Tetris is erg goed in SQL set-based operaties uit te drukken, dus dit was niet eens zo'n gekke implementatie.

Ook de OGD zelf had ook een inzending. Zij demonstreerden een C# versie die normaal voor de interne programmeer-cursussen gebruikt werd. Dit was duidelijk de meest uitgebreide versie met een tetromino editor waar gebruikers zelf nieuwe blokken mee kunnen bouwen en meerdere front-ends voor verschillende UI frameworks. Verder werden nog een compleet functionele aanpak in Haskel gedemonstreerd, een functionele implementatie in Scala met een Java en JavaFX front-end. Twee Javascript versies en een Python Tetris.

Behalve de verschillende programmeertalen was het ook erg leerzaam om verschillen in aanpak te vergelijken. Implementatie-details zoals het roteren van blokken dat op een aantal verschillende manieren geimplementeerd was tot verschillen in methodologie, van TDD tot testloos en van functioneel to OO.

Helaas was er niet genoeg tijd om alle Tetrissen te bespreken, wat dat betreft was het goed dat geen van de drie aanwezige Devnology bestuursleden code had meegenomen, ze hebben het natuurlijk al druk genoeg met het organiseren van dit soort events. Ik zou hun en de mensen van de OGD graag willen bedanken voor een leuke en leerzame avond.


     


 
Verslag Rascal workshop
Gepubliceerd door freek   

Dit verslag is geschreven door Jeroen van den Bos (@jvandenbos) . Bedankt Jeroen!

In het indrukwekkende pand van TTY in het hartje van Amsterdam organiseerde Devnology haar tiende maandelijkse bijeenkomst. Het doel deze avond was om de metaprogrammeertaal Rascal te leren kennen door er met z'n allen een aantal problemen mee op te lossen -- de beste manier om een programmeertaal te leren kennen is tenslotte om er iets nuttigs mee te doen.

Jurgen Vinju starte het programma met een korte introductie over de achtergrond van de taal Rascal, waarin hij vooral inging op waar je het nou voor zou kunnen gebruiken. Een belangrijke conclusie is dat het domein van Rascal erg groot is: van software analyse tot de implementatie van refactorings en van grootschalige automatische migratie tot de ontwikkeling en constructie van volledige compilers voor domein-specifieke talen.

Daarna richtte Jurgen zich op praktische details om met Rascal aan de slag te gaan. Om het makkelijk te maken om met de taal te beginnen lijkt de syntax sterk op Java. Vrijwel alle bekende constructies zijn aanwezig, behalve de object-georienteerde, die ontbreken vrijwel volledig. Naast de vertrouwde syntax zijn er dan heel veel functies, zowel in de taal zelf als in de bijgeleverde bibliotheken die de specifieke metaprogrammeertaken vergemakkelijken. Zaken als het automatisch extraheren van feiten uit Java-projecten, ingebouwde ondersteuning voor het visitor-pattern, het simpel definieren en werken met bomen van datastructuren en het visualiseren van allerlei relaties.

Tijd voor actie! Jurgen stelde voor om eerst even de syntax te oefenen door een programma te schrijven dat alle priemgetallen teruggeeft tussen 1 en 100. Een aantal minuten later al waren er diverse oplossingen, waarvan de volgende de uitdrukkingskracht van Rascal goed laat zien:

[p | p <- [1..100], all(i <- [2..p], p != i ==> p % i !=0)]

Het echte werk lonkte: het analyseren van een Java project. Door de functies om allerlei feiten uit een Eclipse Java project te extraheren heb je in een paar statements een flinke dataset tot je beschikking waarmee je door middel van uitgebreide analyses (die veelal qua vorm sterk lijken op de voorbeeldregel hierboven) andere datasets kunt opbouwen. Om uiteindelijk inzicht te krijgen in de resultaten kan dan de visualisatiebibliotheek van Rascal worden aangeroepen, die in veel gevallen via een enkele aanroep een aangeleverde datastructuur omzet in een te kiezen visualisatie, van pie charts en diagrammen tot word clouds of complexere plaatjes.

Het mag duidelijk zijn dat Rascal een speciale domein-specifieke taal is. Waar veel DSLs een zeer beperkte uitdrukkingskracht hebben (vaak om de focus heel smal te houden) is Rascal een zeer omvangrijke en breed inzetbare taal. Dit zorgt ervoor dat de metaprogrammeur zich niet hoeft in te houden in het soort analyses dat hij wil uitvoeren. Het domein-specifieke zit hem hier dan ook duidelijk in alles dat er extra in of bij de taal wordt geleverd. Deze functies zijn puur gericht op het domein van Rascal en zorgen ervoor dat je je niet overmatig hoeft bezig te houden met zaken als data importeren of resultaten visualiseren. Dat gaat allemaal vrijwel vanzelf. Zo kun je al je aandacht richten op het schrijven van effectieve analyses.

Dat deden de Devnology bezoekers dan ook zeer fanatiek, waardoor er flink wat t-shirts zijn uitgedeeld voor het snelst oplossen van een van de opgaven. Uiteindelijke winnaars van de avond waren echter het duo @Rick en @Frank, die het tijdens de bijeenkomst op zich namen om een bug in de Windows-versie van Rascal ter plekke op te lossen.

De presentatie en opgaven van deze avond zijn te vinden op de website van Rascal.

     

 
Follow-up Pacman kata
Gepubliceerd door Arne Timmerman   

Een week geleden werd het kantoor van Marktplaats omgedoopt tot een ware Dojo. In korte iteraties werd er door 19 softwareontwikkelaars in deze Dojo een Kata uitgevoerd, met het einddoel om een werkende Pacman applicatie te bouwen. Wanneer er zo'n grote groep met specialisten werkt aan een gezamenlijke oplossing ontstaat er als vanzelfsprekend discussie over stijl en design van software. Kunnen we de klasse Field niet beter Game noemen? Waarom maken we geen aparte Pacman klassen, die de verantwoordelijkheid kent van de bewegingen van het beestje?

Een tweetal Martial Coding artists hebben de Kata thuis voortgezet in hun eigen favoriete taal, om na te denken over alternatieve oplossingen. Het eindresultaat willen wij jullie niet onthouden. In de oplossing van Eduard kan je zien hoe de oplossing van het probleem wordt vormgegeven in een object-geörienteerd ontwerp, geschreven in Perl, zonder gebruik te maken van Test Driven Development. De uitwerking van Jaap laat zien dat Python zich, net als Ruby, uitstekend leent voor testgedreven ontwikkeling van een bewegend (!) Pacman figuurtje. 

Heb jij een alternatief design voor het 'Pacman probleem', of een leuke oplossing in een andere taal? Laat het weten als reactie op deze post, of stuur een mailtje naar secretariaat@devnology.nl.

 
<< Begin < Vorige 11 12 13 14 15 16 17 18 19 20 Volgende > Einde >>

Pagina 19 van 31

Bijeenkomsten

Foto's

Bekijk alle foto's van Devnology op Flickr.

Waarom bijeenkomsten?

Bijeenkomsten van Devnology zijn erop gericht enthousiaste ontwikkelaars bijeen te brengen om kennis en ervaring uit te wisselen, te discussiëren en te netwerken - geek to geek.

Over ons

Vanuit Devnology willen wij vooral kijken naar concepten binnen software ontwikkeling. Als zich nieuwe ontwikkelingen voordoen zullen we vooral kijken naar het concept erachter en deze in een breed kader van eerdere technieken en/of bestaande platformen plaatsen. Lees meer...