Nuovo post: 🎄 Distrazioni di Natale: l'albero Padoru; Agg vari

This commit is contained in:
octospacc 2022-12-17 10:54:21 +01:00
parent 54113877a1
commit 8054fb347f
4 changed files with 253 additions and 77 deletions

View File

@ -10,7 +10,7 @@
In questi giorni ho sistemato i primi affari riguardanti il rendere disponibile il sitocto sulla rete <span style='Color:#59316b;'>Tor</span>. C'è chi mi definirà esagerata anche soltanto per aver avuto il pensiero di fare una cosa del genere, ma c'è poco da fare.
Se nulla è andato storto, il servizio Onion è ancora raggiungibile a questo indirizzo:
<small>~~[onmfrk2acl4xdeawfjg3nfepq7gcufolctmhiwwxpcknazus5bxzxhqd.onion](http://onmfrk2acl4xdeawfjg3nfepq7gcufolctmhiwwxpcknazus5bxzxhqd.onion){: style='Color:#a060c0;' }~~</small>
[sitoctt2fxjvx3lc2iqqef2aeulflprjaasv2xl4zi7sxxbmvjy5b5yd.onion](http://sitoctt2fxjvx3lc2iqqef2aeulflprjaasv2xl4zi7sxxbmvjy5b5yd.onion)[^ Nuovo dominio estetico]
[sitoctt2fxjvx3lc2iqqef2aeulflprjaasv2xl4zi7sxxbmvjy5b5yd.onion](http://sitoctt2fxjvx3lc2iqqef2aeulflprjaasv2xl4zi7sxxbmvjy5b5yd.onion)[^ Nuovo dominio estetico].
L'idea - apparentemente riuscita - è stata quella di utilizzare un servizio PaaS gratuito, Replit, per fare il tutto.
In questo modo, non appesantisco ulteriormente il mio improprio server. Ormai da mesi, precisamente da inizio-metà di febbraio 2022, uso una console Switch come server per troppe cose: oltre lo storico server SpaccCraft, ho una mia istanza Matrix, qualche bot Telegram che forse è la roba che meno richiede risorse, e software minori assortiti. Si, Nintendo Switch su cui ho avviato Ubuntu..

View File

@ -1,18 +1,21 @@
// % Title = ⚡️ Il blogging rapido con Standard Notes
// % CreatedOn = 2022-12-13
// % HTMLTitle = <span class="twa twa-⚡️"><span>⚡️</span></span> Il blogging rapido con Standard Notes
// % UpdatedOn = 2022-12-14
// % Downsync = /Posts/Blogging-Rapido-con-Standard-Notes.html
// % HTMLTitle = <span class="twa twa-high-voltage twa-⚡️"><span>⚡️</span></span> Il blogging rapido con Standard Notes
// % UpdatedOn = 2022-12-16
// % Categories = Blog Tecnologia
# <span class="twa twa-⚡️"><span>⚡️</span></span> Il blogging rapido con Standard Notes
<h1><span class="twa twa-high-voltage twa-⚡️"><span>⚡️</span></span> Il blogging rapido con Standard Notes</h1>
<p>È da direi parecchio tempo che uso <strong><a href="https://standardnotes.com" rel="noopener nofollow" target="_blank">Standard Notes</a></strong> come <strong>app di note</strong> personali.<br>
Anni fa l'avevo scelta per il suo essere <strong>libera e open-source</strong>, ma allo stesso tempo molto <strong>pulita, curata, e funzionale</strong>. Capitava a pennello in un momento in cui cercavo qualcosa che supportasse una <strong>cifratura</strong> dei dati che funziona, senza inficiare sull'usabilità.</p>
<p><img src="[staticoso:CustomPath:Assets]/Media/Misc/Standard-Notes-Tablet.webp" alt="Vecchia app Android di Standard Notes sul mio tablet."></p>
<p>Senza dilungarmi su perché poi mi è piaciuto continuare ad usarla, poi ho smesso, e poi ho ripreso fino ad arrivare ad ora, bisogna approfondire su una in particolare delle sue <strong>funzioni integrate</strong>: <strong><a href="https://listed.to">Listed</a></strong>.<br>
Si tratta di una piattaforma di <strong>blogging</strong> concepita dagli stessi sviluppatori di Standard Notes, e disponibile per il self-hosting oppure l'uso <strong>gratuito</strong> sull'istanza ufficiale. Per quanto io non l'abbia mai davvero usata prima, ho trovato fin dall'inizio <strong>interessante</strong> il concetto e la sua applicazione.</p>
## Un'esigenza veloce
<h2>Un'esigenza veloce</h2>
<p>Da qualche giorno fa, invece, ho iniziato a giochicchiare con <a href="https://listed.to/@ChatGPT_Experiences">ChatGPT</a>. Questione totalmente diversa questa, si, ma centra perché mi sono posta una domanda: tutte queste conversazioni che sto facendo con l'intelligenza artificiale, dove posso metterle per tenerle integrali, organizzate, <strong>ritrovabili</strong> e accessibili a chiunque, e per me <strong>facili da caricare</strong>?</p>
@ -30,7 +33,7 @@ Oltre ad essere pure questo un argomento a parte, va precisato che la colpa dell
<li><strong><a href="https://joinplu.me" rel="noopener nofollow" target="_blank">Plume</a></strong>, forse? Sembrava carina quest'altra piattaforma di blogging, ospitata da molti e compatibile con ActivityPub (non una necessità per me, ma comunque un bel bonus), ma non permette di impostare del CSS personalizzato; mancanza grave per questo mio caso d'uso, dato che non c'è altra via per impaginare tutto nella maniera specifica di cui ho bisogno per rappresentare una chat senza boilerplate ad ogni paragrafo di HTML.</li>
</ul>
## La scelta di Listed
<h2>La scelta di Listed</h2>
<p>Le mie idee erano finite e, dato che avevo fretta di mettere su questo sito ed iniziare a caricarci le esperienze avute con ChatGPT, considerando quanto <em>mamma mia</em> era <strong>comodo</strong> copiare ed incollare le cose <strong>direttamente in Standard Notes</strong>, questo era il <strong>momento buono di</strong> provare <strong>Listed</strong>.</p>
@ -39,7 +42,7 @@ Potrei creare un secondo account da usare solo per le note di ChatGPT, esportand
## Il pensiero del "che palle"
<h2>Il pensiero del "che palle"</h2>
<p>Tutto sommato comunque, per questo scopo limitato <strong>ho apprezzato</strong> quanto sia <strong>efficiente</strong> avere <strong>Standard Notes</strong> come parte <strong>finale del</strong> mio <strong>flusso di lavoro</strong>. Mi sembra riduca di molto l'<em>effetto "mi scoccio"</em>.</p>
@ -50,7 +53,7 @@ A dire il vero, avevo preso già da subito l'abitudine di iniziare a scrivere un
<p>"<em>Ma perché non passo a <strong>Listed almeno per il</strong> mio <strong>microblog</strong>?</em>", penso dunque. Beh, c'è un motivo se addirittura sono arrivata a farmi il mio generatore di siti statici: mi serve!... <em>E se anche non mi servisse più e potrei dunque smettere di usarlo, non ci vorrei onestamente nemmeno pensare a fare una cosa del genere, dopo tutto il lavoro!</em> 😖</p>
## Limitazioni di Listed
<h2>Limitazioni di Listed</h2>
<p>Comunque, per dirla bene, <strong>Listed è parecchio scarno</strong>: permette appena di inserire <strong>CSS</strong> personalizzato, e di formattare i post in <strong>Markdown</strong> e un <strong>sottoinsieme</strong> ristretto di <strong>HTML</strong>. Di quest'ultimo propongo di seguito le mie analisi:</p>
@ -62,14 +65,14 @@ A dire il vero, avevo preso già da subito l'abitudine di iniziare a scrivere un
<p>È chiarissimo che <strong>non può sostituire</strong> al 100% assolutamente <strong>nessuna sezione del sitoctt</strong>, nemmeno quella del MicroBlog, e anche se potesse andrebbe a creare frammentazione: il sito principale non conterrebbe più tutti tutti i post in modo centralizzato, e chi ne avesse interesse dovrebbe quindi seguire ben 2 siti diversi.</p>
## Il blogoctt con Standard Notes
<h2>Il blogoctt con Standard Notes</h2>
<p>Mi stavo <em>quasi</em> per rassegnare, ma per fortuna ho il lampo di genio: <em>Ma posso <strong>scrivere su Standard Notes</strong>, ed avere le <strong>note che</strong> in automatico <strong>si sincronizzano</strong> come file <strong>sul sito</strong>? ...No, non c'è verso. No, aspè, e chi lo ha detto? Io dico che c'è verso.</em></p>
<p>Ora, Standard Notes, come ho detto, usa un sistema di cifratura client-side dei dati, quindi per accedere alle note dal proprio account <strong>andrebbe usato</strong> un <strong>software</strong> un minimo <strong>specializzato</strong>.<br>
C'è <em>sn-cli</em>, il client ufficiale a riga di comando, che potrebbe essere utile per creare script... però <a href="https://github.com/jonhadfield/sn-cli/issues/33" rel="noopener nofollow" target="_blank">pare proprio sia stato abbandonato</a>: niente da fare.</p>
### Soluzione "a modo mio"
<h3>Soluzione "a modo mio"</h3>
<p>E allora, anche qui io quindi parlo, e dico: <em>Chi lo ha detto che devo fare le cose per bene e usare le API "vere"?</em><br>
Io dico che, visto che per qualche motivo l'<strong>HTML</strong> di un blog <strong>su Listed</strong> (nello specifico, la pagina <a href="https://listed.to/@u8/all">/all</a>, l'unica che mi sembra includere davvero tutto, e non solo gli ultimi X post) <strong>include come</strong> stringa <strong>JSON</strong> i dati di <strong>tutti i post</strong>, allora io posso semplicemente <strong>pubblicare</strong> su Listed <strong>da Standard Notes</strong> ed avere un <strong>programma che fa</strong> lo sporco - ma in questo caso davvero semplice, visto che deve solo scaricare e parsare 1 file - lavoro dello <strong>scraping</strong>.</p>
@ -82,9 +85,29 @@ No non mi so ancora decidere - per colpa di mie <em>paturnie</em> - su che stand
No, non ho ancora fatto lo script da avviare come <strong>cronjob</strong> sul server, che ogni tanto dovrebbe <strong>scaricare i dati da</strong>l blog di <strong>Listed</strong> e <strong>aggiornare</strong> i file nel<strong>la repository Git</strong> se ci sono aggiornamenti.<br>
Però, ho pensato alle cose veramente inderogabili, tipo la possibilità per il programma di sincronizzazione di non sovrascrivere un file già nella repo se questo specifica la cosa nei metadati. Metti che succede un qualunque casino, e io devo modificare i dati del post per il sitoctt senza toccare quelli della nota su Standard Notes: impostando questa flag, lo script di sincronizzazione non lo sostituirà la prossima volta che gira.</p>
## Conclusioni
<h2>Conclusioni</h2>
<p>Come concludere, dunque.<br>
Oggi <strong>ho già scritto troppo</strong> (è venuto fuori un articolo di blog e non microblog!), e la chiudo qui. Però spero vivamente che tutta questa nuova efficienza e comodità, l'avere ulteriore <strong>tecnologia che lavora per me</strong>, e non obbliga me a lavorare per lei <em>(in teoria, tanto comunque i problemi devono uscire fuori, altrimenti io non sono io!)</em>, possa <strong>farmi scrivere di più</strong> e <strong>con più piacere</strong>. Che sia sul <strong><a href="https://sitoctt.octt.eu.org" rel="noopener nofollow" target="_blank">sitoctt</a></strong>, o sulle lastre di pietra.</p>
<p>Ah, si, questo qui è stato il <strong>primo post</strong> sul <a href="https://listed.to/@u8">mio <strong>blog Listed</strong></a>, è giusto precisarlo per chi legge dal sitoctt... ma io spero che almeno la versione Listed del blog possa venire indicizzata per bene e <strong>scoperta da più persone</strong>, già che ci siamo.</p>
<p>Ah, si, questo qui è stato il <strong>primo post</strong> sul <a href="https://listed.to/@u8">mio <strong>blog Listed</strong></a>, è giusto precisarlo per chi legge dal sitoctt... ma io spero che almeno la versione Listed del blog possa venire indicizzata per bene e <strong>scoperta da più persone</strong>, già che ci siamo.<br>
È proprio nella speranza di raggiungere questo obiettivo che sto accettando alcuni <strong>compromessi</strong> quando scrivo qui, come il fare a meno delle macro (che con staticoso posso usare, mentre qui produrrebbero testi bucati e link rotti), per far si che gli articoli siano effettivamente consultabili anche dalle pagine di Listed.</p>
<ul>
<li>Adattamento a scrivere su SN (senza macro ecc)</li>
</ul>
<h2>[:HNotesRefsHTML:]</h2>
<ul>
<li><strong>Aggiornamenti</strong> del post:
<ul>
<li><strong>2022-12-16</strong>: Ho aggiunto una foto di copertina per l'articolo, e ho precisato il dettaglio finale che avevo dimenticato.</li>
<li><strong>2022-12-14</strong>: Ho aggiunto un po' di formattazione extra, e ho corretto alcune espressioni.</li>
</ul></li>
</ul>

View File

@ -0,0 +1,158 @@
// % Title = 🎄 Distrazioni di Natale: l'albero Padoru
// % CreatedOn = 2022-12-17
// % Downsync = /Posts/Distrazioni-di-Natale-Albero-Padoru.html
// % HTMLTitle = <span class="twa twa-christmas-tree twa-🎄"><span>🎄</span></span> Distrazioni di Natale: l'albero Padoru
// % Image = https://sitoctt-assets.octt.eu.org/Media/Padoru/Padoru-Tree-Old-New-Fragments.webp
// % Categories = Blog DIY
<h1><span class="twa twa-christmas-tree twa-🎄"><span>🎄</span></span> Distrazioni di Natale: l'albero Padoru</h1>
<p>Ahhh, ed ecco che anche quest'anno siamo a Novembre. Direi che è tempo di avviare la necessaria procedura di <em>scongelamento dei <strong>Padoru</strong></em>.<br>
...No, aspetta un attimo. È GIÀ <strong>METÀ DICEMBRE?!?!?!</strong> 😐 😶 🤯<br>
I mesi passano in fretta... <em>e vabbè</em>.</p>
<h2>Cos'è "Padoru"</h2>
<p>Per molti una <strong>questione controversa</strong> e un'<strong>usanza disprezzata</strong>, quella del <strong>Padoru</strong>.<br>
Per quelle 3 persone che vivono sotto le pietre <em>(e che non so come potrebbero star leggendo questo blog ora, ma sorvolo)</em>, si tratta di un <strong>meme</strong> che, stando a <a href="https://knowyourmeme.com/memes/padoru" rel="noopener nofollow" target="_blank">Know Your Meme</a>, nasce da un videogioco, <em>Fate/EXTRA</em>.<br>
In una <a href="https://www.youtu.be/efdN69QscAg" rel="noopener nofollow" target="_blank">scena del gioco</a>, <a href="https://typemoon.fandom.com/it/wiki/Nerone" rel="noopener nofollow" target="_blank">Nerone Claudio Cesare Augusto Germanico (non scherzo)</a> indossa un costume da <strong>Babbo Natale</strong>, e danza in giro per quello che credo sia un corridoio, cantando una <strong>parodia</strong> originale di <em>Jingle Bells</em>, di appena 4 strofe.</p>
<video width="400" src="https://sitoctt-assets.octt.eu.org/Media/Padoru/PadoruPadoru.webm" controls="true" muted="true" loop="true" autoplay="true">Il video della scena del gioco.</video>
<blockquote>
<p>HASHIRE SORI YO<br>
KAZE NO YOU NI<br>
TSUKIMIHARA WO<br>
PADORU PADORU</p>
</blockquote>
<p>Ho provato a cercare il significato della canzoncina, ma <a href="https://anime.stackexchange.com/questions/43895/what-does-padoru-padoru-mean" rel="noopener nofollow" target="_blank">non ho avuto risultati soddisfacenti</a>.<br>
L'unica cosa che so è che l'<strong>ultima strofa</strong> (da cui <strong>deriva il nome</strong> popolare del meme), "<em>padoru padoru</em>" è l'<strong>equivalente giapponese</strong> del "<em>cloppete cloppete</em>" italiano, l'<strong>onomatopea</strong> del suono degli <strong>zoccoli delle renne</strong>. Il come ciò sia possibile non mi è dato saperlo ma, onestamente, è il dettaglio meno strano.</p>
<h2>Usanze di Internet</h2>
<p><strong>In rete</strong>, da diversi anni si sono sviluppate svariate <strong>tradizioni</strong> attorno a questo memino.<br>
Le più banali sono la <strong>ricondivisione</strong> smodata del <strong>video</strong> originale o di sue immagini GIF, o la produzione e la condivisione di <strong>meme originali</strong> che fanno riferimento al concetto iniziale.<br>
Poi, la gente ha iniziato a deprecare l'espressione "periodo natalizio", in favore di una più magica "<strong><em>stagione di Padoru</em></strong>" - che in realtà non è un termine sostitutivo 1:1, perché può indicare anche le settimane un attimo precedenti a quelle magari di avvento, quelle di Novembre che ho menzionato all'inizio e in cui già si inizia con la <strong>guerriglia Padoru</strong> sulle piattaforme di comunicazione.</p>
<p>L'usanza più bella (per la sua passivo-aggressività), secondo i miei gusti, è quella di cambiare le foto dei propri vari profili con l'immagine di <strong>un Padoru</strong>.<br>
Ci sono le persone che sfruttano il loro senso dell'umorismo unito in comune per attuare questa cosa come un'<strong>operazione</strong> (molto relativamente) <strong>di massa</strong>. Poi c'è chi osserva il fenomeno ma non è a conoscenza del senso, non capisce, si adira, e si <strong>confonde</strong> a tal punto da auto-colpirsi; oppure, chi lo conosce perfettamente, e si adira anche di più perché boh, <em>forse disprezza il Natale</em>.</p>
<p>Se stai leggendo con <strong>attenzione</strong>, avrai notato che ho appena usato, non a caso, l'articolo indeterminativo... <small>Se non l'hai notato, ti stai distraendo, e quindi, <del>per punizione</del> per il tuo bene, ora devo necessariamente costringerti a cantare 3 volte ad alta voce la canzoncina di cui sopra 👺.</small></p>
<h2>Alta personalizzazione</h2>
<p>Un <strong>importante fattore</strong> che ha permesso a questo meme di diventare il fenomeno che è si rivede nel suo essere <strong>estremamente personalizzabile</strong>.<br>
Non so quando sia iniziata questa tendenza, ma ad un certo punto c'è stato chi ha visto che <strong>il</strong> Padoru, il <strong>disegno</strong> originale di Nerone nella sequenza video che tutto scaturì, è veramente <strong>semplice da remixare</strong>.</p>
<p>Se lo si guarda con un'inventiva assente o quantomeno terra terra, ci si accorge che si possono <strong>cambiare i colori</strong> in un batter d'occhio con degli altri che ugualmente possono starci bene, e si ha quasi un nuovo disegno.<br>
Chi invece un minimo di <strong>creatività</strong> la ha, può senza difficoltà provare a <strong>modificare</strong> alcune delle <strong>forme</strong> del personaggino, cambiando il giusto qui e là per ricostruire un <strong>personaggio</strong> totalmente <strong>altro</strong> - che sia originale, o già esistente ma disegnato solo con altri stili - in forma di quel cosino sorridente che corre in giro a rompere col suo versetto festivo.</p>
<p>Questa roba è di una facilità talmente estrema che <strong>persino io</strong>, che normalmente se provo a disegnare qualsiasi cosa di artistico (o comunque poco tecnica) creo dei veri e propri <em>glitch</em>, <strong>ho potuto creare il mio</strong> personalissimo Padoru senza alcuna sofferenza.<br>
In appena 2 orette molto scarse una mattina del 1º Dicembre a scuola - non ricordo se fosse giorno di assemblea oppure di varie supplenze - un po' <strong>ricalcando</strong> le linee di base dell'aspetto Padoru, un po' <strong>introducendo caratteristiche</strong> originali (che ho derivato dal mio personaggio 3D, quello che figura in alcune mie foto profilo tutto l'anno), con un'app di disegno generica sullo smartphone ho fatto ciò che sentivo di dover fare.<br>
Il risultato è stato che, semplicemente, <strong>è uscito qualcosa</strong> di normale, nessun orrore! Molto bene. </p>
<p><a href="[staticoso:CustomPath:Assets]/Media/Padoru/Octt-Padoru.png"><img src="[staticoso:CustomPath:Assets]/Media/Padoru/OctoVoLTE-15989.avif" alt="Schermata dei messaggi dell'anno scorso riguardo la creazione dell'Octt Padoru. Nel primo avevo finito i contorni e stavo iniziando a colorare i capelli viola. Nel secondo avevo completato il lavoro e ho inviato il file PNG."></a></p>
<h2>Le mie "partecipazioni"</h2>
<p>L'anno scorso <strong>creai</strong> quindi il mio Padoru appositamente per usarlo come <strong>foto profilo</strong> (su Telegram), e l'ho fatto.<br>
L'anno prima ne avevo usato uno non mio, modellato sulla <a href="http://web.archive.org/web/20221217073124/https://teddit.net/r/Padoru/comments/czxoa7/senko_san_at_your_service" rel="noopener nofollow" target="_blank">kitsune Senko-san</a>, e l'anno ancora precedente avevo messo altri tipi di meme Padoru.</p>
<p><strong>Quest'anno</strong> non ho fatto un bel <strong>niente</strong>... e la cosa particolare è che non so dare una spiegazione della cosa. Zero 😶.<br>
Ciò che sospetto è che, banalmente, <strong>I forgor 💀</strong> (<em>me ne sono dimenticara 💀</em>). 2 settimane fa avevo ahimè <strong>troppe cose per la testa</strong>: prima la mia istanza Misskey che malfunziona e io devo correre, poi la fissazione con ChatGPT, è chiaro che non c'è stato proprio modo di riservare 30 secondi di tempo all'aggiornare la foto di nemmeno uno solo dei miei account online.<br>
A questo punto, non so se fare adesso il <strong>cambio</strong> e quindi sfruttare tutto il tempo che rimane fino alla fine del periodo natalizio per essere <em>Padoruante</em>, oppure seguire una logica minimale e aspettare l'inizio della settimana prossima: l'ultima settimana di avvento e la prima di vacanza, avrebbe un suo senso.</p>
<p>L'anno scorso sarà quindi andato di lusso con le fotine digitali, ma <strong>il lato fisico</strong> è stato da me accidentalmente <strong>trascurato</strong>.<br>
Andiamo con ordine.</p>
<p>Gli <strong>addobbi</strong> natalizi generici <strong>in casa</strong> li mettono praticamente tutti i miei genitori - <strong>mia madre</strong> in particolare, che ha pure <strong>potere di veto</strong> su eventuali proposte troppo progressiste riguardo l'albero di Natale grande - nei primi giorni di Dicembre.<br>
Tra le cose che ogni anno vengono riprese dalla soffitta, delle piccole c'è anche un <strong>alberello da scrivania</strong> che praticamente è mio. Ha delle <strong>lucine integrate</strong>, alimentate con batterie stilo, ma comunque di per sé non è nulla di troppo speciale. O, meglio, così era prima che io lo <strong>rivoluzionassi</strong>, <strong>3 anni fa</strong> (era il 2019!).</p>
<h2>Modifica all'alberello</h2>
<p>Il <strong>lampo di genio</strong> mi pare arrivò dopo aver visto una foto su <strong>Internet</strong>, che raffigurava un <strong>albero di Natale</strong> (di dimensioni normali) con su <strong>attaccati</strong> un paio di <strong>Padorini di carta</strong>; esattamente come altri tipi di addobbi che si appendono, ma meno socialmente accettabili.<br>
L'idea ormai si era impossessata di me, e a questo punto dovevo ricreare personalmente la stessa cosa. Ho aperto quello che all'epoca era il mio <strong>motore di ricerca</strong> Web di fiducia, e ho cercato "<code class="prettyprint">padorus images</code>" (o qualcosa del genere), per creare un <strong>insieme assortito</strong> di qualcuno di quei disegnini, <strong>scaricando</strong> quelli che attiravano la mia attenzione e <strong>mi piacevano</strong> esteticamente di più.</p>
<p>In quel momento avevo davanti a me una <strong>scelta</strong>: li stampo abbastanza grossi e li metto sull'<strong>alberone</strong>, o li stampo picccini per poterli mettere sull'<strong>alberetto</strong>?<br>
A dirla tutta, di scelta <strong>non si trattava</strong>, in quanto la prima opzione era automaticamente da buttare per via del <strong>veto</strong> di mia madre, ma sicuramente la seconda via mi intrigava: l'alberellino stava (e sta) nella <strong>mia stanza</strong>, quindi la sua normalità sarebbe completamente sprecata senza qualche abbellimento creativo.</p>
<p>Fatta la <strong>stampa</strong>, non mi restava altro che <strong>ritagliare</strong>, più o meno grossolanamente (ciononostante, è stranamente servita una buona quantità di lavoro), i vari Padoru, per poi <strong>attaccarli</strong> all'albero con un po' di colla a caldo.<br>
È venuto fuori <strong>quello che volevo</strong>, insomma, quindi ho apprezzato e ho usato una foto ad esso scattata come immagine del mio profilo. L'anno seguente, l'albero è <strong>rimasto com'era</strong>.</p>
<p><img src="[staticoso:CustomPath:Assets]/Media/Padoru/Padoru-Tree-2019-2022.avif" alt="Il mini-albero com'era fino all'altro giorno, prima che facessi quello che ho fatto ora. Ci sono meno di una decina di Padoru"></p>
<h2>Nel presente</h2>
<p>Per quanto riguarda <strong>quest'anno</strong>, una volta finalmente entrata mentalmente nell'<em>atmosfera padorizia</em>, <strong>contemplando</strong> quell'oggetto che da giorni è lì sul mio <strong>comodino</strong>, ho pensato che lo stesso fosse un po' <strong>vuoto</strong>, e avesse bisogno di <strong>altri Padoru</strong>. </p>
<p>L'altro giorno <strong>pensai</strong> di doverne allora <strong>cercare</strong> alcuni <strong>nuovi</strong> online per stamparli, ma un attimo dopo mi torna in mente <strong>una cartella</strong>, che ho trovato il mese scorso sul PC mentre facevo pulizia.<br>
Contiene <strong>il mio Padoru</strong> originale, <strong>e vari altri</strong> che ricordavo di aver scaricato, ma che <strong>non ero</strong> troppo <strong>certa di aver</strong> mai <strong>stampato</strong>. I file sono tutti datati a Dicembre 2021, cosa ovvia per l'unico da me creato, ma in effetti curiosa per gli altri, se si considera tutto lo scenario.</p>
<p><img src="[staticoso:CustomPath:Assets]/Media/Padoru/Padoru-Folder-2021.png" alt="Alcune delle singole immagini Padoru presenti nella cartella; in totale 23. Notare il loro essere datate all'8 Dicembre 2022."></p>
<p>Cosa ancor più curiosa, uno dei file lì presenti è un'immagine, con rapporto d'aspetto pari a quello di un foglio A4, dove sono disposte tutte le singole immagini della cartellina.<sup id="fnref1"><a href="#fn1">1</a></sup><br>
"<em>L'avrò composta l'anno scorso e alla fine forse non avrò più stampato</em>", penso; eppure, qualcos'altro nella mia mente mi dice che <strong>in realtà l'ho stampata</strong> eccome, e magari semplicemente non l'ho <strong>mai usata</strong> alla fine. Sicuramente, mai ho attaccato quei Padoru sull'alberello, perché lì ci sono solo quelli di 3 anni fa.<br>
Per un quarto d'ora scarso cerco questo sfortunato <strong>foglio</strong> nella mia stanza ma, non trovandolo, <strong>decido di ristamparlo</strong>. Oddio, un foglio di Padoru a dire il vero l'ho trovato... più o meno: ho trovato un frammento del foglio del 2019, con 3 immagini che mai utilizzai al tempo.</p>
<p>Senza perdere altro tempo, invio dunque il documento alla <strong>stampante</strong> di casa, che prontamente <strong>mi restituisce</strong>... un <strong>foglio bianco</strong>? Sembrava, ma poi l'ho preso in mano e ho notato che era stata stampata. L'immagine? <strong>NO! UNA MACCHIA! 🤬</strong><br>
Immediatamente, subentra la <strong>rabbia</strong>, ma un secondo dopo questa viene <strong>sovrastata</strong> da una sensazione ancora più forte: una di "<strong>già visto</strong>".</p>
<p><img src="[staticoso:CustomPath:Assets]/Media/Padoru/Padoru-Failed-Print.jpg" alt="Foto del foglio stampato male. Al posto di alcuni Padoru ci sono macchie di colore, per altri si vedono solo i contorni, per altri ancora nulla."></p>
<h3>...Un po' prima</h3>
<p>A questo punto, <strong>qualcosina</strong> mi <strong>torna in mente</strong>, e apro la cronologia del mio canale Telegram (che uso come un micro-microblog) per cercare risposte ai miei sospetti: ebbene, <strong>avevo stampato</strong> queste immagini <strong>l'anno scorso</strong>. Ora ricordavo bene!<br>
<strong>Era</strong> successo lo <strong>stesso</strong> identico <strong>problema</strong> della stampa andata a quel paese che, stranamente, si verifica su ben 2 stampanti diverse, solo mandando in stampa tramite l'applicazione ufficiale di <strong>Epson</strong> (produttore delle stampanti) per Android, e solo per questa immagine (PNG 2480x3472 di 9 MB), tra tutte quelle che ho dovuto stampare nella mia vita.<br>
Sul momento della prima volta ho perso tempo con mio padre - che fino a prima aveva usato la stampante senza particolari rogne - prima cambiando la cartuccia segnata scarica, poi pulendo le testine; dopo non so quanti minuti buttati, al <strong>terzo tentativo</strong> di stampa ho fatto dal PC Windows di mio padre, e l'immagine <strong>finalmente</strong> è uscita fuori. 😶‍🌫️🔪</p>
<p>Questa volta invece, appena collegati un attimo tutti i puntini, ho riprovato dal PC subito...<br>
È seriamente troppo pretendere che l'app ufficiale funzioni come dovrebbe, o che quantomeno dia un errore, che a me non ha mai dato, se per qualche motivo non riesce a gestire correttamente un file? Dovrei mandare <strong>a quel paese</strong> una volta per tutte queste <strong>stampanti proprietarie</strong>, marce e puzzolenti, uscite direttamente dall'inferno, e costruire la mia: con un microcontrollore, dei servomotori, e dei pennarelli, come persone più sagge già hanno fatto.</p>
<p>Comunque, la mia intenzione, quel giorno lontano, era di <strong>trollare</strong><sup id="fnref2"><a href="#fn2">2</a></sup> <strong>mia madre</strong>: stampare alcuni nuovi Padoru, tutti diversi e <strong>colorati</strong>, per <strong>attaccarli</strong> sull'albero di Natale grande, che quell'anno era stato da lei addobbato con decorazioni categoricamente <strong>tendenti al bianco</strong>.<br>
Stampai insomma tutti quelli lì, ma ne misi <strong>solo 1</strong> di numero sull'albero (tra l'altro, mi sembra passarono ben 2 giorni prima che mia madre ci facesse caso 😂), quindi è evidente che <strong>pianificavo</strong> di fare qualcosa <strong>con quegli altri</strong>. Probabilmente, avrei voluto <strong>metterli</strong> sul <strong>mini-albero</strong>, però (ancora, evidentemente) non l'ho <strong>mai fatto</strong>. <em>Did I forger (💀)?</em> Molto probabile: anche queste del Dicembre passato erano settimane un po' cariche, però ho fatto arrivare Gennaio (tempo di ricongelare il Natale e tutte le decorazioni, Padoru e non) senza fare nulla, quindi la cosa mi sarà <strong>passata</strong> proprio <strong>di mente</strong>.</p>
<h2>Conclusione concreta</h2>
<p>Tra <strong>ieri e l'altro ieri</strong>, ho innanzitutto <strong>ritagliato</strong> buona parte <strong>dei Padoru</strong>; non tutti, perché altrimenti ci passo davvero le ore, e perché sul mio albero da scrivania non ce ne stanno più 🤷‍♀️.<br>
Stavolta le forbici le ho usate in maniera davvero certosina, e ho <strong>scontornato le figure</strong> con una <strong>definizione</strong> molto alta; per i miei <em>standard di tagliuzzamento</em> di <em>disegni che hanno molti dettagli minimi di forme complesse</em>, quantomeno, lo è.<br>
Dopo questa mansione - che sarebbe pure rilassante, se non fossi dovuta <em>stare bend</em><sup id="fnref3"><a href="#fn3">3</a></sup> per via della luce - con la pistola di <strong>colla a caldo</strong> pian piano (cosa che richiede comunque molto meno tempo del ritaglio) <strong>ho incollato</strong> tutte le figurine alle pareti fogliari esterne dell'<strong>albero</strong>. Ne <strong>ho approfittato</strong> per <strong>sistemare</strong> gli elementi appiccicati 3 anni fa, che reggevano ma non in modo solidissimo... probabilmente <strong>feci male</strong> il lavoro, <strong>all'epoca</strong>.</p>
<p><img src="[staticoso:CustomPath:Assets]/Media/Padoru/Padoru-Tree-New-0.webp" alt="Foto dell'alberello dopo aver attaccato"><br>
Questo qui è il risultato, mi piace veramente un botto.</p>
<p>A parte la <strong>bellezza dell'oggetto</strong> ad un livello per me <strong>personale</strong>, e l'aver realizzato come avrebbe potuto - già solo ai miei occhi - diventare più bello, se fosse diventato ancora <strong>più novello</strong> e meno standard, l'alta posta in gioco dello <strong>scrivere</strong> un articolo qui <strong>ha fatto miracoli</strong>: mi ha fatto <strong>portare a termine</strong> un'<strong>attività</strong> manuale <strong>semplicissima</strong>, del fai-da-te praticamente di scuola materna, senza che il mio cervello la cancellasse dopo mezza giornata!</p>
<p>Per concludere, in buona sostanza si può - non ironicamente - affermare che <strong>c'è voluto un intero anno</strong> perché io riuscissi finalmente ad <strong>attaccare</strong> una quantità soddisfacente di piccoli Padoru al mio alberello.<br>
<strong>L'altro ieri</strong> ho iniziato a <strong>scrivere</strong> questo articolo, <strong>credendo</strong> che avrei parlato semplicemente di come l'idea ha avuto per me <strong>origine</strong> e cosa ho fatto per espanderla in questi due giorni, poi però ho <strong>riscoperto</strong> questi <strong>dettagli</strong> che direttamente si <strong>intrecciano</strong> con l'<strong>anno scorso</strong>... meraviglioso. Credo che la <strong>storia</strong>, in realtà, sia diventata <strong>più interessante</strong> da raccontare, <strong>dopo queste disavventure</strong> dovute al funzionamento discutibile del mio cervello.</p>
<h2>[:HNotesRefsHTML:]</h2>
<div class="footnotes">
<ol>
<li id="fn1">
<p>Sul canale ho ritrovato il comando di <strong><a href="https://imagemagick.org" rel="noopener nofollow" target="_blank">ImageMagick</a></strong> che usai per creare l'immagine grande contenente tutte le altre disposte a griglia, lo metto qui per chi ha bisogno di stampare cose di questo tipo: (da eseguire stando nella cartella con tutte le immagini da includere) <code class="prettyprint">montage -define png:size=496x496 -geometry 496x496 -tile 5x7 -auto-orient * OUTPUT.png</code>. I valori di "496x496" e "5x7" sono modificabili a piacere, qui sono messi in modo che il file risultante avrà <strong>dimensioni</strong> vicinissime a quelle <strong>A4</strong>, con <strong>35 immagini</strong> massime su un solo foglio, tutte scalate <strong>uguali</strong> e <strong>quadrate</strong>. Magari l'immagine va stampata <strong>aggiungendo</strong> dei buoni <strong>margini</strong> prima, però, altrimenti rischia di uscire leggermente tagliata.&nbsp;<a href="#fnref1"></a></p>
</li>
<li id="fn2">
<p><strong>trollare</strong>: In questo caso, fare uno scherzetto innocuo.&nbsp;<a href="#fnref2"></a></p>
</li>
<li id="fn3">
<p><strong>stare bend</strong>: "<em>to bend</em>" in Inglese vuol dire "<em>piegare</em>". Io uso l'espressione "<em>stare bend</em>", volutamente errata, per intendere "<em>stare piegata</em>" (con la schiena o il collo). È un mio meme stupido che nacque sotto circostanze curiose, magari un giorno lo spiegherò.&nbsp;<a href="#fnref3"></a></p>
</li>
</ol>
</div>

View File

@ -1,20 +1,18 @@
#!/usr/bin/env -S node --experimental-fetch
const fs = require('fs');
const JSDOM = require('jsdom').JSDOM;
const ConfigParser = require("./Lib/config-ini-parser").ConfigIniParser;
const ConfigParser = require('./Lib/config-ini-parser').ConfigIniParser;
const BlogURL = 'https://listed.to/@u8'; // Full base URL of the Listed blog (any server)
const SiteName = 'sitoctt';
//const DefaultMode = 'Include' // 'Include' or 'Exclude' | Not implemented
const PostsFileDate = true; // Append dates (YYYY-MM-DD) to posts file names
const Replacements = { // Format: { ReplaceWithString: [ToFindString] }
"## [:HNotesRefsHTML:]": "<h2>🏷️ Note e Riferimenti</h2>",
"<h2>[:HNotesRefsHTML:]</h2>": "<h2>🏷️ Note e Riferimenti</h2>",
'<div class="footnotes">': ['<div class="footnotes"><hr>', '<div class="footnotes">\n<hr>'],
"<a href=\"[staticoso:CustomPath:Assets]/": "<a href=\"https://sitoctt-assets.octt.eu.org/",
"<img src=\"[staticoso:CustomPath:Assets]/": "<img src=\"https://sitoctt-assets.octt.eu.org/",
// TODO: Fix anchor rels
"# ": "<h1>", "## ": "<h2>", "### ": "<h3>", "#### ": "<h4>", "##### ": "<h5>", "###### ": "<h6>",
"": ["</h1>", "</h2>", "</h3>", "</h4>", "</h5>", "</h6>"],
// staticoso TODO: Fix the handling of headings to remove this crap above...
};
const MetadataBlockSelect = '.MetadataBlock, .MetadataBlock + :Where(Div, Pre, Code)';
@ -25,6 +23,7 @@ const TryReadFileSync = Path => {
return fs.readFileSync(Path, 'utf8');
};
};
const TryMkdirSync = Path => {
if (!fs.existsSync(Path)) {
return fs.mkdirSync(Path, {recursive: true});
@ -41,26 +40,28 @@ const GetPath = URL => {
const GetFragHTML = Frag => {
let Dom = new JSDOM('<body></body>');
Dom.window.document.body.appendChild(Frag);
return Dom.window.document.body.innerHTML;
return Dom.window.document.body.innerHTML.trim();
};
const CheckDoDownsync = File => {
let DoDownsync = true;
const TryFile = TryReadFileSync(File);
if (TryFile) {
const Lines = TryFile.trim().toLowerCase().split('\n');
const CheckDownsync = Body => {
if (Body) {
const Lines = Body.trim().toLowerCase().split('\n');
for (let i=0; i<Lines.length; i++) {
const Line = Lines[i].trim().replaceAll(' ', ' ').replaceAll(':', ' : ').replaceAll('=', ' = ');
if (Line.startsWith('// ')) {
const Tokens = Line.split(' ').filter(i => {return i != ''});
if (Tokens[1] == '%' && Tokens[2] == 'downsync' && [':', '='].includes(Tokens[3]) && ['false', 'disabled', 'off', 'no'].includes(Tokens[4])) {
DoDownsync = false;
break;
const Line = Lines[i].trim()
const CheckLine = Line.replaceAll(' ', ' ').replaceAll(':', ' : ').replaceAll('=', ' = ');
if (CheckLine.startsWith('// ')) {
const Tokens = CheckLine.split(' ').filter(i => {return i != ''});
if (Tokens[1] == '%' && Tokens[2] == 'downsync' && [':', '='].includes(Tokens[3])) {
if (['false', 'disabled', 'off', 'no'].includes(Tokens[4])) {
return false;
} else if (Tokens[4].startsWith('/')) {
return Line.substring(Line.indexOf('/', 2));
};
};
};
};
};
return DoDownsync;
return true;
};
const GetLinkElem = Dom => {
@ -73,8 +74,8 @@ const GetLinkElem = Dom => {
};
const ParseMeta = Raw => {
let Mid = {"Meta": "", "Macros": ""};
let Data = {"Meta": {}, "Macros": {}};
let Mid = {'Meta': '', 'Macros': ''};
let Data = {'Meta': {}, 'Macros': {}};
const Lines = Raw.trim().split('\n');
for (let i=0; i<Lines.length; i++) {
let Type;
@ -123,8 +124,8 @@ const MakeMetaStr = Post => {
};
const HandlePost = PostSrc => {
let LinkElem, ContentDom;
let Post = {"Meta": {}, "Macros": {}};
let ContentDom, LinkPath;
let Post = {'Meta': {}, 'Macros': {}};
Post.Meta.Title = PostSrc.title;
Post.Meta.CreatedOn = PostSrc.created_at.split('T')[0];
@ -133,29 +134,46 @@ const HandlePost = PostSrc => {
ContentDom = JSDOM.fragment(Post.Content);
LinkElem = GetLinkElem(ContentDom);
if (!LinkElem) { // Post content has no mirror-flagging element, skip it
// TODO: Exclusion mode instead of inclusion? Aka automatically handle posts without the element
// TODO: Check flagging via MetadataBlock?
console.log(`[I] : No mirror flag in source body; Skipping!`);
return;
// Handle MetadataBlock elements
let MetadataBlocks = ContentDom.querySelectorAll(MetadataBlockSelect);
for (let i=0; i<MetadataBlocks.length; i++) {
const Elem = MetadataBlocks[i];
if (Elem.textContent) {
const Meta = ParseMeta(Elem.textContent);
Post.Meta = Object.assign(Post.Meta, Meta.Meta);
Post.Macros = Object.assign(Post.Macros, Meta.Macros);
};
MetadataBlocks[i].outerHTML = '';
};
const LinkPath = GetPath(JSDOM.fragment(LinkElem.outerHTML).querySelector('[href]').href);
// NOTE: Maybe would be better to first do string replacements?
/*
// Get post categories
Post.Categories = '';
const Classes = LinkElem.classList;
for (let i=0; i<Classes.length; i++) {
const Class = Classes[i];
const Key = `Mirror-${SiteName}-Categories-`;
if (Class.startsWith(Key)) {
Post['Categories'] = '// % Categories = ' + Class.substring(Key.length).replaceAll('|', ' ');
let LinkElem = GetLinkElem(ContentDom);
if (LinkElem) {
LinkPath = GetPath(JSDOM.fragment(LinkElem.outerHTML).querySelector('[href]').href);
LinkElem.outerHTML = '';
} else {
let Check = Post.Meta.Downsync;
if (typeof(Check) == 'string' && Check.startsWith('/')) {
LinkPath = Check.substring(1);
} else {
console.log(`[I] : No Downsync flag set with URL in source body; Skipping!`);
return;
};
};
*/
Post.Content = GetFragHTML(ContentDom);
const PathFile = LinkPath.split('/').slice(-1)[0];
const PathDir = LinkPath.split('/').slice(0, (LinkPath.split('/').length - 1)).join('/');
const DatePrefix = PostsFileDate ? Post.Meta.CreatedOn + '-' : '';
const FinalFilePath = `${PathDir}/${DatePrefix}${PathFile.substring(0, (PathFile.length - 4))}md`;
if (!CheckDownsync(TryReadFileSync(FinalFilePath))) {
console.log(`[I] : Downsync disabled in destination body; Skipping!`);
return;
};
// Do string replacements
// TODO: Replacements written in post body?
const ReplacementsKeys = Object.keys(Replacements);
for (let i=0; i<ReplacementsKeys.length; i++) {
const To = ReplacementsKeys[i];
@ -170,22 +188,8 @@ const HandlePost = PostSrc => {
ContentDom = JSDOM.fragment(Post.Content);
LinkElem = GetLinkElem(ContentDom);
LinkElem.outerHTML = '';
// Handle MetadataBlock elements
let MetadataBlocks = ContentDom.querySelectorAll(MetadataBlockSelect);
for (let i=0; i<MetadataBlocks.length; i++) {
const Elem = MetadataBlocks[i];
if (Elem.textContent) {
const Meta = ParseMeta(Elem.textContent);
Post.Meta = Object.assign(Post.Meta, Meta.Meta);
Post.Macros = Object.assign(Post.Macros, Meta.Macros);
};
MetadataBlocks[i].outerHTML = '';
};
// Handle ExtractCodeBlock elements
// TODO: Opposite of extract blocks? (Allowing some HTML to remain on Listed but get deleted from here)
let ExtCodeBlocks = ContentDom.querySelectorAll(ExtractCodeBlockSelect);
for (let i=0; i<ExtCodeBlocks.length; i++) {
const Elem = ExtCodeBlocks[i];
@ -197,21 +201,12 @@ const HandlePost = PostSrc => {
};
};
Post.Content = GetFragHTML(ContentDom).trim();
const PathFile = LinkPath.split('/').slice(-1)[0];
const PathDir = LinkPath.split('/').slice(0, (LinkPath.split('/').length - 1)).join('/');
const FinalFilePath = `${PathDir}/${PostsFileDate ? Post.Meta.CreatedOn + '-' : ''}${PathFile.substring(0, (PathFile.length - 4))}md`;
if (!CheckDoDownsync(FinalFilePath)) {
console.log(`[I] : Downsync disabled in destination body; Skipping!`);
return;
};
Post.Content = GetFragHTML(ContentDom);
TryMkdirSync(PathDir);
fs.writeFileSync(FinalFilePath, `\
${MakeMetaStr(Post)}
# ${Post.Meta.HTMLTitle ? Post.Meta.HTMLTitle : Post.Meta.Title}
<h1>${Post.Meta.HTMLTitle ? Post.Meta.HTMLTitle : Post.Meta.Title}</h1>
${Post.Content}
`);