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.