I did check the earth phase on the moon when I wrote a one-off soul travel short story that takes place in part on the moon. The date is an important element in the story..
Will anyone else ever check the weather to be sure it was, in fact, nice? No.
This morning I wrote a #bash alias that switches into a repository directory, checks out the main branch, opens #macos Finder windows for two subdirectories, launches a new #firefox Nightly window, waits a second, and then opens four URLs as tabs of that new window, so yeeeeaaaahhhh, I guess you could say the day is going pretty good so far. #unix#script#nerd#hashtag
Il #problemino (tra i tanti!) delle #webapp è che saranno anche facili da #archiviare o #clonare spesso, ma non per questo anche semplici… (o per caso non sono neppure facili e la mia #esperienza mi fa sottovalutare la cosa?) 😫
🅰️ Per quelle meno complesse, il metodo migliore è senza dubbio un bel wget -kp $URL, cioè scaricare la pagina #HTML con tutte le sue risorse collegate, e convertire i link da assoluti a relativi.
🅱️ Quel #metodo però non è a conoscenza di tutte le risorse caricate dinamicamente, cioè dichiarate in posti diversi dall’HTML. Per prendere anche quelle (ed è spesso necessario, tutte le app moderne caricano roba così), bisogna aprire la app nel #browser, e guardare le richieste di #rete che macina con il normale uso.
1️⃣ A questo punto, si può usare la funzione del browser per esportare le richieste in formato HAR, e poi tool come har-extractor o Har Extractor Online per ricavare i file effettivi da quel blob.
Ho notato però che Firefox in alcune situazioni genera #HAR corrotti (2 giochi fatti in Phaser avevo provato a scaricare, ed una volta estratti gli script tiravano errori; ho riprovato con Chromium, ed è andato tutto liscio), quindi a prescindere io userei l’altro#navigatore per questa cosa. 🥴
Poi, non ho ben capito se per via di come il file HAR in sé è generato, se come quegli #strumenti lo interpretano, o un misto delle cose, ma le risorse cross-domain (e credo anche caricate da iframe?) tendono a non venir estratte, quindi si deve andare poi a pescarle prelevando l’URL di ognuna a manina dai DevTools già aperti… 🤧
🆎 Si potrebbero usare primo e secondo metodo insieme in linea di principio (copiando i file del primo passaggio su quelli del secondo, sovrascrivendo gli esistenti), ma nella pratica è inutile… se c’erano link assoluti da convertire in relativi nell’HTML, con spaventosa probabilità questi sono presenti anche nel #JavaScript o chissà dove, per cui, dato che bisognerà comunque andare a mano a modificarli da qualche parte, 1 o 2 file in più non cambiano (spesso) nulla.
2️⃣ Se si è usato il secondo metodo, bisogna a questo punto effettivamente verificare che i link siano tutti corretti, le #risorse effettivamente scaricate, e la app funzionante indipendentemente dal dominio originale… il modo più efficiente che ho trovato è aprire già da subito un webserver locale sui file, navigarci nel browser, e controllare sia che tutto funzioni nel pratico, sia che tutte le #richieste di rete per risorse effettive (ossia, non contano chiamate di telemetria o simili) vadano al mio #server, anziché al dominio originale (attivando la colonna omonima della tabella nei #DevTools lo si vede a colpo d’occhio).
Quando ci sono richieste che falliscono o che vanno su altri server, bisogna capire da dove nel codice queste partono, e fare le opportune #modifiche per usare URL relativi. Quelle che partono dall’HTML o dal CSS (turns out, non molte, altrimenti avremmo usato direttamente wget) sono appunto una scemenza da sistemare… ma quando partono da #script, c’è poco da fare, con l’aiuto del debugger del browser (di nuovo, meglio Chromium, perché de-mininifica il JavaScript aggiungendo whitespace in automatico) si va a capire da che punto partono, e in base alla situazione si valuta che modifiche fare al #codice. Poi, si testa ancora, e ancora si applicano #fix, finché tutto non funziona. ♻️
In genere questo non è un problema, e anche per app più ostiche (come quella che ho ricaricato sulla #SalaMuseoGames ieri, Little Alchemy 2) si fa tutto in un quarto d’ora ben ristretto. Tuttavia, bisogna fare attenzione a quei programmi che caricano le risorse man mano che ne hanno bisogno e non tutto subito (in genere, maggior parte dei giochi, oppure parecchie #app React)… lì si può potenzialmente perdere un bel po’ di tempo, perché bisogna mettersi ad usare il #software raggiungendo idealmente il 100% del codice; cioè, cliccare tutti i bottoni, usare qualunque azione, giocare tutti i livelli… fino ad ora non ho mai incontrato #ostacoli, ma se succede, l’unica è navigare tra il codice già scaricato per vedere cos’è che manca (da qualche parte ci sono scritti i nomi delle risorse ancora da scaricare, per ovvi motivi). 🗡️
🔚 Aggiustamenti finali: in base alla situazione, vanno fatte altre modifiche al source per ovviare a #problemi banali ma frequenti. La maggior parte riguardano i domini, che in certi casi sono hardcodati, e quindi o ci sono iframe che comunicano con la Messaging API e gli va cambiato il dominio (come per il gioco di ieri), o c’è del DRM che ostacola il #rehosting (come il giochino dell’altro ieri) ecc… con #pazienza si risolve tutto.
E alla fine di tutto, una cosa che mi piace fare ma che non sarebbe obbligatoria, è disattivare tutte le componenti potenzialmente dannose dell’ #applicazione, ossia commentare via eventuali inclusioni e chiamate a sistemi di analitiche o pubblicità. 🚯
Reboots of movies and shows are usually produced by fanfic writers. That’s why they are usually so bad. No on should try to fight emotional nostalgia. Those who do tend to fail.
Ben 2 mesi fa (pensavo meno…) avevo detto qualche dettaglio sul #backup del #MicroBlog… la metà delle cose rimane ancora valida, ma è uscita fuori qualche #rogna nel tempo. 🕤️
Avevo notato che #Altervista tende ad invalidare le sessioni un po’ a caso, quindi puntualmente lo #script falliva ad esportare il file #XRSS con cURL. Per un po’ di #tempo non ho tentato di risolvere il problema, immaginando che ci dovesse essere un modo migliore dello scraping di farlo, ma allo stesso tempo non riuscendo a pensare a nulla, e ho fatto giusto qualche #esportazione a mano di routine. ✍️
Non mi preoccupavo troppo perché (e ricordavo di averlo detto, ma temo di non averlo mai fatto, non trovo il post) avevo installato il plugin “Writing on GitHub“, che in automatico esporta i nuovi #post in Markdown nel posto lì dove dice il nome… sembrava perfetto, ma appena 2 settimane (meglio tardi che troppo tardi) fa ho scoperto che non fa il commit di eventuali modifiche apportate ad un post dopo la creazione (nemmeno con il tasto per forzare), che è quantomeno un #problemino. 🧨️
Troppo troppo pallose ‘ste cosine qui, ma menomale che proprio oggi mi è venuto lo schiribizzo di tentare di sistemarle, un po’ anche grazie alla minima ulteriore conoscenza tecnica di #WordPress accumulata in queste lunghe settimane, e quindi ecco i miei aggiustamenti: ⛏️
Ho fatto un #plugin mio per esporre un endpoint #REST custom che mi da il documento #XML di esportazione, quindi posso usare sempre il curlo o quello che è, ma senza impazzire. Ho pagato ciò con la pazzia ora, però, in quanto nonostante avessi capito subito di dover usare una certa funzione <a href="https://developer.wordpress.org/reference/functions/export_wp/">export_wp()</a>, non mi è stato subito chiaro che io dovessi includere un certo file di libreria per poterla effettivamente chiamare; la documentazione ufficiale a riguardo è scarsa, e di quella terza non ne parliamo proprio. Anche ChatGPT a ‘sto giro è stato fregato dalla realtà del mondo. 😱️
Ho invano perso po’ di tempo a ravanare nel #codice di WOGH per capire come mai non prendesse in conto le #modifiche. Temevo non fosse programmato per farlo, ma in effetti lo è (e, a pensarci un attimo, sarebbe strano altrimenti), quindi è un #bug. Vabbè, dopo troppo #debugging sono arrivata alla conclusione che per qualche motivo non salva l’hash dei commit che fa, necessario per crearne di nuovi che modificano file esistenti, ma cercare di sistemarlo per bene è una grossa rogna che non voglio nemmeno iniziare a crearmi. Quindi, dato che la #sincronizzazione perfettamente istantanea non mi serve, ho banalmente aggiunto la scrittura su file in una cartella dall’URL segreto in wp-content, quindi poi prelevo tutto via FTP. Ahimé duplico lo spazio occupato sul #server, ma tanto in primis non ho limiti fissi, e comunque è tutto testo quindi poca roba. 👁️🗨️️
Balancing creativity with budget constraints is an art in itself. These script tweaks offer practical insights for filmmakers seeking ways to optimise resources without compromising their story.
Fino ad ora ho apportato vari piccoli #miglioramenti al #sito del #MicroBlog con vari metodi, nessuno che includa anche il creare veri #plugin. Troppa sbatta perché si devono imparare tutte le API, ecc… Però, che posso fare quando sembra proprio che l’unica soluzione elegante per estendere le funzionalità di #WordPress sia quella? 😫
Quindi, ieri sera, non avendo molto tempo da perdere, ho provato a chiedere a #ChatGPT. E, con mia sorpresa, non solo non ha allucinato creando #codice rotto, ma addirittura sembra aver studiato ciò che io non ho fatto, e si è curato di fare le robe per bene, addirittura usando le funzioni sicure per scongiurare problemi come le #SQL injection! Alla fine gli ho fatto esporre uno #shortcode, da aggiungere su normali pagine, che visualizza l’HTML generato dal #PHP. È stato proprio carino questa volta, poi guardate come l’ho ringraziato alla fine… https://chat.openai.com/share/9072c3ea-f3f5-42bb-88ae-03efa795a66f. ❤️🔥
Al netto di qualche errore di interpretazione suo, che mi ha portato a dover fare piccole modifiche, ho già messo a frutto lo #script, attivandolo su una nuova pagina: Ricerca 🔍️. Essenzialmente quello che mi serviva era una #ricerca dei post di tot caratteri o meno (che per <= 500 ho chiamato Tootin’, riferendomi a chissà cosa)… e lo so che per ora è subottimale, ma è un inizio, poi magari la migliorerò. 😁
Colpo di #genio estremamente radicale per risolvere un annoso #problema: il creare una data #webapp, che non abbia bisogno di grande interattibilità (vedi un social network, o un CMS), senza dover mantenere 2 #codebase separate e quindi impazzire, facendola funzionare sia con un #server che totalmente senza… ossia, come unire in una sintesi circa accettabile i due maggiori paradigmi del #frontend? 🤔️
Quello antico, delle prime #piattaforme#web, dove il server genera tutto l’HTML e il browser lo visualizza com’è, spesso con (quasi) zero #JavaScript (vedi la Spacc BBS). 📦️
Quello moderno, dove nel #backend si espongono API (spesso JSON REST), e il fronte viene sviluppato a parte come app che gira totalmente lato #client, con il #browser che richiede pezzetti di dati e fa i suoi iperprocessamenti. 💱️
Ormai quello antico non si usa quasi mai per #progetti nuovi, perché gli svantaggi sono pesanti appena si vuole andare un po’ più in là: per tappare i buchi nel progetto medio si finirebbe a dover scrivere talmente tanto #codice#ClientSide, che a questo punto era meglio fare tutto nel secondo modo, senza menzionare i modelli e le #API da esporre nel server che altrimenti non si sarebbero implementati. Però, le webapp antiche girano bene anche sul computer tascabile meno performante (average Ximi), sui browser vecchi, e spesso sono le uniche che vanno quando tutto il resto ti lascia a piedi. D’altro canto però, anche se in teoria quella #app potrebbe funzionare #offline, magari mostrando dati cachabili, se è sviluppata in modo attaccato al server ecco allora che non si può fare nulla: muore il server, muore tutto. 💣️
Quindi la mia #idea paxxerella, dato che devo fare banalmente una #applicazione come frontend per un altro servizio già esistente, ma voglio i vantaggi appena millantati: sviluppare con i paradigmi #ServerSide in un framework JS adatto, che giri sia in Node che nel browser. A quanto pare, qualcuno ci ha pensato prima, e qualcosa di già fatto ho trovato (Express+FrontExpress, Koa+Koa-Client, Rill)… ma è tutta roba ormai abbandonata, che o non funziona (ho provato) o ha altre #rogne. Te pareva che trovavo mai qualcosa di buono già pronto… Però, in un quarto d’ora ho tirato su uno #script scheletrino, giusto per poter partire per questa via. ☠️
Well, #Nextcloud 28 is going nicely with a green tick in the check and I do think that jumping between apps within it is a little snappier than 27. My next update is the #PHP package, currently on 8.1 and should be on 8.2 now. Interestingly even the seemingly small incremental changes in PHP version often have quite major improvements so are well worth doing. Found a useful #script that says it will update the 8.2 config to be as per my 8.1