30° anniversario del WWW

Il 12 marzo 2019, l’evento Web@30 del CERN ha dato il via alle celebrazioni in tutto il mondo. Sir Tim Berners.Lee, Robet Caillau e altri pionieri ed esperti del Web hanno condiviso la loro visione sulle sfide e le opportunità portate dal Web. L’evento è stato aperto dal Direttore Generale del CERN Fabiola Gianotti ed è stato organizzato dal CERN in collaborazione con le due organizzazioni fondate da Berners-Lee: la World World Wide Web Foundation e il World Wide Web Consortium (W3C).

[Fonte: CERN]

Problema con apt-get install per OracleVM Virtualbox

Utilizzo di tanto nj tanto un virtualizzatore per poter operare su sistemi Windows. Il software originariamente sviluppato da Sun Microsystem è ormai da anni passato sotto Oracle e fornisce delle macchine virtuali sulle quali si installa una versione di Windows (io attualmente utilizzo una Windows 7 da 64 bit).

Il problema è sorto quando al normale avvio OracleVM Virtualbox, il software mi ha avvisato del rilascio della versione 5.2.22. Lo stesso avviso mi compariva nel gestore pacchetti (Aggiornamenti Software) di Ubuntu. Ho provato prima ad installare la nuova versione dal package manager e ho ottenuto un problema “Software da sorgenti non fidate”. Problema analogo se scaricavo ed eseguivo da solo il .deb.

Il problema è dovuto al cambio della chiave crittografica per collegarsi al repository della Oracle (virtualbox.org che non è tra i repository ufficiali fidati di Ubuntu). Per scaricare la nuova chiave:

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -

La chiave viene aggiunta al repository delle chiavi crittografiche: ripetendo l’installazione da “Aggiornamenti software” la nuova versione di OracleVM Virtualbox viene finalmente installata.

Il comando apt-key è usato per gestire la lista delle chiavi usate da apt (Advanced Package Tool, il gestore pacchetti delle distribuzioni Debian e derivate) per autenticare i pacchetti. I pacchetti che sono stati autenticati usando queste chiavi vengono considerati fidati.

Pillole Oracle: due utilità di SqlDeveloper

Vuoi salvarti delle istruzioni SQL che usi spesso in un insieme di segnalibri?

Strumenti –> Preferenze –> Database –> Modelli di codice editor SQL
Finestra di gestione dei template SQL

Per richiamare la query, digita la scorciatoia, e l’editor ti proporrà la query completa in un balloon.

Vuoi invece trasformare una query già scritta in maiuscolo, minuscolo, o prima lettera maiuscola?

Ctrl+'

Premendo ripetutamente questa sequenza, l’editor ti ciclerà la query fra i tre tipi di scrittura

Pillole Android: come visualizzare in AndroidStudio un dispositivo collegato via USB al PC

  1. da dispositivo: Abilitare il debug USB  (Impostazioni > Opzioni Sviluppatore > Debug USB -> ON)
  2. da computer: da linea di comando digitare 
$ adb devices
List of devices attached
QLF7N16406002695        device

Quindi in basso a dx attivare la tab Device File Explorer come in figura

In alto a destra compare la tab del dispositivo con tutto il contenuto del file system:

Device FIle Explorer

Per installare adb

$ sudo apt-get install adb

Per installare Android Studio, seguire questo sito.

Pillole Laravel – localizzazione

Affinché le date e il tempo dell’applicazione Laravel siano sincronizzate con l’orologio del server occorre agire sui file di configurazione dell’applicazione. Ovviamente questo non è detto sia ciò che si desidera perché per esempio vogliamo che sia un jet lag tra il server e l’applicazione. In ogni caso, il file da modificare è uno soltanto: config/app,php:

    //'timezone' => 'UTC',
    'timezone' => 'Europe/Rome',

Io per esempio ho modificato sul fuso orario del server. That’s all folks!

Pillole Laravel – protezione contro attacchi XSS

Laravel consente di proteggere con semplicità le applicazioni dagli attacchi cross site (CSRF – Cross Site Request Forgery). I CSRF sono un tipo di sfruttamento malevolo dei programmi web in cui comandi non autorizzati vengono eseguiti al posto di un utente autenticato.

Attenzione: In particolare questi attacchi si possono verificare anche se non c’è alcuno strato di protezione con autenticazione tra il browser e il modulo HTML.

Laravel realizza nel modo che segue la protezione: esso genera automaticamente una stringa cosiddetta “gettone” (token) CFRS per ogni sessione attiva (quindi per ogni browser aperto sull’applicazione). Questo gettone viene usato per verificare che l’utente che ha fatto la richiesta sia lo stesso che ha acceduto all’inizio all’applicazione. Non serve che ci sia un’autenticazione, funziona anche per una sessione non autenticata in cui semplicemente il server invia un cookie di sessione al primo accesso anche senza necessariamente legarlo da un utente fisico nel database.

Ogni volta che si definisce una form HTML nell’applicazione, dovrebbe essere incluso un token CSFR in un campo nascosto (hidden) cosicché il middleware di protezione possa validare la richiesta. Per generarlo con Blade è facile: basta usare la direttiva @csrf per generare il campo:

<form method="POST" action="/profile">
    @csrf
    ...
</form>

Il metodo incluso nel gruppo middleware (si veda il metodo /app/Http/Middleware/VerifyCsfrToken.php) verificherà automaticamente che l’input proveniente dalla richiesta corrisponda al token salvato nella sessione.

Se non si agisce in questo modo, Laravel semplicemente blocca l’applicazione sollevando un errore HTTP 419:

Pillole Laravel: errore HTTP 500 accedendo ad una applicazione

Errore 500 e questo messaggio di log:

PHP Parse error:  syntax error, unexpected '?' in /vendor/symfony/http-foundation/Response.php

Come trovato qui, si risolve togliendo php7.0 (attualmente sto girando con php7.2)

$ sudo apt-get purge php7.0 php7.0-common ; sudo apache2ctl restart

L’errore sparisce.

Pillole Laravel: come evitare di creare implicitamente due colonne chiave sulla stessa tabella

Lo strumento delle migrazioni di Laravel è molto comodo per definire le tabelle di uno schema ma anche per le conseguenti ricadute positive sull’ORM Eloquent ai fini di produrre query con le join già fatte.

Mi riferisco al fatto che è possibile definire i vincoli di chiave esterna (foreign key). Solo che la definizione è un po’ “tricky”. Prendiamo questo esempio: due tabelle customers e orders con una relazione di chiave esterna da customers a orders:

Definizione della tabella customers, un solo attributo chiave, implicitamente definito con increments()
C’è un attributo di riferimento a customer_id

Se faccio girare lo script di migrazione, che si incarica di creare gli oggetti nello schema del DB ottengo un errore:

Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key

L’errore è abbstanza grave: abbiamo tentato di creare due chiavi: la prima con il campo id la seconda con il campo customer_id. 

All’inizio credevo che fosse un problema della definizione del constraint, e così l’ho scorporato in una seconda invocazione separata: Schema::table eccetera. Invece il problema era com’è stato definito il campo, infatti ho lo stesso errore anche togliendo la definizione del contraint. Il problema è la dimensione del campo:

$table->unsignedInteger('customer_id', 10);

Ora lo spiego qui e sembra ovvio, ma trovarlo, come tutti i buoni martorei, richiede tempo: il metodo $table->unsignedInteger() ha un secondo parametro che non è affatto la dimensione del campo, che lui si regola automaticamente, ma è – disgraziatamente…

 public function unsignedInteger($column, $autoIncrement = false)
    {
        return $this->integer($column, $autoIncrement, true);
    }

… l’informazione $autoIncrement. Essendo disgrazatamente 10 == true in PHP, il campo così viene dichiarato come autoincrement e quindi come chiave primaria generando l’errore. Invece con questa dichiarazione:

La migrazione termina correttamente

In origine, in ogni caso, c’era la mia errata invocazione del metodo.

[Hint: http://bit.ly/2zS9w1v]

Nobel per la Fisica 2018 a lavori sulla tecnologia laser

https://www.nobelprize.org

Il premio Nobel per la Fisica 2018 è stato assegnato a lavori sulle pinze laser, – ad Arthur Ashkin, una tecnologia che consente di spostare in modo estremamente preciso oggetti microscopici come i virus utilizzando la pressione elettromagnetica della luce – e sugli impulsi ultrabrevi (Mourou e Strickland). Con questa tecnica si ottengono impulsi della durata di un femtosecondo (10-15 secondi).

Per avere una idea di quanto breve sia il femtosecondo si pensi che in 1 secondo ci stanno tanti fs quanto il numero di secondi nell’età dell’universo (circa 1018):

1 s : 1 fs = Età dell’universo : 1 s

Il laser a femtosecondo, così chiamato in breve, viene utilizzato nella chirurgia dell’occhio, per la sua capacità di dosare in modo precisissimo l’energia degli impulsi.

Pillole Linux: riesumare una finestra “fantasma”

Oggi mi sono trovato davanti un problema sconosciuto: ho aperto una finestra (nella fattispecie, l’applet Java di MirthConnect) e ho poi normalmente commutato su un’altra finestra da quel momento non vedevo più la finestra Java nell’elenco dei task che vengono visualizzati con ALT-TAB:

La finestra in foreground non c’è nell’elenco dei task.

Se minimizzo la finestra di Mirthconnect non riesco più a recuperarla… Come posso fare ad accedervi nuovamente? il Linux ci sono due bei strumenti:

  • wmctrl interact with a EWMH/NetWM compatible X Window Manager: consente di fare cose meravigliose per automatizzare il desktop tramite script bash, ma in questo caso voglio solo vedere l’elenco delle finestre attive:
$ wmctrl -l
0x05800008 0 jsbach Aggiornamenti software
0x03000002 0 jsbach XdndCollectionWindowImp
0x03000003 0 jsbach unity-launcher
0x03000004 0 jsbach unity-panel
0x03000005 0 jsbach unity-dash
0x03000006 0 jsbach Hud
0x0340000a 0 jsbach Scrivania
0x03402081 0 jsbach dati_effettivi
0x00e00001 0 jsbach command line - Maximize an application with known PID from CLI - Ask Ubuntu - Google Chrome
0x05200084 0 jsbach *analisi_errori.txt (~/Documenti/clienti/XYZ/anomalie/180927) - gedit
0x04e000b5 0 jsbach prod36.mirth.local - Mirth Connect Administrator - (3.5.2)
0x03600004 0 jsbach dati_180927.xml - /home/marcob/Documenti/clienti/XYZ/2018/ - Geany
0x05a0000a 0 jsbach Terminale
0x04c00007 0 jsbach Database - KeePassX
0x05e000b0 0 jsbach prod35.mirth.local - Mirth Connect Administrator - (3.5.2)

Come si può notare le finestre attive sono più di quelle mostrate con ALT-TAB; in particolare ho evidenziato le due finestra scomparse: mi serve accedere ad una di queste due (l’ultima)

C’è poi un secondo tool molto potente:

  • xdotool fake keyboard/mouse input, window management, and more:
    questa utility simula l’uso della tastiera e di movimenti del mouse prodotti con uno script bash! Nel mio caso mi serve solo per sapere quale finestra è associata al processo che vedo essere quello sotto il quale gira il client Mirtchconnect
$ ps ax | grep java
4201 ? Sl 6:24 /usr/local/java/jre1.8.0_73/bin/java -eccetera
6102 ? Sl 6:24 /usr/local/java/jre1.8.0_73/bin/java -eccetera

Quello che mi serve è agganciare è il processo 6102. Per vedere quale finestra è associata eseguo:

$ xdotool search --pid 6102 | tail -1
98566320

xdotool mi dice che il processo 6102 è legato alla finestra 98566320, in esadecimale 0x05e000b0.

Ora xdotool permette di ripristinare la finestra come se la selezionassimo con ALT-TAB!

$ xdotool windowactivate 5e000b0

Si può fare anche tutto con un solo comando

$ xdotool windowactivate xdotool search --pid 6102 | tail -1

L’effetto è quello di riportare in foreground la finestra fantasma e ricominciarci a lavorare. Con la linea di comando 🙂

La finestra “fantasma” è nuovamente disponibile.