Python: filtrare le liste

Le liste, si sa, sono croce e delizia di ogni programmatore e saperle usare rende il lavoro di gestione dei dati nel codice molto più comodo e semplice. Tutto, in un certo senso, può essere logicamente ricondotto ad una lista e pertanto questo tipo di dato è molto utilizzato in tutti i listati.
La nostra attenzione questa volta si sofferma su python e sulla possibilità che il linguaggio offre di filtrare rapidamente le liste.
Immaginiamo di avere una lista di anni così strutturata:
anni = [1989, 1987, 1956, 1820, 1452, 1999, 2006, 1756]
e di voler filtrare solo gli anni che vengono dopo il 1900. Normalemente si opererebbe con una struttura sintattica simile alla seguente:
nuova_lista = []
for anno in anni:
    if anno > 1900:
        nuova_lista.append(anno)
        print 'Vecchia lista:', anni
        print 'Nuova lista:', nuova_lista
Come si può ben vedere il codice è semplice e pulito e svolge bene il suo lavoro ma è possibile minimizzare ed ottimizzare ancora un codice già così sintetico? La risposta ovviamente è si ed ora vedremo come trasformare il nostro snippet:
nuova_lista = [anno for anno in anni if anno > 1900]
print 'Vecchia lista:', anni
print 'Nuova lista:', nuova_lista
Si vede già da subito che il numero di righe è stato nettamente ridotto e tutta la struttura sintattica del precedente codice è stata ridotta grazie all’uso delle mappature di python unitamente al nostro filtro. In pratica la nostra nuova riga di codice si occupa di ciclare gli elementi nella lista (mediante il ciclo for) e di confrontare l’elemento ottenuto con il filtro desiderato (mediante if). Ovviamente se il confronto con il filtro risulta vero allora l’elemento viene mappato nella nuova lista con il risultato di ottenere un array contenente i dati voluti.
Scrivere del buon codice significa ottenere, alla fine del nostro lavoro, un listato più pulito e quindi più semplice da correggere in caso di errori. In questo caso abbiamo visto come sia semplice adoperare le liste in maniera molto più fluida e sicuramente più pulita.

CSS3 – Effetto polaroid

  
L’idea di oggi era quella di trovare un metodo per presentare in modo carino ed affascinante le immagini all’interno di una pagina web. Stanco dei soliti sistemi troppo “potenti”, volevo qualcosa che fosse tanto semplice quanto d’impatto visto che un cliente aveva chiesto questo per il suo sito.
La prima idea che mi è balzata in mente è stata quella di creare un effetto polaroid sulle foto che mi erano state inviate ma questa volta non avrei usato GIMP come sono solito fare ma avrei creato il tutto con CSS3 in modo da applicare l’effetto a qualsiasi immagine in mio possesso. Visto il grande ritorno del vintage e il successo di Instagram, l’idea mi pareva molto bella per un sito moderno e giovane.
Partendo dal presupposto che una foto nel vecchio formato polaroid ha di per sè una base estetica molto semplice, vediamo come strutturare l’idea e come svilupparla in poche righe di CSS.
fonte: http://media.photobucket.com/image/recent/labelle_7/polaroid.jpg
Si vede facilmente come la struttura della foto sia composta dall’immagine principale (centrata in orizzontale), un contorno bianco che presenta, rispetto al bordo esterno, due distante diverse: una è data dalla distanza maggiore del lato inferiore rispetto al corpo centrale vero e proprio mentre gli altri tre lati hanno pari distanza.
Inoltre per rendere l’immagine più “dinamica” si potrebbe pensare di aggiungere una lieve ombra che da sicuramente un tocco più realistico alla composizione.
Vediamo il codice CSS usato per dare l’effetto voluto:
Il codice è molto semplice. Analizzando il tag della classe .polaroid, con le prime tre righe si crea il bordo bianco intorno all’immagine, le quattro che seguono creano una lieve ombra intorno al contenitore (cercando di mantenere la compatibilità con tutti i browser) che nel nostro caso rappresenta l’intera foto, mentre l’ultimo rigo serve a mantenere l’immagine vera e propria centrata nel bordo bianco. Per quanto riguarda il tag img, invece, si è semplicemente detto al css di fare in modo che l’immagine si adatti al contenitore in cui viene inserita.
Ora vediamo il codice HTML per creare la foto nelle nostre pagine web:
Sicuramente con poche righe di codice è possibile avere un effetto molto carino e di impatto senza dover ricorrere a programmi di fotoritocco o pesanti righe di codice javascript.
Per visualizzare un esempio potete visitare questa pagina.
 

È tutto un gioco

Scrivo questo post come contenuto per il bellissimo #BloggersContest lanciato da LinuxBird.
Le ultime voci sul rilascio di giochi Stream su distribuzioni GNU/Linux ha riaperto una vecchia ferita nel mondo di questi sistemi. Può essere Linux un’ottima piattaforma per i videogame? Scopriamolo.
Chi conosce GNU/Linux sa che, nonostante il sistema sia ottimo sotto quasi tutti i punti di vista, ha due enormi pecche che non si riesce a colmare: la qualità dei driver video e l’offerta del comparto videogame. Se si analizza bene quello che i sistemi open hanno da offrire in questi due settori, balza subito all’occhio come la curva di entusiasmo degli utenti muoia pesantemente sotto i colpi del mercato. Attenzione, sia ben inteso che la pecca non è dovuta dai sistemi ma è colpa di chi sviluppa driver e videogame che decide di relegare i suoi prodotti solo ad un determinata fascia di utenza. 
Pare, tuttavia che le se stanno per cambiare e GNU/Linux potrebbe diventare un’ottima base per i videogame. Scopriamo perché.
Performance
Che GNU/Linux abbia delle ottime performance è abbastanza palese per chi conosce affondo il sistema. Se si pensa che buona parte dell’hardware destinato alla discarica può essere recuperato grazie alle prestazioni di sistemi Open Source, possiamo vedere come effettivamente il sistema gravi meno sulla macchina rispetto alle sue controparti commerciali. Questo ovviamente si traduce in una maggiore quantità di potenza di calcolo e memoria libera che eventuali videogiochi potrebbero sfruttare su un comparto macchina già esistente ed abbastanza performante. 
A parità di hardware, GNU/Linux potrebbe lascerebbe “più spazio” all’applicativo videoludico e quindi i potenziali videogame giocabili su uno stesso computer aumenterebbe sensibilmente se la macchina fosse dotata di sistemi open.
Multipiattaforma
I software scritti per piattaforme Linux vengono poi portati su diversi altri sistemi. Basta citare esempi noti come Firefox, VLC o GIMP per capire come programmi nati sul sistema del pinguino siano poi diventati indispensabili anche per utenti Windows. Sviluppare un videogame con le librerie messe a disposizione da Linux significa avere tra le mani un sorgente che, leggermente ritoccato, ha il potenziale di essere compatibile con molti altri sistemi. Questo è un vantaggio anche dal punto di vista economico poiché con poche ore di lavoro in più è possibile estendere il proprio mercato verso utenti altrimenti irraggiungibili.
Libertà
Quando si tratta di libertà purtroppo si sa che gli utenti GNU/Linux devono lottare contro i colpi bassi delle dirette concorrenti che usano tutti i sistemi per poter imporre sul mercato i propri prodotti a discapito di quelli open e free. La stessa cosa è stata fatta con lo sviluppo delle OpenGL a favore delle DirectX [1]. 
Se non si fosse giocato sporco oggi le prime sarebbero lo standard per lo sviluppo dei videogame ed avremmo con molta facilità anche i giochi sul pinguino.
Mercato
Una delle scuse più diffuse per giustificare da parte dei produttori la mancanza di uno sviluppo di giochi su GNU/Linux è la piccola fetta di mercato verso cui potrebbero rivolgersi. Ovviamente questo punto si basa su un’analisi sbagliata e quello degli utenti Linux potrebbe essere un’ottimo pubblico a cui rivolgersi. Nonostante le grandi vendite dei videogame su Windows ho potuto, constatare anche personalmente, come molti dei giochi attivi (giocabili offline nda) sono in realtà copie pirata. Aprire a nuovi mercati potrebbe portare ad ingenti guadagni poichè si avrebbero più utenti verso i quali rivolgere le proprie attenzioni.
Software Center
A differenza degli altri sistemi, l’utente GNU/Linux non deve girovagare per il web alla ricerca dei software utili alle proprie esigenze nella speranza che ciò che viene scaricato sia pulito e corretto. Ogni distribuzione mette a disposizione un “mercato” nel quale poter scaricare, ed ora anche acquistare, i software di cui necessita. Questo potrebbe essere un ottimo mezzo che i produttori di videogame potrebbero sfruttare per il rilascio dei propri prodotti e delle proprie demo. Non dovrebbero più essere loro a dover cercare gli utenti negli angoli del mondo del web ma sarebbero gli utenti a cercare i videogame in un unico grande flusso centralizzato di informazioni.
E la questione etica?
A differenza di altri prodotti software sono del parere che i videogame non possano essere rilasciati come Free Software, se chi gli sviluppa non decide diversamente ovviamente, ma debbano, semmai, rispettare soltanto delle licenze di tipo Open Source. Un videogame non è un software fondamentale per il corretto funzionamento di un sistema ed è un “lusso” che un utente decide di concedersi per il proprio svago. Proprio come un film viene acquistato e muore al momento della sua visione, un videogioco ha un ciclo di vita molto molto basso che lo porta ad essere obsoleto già dopo poche settimane dal suo rilascio. Il modello di business dietro a questo mondo è completamente incompatibile con il modello a cui aspira gente del calibro di Richard Stallman e pertanto sono del parere che un videogioco closed sarebbe un ottimo compromesso a cui un utente del Free Software potrebbe scendere senza problemi etici o morali. La vita non è ne bianca ne nera e questo è un classico caso in cui un bel grigio sta bene su tutto.
Fonti: [1] [2] [3]