Note di biografia gramsciana, e sulle vittime italiane delle epurazioni staliniane
gramsci.giustizia.org è sviluppato grazie a Symfony. Symfony è un PHP framework per sviluppare applicazioni web. Symfony è molto popolare, molto ben documentato, e con un minimo di conoscenze di programmazione php risulta facile da capire e da utilizzare.
Symfony nasce da una idea di Fabien Potencier ed è oggi un prodotto di SensioLabs SAS, azienda registrata in Francia (RCS Nanterre 752 893 842, sede legale in 92 Victor Hugo, 92110 Clichy, FRANCE). Il codice di Symfony è utilizzabile e modificabile secondo i termini liberali della licenza MIT.
Per scoprire Symfony esplora la ricca documentazione presente a Symfony, iniziando da Getting Started.
Ad oggi, Symfony è offerto nella versione 5.0. gramsci.giustizia.org è stato sviluppato con Symfony versione 3.4 (l'aggiornamento all'ultima versione è un mio task futuro)
Il codice sottostante a gramsci.giustizia.org è sviluppato in accordo a un schema MCV (Model, Controller, View). Le prime formulazioni di euristiche di progettazione secondo uno schema MVC risalgono agli anni '70 del secolo scorso, sopratutto nell'ambito della sviluppo delle interfaccie utente; lo schema MVC è oggi molto popolare anche nell'ambito della programmazione web. Diversi framework per la sviluppo veloce di applicazioni web forniscono le opportune librerie per lo sviluppo del codice dell'applicazione secondo lo schema MVC. La documentazione offerta da Symfony include diversi tutorial di introduzione a MCV e di come Symfony ne realizzi la metodologia; per uno introduttivo e molto chiaro leggi Symfony versus Flat PHP.
Symfony inoltre facilita lo sviluppo MVC fornendo degli strumenti di scrittura assistita di codice conforme a uno schema MVC in ambiente Symfony (scaffolding). Per lo sviluppo di gramsci.giustizia.org è stato di grande aiuto SensioGeneratorBundle, ora reso obsoleto da SymfonyMakerBundle.
Per la definizione dei dati dell'appiicativo, la M di MCV, Symfony prevede la definizione di Entity. gramsci.giustizia.org comprende la definizione di una ventina di Entity, per esempio questa pagina corrisponde a un elemento della entity Page, e questo contenuto corrisponde a un elemento della entity Content. Similarmente le entity Crono e Event sono state definite per la gestione dei dati da inserire nelle Timeline cronologiche, e così per la componente Blog, ecc.. Symfony si appoggia su Doctrine, la principale libreria php per astrarre dall'interazione diretta con il sottostante database. Doctrine comprende un Database abstraction layer (DBAL) e, sulla base di questo, un Object relational mapper (ORM), che risultano ben integrati in Synfony.
Nell'insieme la programmazione è risultata veloce e intuitiva, anche divertente. Per associare un elemento di una entity a un elemento di un'altra entity, per esempio questo contenuto a questa pagina, è risultato necessaria una qualche attenzione alla gestione in Doctrine delle relazioni tra entità, o Association Mapping (leggi anche How to Work with Doctrine Associations / Relationsh).
Le funzionalità di base di gramsci.giustizia.org, la C di MCV, sono le usuali funzionalità CRUD (Create, Read, Update, Delete) presenti in ogni applicativo web un minimo performante (ovviamente alcune sono disponibili solo all'amministrazione/redattore). Symfony fornisce modalità uniformi per la loro definizione, out of the box per i casi più semplici e di facile scrittura per realizzare esigenze particolari (nel caso di gramsci.giustizia.org, per es. per passare fogli .json a Simile, vedi sotto).
Per la visualizzazione, la V di MCV, Symfony (= Fabien Potencier) ha sviluppato Twig, un template engine molto agile e ben integrato. Grazie a Twig, risulta di massima facilità definire il layout (template) della resa finale lato client indicandovi, mediante una trasparente e concisa notazione (dot notation), ove posizionare i dati relativi ad ogni specifica richiesta. La notazione permette di richiamare molto facilmente particolari dati seguendo la definizione delle proprietà degli elementi (o oggetti) delle diverse entity, anche nidificati (es.: page.content.title). Di uso forse meno immediato, ma con un minimo di attenzione pure assai performante e flessibile, risulta infine la componente per definire i moduli (form) html di inserimento lato client. Per definire un modulo per la creazione e l'aggiornamento di elementi nidificati, abbiamo seguito i suggerimenti di How to Embed a Collection of Forms.
Symfony fornisce poi una varietà di componenti per lo sviluppo di una applicativo web professionale: per definire una area riservata e sicura all'amministrazione, per definire un meccanismo di indirizzamento (routing), per gestire richieste e risposte http, e molte altre.
Il layout e gli effetti di interattività di gramsci.giustizia.org sono resi possibili grazie a Bootstrap. Bootstrap è un framework CSS (e JS) per sviluppare un interfaccia web in modo reattivo (responsive) alle diverse tipologie di terminale di visualizzazione e include una varietà di componenti per il design dell'interfaccia. Creato originariamente da Mark Otto e Jacob Thornton di Twitter, Bootstrap è oggi sviluppato e mantenuto da un team e da una comunità di contributori.
Il tema di gramsci.giustizia.org è un adattamento di Grayscale, uno dei temi sviluppati per Bootstrap da Start Bootstrap, una iniziativa dello sviluppatore David Miller. Grayscale è un tema responsive a pagina unica (one page), con efficaci effetti di scorrimento (scrolling) dal menu alla corrispondente sezione della pagina.
Il sito usa i font Montserrat e Lora, dal catalogo di font sviluppato e mantenuto da Google.
Alcuni elementi grafici (icons) provengono dal catalogo di Font Awesome:
Simile, o Semantic Interoperability of Metadata and Information in unLike Environments, è stato un progetto accademico del MIT per lo sviluppo di congegni (widget) per la visualizzazione interattiva di serie di dati. Mentre il progetto accademico è concluso, alcuni dei suoi risultati sono mantenuti da widget.org, una piccola comunità di sviluppatori. Tra i widget più riusciti Timeline, per definire linee cronologiche interattive. Timeline Simile è riccamente configurabile e performante; anche se lo stile di programmazione può essere ritenuto obsoleto, il widget funziona egregiamente ed è facilmente integrabile in un applicativo web.
L'integrazione di Timeline Simile e Symfony è stata sufficientemente facile. Grazie a Symfony si sono definite le entity Crono ed Event, e grazie a Twig risulta immediato fornire al codice JS di Simile dei fogli .json con i dati corrispondenti a ciascun Event di una qualche Crono.
gramsci.giustizia.org comprende alcune funzionalità realizzate mediante questo o quel applicativo JS. In particolare gramsci.giustizia.org usa e ringrazia
TinyMCE Una libreria JS per creare un editor di testo lato client (RTE rich text editing) semplice, potente e flessibile. Usata nel modulo per scrivere un commento a un post di un blog.
Lightbox for Bootstrap Un plugin, costruito a sua volta grazie al componente Modal di Bootstrap, che utilizziamo per il pop-up delle immagini (e delle scansioni).
OpenSeadragon La libreria JS, usata dal progetto Janus per la digitalizzazione della Carte Sraffa, per visualizzare con effetti di zoom immagini ad alta risoluzione.
(Per la creazione delle immagini zoomabili esistono una varietà di tool.)