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

Nuovo sito PHP

Il sito di PHP cambia pelle.

Ecco uno screen shot

newphp

Uso del database di Apache Derby e della GUI Squirrel

La piattaforma per lo sviluppo di webservices orientati all’health care Mirth Connect, utilizza per default un database open source Derby, del progetto Apache.

Questo post nel mio wiki spiega come installare Derby e come installare e utilizzare un client grafico (Squirrel) per lavorarci.

Freon / lmsensors: controllare la temperatura a bordo della macchina

lmsensors

lmsensors - tool di Ubuntu per monitorare la temperatura delle CPU
lmsensor – tool di Ubuntu per monitorare la temperatura delle CPU

lmsensors è un utile strumento di Ubuntu che consente di rilevare la temperatura dei dispositivi (le CPU, la scheda madre etc) e controllare la ventola di raffreddamento. Lo screen shot raffigura il pannello di controllo psensor. Questa versione consente di visualizzare la temperatura delle CPU (se il processore è multicore, ormai è la maggioranza) e dell’hard disk. Fino alla versione in cui avevo lmsensors il disco era ancora rotativo.

Strumenti più aggiornati di lmsensors

Una versione più aggiornata è l’extension Freon, forkata dal progetto gnome-shell-extension-sensors che è stato abbandonato.

Freon gnome extension
Freon gnome extension

È un’estensione per visualizzare le temperature delle CPU, del disco, della scheda video (NVIDIA / Catalyst / Bumblebee&NVIDIA) e giri al minuto della ventola di raffreddamento in GNOME shell.

Link esterni

lmsensors su Strumenti di Amminstrazione – Ubuntu Wiki

Freon nel market delle Gnome extensions

Il paradosso di EPR

Il paradosso EPR
Il paradosso EPR

Einstein è ricordato dai più per la sua Teoria della Relatività:

  • Ristretta (o speciale): quella che parla della connessione tra spazio e tempo e dei fenomeni di dilatazione del tempo e di contrazione delle lunghezze per sistemi inerziali in moto rettilineo uniforme uno rispetto all’altro, e
  • Generale, quella che descrive come la gravità modelli lo spaziotempo. 

Più precisamente, la traduzione corretta dovrebbe essere: Teoria Speciale della Relatività e Teoria Generale della Relatività. Non c’è una relatività generale e una speciale: la Relatività è una sola ma ci sono due teorie che la descrivono in ambiti complementari.

Riformuliamo:

  • Teoria Speciale: è la rifomulazione delle leggi della fisica per sistemi inerziali
  • Teoria Geneale: è la rifomulazione delle leggi della fisica per sistemi non inerziali, sistemi in cui sia presente un’accelerazione.

Accelerazione indotta meccanicamente o gravità? Einstein con il suo principio di equivalenza ci dice che non c’è nessuna differenza.

Einstein il Nobel non lo vinse per la Relatività che lo tenne occupato nel primo ventennio del 1900. Lo vinse per un lavoro importantissimo del 1905 sulla meccanica quantistica: la spiegazione del funzionamento dell’effetto fotoelettrico. Era un esempio di come applicando l’idea dell’energia quantizzata si può risolvere un problema insolubile con i metodi dell’elettromagnetismo classico di Maxwell.

Anche se la Meccanica Quantistica lo aiutò a guadagnare la sua credibilità tra gli scienziati – nel 1905 infatti era un po’ un outsider (terminò il dottorato come studente lavoratore mentre era impiegato all’ufficio brevetti di Berna), questo risultato sconvolse tanto l’ambiente della fisica da portarlo subito in primo piano come stella nascente – ad Einstein questa teoria rimase sempre un po’ sul gozzo: scrisse a Max Born che Dio non gioca a dadi con l’Universo e, nel 1935 quand’era già a Princeton, scrisse questo articolo con due fisici più giovani di lui, Boris Podolsky e Nathan Rosen, che è più un’argomentazione di tipo filosofico che tende a mostrare come la Meccanica Quantistica non possa fornire una descrizione completa della realtà.

Paradosso EPR

Nell’articolo è spiegato cosa si intenda per realtà e per descrizione completa e si formula un Gedankenexperiment (un esperimento mentale) che dimostra come la meccanica quantistica formulata nelgi anni Venti secondo l’interpretazione di Copenhagen (la funzione d’onda) non possa ritenersi né reale né completa.

Con realtà di una teoria si intende poter predire con certezza e senza disturbare il sistema ogni quantità fisica oggettiva del sistema.

Con completezza di una teoria si intende che tutti gli elementi della realtà hanno una
controparte nella teoria. Una teoria che descrive solo la posizione x ma non l’impulso p è
incompleta.

Questo lavoro rimase sostanzialmente ignorato finché Einstein fu in vita, ma nel 1964, dopo una citazione da parte del fisico irlandese John Stewart Bell, le citazioni aumentarono e continuano ancora oggi con un andamento esponenziale (vedi ad esempio [Z]), a testimonianza dell’interesse che questa argomentazione assunse in special modo nell’ambito dei computer quantistici e del cosiddetto fenomeno dell’entaglement.

In questo fenomeno le variabili di stato di due particelle, dopo che queste hanno interagito, rimangono avvinghiate (entangled) di modo che una misura fatta su una di esse da un misuratore che convenzionalmente chiamamo Alice (A) la fa collassare sul valore misurato e, istantaneamente, anche l’altra variabile misurata nel laboratorio di Bob (B) collassa sullo stesso stato, indipendentemente dalla distanza tra Alice e Bob.

Ad esempio, se misuro la polarizzazione di un fotone, anche l’altro fotone che ha interagito con quest’ultimo (ad esempio entrambi sono generati da un unico fascio laser che attraversa un cristallo birifrangente) si troverà istantaneamente nello stesso stato di polarizzazione, qualunque sia la distanza tra di loro. Questo fenomeno è sconcertante se si pensa che equivarrebbe in qualche modo a sostenere che questo tipo di interazione si propaga ad una velocità infinita.

L’articolo sul Paradosso di EPR (che ho tradotto dall’originale durante un periodo di convalescenza).

Una mia tesina sull’argomento svolta durante il corso di Quantum Information nell’ambito del dottorato in Telecomunicazioni presso l’Università di Padova nel A.A. 2014-2015 (prof. Paolo Villoresi)

Fonti