venerdì 31 ottobre 2014

Transizioni

Quando scrivete un programma per tablet, cellulari oppure una presentazione, le transizione sono quegli effetti che servono per passare da una schermata ad un'altra. Livecode incorpora tantissime transizioni, vediamole tutte:
Effetto push left
Gli effetti che si possono scegliere, al momento sono (Web significa Server web):
  • plain: cioè nessuno, funziona tutto come al solito
  • checkerboard:  apparizione a scacchi  (solo su Desktop / Web)
  • venetian blinds: cioè a righe orizzontali (solo su Desktop / Web)
  • iris close: la pagina corrente si chiude al centro (solo su Desktop / Web)
  • iris open:  la nuova pagina appare dal centro (solo su Desktop / Web)
  • zoom close: la vecchia finestra si rimpicciolisce al centro, molto bello (solo su Desktop / Web)
  • zoom in:  la vecchia finestra si rimpicciolisce al centro (solo su Desktop / Web)
  • zoom open: la nuova finestra si ingrandisce dal centro (solo su Desktop / Web)
  • zoom out: la nuova finestra si ingrandisce dal centro (solo su Desktop / Web)
  • wipe up:  la pagina viene scoperta dal basso in alto (solo su Desktop / Web)
  • wipe down: la pagina viene scoperta dall'alto in basso (solo su Desktop / Web)
  • wipe right:  la pagina viene scoperta da destra a sinistra (solo su Desktop / Web)
  • wipe left:  la pagina viene scoperta da sinistra a destra (solo su Desktop / Web)
  • dissolve: pagina gradatamente diventa trasparente e motra quella successiva, bellissimo
  • push up: la pagina nuova spinge quella vecchia sopra
  • push down:  la pagina nuova spinge quella vecchia sotto
  • push right:  la pagina nuova spinge quella vecchia a destra
  • push left: la pagina nuova spinge quella vecchia a sinistra
  • reveal up: la pagina vecchia scivola via su
  • reveal down: la pagina vecchia scivola via giu
  • reveal right: la pagina vecchia scivola via a destra
  • reveal left: la pagina vecchia scivola via a sinistra
  • shrink to bottom: la pagina vecchia collassa in basso, divertentissimo (solo su Desktop / Web)
  • shrink to center: la pagina vecchia collassa al centro, divertentissimo (solo su Desktop / Web)
  • shrink to top: la pagina vecchia collassa in alto, divertentissimo (solo su Desktop / Web)
  • stretch from bottom: la pagina nuova si espande dal basso (solo su Desktop / Web)
  • stretch from center: la pagina nuova si espande dal centro (solo su Desktop / Web)
  • stretch from top: la pagina nuova si espande dall'alto (solo su Desktop / Web)
  • scroll up: classico effetto di transizione verso l'alto per cellulari (solo per Android e iOS)
  • scroll left: classico effetto di transizione verso sinistra per cellulari (solo per Android e iOS)
  • scroll down: classico effetto di transizione verso il basso per cellulari (solo per Android e iOS)
  • scroll right: classico effetto di transizione verso destra per cellulari (solo per Android e iOS)
  • curl up: classico effetto di sfoglio della pagina verso l'alto di iOS (solo per iOS)
  • curl down: classico effetto di sfoglio della pagina verso l'alto di  iOS (solo per iOS)
  • flip left: classico effetto flip della finestra a sinistra di  iOS (solo per iOS)
  • flip right: classico effetto flip della finestra a destra di  iOS (solo per iOS)
Il codice da inserire, ad esempio per cambiare la pagina, è:

on mouseUp
   visual effect stretch from bottom
   go to card 2
end mouseUp

Potete anche imporre la velocità aggiungendo uno dei seguenti parametri:
  • very slow
  • slow
  • normal
  • fast
  • very fast


on mouseUp
   visual effect stretch from bottom slowly
   go to card 2
end mouseUp

potete anche impostare un effetto finale prima dell'effettiva finestra di approdo, utilizzando uno di questi parametri (utile quando mescolate gli effetti):
  • black
  • white
  • gray
  • inverse
  • card


on mouseUp
   visual effect stretch from bottom slowly to black
   go to card 2
end mouseUp

Potete anche attivare una file musicale mentre appare latransizione

on mouseUp
   visual effect stretch from bottom slowly to black with sound "doom.wav"
   go to card 2
end mouseUp

Potete inoltre mescolare gli effetti, ad esempio potete ottenere un effetto carino così:


on mouseUp
   visual effect shrink to center to black
   visual effect stretch from center to card
   go to card 2   
end mouseUp

giovedì 30 ottobre 2014

Risolutore di scarabeo

Il programmino che vediamo oggi è un risolutore del gioco scarabeo (scrabble).
Gioco da tavolo Scarabeo (Scrabble)
Il programma è scaricabile da qui: http://newsletters.livecode.com/february/issue42/scrabbleapp.rev.zip

Questo software trova tutti gli anagrammi validi per le lettere date (per quando siete ai primi turni), oppure trova le parole che potete incastrare nelle caselle. Basta indicare nella casella pattern, infatti, le lettere disponibili e quelle vuote con un punto di domanda.
Questo programma contiene in formato compresso tutte le parole valide dentro la proprietà personalizzata dello stack chiamata uAllWords.
Riuscite a trasformarlo per l'edizione italiana?
E soprattutto riuscite a trovare un sistema più veloce per fare gli anagrammi e quelle per gli incastri?
Io vi suggerisco di usare un database e filtrare i le parole presenti nel database...

mercoledì 29 ottobre 2014

Drag & Drop da programmi esterni

Oggi affrontiamo un caso alquanto complesso, cioè come importare o esportare dati di qualsiasi tipo (testo, immagini, suoni, ecc.), semplicemente trascinando l'icona rappresentativa dentro o fuori il nostro programma in livecode. Questa operazione la facciamo tutti i giorni quando copiamo o spostiamo i file, e in gergo si chiama Drag and drop.
 Al contrario di quello che abbiamo visto in questo post, nel caso di oggi ci dobbiamo interfacciare con altri programmi, non scritti da noi, o con il sistema operativo stesso.
Il drag and drop può essere suddiviso in due tipi di operazioni diverse: i dati entrano nel nostro programma oppure i dati escono dal nostro programma.

Dati in entrata

Ora esaminiamo il caso che i dati entrino nel nostro programma, per esempio l'utente trascina un'icona del desktop di un'immagine per importarla nel nostro programma.
L'oggetto che contiene il codice per l'importazione può essere qualsiasi cosa a parte una card o uno stack; questo ci permette di definire quali parti della finestra del nostro programma possano importare dati dall'esterno. Potremmo scegliere un elemento rettangolare opaco, come il seguente:

A questo punto dobbiamo capire cosa fare con i dati importati: se vogliamo importare un'immagine, dobbiamo controllare che ci sia un'immagine; se vogliamo importare dei testi, dobbiamo controllare che ci siano dei testi; se vogliamo importare altri tipi di file, basterà implementare dei controlli sul nome del file o sul percorso.
Quando l'utente prova a trascinare un'icona dentro al nostro programma, attiva il messaggio DragEnter. Questo messaggio ci può essere utile per fare dei controlli e impostare il tipo di azione che vogliamo imporre. Quando l'utente usa il drag end drop abbiamo il simbolo dell'icona che cambia a seconda del tipo di DragAction vogliamo fare: move, copy, link, none.
nonemovecopylink
Se impostiamo come DragAction l'azione none, rifiutiamo il drag and drop e appare l'icona del divieto. Il drag and drop quindi non avverrà.
Nell'esempio che analizzeremo, cercheremo di importare le immagini, anche più d'una alla volta.
Prima di tutto controlliamo che i dati siano delle immagini nel messaggio DragEnter:

on dragEnter
   if "image" is in keys(the dragData) or "files" is in keys(the dragData) then
      set the foregroundcolor of the target to "green"
      set the dragAction to "copy"
   else
      set the dragAction to "none"
   end if
end dragEnter

on dragLeave
  set the foreGroundColor of the target to empty
end dragLeave


Abbiamo imposto che se l'insieme dei dati che trasciniamo col mouse contiene delle immagini, allora si prosegue, il quadrato che ha il codice per importare diventerà col bordo verde. Inoltre se il mouse abbandona il quadrato senza rilasciare i dati, il quadrato ritorna nero (messaggio dragLeave).
L'analisi dei dati trasportati avviene controllando dragData, questo speciale contenitore di dati è un array che può contenere varie voci:
  • text:  se i dati contengono del testo
  • html: contiene i testi formattati come html
  • rtf: contiene il testo in fromato RTF  The styled text being dragged, in the same format as the RTFText
  • unicode:  testo formato unicode
  • image: i dati dell'immagine (JPEG, GIF, BMP)
  • files: percorso completo dei file, comprensivi del nome, uno per riga.
  • styles: testo con la formattazione Livecoe
  • private: un sistema interno che potete impostare voi, valido solo fra applicazioni Livecode.
generalmente se trasciniamo l'icona dal desktop, abbiamo il percorso del file (files) non l'immagine.

Ora dobbiamo mettere il codice per far apparire le immagini dentro al programma, quando l'utente rilascia le icone nella zona corretta; ecco il codice:

on dragDrop
   put "gif,jpg,bmp" into immagini   
   if "files" is in keys(the dragData) then
      # è una lista di immagini
      repeat for each line theLine in the dragData["files"]
         set itemdel to "."
         put the last item of theLine into testfile
         set itemdel to ","
         if lower(testfile) is among the items of immagini then         
            import paint from file theLine      
         end if
      end repeat
   else
      #è un'immagine portata da un programma
      create image
      put the dragData["image"] into last image
   end if
   set the foreGroundColor of the target to empty
end dragDrop


Come vedete anche qui ho messo un piccolo controllo per vedere se le immagini sono proprio immagini, basandomi semplicemente sull'estensione.
Se tutto è stato fatto a dovere, otterrete una cosa del genere:

Dati in uscita

Per i dati in uscita basta usare il messaggio DragStart, ad esempio per un campo di testo potete mettere:

on dragStart
    set the dragData to the selectedText of me
end dragStart






lunedì 27 ottobre 2014

Creazione automatica delle versioni di un programma

Il formato del file di livecode è binario, quindi livecode prima di aprirlo lo controlla e se trova qualche errore non lo apre. Se avete avuto problemi nel salvataggio rischiate di perdere il lavoro di ore o mesi, a meno che non abbiate salvato da qualche parte le versioni precedenti del programma.
Per automatizzare questo processo ci sono due vie: servizio esterno oppure qualche riga di codice in più nel nostro programma
La prima via molto semplice, per attuarla basta scrivere il programma nella cartella di un servizio di sincronizzazione tipo dropbox. Questi programmi registrano ogni cambiamento in una determinata cartella e salvano una copia del file per ogni modifica effettuata. Potete tornare indietro ogni volta che volete.
La seconda consiste nell'aggiugere nello stack del nostro un codice tipo il seguente:


on saveStackRequest
   put the folder into curfolder #save where are we now   
   set itemDel to "/"
   set the folder to item 1 to -2 of (the effective fileName of this stack)
   put item -1 of the filename of this stack into fname #just the name
   if (fname & "_vers") is not among the lines of the folders then
      create folder (fname & "_vers")   
   end if   
   set the folder to (the folder & "/" & fname & "_vers")
   put the number of lines of the files into nVers   
   put URL ( "binfile:" & the effective fileName of this stack ) into URL ("binfile:" & nVers & fname)   
   set the folder to curfolder #revert back to the original folder
   pass saveStackRequest -- or the stack won't be saved
end saveStackRequest

Questo codice crea una cartella con tutte le versione del file, una per ogni salvataggio effettuato.

venerdì 24 ottobre 2014

Set di icone

Le ultime versioni di livecode incorporano uno modello grafico da poter applicare ai nostri programmi, molto adatto per i sistemi mobili. Si trova dentro Help -> Start center. E' uno degli esempi in basso.

Sinceramente lo trovo scomodo e troppo complesso, però vi fornisce oltre 124 icone trasparenti da poter sfruttare nei vostri programmi. Per fare prima ho creato un archivio che le contiene tutte, che potete scaricare da questo link: archivio.zip
Le icone sono trasparenti e i disegni neri, potete invertire il colore cambiando la proprietà ink. Questa proprietà rappresenta come un oggetto è visualizzato, il valore normare è srcCopy, il negativo è notSrcCopy.

martedì 21 ottobre 2014

Come salvare in altre versioni

Il passaggio alla versione 7 livecode ha imposto di cambiare il formato del file: imponendo la codifica unicode su ogni elemento il formato del file non poteva rimanere lo stesso. Comunque non c'è da temere, andando su salva con nome potete salvare il vostro programma con il vecchio formato, senza doverlo riscrivere da capo.
Basta scegliere nel menu a tendina la versione che preferite. Questo sistema funziona su tutti i sistemi operativi.
Al momento i maggiori cambiamenti del formato del file sono avvenuti nelle seguenti versioni:
  • 7
  • 5.5
  • 2.7
  • 2.4


venerdì 17 ottobre 2014

Libreria 3D

Oggi vi presento un piccolo progetto personale, ho portato in Livecode una vecchia libreria 3D.
Funziona su qualsiasi dispositivo: Windows, Mac, Linux, iOS, Android, raspberry Pi.
La potete trovare qui: https://github.com/angerangel/LCR3D
Vi mostro qui solo alcuni esempi:











giovedì 16 ottobre 2014

Barra di stato Android

La barra di stato Android è quella barra grigia, di solito in basso, con i pulsanti con 3-4 pulsanti: indietro, home, programmi recenti, menu.
Potete interagire con i pulsanti o non farla vedere. Vediamo entrambe le tecniche.

Per non farla vedere basta selezionare la voce relativa nel menu  Standalone Application Settings:

Non farla vedere significa che potete creare dei pulsanti che la imitano, o usare a pieno schermo la vostra applicazione. In questo caso ricordatevi di mettere un pulsante per chiudere il programma, altrimenti l'utente non potrà tornare alla schermata principale.

Se invece volete sfruttare la status bar di Android avete due messaggi per utilizzarla, il primo è backKey e si attiva quando l'utente preme il pulsante indietro, esempio:

on backKey
   answer "Hai premuto il tasto indietro!"
end backKey

per sfruttare il pulsante menu, il messaggio è menuKey, esempio:

on menuKey
   answer "You pressed the menu key"
end menuKey

I tasti home e programmi recenti, invece, sono riservati ad Android e non è possibile interagire con loro.

mercoledì 15 ottobre 2014

Screensteps

Oggi parliamo di un programma scritto in Livecode che ha avuto un enorme successo: Screensteps
Questo software permette di scrivere manuali per qualsiasi cosa in modo rapido, al suo interno ha tutto un sistema per scrive,  per modificare le immagini, aggiungere frecce e grafiche esplicative alle immagini, indicizzare i contenuti, ed esportarlo in tutti modi possibili (dal PDF al sito web, anche su Wordpress).
L'applicazione è diventata talmente diffusa che hanno deciso di creare anche la versione web.
Questo programma si paga come sottoscrizione mensile, dai $ 29 ai $ 499 al mese.
Incredibile a dirsi, ma la società è costituita da solo tre persone! Dimostrando così come Livecode permetta di creare applicazione molto complesse riducendo al minimo il tempo necessario alla programmazione, e lasciando il tempo di dedicarsi ad altri aspetti (pubblicità, finanziamenti, design, ecc.).

martedì 14 ottobre 2014

Creare un client come Dropbox

Dropbox è un servizio che permette di sincronizzare i file su un server, è costituito da un programma da installare sui nostri pc (client), questo programma deve costantemente controllare i contenuti di una cartella e attivarsi quando un file è stato modificato, per spedire il nuovo file sul server centrale per la sincronizzazione.
Oggi per semplicità vedremo solo la parte del controllo periodico dei file.
Prima di tutto piazziamoci sulla cartella che vogliamo esaminare, per questo creiamo con questo codice:

on mouseUp
   answer folder "Select a directory:"
   if it is empty then exit mouseUp
   set the directory to it   
   set the listaFile of this card to the long files
   send "checkUpdate" to me in 2 seconds
end mouseUp

Cliccando su di esso la cartella corrente diventa quella scelta dall'utente.
Ora scriviamo il codice del messaggio checkUpdate che servirà a controllare continuamente il contenuto della cartella corrente:

on checkUpdate
   put the listaFile of this card into old_files
   if the long files is not old_files then      
      answer "Qualcosa è cambiato!"      
      set the listaFile of this card to the long files
   end if
   send "checkUpdate" to me in 2 seconds
end checkUpdate

Come vedete ogni due secondi si controlla il contenuto della cartella e si nota se c'è una differenza rispetto all'ultimo controllo, the long files produce una lista dei file con il loro dettagli. Ogni riga prodotta da the long files contiene il nome del file, la dimensione e altri dati.tutti separati da virgola.
Questo è in pratica ciò che serve sul lato client, discorso di verso è sul server, che deve riuscire a capire se il file è nuovo, pubblicarlo da qualche parte per permettere anche agli altri client di sincronizzarsi.

lunedì 13 ottobre 2014

Effeto dissolvenza

Volete stupire i vostri clienti con un programma dall'effetto di dissolvenza all'avvio e alla chiusura? Basta usare la proprietà blendlelvel.
Il seguente codice fa apparire dal nulla con l'effetto dissolvenza il vostro programma all'avvio e lo fa sparire allo stesso modo, ecco il codice:

on preOpenStack
   set the blendLevel of this stack to 100
end preOpenStack

on openStack
   repeat with i = 100 down to 1
      set the blendLevel of this stack to i
      wait 1 millisecond
   end repeat
end openStack

on closeStack
   repeat with i = 1 to 100
      set the blendLevel of this stack to i
      wait 1 millisecond
   end repeat
end closeStack

Notate come il messaggio PreOpenStack si attiva prima che il programma appaia sullo schermo.

venerdì 10 ottobre 2014

Creare il proprio lettore di iTunes

Se usate iTunes, potreste voler qualcosa di diverso o più leggero da usare per sentire le vostre musiche preferite. Oggi mostrerò come farsi il proprio lettore di iTunes. Il seguente codice funziona sia su Windows che Mac.



Prima di tutto ci serve di scrivere delle righe di codice che metteremo  nelle proprietà personalizzare (custom properties) del nostro lettore. Questi codici saranno VBscript o Applescript per interfacciarsi con iTunes, a seconda se siamo su Windows o Mac. L'unico modo per interfacciarsi con iTunes, infatti, è sfruttare i driver che installa.
Creiamo un pulsante PLAY e inseriamo la prima proprietà, chiamandola cWinPlayScript, e inserendoci il seguente codice:

Dim thePlayLists, theTrack, theLibrary, thePlayList, i
Dim iTunesApp
Set iTunesApp = CreateObject("iTunes.Application")
Set theLibrary = iTunesApp.LibrarySource
Set thePlayLists = theLibrary.Playlists
Set thePlayList = thePlayLists.ItemByName("Library")
Set theTrack = thePlayList.Tracks.Item(1)
theTrack.Play()


Creiamo la seconda proprietà, chiamandola cMacPlayScript, e inseriamo il seguente codice:
tell application "iTunes"
tell source "Library"
   tell playlist "Library"
   play track 1
   end tell
 end tell
end tell

Ora nel codice del pulsante possiamo mettere:

on mouseUp
   if the platform is "win32" then
      put the cWinPlayScript of me into tScript
      do tScript as "vbscript"
   else
      put the cMacPlayScript of me into tScript
      do tScript as "applescript"
   end if
end mouseUp

Finito, questo ci basta per avviare una musica.

Alla stessa maniera possiamo creare il codice per il pulsante STOP. La proprietà personalizzata cWinStopScript sarà:

Dim iTunesApp
Set iTunesApp = CreateObject("iTunes.Application")
iTunesApp.Stop

mentre quella cMacStopScript sarà:
tell application "iTunes"
  stop
end tell

e il codice del pulsante:

on mouseUp
   if the platform is "win32" then
      put the cWinStopScript of me into tScript
      do tScript as "vbscript"
   else
      put the cMacStopScript of me into tScript
      do tScript as "applescript"
   end if
end mouseUp

Alla stessa maniera sono disponibili tanti altri comandi in script (Applescript o VisualBasic) per interagire con iTunes: scegliere la musica, cambiare il volume, andare alla canzone successiva, ecc.
Questa tecnica può essere utilizzata anche per interagire con programmi che rilasciano solo driver che possono essere chiamati solo tramite script, generalmente sono software chiusi e proprietari.

giovedì 9 ottobre 2014

Orientare le scritte

Gli elementi grafici possono essere ruotati cambiando la proprietà angle. Ma come fare con i testi?
I campi testo non hanno la proprietà angle e quindi non potrebbero essere ruotati, ma esiste il comando export snapshot per ottenere un'immagine dal programma che possiamo sfruttare.
Il trucco consiste nell'usare un campo di testo usuale, e poi ottenere un'immagine di esso e ruotare l'immagine ottenuta.
Sembra difficile, ma non lo è affatto. Create un campo (field) di nome mioTesto e un'immagine di nome testoRuotato, tutto il codice che vi serve è:

export snapshot of rect (the rect of field "mioTesto") to image "testoRuotato"


Non è molto complicato, ora potete impostare l'angolo che vi pare al testo cambiando la proprietà angle all'immagine testoRuotato. Ricordatevi di impostare la qualità dell'immagine su best, altrimenti il testo sembrerà seghettato quando lo ruotate.
Il testo può avere qualsiasi stile o formato.
Si può anche ottenere qualcosa di più dinamico e interattivo, come ad esempio in questo esempio:
dove cliccando sull'immagine potete modificare direttamente il testo. Il codice lo potete scaricare da qui: http://tinyurl.com/mhj5t9l . Il trucco consiste nel far apparire e scomparire il campo di testo da cui è creata l'immagine, inquesto modo potete posizionare il testo, ruotarlo

P.S. A grande richiesta, lo stesso script lo potete scaricare per la versione 6 di Livecode da qui. Dalla versione 7 i file per livecode hanno un formato diverso.

mercoledì 8 ottobre 2014

Splat-O-Nym

Oggi vediamo una app creata con Livecode: Splat-O-Nym
Si tratta di un gioco per imparare i sinonimi e i contrari:

E' disponibile su iTune a $ 4.99 peressere scaricata.
Nel gioco si imparano le parole "spiaccicando" quelle corrette.
Notate come la grafica sia professionale e ottimi gli effetti di trasparenza e sovrimpressione. Questo è un ottimo esempio di programmazione con Livecode.


martedì 7 ottobre 2014

Stampare su più pagine per pigri

Abbiamo già visto in questo post come stampare su più pagine: si divide il documento su più card e si stampa tutto lo stack che contiene le card.
Se non siamo troppo interessati alla formattazione, ma abbiamo bisogno di stampare un documento e lasciar fare a Livecode la suddivisione del testo su più pagine, possiamo utilizzare il comando revPrintText.
Il fromato per invocarlo è:


revPrintText testo, intestazione, piedipagina, stile

Questo comando impagina automaticamente il testo, inoltre potete usare i separatori <% %> per inserire qualunque cosa interpretabile da Livecode, ad esempio:
  • <% the system date %> riporta 07/10/2014
  • <% the time %> riporta 3:18 PM
  • e così via...
Inoltre vi mette a disposizione i seguenti comandi:
  • <% pageNumber %> che stampa il numero di pagina corrente
  • <% numPages %> che stampa il totale delle pagine
 Lo stile del testo è lo standard da 12 punti, ma se gli indicate un campo da prendere ad esempio, imiterà tutto lo stile del campo, ad esempio:


revPrintText miotesto,,,field "stile"

prende i fonti, la grandezza del testo, l'allineamento e tutto quello che avrete impostato nel field "stile".

Potete perfino impostare intestazione e piè di pagina, la stringa ha anche delle opzioni di allineamento: tutto quello prima di un TAB è allineato a sinistra, tra il primo e il secondo TAB è allineato al centro, dopo il secondo TAB è allineato a destra.
Ad esempio:
put the text of field 1 into testo
put "a sinistra" & TAB & "TITOLO CENTRALE" & TAB & "a destra" into intestazione   
put "A sinistra in basso" & TAB & "RIPRODUZIONE RISERVATA" & TAB & "<%pageNumber%> / <%numPages%>" into piedipagina   
revPrintText testo, intestazione, piedipagina



e questo è il risultato:
Per finire, ma forse può essere estremamente importate per qualcuno, potete usare i tag HTML per migliorare il testo. I tag accettati sono gli stessi della proprietà htmltext  (accetta anche <ol> e <ul>). Se revPrintText trova dei tag, elabora tutto il testo come una pagina HTML.
Ad esempio potete ottenere questo:
Dal mio punto di vista passare attraverso l'HTML può significare dare un doppio (inutile) passaggio, sfruttare card e stack produce risultati migliori dal punto di vista grafico. Questa soluzione serve solo quando non avete la più pallida idea di cosa stamperete e di quanto sarà lunga.

lunedì 6 ottobre 2014

Intervista a Robert Caillau

Pubblico qui un'intervista del Novembre 2009 a Robert Caillau, uno degli inventori del web, a proposito di Livecode:

Parlaci di te, di quello che fai, del tuo lavoro.

Se mi guardo indietro su tutta la mia carriera, mi sembra che ho sempre lavorato sulle interfacce uomo-macchina. Ho iniziato con il programma di miglioramento che ho intrapreso in laboratorio per l'ingegneria meccanica nel lontano 1969 presso l'università di Ghent. Poi ho studiato informatica e controlli negli Stati Uniti per un anno, concentrandosi sui sistemi operativi e linguaggi di programmazione. Quando sono tornato a Gand nel 1972 io ed un amico usammo il computer ibrido (qualunque cosa fosse) per controllare il modello utilizzato dallo studio sul comportamento umano mondo come stabilito nel famoso "Rapporto del Club di Roma" sui "Limiti dello sviluppo". Ciò dimostra che ero già interessato ai problemi che vediamo solo ora, 40 anni dopo: sovrappopolazione, scarsità di materie prime, l'inquinamento, i cambiamenti climatici. Nel 1974 sono finito al CERN.

Il CERN è un posto meraviglioso. Vorrei dirvi di più, ma c'è http://www.cern.ch, il sito web più antico di tutti. CERN è un laboratorio comune, originariamente per i fisici provenienti dall'Europa, ma ora è un laboratorio mondiale. Non c'è nulla di simile altrove. CERN offre i grandi acceleratori ad alta energia necessari per gli esperimenti che ci insegnerà più sulle particelle e le forze fondamentali della natura. Ho soggiornato al CERN fino al mio pensionamento nel 2007, ma in quel periodo ho avuto almeno quattro attività molto diverse.

Per prima cosa ho preso parte al progetto di ristrutturazione del sistema di controllo degli acceleratori del CERN. Abbiamo noleggiato un certo numero di programmatori a contratto per finire il lavoro, e uno di loro era Tim Berners-Lee. Tim ha usato il mio compilatore Pascal per scrivere un programma chiamato "Enquire", che era il suo primo tentativo di un sistema ipertestuale. Ma ha lasciato poco dopo per starsene un po' in Gran Bretagna.  

Un altro amico ed io avevamo scritto un sistema di elaborazione testo serio "Office Automation", come si diceva allora. Sulla base di ciò  sono stato nominato capo del Office Computing Systems, che è diventata la mia seconda grande attività al CERN. Dopo un po' ho concluso che avremmo dovuto basare tutto su un sistema ipertestuale in rete, ma nessuno nel mio gruppo volevo studiare questa idea. Nel 1989 ci fu un grande sforzo di ristrutturazione, e ho colto l'occasione per fare questo studio io. Tim era tornato al CERN, e molto presto ci siamo incontrati e hanno lavorato insieme sulla sua "Proposta di gestione delle informazioni". Dopo, definendolo World Wide Web, ci hanno permesso di fare un po' di sviluppo su di esso per un anno. Il WWW divenne ben presto popolare tra i fisici. Dopo il 1993 è veramente esploso e ho avuto le mie mani super occupate fino a circa 1999. 

L'esperienza del WWW mi ha insegnato quanto fosse difficile comunicare strane idee a persone che non ne avevano mai sentito parlare. Quindi, come l'ultima grande attività,  mi sono concentrato sulla comunicazione e sono stato responsabile delle comunicazioni esterne del CERN fino alla fine della mia carriera.  

In questo momento mi sto divertendo a fare tutti i progetti personali che sono stati accantonati negli anni frenetici del WWW.

Ovviamente sei famoso per il tuo coinvolgimento nella invenzione del World Wide Web, ci puoi dire un po' più al riguardo?

La cosa migliore sarebbe quella di leggere il libro "La storia del World Wide Web",  ma purtroppo è fuori stampa, quindi dovrete cercare una copia di seconda mano. Ho già detto come mi sono trasferito da poco a poco dalla programmazione dei sistemi di interazione umana alla loro documentazione a fare i processori di testo e, infine, a ipertesti. Dato che i fisici vengono al CERN per un esperimento e poi tornano alle loro università, ci fu un grande bisogno di avere un database di documenti che può essere consultato da qualsiasi luogo e da qualsiasi piattaforma. il WWW è una soluzione ovvia. Ma ho intenzione di parlare di questa fase della mia vita e della vita del WWW in occasione della conferenza di Las Vegas (RunRevLive 2008), preferisco non anticipare tale. Lasciatemi dire che abbiamo avuto praticamente tutto quello che vedi sul web ora già sui nostri sistemi NeXT nel 1990. E' stato anche un momento molto, molto emozionante per chiunque sia stato coinvolto e ci sono un gran numero di aneddoti incredibilmente divertenti, nessuno dei quali mi vi dirò qui!  

Come sei finito ad usare Livecode?

Ah! Ero abituato ad usare Hypercard (un predecessore di Livecode) dal 1985, avevo anche scritto un web editor e content manager in Hypercard per me e alcuni amici del CERN. Io ancora oggi faccio le mie presentazioni in HTML standard utilizzando quei vecchi stack! (stack significa programma scritto in Livecode ndTrad.) 
Poi Hypercard scomparve. Ma avevo un sacco di stack. Per fortuna c'era Classic (fino Mac Intel). Ma ho capito molto bene che a un certo punto avrei dovuto muovermi. Non conosco un altro linguaggio di programmazione così elegante oggi disponibili, tranne forse Hypertalk o Transceipt. Ho avuto molta paura: immaginare l'inferno di dover programmare in C o BASIC! L'ho fatto ed è davvero doloroso: spendete tutto il vostro tempo di debug invece di sviluppare.

Così, ogni tanto, alla fine della giornata, durante le notti buie e tempestose, viaggiavo in rete alla ricerca di sistemi simili a Hypercard. Un giorno trovai Livecode. Ho comprato tutte le versioni dal 1.1.1.

Non ho ancora convertito il mio sistema HTML, è piuttosto specifico.Comunque, a differenza di Keynote o PowerPoint, mi permette di strutturare il contenuto. Forse durante un buio fine settimana di questo inverno e prima di Las Vegas lo convertirò.

Come è stata la tua prima esperienza con Livecode?
  

"Bene", ma sapevo quello che mi aspettavo, naturalmente. Sono stato particolarmente felice che la squadra di Livecode fosse riuscita a ripulire il sistema e la lingua, ed era riuscita a mettere la giusta parte grafica! Per non parlare della velocità! Alcuni dei miei primi problemi con Hypercard rimangono però. Non dimenticate che al CERN nel 1990, abbiamo avuto un'ottima idea a scrivere il browser per Mac in Hypercard. Ma se volete saperne di più, venite a Las Vegas!

Per cosa lo usi ora?

Per ogni piccola cosa ho bisogno, avvio Livecode, scrivo e poi non ci penso più. Tutte le mie informazioni bancarie sono conservate in un unico grande foglio di calcolo. Io vivo sulla frontiera: metà in Svizzera (non UE, no euro) metà in Francia (UE, euro) e ho alcune cose lasciate in Belgio (ancora un'altra cultura bancaria). Ho quattro stack che convertono i dati elettronici delle diverse banche in un unico formato che uso.

Ho scritto i giochi. Ma ho anche uno stack che rinomina tutte le mie foto digitali utilizzando i dati EXIF​​. Mi rendo conto che un certo numero di queste programmi sono là fuori, ma nessuno di loro fa quello che il mio fa. Ho scritto un programma di  rinomina dei file per mia figlia, una biologa professionista, che non riusciva a trovare quello che voleva per i suoi dati scientifici.  

Il mio grande progetto è un programma che genera un Hyperbook chiamato iAlbum. Forse vi mostrerò alcuni risultati a Las Vegas. Ancora una volta mi hanno detto alcuni programmi esistono là fuori, ma nessuno di loro è flessibile e permette gerarchie. iPhoto è patetico.



Ah, sì, sto insegnando programmazione ai ragazzi che hanno difficoltà di apprendimento o difficoltà sociali gravi nell'istituto caritatevole "Not School", utilizzando Livecode naturalmente.

Ecco un piccolo esempio di qualcosa che uso con Livecode. Ha reso la mia vita in viaggio con un computer portatile molto più comodo. Quando Mac OS X viene avviato riproduce un suono di avvio. Che può essere molto fastidioso se si deve avviare il vostro computer portatile in un incontro.
 


Questo codice mette fine al suono di avvio, ma conserva ancora soundlevel dell'utente:
 
on StartUp
   put url ("file:"&specialfolderpath("Preferences")&"/ShutDownItemsPreferences") into lPrefs
   if the result is empty then -- there were valid preferences
      set the playloudness to line 1 of lPrefs
   else -- defaults
      set the playloudness to 50
   end if
end StartUp

on ShutDown
   put the playloudness into lPrefs
   put lPrefs into url ("file:"&specialfolderpath("Preferences")&"/ShutDownItemsPreferences")
   set the playloudness to 0
end ShutDown

Da questo link potete scaricare l'applicazione: http://www.runrev.com/newsletter/november/issue38/Shutdown_items.app.zip
Basta inserirla nelle applicazioni all'avvio e dimenticarsene.

Come senti rispetto ad altri ambienti di programmazione? 

Sono un programmatore molto vecchio. Ho iniziato come un "guru", si sa, il colletto bianco professionale dell'IT  il cui atteggiamento è che la vita sarebbe migliore se ci fossero solo amministratori e nessun utente. Ma poi ho fatto l'errore fatale di voler aiutare le persone a capire i computer. Sono diventato un utente. Peggio ancora, nel 1984 mi sono comprato un sistema che non poteva essere utilizzato senza un mouse! Un eresia per un sistemista: un Mac. I segretari potevano lavorarci senza dover chiamare i guru! Precarietà del lavoro per i guru informatici, non per me, ma ho cambiato. E ho insegnato un sacco di ingegneri del CERN come programmare. Questa esperienza ha portato ai miei "Tre criteri per i linguaggi di programmazione" che ho esposto in una conferenza di fisica nel 1988, ma io vi mostrerò a ... Las Vegas. (Sono espressi qui: http://tinyurl.com/lngqbafSolo Livecode risponde a tutti e tre i criteri!


Il  sito di Robert Caillau è : http://www.robertcailliau.eu/Welcome-en.html