mercoledì, febbraio 03, 2016

L'importanza dei titoli

Il Sole 24 Ore ha pubblicato recentemente un articolo di Massimo Chiaratti intitolato «I (falsi) miti più comuni di bitcoin e della valute virtuali».

Il primo mito sfatato è che "Bitcoin non è sicuro". Si tratta di un mito, appunto. Come giustamente spiega Chiaratti, infatti, «con la sufficiente attenzione è possibile proteggere i propri bitcoin in maniera anche più efficace di quanto non sia possibile con gli strumenti di pagamento a cui siamo abituati.»

Il problema è che il titolo della pagina web, che compare bene in evidenza nella barra principale del browser, e che assume particolare importanza quando i documenti vengono indicizzati e presentati dai motori di ricerca, sembra affermare esattamente il contrario, visto che è esattamente «Bitcoin non è sicuro»:


Con buona probabilità, il titolo della pagina è stato generato automaticamente in base alle prime parole dell'articolo, e non è stato controllato accuratamente. Può succedere, ma è una cosa a cui è necessario prestare attenzione per evitare effetti indesiderati.
L'errore è presente in tutte le pagine successive: Bitcoin è anonimo, Bitcoin non è una moneta, ecc.
Sarebbe sufficiente aggiungere (almeno nel titolo della pagina, visto che se uno legge l'articolo risulta chiaro) che si tratta di un mito sfatato: «Mito sfatato: Bitcoin non è sicuro», ad esempio, sarebbe senz'altro più corretto.


giovedì, gennaio 07, 2016

Google e le ricerche di documenti in formato OpenDocument


LibreOffice cresce, e i documenti presenti "nella nuvola" sono sempre più svincolati dal monopolio di Microsoft. Bisognerebbe farlo sapere a Google, che nella propria pagina per la ricerca avanzata non propone i formati OpenDocument tra quelli presenti nella lista del tipo di file:


Strano, a dire il vero, anche perché la ricerca dei documenti LibreOffice e OpenOffice in realtà è supportata. È sufficiente aggiungere nella query di ricerca il parametro filetype:odt (oppure ods, odp, ecc.):


Basterebbe poco per cambiare l'interfaccia utente...



Licenza Creative Commons
Google e le ricerche di documenti in formato OpenDocument di Loris Tissino è distribuito con Licenza Creative Commons Attribuzione 4.0 Internazionale.

lunedì, novembre 09, 2015

Creative Commons, e se l'autore cambia idea?

Per chi se la fosse persa e fosse a digiuno di informazioni in merito alle licenze Creative Commons, segnalo l'interessante videolezione di Simone Aliprandi nell'ambito del progetto AndriaLearning curato da Francesco Leonetti.

Credo che alla trattazione manchi un punto fondamentale, quello delle variazioni dei dati nel corso della storia. Mi spiego con un esempio.

Immaginiamo che Tizio pubblichi nel 2015 un'opera nel suo sito web, attribuendo una licenza CC Share-Alike. Caio utilizza quest'opera, ne crea una derivata dopo aver consultato la licenza che lo autorizza, e la pubblica nel proprio sito web nel 2016. Fin qui, tutto bene.

Ma che cosa succede se Tizio, nel 2017, toglie dal proprio sito il riferimento alla licenza CC precedentemente applicata? Naturalmente, il comportamento sarebbe riprovevole ma non illecito (la licenza su un'opera può essere revocata, ma le opere già in circolazione rimangono con la licenza originaria); e comunque è tecnicamente fattibile. Se si tratta di un'opera che ha avuto una certa diffusione e che molti possono testimoniare di aver visto come rilasciata con licenza CC Share-Alike, nessun problema. Però immaginiamoci il caso in cui Tizio sia un autore poco noto, e che solo Caio abbia scaricato e utilizzato la sua opera. Come può fare Caio, nel 2018, a dimostrare che Tizio nel 2015 aveva pubblicato l'opera con una determinata licenza?

Il punto è che il web è stato pensato per essere costantemente aggiornato e modificabile e ciò comporta problemi non irrilevanti. Come fare, in generale, a provare che un certo contenuto, in un dato momento, era quello indicato? Una soluzione potrebbe essere quella di utilizzare servizi come archive.org o perma.cc, ma anche questi lasciano un po' a desiderare. Per dirne una, rimane il problema che ad uno stesso indirizzo di risorsa su web potrebbero corrispondere contenuti diversi a seconda di provenienza geografica della richiesta, lingua preferita nel browser, dimensioni e risoluzione dello schermo, ecc. Potrebbe ben succedere che il link ad una licenza (così come qualsiasi altro contenuto) compaia o scompaia anche a seconda del dispositivo usato per la lettura. Quindi Caio potrebbe vedere con lo smartphone che il contenuto di Tizio è rilasciato con licenza CC, mentre un'altra persona (o un servizio di archiviazione digitale automatico), anche nello stesso istante, potrebbe avere un'informazione diversa.

Insomma, possono insorgere problemi dovuti alla natura tecnica del web e al fatto che ciò che vediamo è cambiato, e non tutti i siti hanno, come Wikipedia, traccia di tutte le modifiche apportate ai contenuti. Anzi, quasi sempre queste informazioni non esistono. E l'onere della prova rimane comunque in capo a chi riutilizza l'opera.

Per completezza, riporto quanto Simone Aliprandi ha scritto nel suo libro Creative Commons: manuale operativo:
... l'utente che trova un'opera con il richiamo ad una licenza, la può riutilizzare facendo affidamento sul fatto che tale richiamo sia stato effettivamente apposto dal titolare dei diritti. Purtroppo, la comunicazione Internet non permette di tenere traccia di ogni passaggio e dunque può verificarsi la malaugurata ipotesi che il titolare dei diritti non voglia affatto rilasciare la sua opera con Creative Commons e che quindi la licenza sia stata aggiunta (in buona fede o in mala fede) da un altro soggetto non titolato a farlo.
Si tratta in verità di un caso abbastanza limite; e la dottrina giuridica comunque risolve i dilemma applicando la teoria dell'affidamento. Secondo questa teoria, un negozio giuridico è valido se vi è contrasto tra volontà e dichiarazione ma colui che riceve la dichiarazione non era in grado di accorgersi del contrasto usando l'ordinaria diligenza. 

Post modificato dopo la pubblicazione originale.

Licenza Creative Commons
Creative Commons, e se l'autore cambia idea? di Loris Tissino è distribuito con Licenza Creative Commons Attribuzione 4.0 Internazionale.

mercoledì, febbraio 18, 2015

Copia di cortesia, conforme o no?

Il recente post di Simone Aliprandi sul tema della richiesta, in alcuni tribunali, di una copia di cortesia, cartacea, di documenti consegnati on-line mi ha fatto tornare in mente una problematica che ho affrontato anni fa in tutt'altro ambito.

Il problema, ora come allora, deriva dal fatto che qualcuno (un privato, una controparte commerciale, un ente pubblico, un'istituzione: non fa differenza) chiede un documento in forma digitale, ma poi lo richiede, per propria semplicità di fruizione e di gestione, anche in forma stampata.

Immaginate un insegnante che chiede ai propri allievi di inviare il testo del compito sia via email sia consegnandone una versione cartacea; oppure l'ufficio tecnico di un comune che chiede una copia del progetto in forma di file vettoriale e una in versione stampata; oppure, come nel caso segnalato, un magistrato che, dovendo adeguarsi al nuovo processo telematico che impone la gestione degli atti tramite, appunto, l'invio telematico degli stessi, pensa bene di chiedere agli avvocati di depositare anche una copia di cortesia.

In tutti questi casi, si pone il problema del se e del come controllare la conformità dei due documenti che uno poi si trova in mano.

Che cosa succede, infatti, se un giudice decide in una causa alla luce di quanto trova stampato in un documento, e la copia cartacea dello stesso è diversa da quella depositata digitalmente? se il progetto per un nuovo edificio viene approvato in base a quanto l'impiegato vede nella versione cartacea dello stesso, con informazioni diverse rispetto a quelle presenti nel file inviato digitalmente? se l'insegnante mette un voto in base a quanto trova scritto nel documento inviato via email (giusto per fare l'esempio opposto) ma poi archivia quello ottenuto in versione cartacea?

Voglio trascurare qui il caso di chi - intenzionalmente e fraudolentemente - consegna due documenti diversi in una forma e nell'altra. La domanda piuttosto è: potrebbe succedere che, per mero errore materiale, le due copie non coincidano, oppure non appaiano allo stesso modo? La mia risposta è: certo. Alcuni casi plausibili, tutti con alla base comportamenti in piena buona fede, potrebbero essere i seguenti:

  • Tizio ha nel disco del computer due documenti, diciamo DocumentoA_versione1.pdf e DocumentoA_versione2.pdf. Invia telematicamente il primo e stampa, alcuni minuti dopo, il secondo.
  • Tizio sta lavorando su DocumentoA_versione_finale.odt. Il documento è ancora aperto e con alcune piccole modifiche non ancora salvate. Tizio non se ne accorge, effettua l'invio telematico, poi salva il documento con le modifiche e lo stampa.
  • Tizio sta lavorando su DocumentoA_versione_finale.odt. Stampa il documento, si accorge di qualche piccolo errore di battitura (un accento sbagliato, una virgola mancante), corregge il documento e invia telematicamente la versione corretta.
  • Il documento che Tizio sta guardando con il proprio calcolatore è una pagina web. La stampa. Poi salva la pagina web su disco, senza sapere che nelle pagine web è possibile (molto spesso accade) fare in modo che alcune parti vengano visualizzate o meno a seconda che lo strumento di fruizione sia una stampante o uno schermo.  
  • Il documento che Tizio ha sotto gli occhi è un file PDF, in cui tutto il testo è selezionabile / visibile / copiabile / elaborabile, anche quello con una pecetta nera che copre alcune scritte. Stampandolo, quelle scritte rimangono nere, perse per sempre. (Forse qualcuno si ricorda del caso del documento CIA declassificato dai lettori?)
  • Il documento PDF che Tizio ha sotto gli occhi contiene un'immagine posta sul bordo del foglio, con un particolare molto importante proprio vicino all'estremità della pagina. Nella versione stampata, consegnata a Caio, quel dettaglio manca, perché la stampante ha un margine di uno o due centimetri in cui non riesce a stampare. Caio vedrà il dettaglio o no? (I file PDF possono presentare molti altri problemi, ad esempio in caso di risoluzione non adeguata alla stampa, colori non adatti, font non incorporati, ecc.)
  • Il documento di Tizio ha qualche forma di intelligenza che lo rende diverso ogni volta che viene aperto. Non ci vuole granché: basta una formula di un foglio elettronico che si basi sul valore di ADESSO() o un piè di pagina di un documento che riporta la data corrente. Chi aprirà il documento si troverà qualcosa di diverso rispetto alla versione stampata.
  • Tizio invia un documento in forma telematica a Caio, e poi gli consegna anche una versione cartacea. Caio non considera la copia cartacea e legge il documento inviatogli digitalmente, dove però, in forma di revisione non cancellata, compare del testo non presente nel documento stampato. Tizio si lamenta quando scopre che Caio ha letto delle informazioni che nella versione cartacea non c'erano.

Tutti questi sono casi perfettamente plausibili di mancanza di conformità tra il documento in formato digitale e quello stampato. Quale dei due dovrebbe avere valore probatorio / legale?

Licenza Creative Commons
Copia di cortesia, conforme o no? di Loris Tissino è distribuito con Licenza Creative Commons Attribuzione 4.0 Internazionale.

domenica, ottobre 05, 2014

Programmazione in basic con LibreOffice

Se si vogliono fare degli esercizi di programmazione con strumenti multipiattaforma e senza avere la necessità di un ambiente di sviluppo troppo complesso, tra le alternative a disposizione c'è la suite LibreOffice / OpenOffice, che mette a disposizione un editor di macro e uno strumento di progettazione di finestre di dialogo che possono fare al caso nostro per piccoli esperimenti.

Quanto segue è stato testato su LibreOffice 4.2.6.3, ma dovrebbe funzionare senza problemi anche con altre versioni di LibreOffice / OpenOffice.

Creiamo un documento contenitore

Possiamo salvare il codice della nostra miniapplicazione sia nell'ambito del nostro spazio di lavoro personale sia in specifici documenti. Se vogliamo poter utilizzare ovunque il nostro codice, dovremo scegliere la seconda opzione.

Quindi, partiamo con il salvare un documento Calc (un foglio elettronico) con un nome, come ad esempio ProgrammareLOconVB.ods. Questo documento conterrà i nostri dati ma anche il codice che scriveremo e le finestre di dialogo che prepareremo.

Creare una finestra di dialogo

Per creare una finestra di dialogo, fare clic su Strumenti / Macro / Organizza finestre di dialogo....

Ci appare una finestra in cui possiamo lavorare con le nostre finestre di dialogo. Visto che ancora non ne abbiamo una, dobbiamo:

  1. selezionare il contenitore Standard del documento su cui stiamo lavorando;
  2. fare clic su Nuovo...;
  3. assegnare un nome alla finestra di dialogo (ad esempio, ShoppingListManager);
  4. fare clic su Modifica.

Si dovrebbe aprire l'editor delle finestre di dialogo, come nella seguente immagine:



Abbiamo a disposizione un insieme di controlli che potremo disporre nella finestra:



Se per caso non dovesse comparire, fare clic su Visualizza / Barre degli strumenti / Casella degli strumenti.

Aggiungere qualche controllo

Nella finestra di dialogo, aggiungiamo tre controlli, per preparare un esempio semplice: vogliamo una casella di testo in cui l'utente possa preparare una lista della spesa, scrivendo degli elementi in una casella di testo che verranno via via aggiunti alla lista (alla pressione di un pulsante).

Quando si seleziona un controllo, nella parte sinistra della finestra compare una scheda dove si possono definire le diverse proprietà. Attribuiamo un nome ai nostri tre controlli e impostiamo altre proprietà che desideriamo. Per selezionare la finestra di dialogo e cambiarne le proprietà, bisogna fare clic sul suo margine esterno.

Il risultato finale potrebbe essere simile al seguente:



Sono stati attribuiti i seguenti nomi ai controlli:

  • txtItem
  • cmdAddToItem
  • lstShoppingList

Far apparire la finestra

Il codice per far apparire la finestra, come riportato nel wiki di OpenOffice, è il seguente:

Dim oDialog AS Object

Sub StartShoppingListManagerDialog
  Dim oLibContainer As Object, oLib As Object
  Dim oInputStreamProvider As Object
  Const sLibName = "Standard"
  Const sDialogName = "ShoppingListManager"
  ' library container
  oLibContainer = DialogLibraries
  ' load the library
  oLibContainer.loadLibrary( sLibName )
  ' get library
  oLib = oLibContainer.getByName( sLibName )
  ' get input stream provider
  oInputStreamProvider = oLib.getByName( sDialogName )
  ' create dialog control
  oDialog = CreateUnoDialog( oInputStreamProvider )
  ' show the dialog
  oDialog.execute()
End Sub

Dove dobbiamo inserirlo? In un modulo, naturalmente. Nel documento Calc, fare clic su Strumenti / Macro / Organizza macro / LibreOffice Basic....
Selezionare il documento Calc, e fare clic su Nuovo. Viene chiesto un nome per il modulo. Possiamo confermare il nome Modulo1.
Sostituire il codice presente con quello riportato qui sopra. Si dovrebbe ottenere qualcosa di simile a questo:




Siamo pronti per far apparire la finestra di dialogo. È sufficiente, nel foglio di lavoro, fare clic su Strumenti / Macro / Esegui macro..., selezionare la macro StartShoppingListManagerDialog e fare clic su Esegui.

Se vogliamo, possiamo aggiungere un pulsante e un gestore di eventi al foglio elettronico Calc, in modo da velocizzare l'operazione. In Calc, far visualizzare i controlli per formulario (Visualizza / Barre degli strumenti / Controlli per il formulario), selezionare tra essi il pulsante e posizionarlo nel foglio di lavoro. Facendoci clic con il pulsante destro del mouse, si attiva la scheda per la definizione delle proprietà e degli eventi. Impostare un nome e un testo da far comparire; poi, nella scheda eventi, associare all'evento "Eseguire l'azione" la procedura di avvio della finestra di dialogo.



Attenzione: per poter provare il funzionamento del pulsante che abbiamo definito, bisogna fare clic su Modo bozza (sì/no) della barra degli strumenti Controlli del formulario.

Gestire gli eventi della finestra

Nella finestra di dialogo, possiamo associare al pulsante una macro per gestire l'evento "Eseguire l'azione". Visto che desideriamo che il valore presente nel campo di testo venga aggiunto alla lista, il codice sarà simile al seguente:

Sub cmdAddToList_click

  Dim txtItem as Object, lstShoppingList as Object
  txtItem = oDialog.getControl("txtItem")
  lstShoppingList = oDialog.getControl("lstShoppingList")

  lstShoppingList.addItem(txtItem.Text, lstShoppingList.getItemCount())

  txtItem.setText("")
  txtItem.setFocus()

End Sub

Dovremo poi associare la macro all'evento "Eseguire l'azione" del pulsante, come visto precedentemente.

Ulteriori informazioni

Una descrizione degli eventi gestibili per i vari controlli è disponibile nel wiki di LibreOffice.

Informazioni sulle proprietà e i metodi di caselle di riepilogo e caselle di testo sono nel wiki di OpenOffice.

Quando un oggetto viene istanziato, è possibile verificarne a tempo di esecuzione quali sono le sue proprietà, i suoi metodi e le sue interfacce.

Ad esempio, avendo a disposizione il nostro oggetto txtItem, potremo aggiungere al nostro codice

  MsgBox txtItem.dbg_methods
  MsgBox txtItem.dbg_supportedInterfaces
  MsgBox txtItem.dbg_properties
 
e far comparire i messaggi informativi che ci servono.

Note sulla sicurezza

L'esecuzione di una macro di cui non si conosce la provenienza è potenzialmente pericolosa. Per questo motivo, in LibreOffice / OpenOffice è disattivata.
Facendo clic su Strumenti / Opzioni / LibreOffice / Sicurezza e poi sul pulsante Sicurezza delle macro... viene offerta la possibilità di configurare il livello appropriato. Se si ricevono documenti con delle macro, ricordarsi di controllarne sempre il contenuto prima di eseguirle (impostando il livello di sicurezza su "Medio", all'apertura del documento viene chiesto se si vogliono eseguire, e potremo rispondere di no per dare un'occhiata al codice).

Esportazione del codice sorgente

Se si desidera esportare il codice sorgente di un'applicazione, ad esempio per utilizzare un sistema di controllo di versione, è possibile sfruttare il fatto che i file ods sono semplici file zip con all'interno dei documenti XML. In particolare, troveremo all'interno del file ods un file XML per ogni modulo visual basic e per ogni finestra di dialogo impostata.



File di esempio

Il file completo, ProgrammareLOconVB.ods, è disponibile nella sezione didattica / foglio elettronico del mio sito.

domenica, agosto 03, 2014

Le Frecce senz'apostrofo e senza trattini

Avete mai provato ad acquistare un biglietto ferroviario online, nel sito delle Frecce? La cosa è abbastanza semplice se, come capita a me, nome e cognome non comprendono caratteri particolari, dove per "particolare" intendo qualsiasi cosa non appartenga all'alfabeto latino/inglese A-Z. Quindi, ad esempio, niente lettere accentate e niente apostrofi.

Al momento della compilazione del campo del cognome, infatti, viene richiamato un piccolo codice Javascript che elimina i caratteri non validi. Immaginate di avere un cognome contenente un apostrofo e un trattino. L'apostrofo non riuscite a digitarlo, mentre il trattino è consentito.



Tutto bene? No, perché al momento del passaggio alla fase di pagamento non si riesce a procedere, ed un messaggio avverte che "Credentiale non e valido" (sic).


Che cosa si debba intendere per "credenziale", perché non sia valida, o come risolvere il problema non è dato sapere. Fra l'altro, dopo dieci minuti la sessione scade, e bisogna ricominciare tutto da capo, a partire dalla selezione delle stazioni di partenza e di arrivo.

Alla fine, l'acquisto è andato a buon fine, ma solo perché sono stati eliminati i trattini.



sabato, giugno 28, 2014

Visualizzazione di algoritmi

Bellissimo il post Visualizing Algorithms di Mike Bostock, che introduce con degli ottimi esempi l'importanza della visualizzazione dei risultati di un algoritmo, del grado di correttezza dello stesso o, semplicemente, dei passi che sono stati necessari per ottenere un determinato risultato.

Nella prima parte, dedicata alle tecniche di campionamento, Mike illustra tre diversi algoritmi per la generazione casuale di punti all'interno di un rettangolo, che si desiderano distribuiti in maniera da evitare pattern riconoscibili. Oltre a visualizzare il risultato, si può visualizzare a colpo d'occhio la bontà del risultato raggiunto. Si confrontino ad esempio queste due immagini

 

nelle quali le macchie più scure rappresentano le aree sottocampionate, e quelle più chiare le aree sovracampionate. Ci si rende conto facilmente che l'algoritmo alla base della seconda immagine è migliore.

Nella seconda parte, un'immagine mostra meglio di mille parole quale problema può nascere dall'utilizzo di un algoritmo usato per un mescolamento casuale di un mazzo di carte (o di qualsiasi altra cosa):

Se l'obiettivo è di avere una distribuzione equiprobabile delle carte, ci possiamo rendere conto, semplicemente visualizzando con diversi colori la distanza dall'obiettivo, quanto siamo lontani da un'implementazione corretta.

Nella terza parte Mark mostra come si possa visualizzare l'esecuzione "passo passo" di un algoritmo, tracciando un grafico che rappresenta la serie di scambi di un quick sort.

Nella quarta parte, forse la più divertente da vedere, sono poi presentati diversi algoritmi per la generazione di labirinti, con una rappresentazione di alberi e della lunghezza dei singoli percorsi basata su una scala di colori.

Come dice Mark, la visualizzazione degli algoritmi può essere un valido ausilio per l'intrattenimento (è divertente vedere gli algoritmi all'opera), per l'insegnamento, per il debugging e per la costruzione di un'interfaccia utente per l'input di dati che sono collegati reciprocamente tra di loro, come nel caso della scelta tra acquisto di una casa o affitto della stessa. Come dargli torto?