Primi passi con gloss (haskell tutorial in italiano)

Con questo articolo e molti dei prossimi intendo fornire del materiale introduttivo per aspiranti programmatori in haskell.

Per lavorare con gloss dobbiamo installare i bindings a opengl, che sono compresi nella haskell platform, ma devono essere scaricati in caso diverso.

Nel secondo caso, ci procuriamo alcune librerie necessarie

sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev

e installiamo quindi gloss che trascinerà tutte le dipendenze necessarie

cabal install gloss

Purtroppo l’esperienza con ghci non è delle migliori e quindi ci si deve accontentare del lavoro sui files.

Per un utilizzo di base l’interfaccia in Graphics.Gloss è sufficiente. La funzione displayInWindows apre una finestra e disegna quanto richiesto nel suo quarto argomento.

Quindi nel nostro primo file mettiamo

import Graphics.Gloss
main = displayInWindow "primo esempio" (300,300) (0,0) 
                white (Circle 100)

esempio 1
Salvato il file in esempio.hs lo eseguiamo con

runhaskell -lglut esempio.hs

o meglio

ghc --make esempio.hs && ./esempio

Dalla documentazione di gloss (docs) esaminiamo la definizione del datatype Picture


data Picture
	= Blank
	| Polygon 	Path
	| Line		Path
	| Circle	Float
	| ThickCircle	Float		Float
	| Text		String
	| Bitmap	Int	Int 	ByteString
	| Color		Color  		Picture
	| Translate	Float Float	Picture
	| Rotate	Float		Picture
	| Scale		Float	Float	Picture
	| Pictures	[Picture]

Con la solita naturalezza haskell definisce Picture ricorsivamente per permettere le trasformazioni affini e per aggiungere il colore.
L’ultimo costruttore ci permette di vedere un insieme di Pictures come una sola.
Rimanendo sulla figura di base del cerchio ci possiamo sbizzarrire attraverso le trasformazioni affini.
Ecco un esempio di Picture costruita attraverso una list comprehension.

import Graphics.Gloss
main = displayInWindow "secondo esempio" (600,500) (0,0) white $
         Pictures 
         [Rotate (2*y) . Translate 0 y $ Circle y | y <- [5,10..100]]

esempio 2
E una variazione dove moduliamo anche il colore

import Graphics.Gloss

main = displayInWindow "terzo esempio" (600,500) (0,0) white .
   Pictures . map f $ [100,99.9 .. 5]
   where f y    = Rotate (10*y) 
                . Translate 0 y 
                . Color (makeColor 0 (y/100) (1 - y/100) (y/100)) 
                $ ThickCircle y y

esempio 3

Annunci

Installare haskell su ubuntu 11.10

Ghc è il compilatore haskell più diffuso tra i programmatori funzionali.

Per tutti è disponibile la platform che è aggiornata al compilatore 7.0.3.

Su ubuntu si installa da terminale con:

sudo apt-get install haskell-platform
cabal update

Come supporto non necessario allo sviluppo c’è un IDE

sudo apt-get install leksah

Solitamente questo basta a programmare in haskell.

Per i più esigenti, si può installare l’ultima versione del compilatore, la 7.2.1.

Prima di tutto assicurare la presenza di gmp.

sudo apt-get install libgmp3c2 libgmp-dev

Scaricare e aprire il tarball corretto per l’architettura

http://www.haskell.org/ghc/download_ghc_7_2_1

Configurare e installare dalla cartella scompattata

./configure
sudo make install

Per finire serve cabal install. Indispensabile è la libreria  zlib.

sudo apt-get install zlib1g-dev

Controllare la presenza di git.

sudo apt-get install git

Clonare la versione modificata di cabal install

git clone https://github.com/tuncer/cabal-install.git

Spostarsi nella cartella clonata

cd cabal-install

Effettuare l’inizializzazione del database pacchetti

sh ./bootstrap.sh

Ora l’eseguibile cabal si trova nelle cartelle sotto ~/.cabal. E’ buona norma aggiungere  la cartella ~/.cabal/bin alla variabile di environment PATH

echo "PATH=$PATH:~/.cabal/bin" >> ~/.bashrc

Per ricaricare il file modificato

source ~/.bashrc

Infine l’aggiornamento iniziale dell’indice pacchetti presente su hackage

cabal update

Prima lezione IPT

Perché l’informatica è bella.

Cos’è il computer.

Il computer in italiano si chiama calcolatore perché fa sempre un sacco di calcoli.

Quindi il calcolatore è pieno zeppo di numeri e passa tutto il tempo a fare delle operazioni tra i numeri che stanno li.

Ma i numeri nel calcolatore non sono proprio tutti uguali. A seconda del posto che occupano possono significare cose diverse. Ecco quindi spiegato come mai il calcolatore sembra fare molte più cose che calcolare.

Quando il calcolatore è a posto col cervello esso sa dare il significato corretto ad ogni numero che sta al suo interno.

Ma chi dice qual’è il significato corretto dei numeri?

Dare un significato ai numeri è il lavoro del programmatore.

Cos’è un programma.

Un programma è un insieme di numeri con un significato particolare. Sono le istruzioni che indicano al calcolatore cosa cambiare tra i suoi numeri. I programmi sono l’intelligenza del calcolatore.

Un programma può essere corretto oppure rotto.

Quando è corretto il calcolatore fa quello che il programmatore si aspetta, quando è rotto, il programma fa una cosa diversa dal previsto e il programmatore deve andare a cercare il problema e magari risolverlo.

Allora comandiamolo!

I primi programmatori facevano proprio così: bucavano dei foglietti di cartone per comunicare al calcolatore le istruzioni. Poi sono arrivati i nastri magnetici, i video le tastiere, i dischi e tanta memoria per il nostro calcolatore.

Infine abbiamo trovato una maniera più semplice per fare i programmi: invece di dirgli cosa fare gli descriviamo le cose come stanno e le regole tra le cose e lasciamo ad altri programmi il compito di tradurre la nostra descrizione in istruzioni.

Come si descrive la realtà.

Per descrivere la realtà bisogna avere una grande passione per la matematica, uno spirito di osservazione acuto, una pazienza smisurata e come in tutti i lavori il gusto del bello.

La passione per la matematica serve a formare nel nostro cervello una scatola degli attrezzi ben fornita, dove conosciamo i nostri attrezzi per nome, avendoli utilizzati a lungo. Questi strumenti si chiamano astrazioni.

Lo spirito di osservazione ci serve a capire quale astrazione si nasconde dietro la realtà che vogliamo descrivere.

La pazienza serve a mettere a posto gli errori che riempiono il lavoro del programmatore in ogni aspetto, da quando pensa a quando scrive il programma.

Il gusto per il bello serve a lottare per ottenere un risultato che oltre a funzionare ci fa sentire orgogliosi del nostro lavoro di scrittori di codice. Spesso stiamo svegli la notte per ripulire il nostro lavoro e per documentarlo, sebbene il risultato voluto l’abbiamo già ottenuto.

Tutte queste caratteristiche sono il frutto di una sfida con il nostro cervello, una sfida che ci piace.

Quanta fatica, ma dov’è il bello ?>

Il bello dell’informatica è che ci permette di capire le cose come funzionano, ci stimola ad analizzarle in maniera accurata, ci da fiducia nelle nostre capacità, ci fa sentire piccoli quando non capiamo i problemi e grandi quando li risolviamo e soprattutto ci insegna a essere logici, a non credere alle superstizioni e a svelare i trucchi del mondo che ci circonda.

Il calcolatore nel 2011

I calcolatori nel 2011 sono estremamente potenti. In uno smartphone ritroviamo la potenza di calcolo di un supercomputer degli anni 80. Questo ci porta a pensare che le applicazioni che popolano i nostri calcolatori siano sempre più esigenti. Questo è falso in generale.

Divagando leggermente possiamo esaminare la potenza di trasmissione dati della rete, che volendo trasportare contenuti sostanziosi in breve tempo sta seguendo la sua curva di crescita. Qui è evidente che il valore dei contenuti non aumenta con la banda della rete.

Un esempio clamoroso è *twitter* . Per questa applicazione che comprende la rete internet per funzionare, la potenza di calcolo necessaria a permetterci di leggere e scrivere i tweets e la banda necessaria a diffonderli è irrisoria. Infatti twitter è l’applicazione sociale preferita nei paesi dove potenza di calcolo e larghezza di banda sono ancora scadenti. Eppure questa applicazione ha permesso l’organizzazione di rivoluzioni di popolo.

Sempre di più, il calcolatore è valorizzato dalla qualità dei programmi che esegue e quindi dalla qualità media dei programmatori. In questo campo due tendenze di effetto contrario governano l’andamento della qualità. La prima, negativa, è l’appalto a cottimo della programmazione che sviluppa del codice usa e getta, e la seconda, positiva, è la diffusione della filosofia *open source*, che permette a tutti di cimentarsi nello sviluppo di codice di qualità tendenzialmente duraturo.

Informatica per ragazzi.

L’informatica nel nostro paese è insegnata tardi e male.

Come se non bastasse le wii e compagnia bella occupano già una fetta importante di rapporto tra i ragazzi e i calcolatori.

Giocare con la play può sviluppare alcune potenzialità cerebrali, ma la programmazione dei calcolatori è una passione e un divertimento ben diverso.

Saper programmare un calcolatore è fondamentale per la vita dell’uomo moderno. Purtroppo il percorso scolastico della scuola primaria ci propone di diventare utenti di un sistema operativo o peggio di una suite di programmi.

Sicuramente la capacità di programmare un foglio elettronico sarebbe già un ottimo risultato per la scuola primaria, ma credo che l’insegnamento della programmazione di base sia propedeutico a tutti i futuri passi come utenti consapevoli dei calcolatori.

Così come nello scrivere un programma si può utilizzare con successo una scrittura *top-down* (dalla visione generale al particolare) , così nell’insegnamento ai ragazzi che posseggono una cultura matematica di base si può utilizzare un linguaggio di programmazione di alto livello, per nascondere il più possibile gli elementi tecnici e concentrarsi nello sviluppo della logica del codice.

I ragazzi preparati al codice di alto livello avranno sviluppato delle buone basi per affrontare in seguito le sfide tecniche dei livelli inferiori.

Il corso è basato sul lavoro di Chris Smith consultabile sul suo blog

Senza tempo

Il tempo non serve, esiste ma non ci aiuta ad esistere. Infatti l’abbiamo imbrigliato coi nostri strumenti. Solo i non-uomini possono sopportarlo, gli uomini hanno sempre voluto dominarlo.
Il prossimo passo e’ ignorarlo, ovvero ammettere che non si puo’ dominarlo senza perderlo.