venerdì, febbraio 05, 2021

Aggiornare un sito web remoto in PHP con GIT, senza FTP e senza SSH

Può capitare di dover gestire un server remoto con del codice PHP, ma di non avere a disposizione un accesso SSH.

Se il codice PHP è gestito con un sistema di controllo di versione come git, avere il modo di aggiornare i file sul server dopo ogni commit/push può rivelarsi comodo. In genere si accede al server remoto via SSH e da lì si dà un comando per fare un git pull e recuperare gli aggiornamenti.

Ma se non si ha a disposizione un accesso SSH? Visto che abbiamo la possibilità di usare PHP sul server, perché non usare degli script per gestire gli aggiornamenti?

Per alcuni usi personali, ho predisposto due script che fanno quanto (a me) serve:

  • uno script lato client, che lancio dopo ogni commit/push,
    • esegue il comando
      git diff-tree --name-only --no-commit-id -r ababab
      dove ababab è l'identificativo dell'ultimo commit, per ottenere l'elenco dei file oggetto di cambiamento nell'ultimo commitM
    • produce un file JSON con le informazioni su questi file (percorso del file e suo contenuto, codificato in Base 64 per essere binary-safe);
    • fa un POST allo script lato server;
  • uno script lato server, che
    • riceve il file JSON e lo decodifica;
    • salva i file aggiunti / modificati, oppure elimina quelli per cui riceve un contenuto vuoto;
    • informa sull'esito dell'operazione.
Ho messo il codice a disposizione su GitHub, nel caso servisse a qualcuno.

lunedì, gennaio 25, 2021

Tutti in coda!

La parola "coda" dell'italiano è traducibile in modi molto diversi, a seconda del contesto e del significato specifico, in inglese. Spesso c'è un po' di confusione, per cui è meglio chiarire con qualche esempio (considerato anche il fatto che la coda è una struttura di dati astratta molto importante in informatica).

Innanzitutto, la coda degli animali in inglese è tail. In informatica, con tail si intende la parte finale di qualcosa. Ad esempio, nei sistemi POSIX, tail è un comando che estrae le ultime righe di un file di testo o del suo standard input.

Esempio di esecuzione del comando tail

La coda che si fa alla cassa del supermercato è una queue in inglese britannico ed è invece una line nell'inglese degli Stati Uniti.

Per la struttura dati che rappresenta una sequenza di oggetti in cui il primo ad essere estratto è il primo ad essere stato inserito (FIFO: first in, first out), si usa il termine inglese, queue. Accodare un elemento è to enqueue, prelevare il primo elemento è to dequeue. Attenzione che invece deque (pronunciato deck), senza ue alla fine, è un'abbreviazione di double-ended queue, una struttura dati diversa. la doppia coda.

Il primo elemento inserito (e quindi eventualmente da prelevare) di una queue si chiama front, mentre l'ultimo si chiama back. Il chiedere qual è il primo elemento senza effettivamente prelevarlo, è to peek.

La coda di stampa, ossia l'insieme dei file memorizzati dal sistema operativo su disco in attesa della disponibilità fisica della stampante, si chiama print buffer. Spesso si usa anche il termine spool, che è un acronimo per Simultaneous peripheral operations on-line (o forse è un backronym, visto che il termine potrebbe essere derivato dalla parola generica spool, bobina).

Spostandoci nel settore degli audiovisivi, i titoli di coda di un film sono closing credits oppure end credits.

venerdì, gennaio 22, 2021

CRUD, HTTP, SQL

Ho preparato per la mia classe quinta un breve riepilogo delle cose fondamentali da sapere per progettare un'interfaccia REST ai dati presenti in un database.




mercoledì, novembre 27, 2019

Antilaicità

Già è difficile definire il termine "religione", che comprende vari tipi di credenze e culti organizzati, spesso molto differenti tra loro.
Ancora più difficile è definire il termine "laicità", che, al di là del concetto di separazione tra Stato e Chiesa, si porta dietro significati multipli, dall'assenza di simboli religiosi nei locali pubblici alla promozione di una cultura scientifica e di uno spirito critico, dalla non discriminazione alla tutela dei diritti umani (compresi quelli di professare la religione desiderata, di cambiare religione, di non professarne alcuna).
Raffaele Carcano, per il suo ultimo libro, utilizza poi il termine «antilaicità», non ancora presente nei dizionari ma già attestato, per parlare di tutte le azioni che hanno avuto e hanno il fine di negare la laicità. Ce ne sono state parecchie, nel corso della storia umana, e non mancano certo ai giorni nostri.
Il libro in questione è Storia dell'antilaicità. Cinque millenni di rapporti tra stati e religioni (edizioni Nessun Dogma, 2019).


Vi si parla di come le religioni, in tutto il mondo, abbiano tentato e tentino di imporre le proprie visioni agli stati, di come gli stati abbiano tentato di sfruttare le religioni a proprio vantaggio e di come la laicità, nelle sue diverse accezioni, sia sempre stata messa in difficoltà sia dagli stati sia dalle religioni, nonostante le sue virtù e i suoi principi di carattere universale.
E — secondo me questa è la parte più interessante — vi si delineano i diversi concetti che dovrebbero stare alla base della definizione di laicità e che dovrebbero ispirare le attività di chi la laicità ha a cuore.

domenica, novembre 24, 2019

Un titolo fuorviante per un bel libro

Ho appena finito di leggere l'ultimo libro di Richard Dawkins, famoso biologo evoluzionista e divulgatore scientifico che aveva già scritto il brillante "L'illusione di Dio" nel 2006.
Quest'ultimo lavoro è rivolto principalmente agli adolescenti, ma è un'interessante lettura per tutti. Affronta diversi argomenti a sostegno della tesi che gli dei non esistono, i testi sacri non sono fonte di ispirazione etica, credere delle divinità non serve a essere migliori e nemmeno a spiegare la complessità della vita. Tutte cose argomentate in maniera semplice ed efficace.
La critica principale non riguarda tanto i contenuti del libro quanto il pessimo titolo che è stato scelto dall'editore (Mondadori) per la pubblicazione in Italia.
Il libro in questione, in originale, si intitola Outgrowing God. A Beginner’s Guide: è rivolto ai giovani e sottintende che crescendo ci si possa convincere dell'inutilità e dell'irrazionalità delle credenze religiose e delle religioni.
Il verbo inglese to outgrow ha diversi significati legati alla crescita: tra questi, diventare troppo grandi per qualcosa (to outgrow one's clothes, crescere tanto da non poter indossare più i vestiti di prima), rendersi conto, crescendo, dell'infondatezza di alcune credenze (she outgrew her fear of the dark, ha superato la sua paura del buio), superare qualcuno nella crescita (watching one child outgrow another, vedere un bambino superare, ad esempio in altezza, un altro).


Dalla lettura del libro risulta evidente che il significato inteso dall'autore è il secondo: dopo aver convinto il (giovane) lettore della molto probabile (quasi certa, in effetti) inesistenza di Dio, della non necessità di una sua esistenza né a formare una morale né a spiegare la complessità del mondo, Dawkins lo accompagna in un percorso di crescita che gli permetterà di abbandonarlo completamente, di superarlo come si supera una malattia o una superstizione.
Si sarebbe potuto intitolare il libro "Superare Dio", "Crescere e rendersi conto che Dio non esiste", "Abbandonare Dio crescendo", "Troppo grande per credere ancora in Dio", "Crescere e abbandonare Dio", "Crescere e staccarsi da Dio / dall'idea di un Dio" o in mille altri modi.

Che titolo ha, invece, l'edizione italiana?

 

"Diventare più grande di Dio. Una guida all'ateismo per principianti". Come se l'obiettivo fosse di convincere un ragazzo non solo che qualche Dio esiste, ma anche di poter diventare più grande dello stesso. Questa scelta mi risulta francamente incomprensibile.

Se ne avete l'occasione, comunque, acquistatelo / leggetelo. Ne vale la pena: non lasciatevi fuorviare dal titolo (e dalla grafica della copertina, criticabile anch'essa).

(Se volete sapere di più sul libro provate anche a vedere / ascoltare l'ottima intervista che Alex J. O'Connor ha fatto a Dawkins sui temi trattati nel libro.)

The Italian title chosen for the latest book written by Richard Dawkins is "Diventare più grandi di Dio", which literally means something like "Becoming greater than God". The book is good, but the Italian title is misleading.

lunedì, ottobre 21, 2019

Presentazioni mortali



Di molte presentazioni si può dire che "fanno morire dalla noia", ma ce ne è stata una che ha, quasi letteralmente, ucciso sette persone. Stiamo parlando della missione NASA STS-107 del gennaio 2003. Al decollo, un pezzo del materiale di isolamento dello Space Shuttle Columbia si staccò e, a una velocità di quasi 29mila km/h, urtò contro l'ala sinistra, proprio nella parte che doveva servire a proteggere il veicolo spaziale dalle alte temperature dovute all'attrito con l'atmosfera nella fase di rientro.

Era difficile stimare il danno provocato dall'urto, ma in una riunione tra ufficiali della NASA e tecnici della Boeing venne mostrata, in una presentazione, una diapositiva che illustrava i potenziali rischi.



La diapositiva aveva però alcuni gravi problemi di impostazione:
  • titolo grande e fuorviante
  • elenco puntato con diversi livelli, da cui si poteva dedurre scarsa importanza delle informazioni di livello più basso
  • grande quantità di testo
  • termini diversi per indicare la stessa cosa
  • termini vaghi e soggetti a interpretazione personale
  • l'informazione più rilevante (le condizioni di volo dello Shuttle erano ben diverse da quelle provate in laboratorio) era messa in coda a tutte le altre
La conseguenza fu tragica: i rischi furono sottovalutati e non fu organizzata nessuna attività che avrebbe potuto evitare il disastro del rientro.

La vicenda è ben raccontata da Jamie Thomas nel suo blog, che a sua volta rimanda all'analisi completa svolta da Edward Tufte.

domenica, luglio 14, 2019

Epoch e il primo passo dell'uomo sulla luna

Epoch è il nome convenzionalmente attribuito all'istante da cui molti sistemi informatici (in pratica, tutti quelli basati o ispirati a UNIX) iniziano a conteggiare il passare del tempo. La data scelta è il primo gennaio 1970 e ad essere conteggiati sono i secondi.

Quando interrogate il sistema per sapere quando è stato modificato un file l'ultima volta, ad esempio con

$ stat -c '%x' testfile 
2019-07-14 09:33:04.977645058 +0200

quello che ottenete in realtà è solo la rappresentazione in formato "umano" del numero memorizzato internamente nel filesystem.

$ stat -c '%X' testfile 
1563089584

Un tempo per la memorizzazione di questo valore si utilizzava una variabile a 32 bit senza segno. Per questo motivo, ancora oggi, la pagina man di stat non indica come ottenere una precisione maggiore. Adesso i bit a disposizione sono molti di più, e consentono la memorizzazione fino al livello dei nanosecondi:

$ stat -c '%.X' testfile 
1563089584,977645058

È interessante notare che nelle primissime versioni di Unix era stato scelto di utilizzare i numeri interi non per contare i secondi, ma i sessantesimi di secondo (questo perché ci si basava su oscilloscopi a 60 Hz). Si era nel 1971, e con 32 bit si potevano in questo modo rappresentare solo 828 giorni e mezzo circa, per cui fu deciso all'epoca (scusate il bisticcio di parole) di impostare epoch al 1 gennaio 1971. Solo successivamente fu cambiata l'impostazione e si passò alla memorizzazione dei secondi utilizzando il 1 gennaio 1970 come riferimento di base.

Capisco i motivi pratici della scelta, ma pensate a quanto sarebbe bello, ancora oggi, se fosse stato scelto come riferimento il primo passo dell'uomo sulla Luna, avvenuto pochi mesi (14.159.025 secondi, per la precisione) prima, alle 2:56:15 UTC del 21 luglio 1969.

$ date -d '@-14159025'
lun 21 lug 1969, 04.56.15, CEST


$ date -u -d '@-14159025'
lun 21 lug 1969, 02.56.15, UTC