La “twelve-factor app” è una metodologia che si pone come obiettivo quello di aiutare i programmatori a sviluppare applicazioni native per il Cloud. E’ stata realizzata da un team di sviluppatori che lavora per Heroku, un famoso PaaS multi-linguaggio. Tale metodologia è comunque utile per sviluppare applicazioni che sono ospitate in un PaaS, a prescindere da quale esso sia.

Come lascia intuire il nome, le direttive che compongono la metodologia “twelve-factor app” sono dodici, e vengono ben descritti nel sito di riferimento. In questo articolo riprenderemo ciascuno dei fattori, a cui aggiungeremo altri suggerimenti utili a sviluppare una applicazione Cloud nativa.

Iniziamo però con il definire cosa è una applicazione Cloud nativa in questo contesto:

Una applicazione Cloud nativa è una applicazione che è stata progettata e realizzata per essere eseguita in una Platform-as-a-Service e che supporta la scalabilità orizzontale.

La definizione è abbastanza semplicistica, ma permette di focalizzarsi sulle caratteristiche che i promotori delle 12-factor app avevano in mente quando hanno definito la metodologia.

Continua a leggere

In questo articolo faremo vedere un esempio della architettura di una applicazione Asp.net MVC di media/alta complessità.

Per sviluppare applicazioni più velocemente, è buona norma utilizzare “template”, ovvero iniziare lo sviluppo da un modello di codice pronto, che costituirà lo scheletro dell’ applicazioni reale. Naturalmente il “template” deve essere “ben fatto” e adatto al software che si intende sviluppare.

Continua a leggere

Un programmatore bravo può essere fino a dieci volte più produttivo di un programmatore mediocre.

Da questa definizione nasce il mito dei programmatori 10x. La definizione è spiegata molto bene da Steve McConness in un famoso articolo, consultabile qui. Secondo diversi studi la differenza di produttività di un programmatore non dipende dal livello di esperienza o dalla metodologia utilizzata, ma solamente dalle capacità personali.

Essere un programmatore 10x è quindi una questione di talento. Pur ammettendo che il talento gioca una componente fondamentale in qualunque attività umana, è innegabile però che lo studio, la tecnica e la pratica possano portare un individua a migliorare le proprie capacità, e quindi a raggiungere una produttività maggiore.

Continua a leggere

In un brevissimo articolo su Node.js (visibile qui) ho fatto vedere come scrivere una web applicazione che restituisce una stringa al client che lo invoca con un browser (esempio perfetto di applicazione “Hello World”).

A parte la semplicità dell’esempio, e quindi la semplicità del codice che lo implementa, è curioso vedere come un framework moderno come Node.js riesca a costruire lo scheletro di una applicazione web con poche righe di codice. Gli sviluppatori J2EE sanno che per ottenere un simile effetto, in Java è necessario scrivere molto più codice, tralasciando la necessità di affidarsi ad un application container di qualche tipo. Gli sviluppatori Ruby o Python sono invece molto più abituati a sviluppare applicazioni che semplicemente “girano”, senza particolari configurazioni o codice di contorno.

Fortunatamente però, tra lo sterminato mondo dei Framework Java, ne esiste uno, ovvero Spring, che si pone, tra gli altri, anche l’obiettivo di semplificare il lavoro dello sviluppatore Java.

Continua a leggere

Un database spaziale è un database che gestisce dati spaziali, detti anche geospaziali, ovvero informazioni riguardo oggetti fisici, che possono essere rappresentati per mezzo di valori numerici in un sistema di coordinate geografiche. Tali valori normalmente si riferiscono alla posizione, alla dimensione oppure alla forma di oggetti concreti, come palazzi, laghi, persone etc.

Praticamente tutti i RDBMS moderni gestiscono i dati geospazioali, e per farlo in maniera efficiente devono avere le caratteristiche:

  • Gestire tipi spaziali
  • Avere funzioni e operatori spaziali
  • Supportare indici spaziali

Ad esempio i database spaziali devono gestire tipi come le linee, i punti e i poligoni, e dovrebbero supportare nativamente funzioni per calcolare la distanza tra due oggetti spaziali.

Continua a leggere

Uno dei temi più caldi del momento è quello delle smart city. E’ molto facile imbattersi in articoli che parlano di città intelligenti, e lo sarà ancora di più nei prossimi anni. Ma cos’è una smart city ?

Una “smart city” è una città (intesa come istituzione) che usa la tecnologia per migliorare la qualità di vita, il benessere e la sicurezza dei propri cittadini. Quindi fornisce mezzi ai cittadini e alle aziende private per interagire in maniera attiva ed efficiente con la pubblica amministrazione, in modo da permettere a tutti di contribuire al benessere comune. E inoltre aiuta le autorità a ridurre i consumi e quindi i costi delle risorse necessarie ai cittadini senza decrementare il livello di soddisfazione, anzi offrendo servizi sempre più utili alla comunità.

Per poter erogare i servizi che classificano una città come smart, questa si deve dotare di una serie di applicazioni che forniscono tali servizi ai cittadini, alla pubblica amministrazione e alle aziende del territorio. Queste applicazioni si possono pensare come costruite a partire da una serie di “mattoncini” che forniscono i servizi base necessarie a ottenere funzionalità complesse. L’insieme di questi mattoncini si definisce framework software.

Continua a leggere

Per poter usufruire delle caratteristiche del cloud computing, è necessario modificare il modo in cui si progettano e si realizzano le applicazioni. Infatti i software rilasciati in cloud si sviluppano in modo diverso perché sono eseguiti in modo diverso e sono utilizzati in maniera diversa dagli utenti. Queste differenze richiedono un nuovo modo di pensarli ed è necessario conoscere (e applicare) design patterns specifici per ottenere tutti i benefici di una infrastruttura cloud.

Continua a leggere

In Javascript tutto è un oggetto: le stringhe, i numeri, anche le funzioni sono oggetti. Nella maggior parte dei linguaggi object-oriented, è possibile creare una “classe”, ovvero descrivere il comportamento e i dati che un oggetto deve avere e associarli ad un tipo. Sarà possibile poi istanziare oggetti di quel determinato tipo, che quindi potranno maneggiare dati e avere comportamenti come quelli descritti nella classe di quel tipo.

Javascript è un linguaggio object oriented prototype-based. Un prototipo è un oggetto utilizzano come base per clonare altri oggetti con le medesime caratteristiche. Ci sono comunque diversi modi per creare oggetti.

Continua a leggere

In informatica l’autenticazione è il processo mediante cui un sistema informatico verifica l’identità di un altro sistema. Un esempio comune è quello in cui un utente si identifica in una applicazione software, in modo che questa gli garantisca la possibilità di usufruire dei propri servizi. Un’altro esempio è quello di una applicazione che richiama delle funzioni fornite da un sistema esterno attraverso l’invocazione di web services.

Esistono tantissimi sistemi standard che gestiscono l’autenticazione. Ciascuno di questi sistemi ha delle caratteristiche e degli scenari di utilizzo. In questo articolo parleremo di una metodologia di autenticazione molto utilizzata per controllare l’accesso a funzioni erogate attraverso web services di tipo REST, ovvero la Token Based Authentication.

Continua a leggere