A proposito di REST

Sto valutando se realizzare un webservice secondo l’architettura REST oppure no.

Dalla tesi di dottorato di Roy Fielding, inventore di REST (REpresentational State Transfer)

Dobbiamo poi aggiungere un vincolo per l’interazione client-server: la comunicazione deve essere «senza stato» di natura, come nello stile senza stato client-server (CSS) del paragrafo 3.4.3 (Figura 5-3), in modo tale che ogni richiesta dal client al server debba contenere tutte le informazioni necessarie per capire la richiesta, e non possa sfruttare qualsiasi contesto memorizzato sul server. Lo stato della sessione viene quindi mantenuto interamente sul client.

Figure 5.2: Client-Server

Figure 5.3: Client-Server (Fonte http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm)

 

Questo vincolo induce le proprietà di visibilità, affidabilità e scalabilità. La visibilità è migliorata perché un sistema di monitoraggio non deve guardare oltre un singolo dato di richiesta per determinare la natura esaustiva della richiesta.1 L’affidabilità risulta migliorata in quanto facilita il compito di recupero da guasti parziali [133]2. La scalabilità è migliorata perché non dovendo memorizzare lo stato tra una richiesta e l’altra, si consente al componente server di liberare rapidamente risorse e, inoltre, ne semplifica l’attuazione in quanto il server non deve gestire l’utilizzo delle risorse a cavallo tra le richieste.3

 

1 Si pensi ad esempio da un analizzatore di log di Apache con il quale si voglia capire un caso di sovraccarico del server: se l’applicazione non è REST, la risorsa che viene restituita da un URI (assieme a quanto processore e quanta memoria vengono impiegati per servire tale risorsa) non è necessariamente determinata a partire dai parametri dell’URI, se ciò che viene restituito dipende anche da uno stato del server; cioè, in base allo stesso URI, il server può restituire risorse diverse in base al diverso stato che viene incontrato nel server in due chiamate successive.
2 Ad esempio, sempre nel caso di malfunzionamento tra due chiamate successive, che implicano un diverso stato del server, è difficile stabilire stando fuori dal server quale sia la natura del problema (si pensi a quando una sessione scade: uno stesso url prima funziona e poi no, ma per sapere il perché dobbiamo entrare nel server). Inoltre un errore occorso durante una richiesta non influenza le altre richieste.

3 Letto in altro modo, siccome il servizio di una richiesta implica un minor consumo di risorse, il server può servire più velocemente e più in parallelo, aumentando così la scalabilità.

QuantumFuture: no limits, only horizons

QuantumFuture

QuantumFuture

QuantumFuture “La Comunicazione al limite quantistico” si è svolta venerdì 18 e sabato 19 ottobre al Centro San Gaetano in via Altinate a Padova e ha portato alla conoscenza del pubblico i lavori di ricerca del Gruppo di Comunicazione Quantistica del Dipartimento di Ingegneria dell’Informazione dell’Università di Padova guidato dal prof. Paolo Villoresi, come fase conclusiva e di consuntivo del Progetto Strategico di Ateneo iniziato nel 2008.
Due giorni di seminari scientifici e attività divulgative rivolte a specialisti del settore, alle scuole superiori e a curiosi e appassionati in cui si è dato risalto allo stato dell’arte, ai problemi aperti e alle promettenti prospettive della Comunicazione.
Come ricordato dai relatori della conferenza iniziale di benvenuto, ci troviamo in una situazione che assomiglia molto a quella che vide nel 1948 Bill Schockley inventare il primo transistor e Claude Shannon a scrivere la sua teoria dell’Informazione. Ci attende una nuova era in cui useremo i fotoni anziché gli elettroni per elaborare le informazioni e per trasportarle sfruttando in modo costruttivo principi che finora erano parsi limitativi, come il principio di indeterminazione di Heisenberg, per assicurare una comunicazione sicura o effetti esotici come l’entaglement per il teletrasporto.

È stato eccitante fare un’immersione nel futuro e soprattutto vedere tanti giovani all’opera con la forza del loro entusiasmo. Un esempio di sinergia in cui giovani fisici, astronomi e ingegneri lavorano insieme su un argomento così tanto di frontiera e così foriero di sviluppi e ricadute tecnologiche che il prof. Villoresi ha riassunto in un motto: “No limits, only horizons”: quando vediamo il limite alla fine del nostro sguardo, ci alziamo un po’ da terra e possiamo vedere un po’ più in là.

I video del seminario sono stati messi a disposizione del pubblico su un canale Youtube dedicato.

Altri dettagli sul convegno e sull’attività del gruppo del prof. Villoresi nel sito ufficiale di QuantumFuture.

Premio Nobel 2013 per la Fisica ad Englert e Higgs

Nobel Prize for Legalizing MarijuanaIl premio Nobel per la Fisica per il 2013 è stato assegnato a François Englert e Peter W. Higgs “per la scoperta teorica di un meccanismo che contribuisce alla nostra comprensione sulle origini della massa delle particelle subatomiche e che recentemente è stato confermato dalla scoperta della particella fondamentale prevista dalla teoria, effettuata dagli esperimenti ATLAS e CMS al Large Hadron Collider del CERN.”

L’osservazione della particella di Higgs era stata annunciata il 4 luglio 2012 (“Il bosone di Higgs a portata di mano”). L’assegnazione del premio è stata salutata estensivamente da Rolf Heuer, direttore generale del CERN, come un riconoscimento allo “sforzo intellettuale di decenni da parte di tante persone provenienti da tutto il mondo”.

Leggi altro dal sito NobelPrize.org

The Nobel Prize in Physics 2013″. Nobelprize.org. Nobel Media AB 2013. Web. 8 Oct 2013. http://www.nobelprize.org/nobel_prizes/physics/laureates/2013/

Inversion of Control

Mi imbatto, leggendo le note di NodeBeginner.org su Node.js, nel problema di interfacciare il nostro programma con librerie terze: alla svelta si può rimane impigliati in una rete da pesca. Questo sito parla (anche in italiano) del modo di gestire le dipendenze per dormire sonni tranquilli. Da leggere con calma.

Uno sguardo ad una feature molto particolare di JavaScript

Non so se ve ne siete accorti, parlo ai programmatori alle prime armi, ma esiste un altro modo di passare parametr alle funzioni; ad esempio, in C possiamo passarle per valore o per riferimento:

  void main(*args[])

Qui passiamo alla funzione void l’indirizzo del vettore args. Questo è un esempio di passaggio per riferimento. Lo usiamo quando vogliamo modificare il contenuto di una variabile attraverso una funzione.

Oppure possiamo passare il parametro per valore:

  #include <stdio.h>

  int fattoriale(int);

  int main()
  {
      int a=10;
      int b;

      b = fattoriale(a);

      printf("\n%i! = %i\n", a, b);
  }

  int fattoriale(int n)
  {
      if (n == 1)
      {
          return 1;
      }
      else
      { 
          return n*fattoriale(n-1);
      }
  }

Qui la variabile viene ricreata ogni volta che viene richiamata ricorsivamente la funzione fattoriale: il sistema operativo alloca per n volte una nuova locazione di memoria che contiene la variabile n per il tempo che dura l’esecuzione della funzione. Alla fine dell’esecuzione dealloca la memoria.

Ma la cosa veramente fuori è che con JavaScript possiamo fare una cosa ancora diversa: possiamo passare, come parametro, anche una funzione!!

Ad esempio

  function say(word) {
    console.log(word);
  }

  function execute(someFunction, value) {
    someFunction(value);
  }

  execute(say, "Hello");

La prima funzione scrive a video il contenuto della variabile word.

La seconda funzione è quella davvero speciale: prende il contenuto della variabile someFunction e lo usa come nome di funzione al suo interno!!

Quindi possiamo eseguire la funzione usando il costrutto

  execute(say, "Hello");

alla funzione execute passiamo il nome della funzione da eseguire come primo parametro, e come secondo parametro il valore da dare in pasto a say.

Non solo: il primo parametro può contenere anche tutta la dichiarazione della funzione (un simile costrutto si dice una funzione anonima, infatti non ha un nome: passiamo tutta la definizione):

http.createServer(function(request, response) {
  response.writeHead(200, {“Content-Type”: “text/plain”});
  response.write(“Hello World”);
  response.end();
}).listen(8888);

Ulteriori dettagli su JavaScript e Node.js

Anche PHP supporta le variable functions

La caratteristica appena descritta è propria anche di PHP che da la possibilità di eseguire funzioni in modalità callback. Lui le chiama variable functions:

Ad esempio:

<?php

function say($word) {
print($word);
}

function execute($someFunction, $value) {
$someFunction($value);
}

execute(‘say’, “Hello”);
?>

Node.js – JavaScript lato server

MI sono divertitonode.js a leggere questo capitolo nella guida di Node.js, un tool JavaScript lato server. La fonte è http://www.nodebeginner.org/

La storia del docente potevo averla scritta io. Ho concluso che ce la posso fare.

Ecco il testo.

Prima di parlare di tutte le cose tecniche, prendiamoci un attimo per parlare di voi e del vostro rapporto con JavaScript. Questo capitolo è qui per consentirvi di stimare se ha senso per voi continuare la lettura di questo documento.

Se siete come me, avete iniziato a “sviluppare” in HTML tanto tempo fa, scrivendo documenti HTML. Siete venuti a conoscenza di questa cosa divertente chiamata JavaScript, ma lo avete utilizzato solo in un modo molto semplice: aggiunta di interattività alle pagine web di tanto in tanto .

Quello che volevate davvero era “la cosa vera”, volevate sapere come costruire siti web complessi – avete imparato un linguaggio di programmazione come PHP, Ruby, Java, e avete iniziato a scrivere codice “backend” .

Tuttavia, avete tenuto d’occhio JavaScript, avete visto che con l’introduzione di jQuery, Prototype e simili, le cose nella terra del JavaScript erano molto più avanzate, e che questo linguaggio davvero era qualcosa di più di window.open( ) .

Tuttavia, questa era ancora tutta roba frontend e, anche se era bello avere jQuery a vostra disposizione ogni volta che avete voglia di rendere una pagina web più vivace, alla fine della giornata eravate – nel migliore dei casi – uno che usava JavaScript, non uno che sviluppava in JavaScript.

E poi venne Node.js. JavaScript sul server: quanto figo è?

Avete deciso che è giunto il momento di dare un’occhiata al vecchio-nuovo JavaScript. Ma, un secondo: una cosa è scrivere applicazioni Node.js e un’altra è capire perché hanno bisogno di essere scritte nel modo in cui sono scritte – occorre capire JavaScript. E questa volta per davvero.

Qui è il problema: perché JavaScript vive veramente due, forse anche tre vite (il poco divertente helper DHTML della metà degli anni ’90, artiglieria pesante di frontend come jQuery e simili, e ora lato server) e non è così facile trovare informazioni che vi aiutino ad imparare JavaScript nel modo “giusto”, al fine di scrivere applicazioni Node.js in un modo che vi fa sentire che non state solo utilizzando JavaScript , ma che state in realtà sviluppando con esso.

Perché questo è lo scopo: siete già dei sviluppatori esperti, non volete imparare una nuova tecnica solo smanettandoci sopra e usandolo malamente; volete essere sicuri che lo state attaccando dall’angolazione giusta.

Non c’è, naturalmente, della documentazione eccellente là fuori. Ma da sola documentazione a volte non è sufficiente. Ciò che serve è una guida .

Il mio obiettivo è quello di farvi da guida.

http://twitter.com/manuelkiessling

Riporto commenti e howto strada facendo nella mia area wiki

LibreOffice in pillole: funzionalità di revisione

LibreOffice: The document Foundation
LibreOffice: The document Foundation

La funzione di revisione è disponibile in LibreOffice per i documenti di testo e i fogli elettronici.

Per chi sviluppa software come me, la gestione della storia del software, soprattutto in ambienti collaborativi, nei quali ad uno stesso programma – e più ancora in dettaglio sullo stesso file fisico – mettono le mani più sviluppatori, la gestione della storia del progetto e di ogni sua singola parte, è di vitale importanza e strumenti di gestione del ciclo di vita del software come Git o Apache Subversion (o SVN in breve) sono stumenti irrinunciabili se non si vuole affogare nel marasma.

Questo strumento è utile anche nel mondo del wordprocessing e dell’office automation in generale, nel quale quotidianamente le persone redigono documenti come manuali, specifiche di proogetto, memoriali, verbali e compilano fogli elettronici di dati o presentazioni PowerPoint o Impress.

Quando diversi autori lavorano sullo stesso testo o foglio elettronico, la funzione di revisione registra e visualizza l’utente che ha apportato le varie modifiche. In fase di revisione finale del documento risulta così possibile verificare ciascuna singola modifica e decidere se accettarla, respingerla in toto o modificarla.

LibreOffice come strumento di lavoro collaborativo

Ad esempio, supponete di essere un redattore in procinto di consegnare il vostro ultimo articolo. O un progettista che con il capo progetto deve redigere un manuale per l’utilizzo di una attrezzatura o di un software per poi distribuire il manuale ufficiale ai clienti.

Prima della pubblicazione l’articolo deve essere letto dal redattore capo ed eventualemente, prima ancora, dal revisore di bozze (dipende dalla complessità dell’organizzazione), i quali aggiungeranno entrambi delle modifiche. Il redattore capo scriverà magari un’annotazione del tipo “formulare più chiaramente” in calce a un paragrafo e ne cancellerà un altro. Il correttore di bozze verifica l’ortografia e nota due casi in cui avete utilizzato parole straniere per le quali esiste comunque un termine italiano.

L’articolo vi ritorna indietro con le annotazioni e a questo punto sta a voi decidere se accettare i suggerimenti dei revisori o meno.

Inoltre avete inviato una copia del documento a un collega che aveva scritto in precedenza un altro articolo sullo stesso tema, pregandolo di darvi dei suggerimenti. Il collega vi risponde spedendovi la copia del vostro documento con note redazionali.

Per iniziare a registrare / interrompere la registrazione delle versioni:

Modifica -> Modifiche -> Registra

Per visualizzare / nascondere le versioni:

Modifica -> Modifiche -> Mostra

E’ tutto.

Manuale online di LibreOffice.

Rai Replay – Virtual revolution: nemica del potere

Rai Replay.

Un documentario della BBC nel quale la giornalista e ricercatrice Aleks Krotoski guarda a come il web stia trasformando quasi ogni aspetto della nostra vita e ci racconta di uno scontro in corso tra la libertà che la tecnologia ci offre e il desiderio innato per il controllo ed il profitto.

Altre info http://bit.ly/17SYp4J

Tre framework MVC a confronto

php-logoIn questo interessante sito c’è una comparazione approfondita fra tre MVC design pattern framework nell’ambito del linguaggio di programmazione PHP:

  • Yii
  • Zend
  • CakePHP

Il primo è stato sviluppato nel 2008 come evoluzione di un pacchetto simile denominato PRADO, un software che implementa il pattern MVC scritto da Qiang Xue.

Il secondo è omonimo dell’azienda stessa che supporta fin dall’inizio la definizione degli standard del linguaggio e la diffusione del PHP, assieme alla produzione di strumenti di contorno come l’application server Zend Server o il tool di sviluppo Zend Studio.

Il terzo fu scritto nel 2005 dal programmatore polacco Michal Tatarynowicz su ispirazione di Ruby On Rails.

Le differenze fra questi tre ambienti sono evidenziate in maniera molto approfondita su questo sito, mettendo in risalto aspetti come la scalabilità, la difficoltà di apprendimento, l’adesione ai vari standard, la possibilità di gestie servizi web e molto altro ancora.

Riferimenti

 

Web x.0

Dal Web2.0 (Web Sociale) al Web3.0 (Semantic Web).

Al Web4.0 (WebOS) nel 2020.

Attento a non perderti…

RadarNetworksTowardsAWebOS