[LinkedOpenData&Graph] Il Linked Open Data Graph in tempo reale

Ho trovato un interessante progettino su GitHub che utilizza Protovis, libreria JavaScript ed SVG per la web-native visualizations (vedete anche questo interessante studio, A Scalability Study of Web-Native Information Visualization). Questo progetto permette di visualizzare su un grafo tutta la rete dei LOD (Linked Open Data) aggiornata direttamente dal portale CKAN, diventato il punto di riferimento per la registrazione dei datasets “LOD-compliant”.

Il progetto è stato scritto da Ed Summer ed è disponibile a questo link: https://github.com/edsu/lod-graph

Una anteprima dei LOD attualmente disponibili nella rete CKAN, visualizzati sul grafo Protovis di Ed Summer, la potete vedere anche qui: http://inkdroid.org/lod-graph/

Linked Open Data Graph

Se vi volete divertire a generare il grafo sui vostri pc, basta scaricare il progetto da GitHub e lanciare il comando da terminale:

./ckan.py

Lo script Python si connette alle API REST di CKAN, scarica i dati ed aggiorna un file locale ckan.log in cui potrete vedere lo stato di avanzamento delle operazioni (ci mette un po’…). Quando la procedura è ultimata (“finished ckan load” sul log), lo script vi genera un file lod.js in locale, con il JSON contenente tutte le informazioni sui dataset LOD aggiornati (titolo, url, rating, ecc.). Basta aprire la pagina index.html per visualizzare il Linked Open Data Graph su browser.

 

Altri riferimenti utili:

[Javascript] Un nuovo modo di scrivere il front-end con Backbone.js + CoffeeScript

Ultimamente sto usando il framework Backbone.js per scrivere il front-end di una web app, con un linguaggio molto minimale, e non proprio immediato, che è CoffeeScript. Non condivido appieno le implementazioni “massicce” lato front-end in Javascript, forse perché sono un convinto “accessibilista”, e forse perché non ho ancora compreso appieno quanto sia accessibile lo stesso Javascript. Comunque, sono contrario ad avere troppa logica spostata sul client e la struttura delle stesse pagine mi piace averla ben organizzata e semplice.

Tuttavia, questo Backbone, che implementa una “logica MVC” lato front-end, ho visto che è parecchio utilizzato in parecchie web app importanti.

Vi allego un ottimo tutorial, oltre al link della documentazione ufficiale e un ebook (a pagamento):

Da quanto si legge su HTML.it, per la sua architettura, Backbone.js rientra nella categoria delle librerie MV*, in quanto implementa Model e View, ma non ha un componente Controller tradizionale, delegandone i compiti alle View e ad un componente di routing. Questo approccio è abbastanza diffuso in ambito JavaScript, dove la diversa e più complessa gestione dell’interazione utente e dello stato dell’applicazione non si adattano bene ai compiti di un controller.

 

I componenti base di Backbone.js sono:

  • Backbone.Model: modelli
  • Backbone.Collection: liste di modelli
  • Backbone.View: view
  • Backbone.Router: routing e gestione centralizzata dello stato dell’applicazione

CoffeeScript, invece, non è altro che una riscrittura sintattica di Javascript, che si rifà a Ruby e Python. E’ simbioticamente legato, ma non necessario, a Backbone.js, visto che l’ha creato lo stesso Jeremy Ashkenas  (insieme ad Underscore.js ed Handlebars.js, librerie Javascript di utility, che è buono e consigliato conoscere per usare Backbone).

Eccovi un rapido tour nella sintassi CoffeeScript: CoffeeScript – perchè amarlo?

L’accoppiata Backbone+CoffeeScript ha un bel pò di vantaggi che ho potuto apprezzare:

  • semplicità e pulizia nella scrittura del codice, grazie ad una sintassi molto minimale (si richiede una conoscenza di base della sintassi Python)
  • il paradigma MVC crea una struttura di progetto ben organizzata, dove ogni cosa è al suo posto
  • propagazione di eventi e dell’aggiornamento “automatico” dello stato dei modelli e delle viste collegate
  • modalità di testing con fixture molto semplice e veloce
  • librerie di utility Javascript che implementano logiche anche complesse
  • realizzazione di Single-Page Application e di web app per il mobile (Using backbone.js with jQuery Mobile)
  • Backbone+REST=GRAVY: integrazione “nativa” di Backbone con le API REST (Vedi l’articolo sulla filosofia REST su questo blog)
  • possibilità di utilizzare tutto ciò che è Javascript (anche librerie come jQuery)
Gli svantaggi, a mio parere, sono:
  • troppa logica Javascript lato front-end
  • troppi modelli e viste possono rendere difficile la lettura e complicare la “navigazione” del progetto
  • se non si definisce un “modus operandi” e una struttura di progetto con relative “regole” e “convenzioni” prima dell’inizio della fase di sviluppo, risulta difficile lavorare in gruppo e scrivere software “manutenibile”
  • tecnologia molto evoluta e complessa, con una curva di apprendimento bassa
  • scarsa compatibilità con browser “datati”

Scritto ciò, se siete smanettoni Javascript, Backbone+CoffeeScript dovete assolutamente conoscerli ed usarli.

Vi allego un file di testo con delle note mie estratte dalla documentazione ufficiale di Backbone.

Backbonejs Notes
Titolo: Backbonejs Notes (0 click)
Etichetta:
Filename: backbones.txt
Dimensione: 25 kB

NO-SQL e introduzione a MongoDB

 

NO-SQL è un movimento che negli ultimi anni si è molto affermato, producendo dei risultati soddisfacenti con la creazione di progetti e iniziative utilizzate anche su larga scala. Tale movimento vuole “rompere” la storica linea dei database relazionali e definire delle nuove linee guida per l’implementazione di database che non utilizzano il linguaggio di interrogazione SQL e non siano strettamente legati ad una definizione “rigida” dello schema dati.

La filosofia del NO-SQL è descritta molto bene sul sito di Carlo Strozzi e si può riassumere nei seguenti punti, partendo dalla domanda “Perchè avere altri DBMS se esistono quelli relazionali?“:

  1. I database relazionali sono troppo costosi e spesso quelli che svolgono bene il loro lavoro sono commerciali. NO-SQL abbraccia totalmente la filosofia open-source;
  2. NO-SQL è semplice da usare e non occorre uno specialista di DBMS per poterlo utilizzare. Il paradigma di programmazione è, infatti, a oggetti
  3. I dati sono altamente portabili su sistemi differenti, da Macintosh a DOS;
  4. Non definisce uno schema “rigido” (schemaless) e non occorre tipare i campi, per cui non esistono limiti o restrizioni ai dati memorizzati nei database NO-SQL
  5. Velocità di esecuzione, di interrogazione di grosse quantità di dati e possibilità di distribuirli su più sistemi eterogenei (replicazione dei dati), con un meccanismo totalmente trasparente all’utilizzatore;
  6. I DBMS NO-SQL si focalizzano su una scalabilità orizzontale e non verticale come quelli relazionali.

Dall’altro lato, NO-SQL non garantisce i requisiti ACID su cui si basano i sistemi relazionali, per cui si è ancora particolarmente scettici sull’utilizzo di questi nuovi DBMS.

Scrivo qui una breve introduzione di un DBMS NO-SQL che sta avendo parecchio successo: MongoDB.

Concetti e definizioni

  • Collection (Tabella) – Document (Tupla o Oggetto) – Proprietà (attributo-colonna tabella)
  • Una relazione 1-to-Many si mappa inserendo un Document in un altro Document.
  • Una relazione Many-to-Many si mappa inserendo programmaticamente una join tra gli elementi di una collection.
from datetime import datetime

user_doc = {

        "username" : "janedoe",

        "firstname" : "Jane",

        "surname" : "Doe",

        "dateofbirth" : datetime(1974, 4, 12),

        "email" : "janedoe74@example.com",

        "score" : 0

}

MongoDB (il cui nome deriva da “humongous”) è un database NOSQL open-source,scalabile e altamente performante.

Ecco il link al codice sorgente del progetto: http://www.mongodb.org/display/DOCS/Source+Code

Scritto in C++, ecco le sua caratteristiche distintive:

  • Document-oriented storage: i dati vengono archiviati sotto forma di document in stile JSON con schema dinamici, secondo una struttura molto semplice e potente;
  • Full Index Support: indicizzazione di qualsiasi attributo
  • Replication & High Availability: facilità nella replicazione dei dati attraverso la rete e alta scalabilità;
  • Auto-Sharding: scalabilità orizzontale senza compromettere nessuna funzionalità;
  • Query document-based
  • Fast In-Place Updates: modifiche atomiche in-place con performance elevate
  • Map/Reduce: aggregazione flessibile e data processing
  • GridFS: memorizzazione di file di qualsiasi dimensione senza appesantimenti dello stack
  • Commercial Support: Enterprise support, corsi di apprendimento e consulenze online.

Continua la lettura

Creative Commons License
This work by Francesco Ficetola is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at www.francescoficetola.it.
Permissions beyond the scope of this license may be available at http://www.francescoficetola.it/2012/03/14/no-sql-e-introduzione-a-mongodb/.

The Zen of Python, by Tim Peters

Ecco la filosofia che c’è dietro al linguaggio di programmazione Python:

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!

Letture consigliate:

Creative Commons License
This work by Francesco Ficetola is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at www.francescoficetola.it.
Permissions beyond the scope of this license may be available at http://www.francescoficetola.it/2012/02/29/the-zen-of-python-by-tim-peters/.