logoHaskell-ITA

La comunità Italiana di programmatori Haskell.

Haskell-Day Inverno a Milano (2017-02-25)

Per questo meeting ci siamo ritrovati a Milano in Venini 42, gentilmente ospitati da Mikamai e LinkMe.

photo

I progetti

Beginners

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.

Haskell Internals

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.

Reflex

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.

Web service

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.

Haskell Day - Milano, 25 Febbraio 2017

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

Organizzazione Incontro Invernale Haskell ITA 2017

Votate per il nuovo incontro

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!

Haskell-Day Autunnale a Bologna (2016-11-19)

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.

photo

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.

Nuovi Arrivati

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.

photo

Finger Trees

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.

Web Development in Haskell

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.

photo

Fuga dagli alieni dallo spazio profondo

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.

Programmazione Message-Oriented

Un gruppo di persone ha svolto esercizi utilizzando la libreria Quid2, sotto la guida del suo autore: Titto.

Web client e monadi

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.

Community

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.

Haskell Day - Bologna, 19 Novembre 2016

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

Organizzazione Incontro Autunnale Haskell ITA 2016

Votate per il nuovo incontro

Abbiamo aperto due doodle per decidere insieme il luogo e la data del nostro incontro autunnale:

  • Doodle per scegliere Quando
  • Doodle per scegliere Dove

Fateci sapere le vostre preferenze e a presto!

Meetup Firenze (Primavera 2016)

Ci siamo trovati Sabato 26 Marzo, a Calenzano, in provincia di Firenze, ospitati da Develer.

photo

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:

  • Twitter di Titto (meno “poeticamente” una libreria per lo scambio di messaggi tipizzati)
  • Studio dell’articolo di Renzo Carbonara su Opaleye-SOT, che è una libreria Haskell che fa uso di numerose estensioni per supportare query relazionali usando le Arrows in Haskell
  • Contribuire alla soluzione di un issue per Stack
  • Kata di Base
  • HRobots

Read More

Haskell Day Firenze - 26 Marzo 2016

Dove

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:

  • arrivo a Firenze Santa Maria Novella
  • ci sono treni frequenti per Calenzano: 8:28, 8:47; 9:10. Il treno delle 8:47 impiega 24 minuti e non effettua cambi intermedi. Il treno delle 9:10 ferma a Prato, poi bisogna cambiare con il treno che va a Calenzano: 36 minuti di viaggio in totale, comprensivi di 10 minuti di attesa per il cambio.
  • 750 metri a piedi (10 minuti) per raggiungere la sede di Develer Google Map
  • per il ritorno c’è il treno delle 18:14. Anche questo treno si dirige prima a Prato, poi un’attesa di 12 minuti per il cambio, e poi si prende il treno per Firenze. 36 minuti di viaggio in totale, comprensivo di attesa per il cambio. Arrivo alla stazione di Firenze alle 18:50.
  • suggerimenti: oltre a Trenitalia, verificate anche gli orari e le tariffe di Italo. Spesso prenotando con un certo anticipo il biglietto ferroviario, si spende meno rispetto ad un last-minute.

Iscrizione

Link per l’iscrizione

Programma

Dettagli Programma.

Studio di codice Haskell high-level

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.

Read More

Un semplice script con Turtle per gestire i file RAW+Jpeg della macchina fotografica.

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.

Read More