L'upload delle foto
Quanto ho aggiunto le foto quadrate al sito non ero convinto. Erano una facile estensione delle note che volevo pubblicare via Micro.blog, ma il formato imposto dall'app mi sembrava un limite fastidioso ed artificiale. Cinque anni dopo mi sono quasi dimenticato delle note, che non hanno neanche un archivio. Le foto quadrate invece hanno attecchito: sono un limite come mi aspettavo, ma uno di quelli che aiuta a creare cose interessanti. Le scatto per strada, sulla via per il lavoro, di tanto in tanto per casa; prevalentemente con l'iPod touch (ora un oggetto vintage). Le caricavo via Micropub, usando l'app di Micro.blog. Quando l'app smette di fare il suo dovere, ed il fix tarda ad arrivare, mi ritrovo bloccato. La soluzione, ovviamente, implementare l'upload per conto mio.
Ho già una paginetta da cui caricare immagini. Quello che mancava era un singolo bottone per l'intero processo:
- upload,
- archiviare la foto originale,
- crearne una versione ridotta (usando una semplice libreria, php-image-resize)
- pubblicare una nota che punta a quest'ultima, datata in base agli attributi EXIF.
Alla fine basta un form: JavaScript non serve per interazioni così semplici. Nel processo scopro che Micro.blog buttava via l'EXIF delle foto prima di caricarle. Ha senso, visto che spesso contengono precise coordinate, ma è una cosa che avrei fatto volentieri lato server, dopo aver salvato i dati importanti. Ora ho cinque anni di immagini senza metadata, e l'archivista dentro di me soffre.
Fino a settimana scorsa buttavo le foto in una directory e via, l'unico riferimento era il link nelle note. Ora esistono come modello, con attributi ed alt text salvati nel database, separati dalle note. Diventa così più facile catalogarle, magari creare piccole gallerie (come le serie di foto di spigoli e cerchi che ho scattato un paio di anni fa) oppure visualizzarle su una mappa. Per ora mi accontento di avere un upload funzionante, che verrà utile nei viaggi futuri.
Aggiungere una nuova entità è stato un lavoro minimo, con poco codice mirato. Con gli anni ho affilato l'object model del sito, ed il codice che lo supporta. È un processo interessante, che si collega a pensieri che sviluppo sul lavoro: come si fa ad evolvere un sistema in modo da poter aggiungere business logic senza mescolarlo ai livelli più bassi del codice? Quali astrazioni sono utili, e quali perderanno di più? La cosa mi fa pensare anche ai tanti thread sul forum di Altervista, dove anno dopo anno la gente porta sempre negli stessi problemi. Lavorare a basso livello è utile per imparare, ma sarebbe bello se certe cose fossero risolte in un modo semplice—i.e., non "creati tutte le librerie da zero", ma neanche "riscrivi il tuo progetto usando Laravel". Medito piccoli moduli e tutorial, chissà se metterò mai tempo da parte per crearli.
Piccola gioia del progetto: sqldef
, in particolare mysqldef
. È un programma che confronta uno schema, definito da una serie di comandi CREATE
, con un database, ed applica le modifiche necessarie a renderli identici. Mi permette di evolvere tabelle in locale, e poi applicare le modifiche su Altervista in un colpo solo. E se mai devo ricreare il database da zero, lo schema è li pronto accanto al codice che lo usa.
Nel frattempo, mi ritrovo a meditare evoluzioni più grosse. Ho cambiato ben poco nel sito dal 2016, e forse voglio un struttura diversa. Mi trattengo—ricordo come questi progetti esplodano in una serie di inconclusive riscritture—e lascio che le idee maturino in sottofondo.