La comunità Italiana di programmatori Haskell.
Per questo meeting ci siamo ritrovati a Milano in Venini 42, gentilmente ospitati da Mikamai e LinkMe.
Il gruppo di chi ha deciso di avvicinarsi al linguaggio è stato seguito da Luca, procedendo lungo la traccia della presentazione “Introduzione ad Haskell”. Durante la giornata le nuove leve hanno svolto esercitazioni sulla definizione di nuovi tipi, implementato Type Class e intuito così la definizione di Monade.
Titto ha illustrato la problematica dell’ottimizzazione e dell’efficienza in Haskell e gli strumenti per risolvere questo problema. Partendo da un esempio concreto (una serializzazione di dati sfruttando i generics), il gruppo ha visto come dare indicazioni efficaci al compilatore e come varia l’efficienza all’aumentare della complessità dei tipi. Gran parte del tempo è stata impiegata commentando e analizzando Core, il linguaggio generato dal compilatore come passo intermedio fra il programma Haskell e il codice binario.
Carlo ha presentato la libreria FRP Reflex, illustrandone i tipi di base, il paradigma di funzionamento e le potenzialità. Il gruppo ha installato reflex-dom attraverso nix e svolto un piccolo esempio per vedere Reflex in azione.
Un gruppo di livello intermedio si è focalizzato sulla realizzazione di un webservice usando il framework Servant. La API Rest proposta era molto semplice, affinché fosse possibile realizzarne una implementazione completa nel limitato tempo a disposizione, potendosi quindi rendere conto della maggior parte degli aspetti tecnici legati a un lavoro di questo tipo: definizione delle rotte e dei controller ad esse legati, mantenimento dello stato del server (per semplicità si è optato per una MVar anziché usare un database esterno), codifica dell’output del servizio. A metà pomeriggio si aveva un prototipo funzionante, e i più avventurosi si sono addirittura cimentati nella scrittura di un frontend con Elm. Il codice prodotto è disponibile su github.
Dove: Milano, Via Giulio Venini, 42, 20127 Milano (MI), IT
Quando: Sabato 25 Febbraio, dalle 09:00 alle 18:00.
Chi: chiunque sia interessato alla programmazione funzionale, indipendentemente dal suo livello di esperienza.
Cosa faremo: lavoreremo in gruppi (2-6 persone circa) su diversi progetti. Ogni persona può scegliere il progetto che vuole, saranno date delle indicazioni sul livelo di conoscenza richiesto per contribuire. Lo scopo è provare a utilizzare Haskell per un progetto concreto, “toccare con mano” il modo di lavorare altrui e di condividere le esperienze nelle numerose pause di gruppo. Lo scopo è puramente didattico, quindi nessuna ansia.
Cosa portare: un computer portatile e un ambiente Haskell configurato.
Grazie a chi: MIKAMAI e LinkMe che hanno messo a disposizione gratuitamente la sala.
Per iscriversi: metooo.io
Abbiamo aperto un doodle per decidere insieme la data del nostro incontro invernale 2016/2017:
Dove: Milano, Via Giulio Venini, 42, 20127 Milano (MI), IT
Verremo ospitati da Mikamai (dove si è svolto il primo incontro di Haskell ITA!)
Fateci sapere le vostre preferenze e a presto!
In un’uggiosa giornata autunnale, venti intrepidi Haskellers provenienti da varie città italiane si sono incontrati a Bologna, ospitati dall’associazione Kilowatt, nella particolare e suggestiva “Gabbia del Leone”, situata nel cuore dei Giardini Margherita.
Seguendo un approccio ormai collaudato, abbiamo formato piccoli gruppi di lavoro, in modo che a ognuno fosse possibile partecipare, in maniera attiva e alla pari, ad uno o più progetti di proprio gradimento - il tutto in maniera estremamente libera e amichevole.
Un gruppo di volenterosi newbie si è cimentato su esercizi, presi dall’ottimo Haskell Programming from first principles. Come spesso accade, gli esercizi si sono rivelati tutt’altro che semplici - e un confronto con persone più esperte è stato decisamente utile. Ecco un resoconto di quanto imparato.
Paol(in)o ha spiegato l’utilizzo dei FingerTree: una struttura dati utilizzata per modellare sequenze - che sono anche alla base del modulo Data.Sequence
. Il formato della presentazione è stato molto gradito: circa cinque ascoltatori si sono riuniti intorno ad una lavagna, per delineare differenti ipotesi risolutive. L’interattività della spiegazione ha permesso a tutti di capire meglio l’argomento trattato.
Si è organizzato un piccolo simposio per discutere della situazione del web-development in Haskell. Abbiamo considerato principalmente le differenze tra l’approccio FRP (reflex) e quello basato su react (react-flux), volgendo particolare attenzione alle differenze di struttura generale e alla componibilità delle strutture create.
Abbiamo esplorato i problemi di concorrenza che si possono presentare in un’applicazione di rete, prendendo a pretesto un prototipo di gioco multiplayer online che permettesse ai client di accedere ad una scacchiera condivisa applicando una semplice regola: due utenti non possono stare nella stessa cella. Per fare ciò, abbiamo introdotto un’architettura client/server mediante websocket e uno stato condiviso sul server utilizzando MVar. Dopodiché, abbiamo simulato una race condition - introducendo un tempo di attesa tra il primo controllo di disponibilità della cella e l’effettiva modifica: a questo punto, due client che entravano nella stessa cella contemporaneamente potevano farlo! Sostituendo MVar con TVar - tratto da STM - abbiamo ottenuto il controllo della transazione e la possibilità di individuare modifiche esterne allo stato - che abbiamo deciso di risolvere mantenendo il secondo client fermo nella posizione precedente.
Un gruppo di persone ha svolto esercizi utilizzando la libreria Quid2, sotto la guida del suo autore: Titto.
Ponendosi come obiettivo la realizzazione di un semplice client per le web API di Random.org, un gruppetto di nuovi arrivati ha avuto modo di sperimentare l’I/O in Haskell e - coadiuvati da sviluppatori più esperti - di svolgere un primo approfondimento sulla teoria delle monadi.
Il pranzo insieme, i momenti di retrospective durante il meetup, gli scambi di consulenza fra i diversi gruppi e una gita serale/notturna nel centro di Bologna con degustazione di tigelle hanno permesso a tutti di conoscersi.
Ringraziamo gli autori di Haskell Programming from first principles per averci messo a disposizione alcune copie del libro, regalate poi a cinque fortunati Haskellers, e l’associazione Kilowatt, per averci ospitato.
Dove: Bologna, Giardini Margherita, nella struttura “La Gabbia del Leone”, presso “Le Serre dei Giardini”.
Quando: Sabato 19 Novembre, dalle 10:00 alle 18:00.
Chi: chiunque sia interessato alla programmazione funzionale, indipendentemente dal suo livello di esperienza.
Cosa faremo: lavoreremo in gruppi (2-6 persone circa) su diversi progetti. Ogni persona può scegliere il progetto che vuole, saranno date delle indicazioni sul livelo di conoscenza richiesto per contribuire. Lo scopo è provare a utilizzare Haskell per un progetto concreto, “toccare con mano” il modo che hanno altri di lavorare e di condividere le esperienze nelle numerose pause di gruppo. Lo scopo è puramente didattico, quindi nessuna ansia.
Cosa portare: un computer portatile e un ambiente Haskell configurato.
Come arrivare: dalla Stazione Centrale dei Treni di Bologna, prendere l’autobus 33 (frequenza 15 minuti) e scendere alla fermata “Giardini Margherita” e/o “Porta Santo Stefano” (circa 20 minuti di viaggio). Entrare nei Giardini Margherita, dall’ingresso di Via Castiglione 136 o Via Polischi 9, e recarsi presso “Le Serre dei Giardini”, alla struttura “La Gabbia del Leone”.
Grazie a chi: all’associazione Kilowatt che ha messo a disposizione gratuitamente la sala.
Per iscriversi: https://www.metooo.io/e/haskell-day-bologna
Abbiamo aperto due doodle per decidere insieme il luogo e la data del nostro incontro autunnale:
Fateci sapere le vostre preferenze e a presto!
Ci siamo trovati Sabato 26 Marzo, a Calenzano, in provincia di Firenze, ospitati da Develer.
Partecipanti, fila in piedi (a partire da sinistra): Luca Benci, Alberto, Daniele D’Orazio, Carlo Nucera, Nicola Bonelli, Francesco Ariis, Matteo Baglini, Salvatore Veneziano, Marco Santamaria, Emiliano Anichini.
In ginocchio: Pasqualino Assini (Titto), Massimo Zaniboni, Ruggero D’Alò, Vitalij Zadneprovskij, Nadir Sampaoli, Aurelien Rainone, Francesco Gazzetta.
Dietro, a fare la foto: Luca Molteni :-)
Ritrovo alle 10:00, con la sede di Develer pronta a ospitare, nonostante sia il Sabato prima di Pasqua, il nostro terzo meetup: diciotto programmatori appassionati di Haskell, provenienti da tutta Italia, e pronti a condividere una giornata di programmazione funzionale e divertimento.
Dopo un breve sondaggio sulla preparazione tecnica dei presenti, sono stati proposti i seguenti progetti, su cui lavorare a gruppi:
Sabato 26 Marzo, dalle 10:00 alle 18:00, ospitati da Develer
Develer Srl
via Mugellese 1/A
50013 Campi Bisenzio - Firenze - Italia
Per chi viene in treno:
La libreria Haskell-MVC scritta da Gabriel Gonzalez, è un ottimo esempio di codice Haskell d’alto livello, scritto da una persona sicuramente intelligente e che padroneggia il linguaggio. La libreria è usata in questo post solo come punto di partenza e pretesto per capire quanto sia facile o difficile studiare il codice Haskell scritto da altri, e non verrà trattata nella sua interezza, anzi quasi per niente.
La libreria definisce una View come
> import Data.Monoid (Monoid(mempty, mappend, mconcat), (<>), First)
> import qualified Data.Monoid as M
>
> newtype View a = AsFold (FoldM IO a ())
FoldM
è un data-type definito in Control.Foldl
.
Ecco una semplice soluzione a un problema comune utilizzando una libreria per fare degli script in Haskell.
In fotografia spesso si decide di memorizzare le proprie foto digitali in un formato chiamato RAW, che possiamo pensare come un equivalente di un rullino di un po’ di tempo fa. I file RAW sono a tutti gli effetti i dati registrati dal sensore della macchina fotografica digitale.