Agg Blogging-Rapido-con-Standard-Notes.md; Agg. script secondari

This commit is contained in:
octospacc 2022-12-15 00:28:09 +01:00
parent 84638a9ed6
commit 54113877a1
8 changed files with 80 additions and 65 deletions

View File

@ -3,6 +3,7 @@
// % Index = True // % Index = True
// % Order = 60 // % Order = 60
// % URLs = MicroBlog.html Diarylog.html // % URLs = MicroBlog.html Diarylog.html
// % Categories = Blog
# <span class="twa twa-ledger twa-📒"><span>📒</span></span> MicroBlog # <span class="twa twa-ledger twa-📒"><span>📒</span></span> MicroBlog

View File

@ -3,7 +3,7 @@
// % Style = @import "[staticoso:Site:RelativeRoot]Assets/Pages/Devlogs.css"; // % Style = @import "[staticoso:Site:RelativeRoot]Assets/Pages/Devlogs.css";
// % Index = True // % Index = True
// % Order = 35 // % Order = 35
// % Categories = Tecnologia // % Categories = Tecnologia Blog
# <span class="twa twa-floppy-disk twa-💾">💾</span> Devlogs # <span class="twa twa-floppy-disk twa-💾">💾</span> Devlogs

View File

@ -2,6 +2,7 @@
// % HTMLTitle = <span class="twa twa-envelope twa-✉️"><span>✉️</span></span> PicoBlog // % HTMLTitle = <span class="twa twa-envelope twa-✉️"><span>✉️</span></span> PicoBlog
// % Index = True // % Index = True
// % Order = 40 // % Order = 40
// % Categories = Blog
# <span class="twa twa-envelope twa-✉️"><span>✉️</span></span> PicoBlog # <span class="twa twa-envelope twa-✉️"><span>✉️</span></span> PicoBlog

View File

@ -61,6 +61,6 @@ Tor non è assolutamente perfetto: ha delle falle di vario tipo, in genere basat
Il fatto che Tor sia economicamente supportato almeno in parte dal governo statunitense comunque, senza scendere troppo nei dettagli, comporta forse alcune implicazioni profonde pericolose. Per questo voglio, più o meno a breve, dare una chance a servizi simili a Tor ma diversi da esso. Lokinet mi ispira, a dire la verità, penso sarà la prima rete alternativa che proverò. Il fatto che Tor sia economicamente supportato almeno in parte dal governo statunitense comunque, senza scendere troppo nei dettagli, comporta forse alcune implicazioni profonde pericolose. Per questo voglio, più o meno a breve, dare una chance a servizi simili a Tor ma diversi da esso. Lokinet mi ispira, a dire la verità, penso sarà la prima rete alternativa che proverò.
## 🏷️ Note/Riferimenti ## [:HNotesRefsHTML:]
[^ Nuovo dominio estetico]: **Aggiornamento del 2022-06-29**: ho cambiato il dominio per motivi estetici con questo nuovo! Info aggiuntive (ma pur sempre scarne) al post del [PicoBlog](../PicoBlog.html) di oggi). [^ Nuovo dominio estetico]: **Aggiornamento del 2022-06-29**: ho cambiato il dominio per motivi estetici con questo nuovo! Info aggiuntive (ma pur sempre scarne) al [post del PicoBlog di oggi](../PicoBlog.html#-2022-06-29-Minare-domini-Tor).

View File

@ -4,22 +4,24 @@
// % UpdatedOn = 2022-12-14 // % UpdatedOn = 2022-12-14
// % Categories = Blog Tecnologia // % Categories = Blog Tecnologia
# ⚡️ Il blogging rapido con Standard Notes # <span class="twa twa-⚡️"><span>⚡️</span></span> Il blogging rapido con Standard Notes
<p>È da direi parecchio tempo che uso <a href="https://standardnotes.com" rel="noopener nofollow" target="_blank">Standard Notes</a> come app di note personali.<br> <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 libera e open-source, ma allo stesso tempo molto pulita, curata, e funzionale. Capitava a pennello in un momento in cui cercavo qualcosa che supportasse una cifratura dei dati che funziona, senza inficiare sull'usabilità.</p> 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>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 funzioni integrate: <a href="https://listed.to">Listed</a>.<br> <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 blogging concepita dagli stessi sviluppatori di Standard Notes, e disponibile per il self-hosting oppure l'uso gratuito sull'istanza ufficiale. Per quanto io non l'abbia mai davvero usata prima, ho trovato fin dall'inizio interessante il concetto e la sua applicazione.</p> 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>
<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, ritrovabili e accessibili a chiunque, e per me facili da caricare?</p> ## Un'esigenza veloce
<p>La scelta stava per ricadere sull'usare <a href="https://gitlab.com/octtspacc/staticoso" rel="noopener nofollow" target="_blank">staticoso</a>, il mio generatore di siti statici che già uso per il <a href="https://sitoctt.octt.eu.org" rel="noopener nofollow" target="_blank">sitoctt</a>, ma poi ci ho ripensato.</p> <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>
<p>Ho pensato che voglio rendere effettivamente la mia collezione di esperienze ritrovabile sul Web, il problema qui però, che ho potuto amaramente constatare in tutti questi mesi, è come il mio sito ad esempio sia, come dire... I motori di ricerca non se lo cagano. 😭<br> <p>La scelta stava per ricadere sull'<strong>usare <a href="https://gitlab.com/octtspacc/staticoso" rel="noopener nofollow" target="_blank">staticoso</a></strong>, il <strong>mio generatore</strong> di siti statici che già uso per il <a href="https://sitoctt.octt.eu.org" rel="noopener nofollow" target="_blank">sitoctt</a>, ma poi <strong>ci ho ripensato</strong>.</p>
<p>Ho pensato che, appunto, voglio rendere effettivamente la mia collezione di esperienze ritrovabile sul Web. Il <strong>problema</strong> qui, però, che ho potuto amaramente constatare in tutti questi mesi, è come il mio sito ad esempio sia, come dire... <strong>I motori di ricerca non se lo cagano</strong>. 😭<br>
Oltre ad essere pure questo un argomento a parte, va precisato che la colpa della orrenda sorte del mio sito non dipende dal suo codice; è colpa del dominio e/o dell'host. Quindi, no, non abbandonerò mai il mio staticoso: il solo cambiare generatore (e i template di conseguenza) con uno magari fatto seriamente non risolverebbe alcun problema.</p> Oltre ad essere pure questo un argomento a parte, va precisato che la colpa della orrenda sorte del mio sito non dipende dal suo codice; è colpa del dominio e/o dell'host. Quindi, no, non abbandonerò mai il mio staticoso: il solo cambiare generatore (e i template di conseguenza) con uno magari fatto seriamente non risolverebbe alcun problema.</p>
<p>Ho dovuto insomma cestinare totalmente l'idea dell'hosting su GitHub e GitLab, e pensare ad altro.</p> <p>Ho dovuto insomma <strong>cestinare</strong> totalmente l'idea del<strong>l'hosting su GitHub e GitLab</strong>, e pensare ad altro.</p>
<ul> <ul>
<li><strong>Blogger</strong> di Google? L'esperienza editoriale lascia a desiderare su mobile.</li> <li><strong>Blogger</strong> di Google? L'esperienza editoriale lascia a desiderare su mobile.</li>
@ -28,49 +30,61 @@ 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> <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> </ul>
<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 comodo copiare ed incollare le cose direttamente in Standard Notes, questo era il momento buono di provare Listed.</p> ## La scelta di Listed
<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>
<p>A dirla tutta, mi preoccupa un po' il prospetto che il file di backup settimanale delle note possa diventare grosso decine di MB, ma ormai il dado è tratto.<br> <p>A dirla tutta, mi preoccupa un po' il prospetto che il file di backup settimanale delle note possa diventare grosso decine di MB, ma ormai il dado è tratto.<br>
Potrei creare un secondo account da usare solo per le note di ChatGPT, esportandole dal primario ed importandole lì, per poi cancellarle dal primo account per alleggerire la raccolta, però ci sono dei problemi. Forse riesco a trasferire l'username, ma i link ai singoli post saranno rotti, perché includono degli ID automatici, e quindi via di redirect alla home per chi ne segue uno vecchio. Inoltre, i vecchi messaggi del guestbook non vengono ricopiati, e mi sa che nemmeno le iscrizioni via email sono trasferite.</p> Potrei creare un secondo account da usare solo per le note di ChatGPT, esportandole dal primario ed importandole lì, per poi cancellarle dal primo account per alleggerire la raccolta, però ci sono dei problemi. Forse riesco a trasferire l'username, ma i link ai singoli post saranno rotti, perché includono degli ID automatici, e quindi via di redirect alla home per chi ne segue uno vecchio. Inoltre, i vecchi messaggi del guestbook non vengono ricopiati, e mi sa che nemmeno le iscrizioni via email sono trasferite.</p>
<p>Tutto sommato comunque, per questo scopo limitato ho apprezzato quanto sia efficiente avere Standard Notes come parte finale del mio flusso di lavoro. Mi sembra riduca di molto l'<em>effetto "mi scoccio"</em>.</p> ## Il pensiero del "che palle"
<p>Considerato dunque il piacere della scoperta, ho per un attimo riflettuto su come il <em>fattore "che palle"</em> sia una delle cose che mi trattiene dall'aggiornare il sitoctt con migliore frequenza.</p> <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>
<p>Lasciamo stare le pagine tematiche, che sono bestie a parte; lasciamo stare pure i post lunghi, che mi richiedono forte ispirazione e abbastanza tempo di stesura; però che cavolo, almeno qualcosa per il MicroBlog, che va per le corte, mi andrebbe di crearla più spesso! Però mi passa proprio la voglia, per qualche motivo, considerando tutta la trafila che devo fare.<br> <p>Considerato dunque il piacere della scoperta, ho per un attimo <strong>riflettuto</strong> su come il <strong><em>fattore "che palle"</em></strong> sia una delle cose che <strong>mi trattiene dall'aggiornare</strong> il sitoctt con migliore frequenza.</p>
<p>Lasciamo stare le pagine tematiche, che sono <em>bestie a parte</em>; lasciamo stare pure i post lunghi, che mi richiedono forte ispirazione e abbastanza tempo di stesura; però che cavolo, almeno <strong>qualcosa</strong> per il MicroBlog, che va per le corte, <strong>mi andrebbe</strong> di crearla <strong>più spesso</strong>! Però <strong>mi passa</strong> proprio <strong>la voglia</strong>, per qualche motivo, considerando tutta la trafila che devo fare.<br>
A dire il vero, avevo preso già da subito l'abitudine di iniziare a scrivere un post in Standard Notes, così da poter più flessibilmente gestire il tutto, magari passando rapidamente da un dispositivo all'altro. Però, se dovevo mettermi a scrivere qualcosa di non lungo ed elaborato, da pubblicare prima possibile, non mi veniva proprio la voglia di agire.</p> A dire il vero, avevo preso già da subito l'abitudine di iniziare a scrivere un post in Standard Notes, così da poter più flessibilmente gestire il tutto, magari passando rapidamente da un dispositivo all'altro. Però, se dovevo mettermi a scrivere qualcosa di non lungo ed elaborato, da pubblicare prima possibile, non mi veniva proprio la voglia di agire.</p>
<p>"<em>Ma perché non passo a Listed almeno per il mio MicroBlog?</em>", penso dunque. Beh, c'è un motivo se addirittura sono arrivata a farmi il mio generatore di siti statici: mi serve!... 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! 😖</p> <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>
<p>Comunque, per dirla bene, Listed è parecchio scarno: permette appena di inserire CSS personalizzato, e di formattare i post in Markdown e un sottoinsieme ristretto di HTML (di cui propongo di seguito le mie analisi):</p> ## Limitazioni di Listed
<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>
<ul> <ul>
<li>Tutti gli elementi che sono di loro natura inline vengono automaticamente inseriti in un blocco <code class="prettyprint">&lt;p&gt;</code> (ad esempio, non si può avere <code class="prettyprint">&lt;body&gt;&lt;span&gt;Erre&lt;/span&gt;&lt;/body&gt;</code>, sarà sempre <code class="prettyprint">&lt;body&gt;&lt;p&gt;&lt;span&gt;Erre&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;</code>);</li> <li>Tutti gli <strong>elementi</strong> che sono di loro natura <strong>inline vengono</strong> automaticamente <strong>inseriti in un blocco</strong> <code class="prettyprint">&lt;p&gt;</code> (ad esempio, non si può avere <code class="prettyprint">&lt;body&gt;&lt;span&gt;Erre&lt;/span&gt;&lt;/body&gt;</code>, sarà sempre <code class="prettyprint">&lt;body&gt;&lt;p&gt;&lt;span&gt;Erre&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;</code>);</li>
<li>Qualsiasi attributo di elemento che non sia <code class="prettyprint">id</code>, <code class="prettyprint">class</code>, o <code class="prettyprint">style</code>, (ed <code class="prettyprint">href</code> o <code class="prettyprint">src</code>, così come credo roba come <code class="prettyprint">title</code>, <code class="prettyprint">width</code>, o <code class="prettyprint">height</code>, nei casi opportuni) viene buttato via: scordatevi quindi, per dire, di deviare dalla configurazione predefinita della piattaforma per quanto riguarda il comportamento dei link (il <code class="prettyprint">rel</code> non si tocca);</li> <li>Qualsiasi <strong>attributo</strong> di elemento che non sia <code class="prettyprint">id</code>, <code class="prettyprint">class</code>, o <code class="prettyprint">style</code>, (ed <code class="prettyprint">href</code> o <code class="prettyprint">src</code>, così come credo roba come <code class="prettyprint">title</code>, <code class="prettyprint">width</code>, o <code class="prettyprint">height</code>, nei casi opportuni) <strong>viene buttato</strong> via: scordatevi quindi, per dire, di deviare dalla configurazione predefinita della piattaforma per quanto riguarda il comportamento dei link (il <code class="prettyprint">rel</code> non si tocca);</li>
<li>Certi elementi proprio non vanno: quelli con tag non-standard (custom insomma, tipo <code class="prettyprint">&lt;pincopallino&gt;</code>) sono eliminati, così come<code class="prettyprint">&lt;script&gt;</code>, <code class="prettyprint">&lt;link&gt;</code>, e a quanto pare pure roba come <code class="prettyprint">&lt;video&gt;</code> - però <code class="prettyprint">&lt;iframe&gt;</code>, per dire, funge, e per fortuna anche il mio adorato <code class="prettyprint">&lt;details&gt;</code>.</li> <li><strong>Certi elementi</strong> proprio non vanno: quelli con tag non-standard (custom insomma, tipo <code class="prettyprint">&lt;pincopallino&gt;</code>) <strong>sono eliminati</strong>, così come<code class="prettyprint">&lt;script&gt;</code>, <code class="prettyprint">&lt;link&gt;</code>, e a quanto pare pure roba come <code class="prettyprint">&lt;video&gt;</code> - però <code class="prettyprint">&lt;iframe&gt;</code>, per dire, funge, e per fortuna anche il mio adorato <code class="prettyprint">&lt;details&gt;</code>.</li>
</ul> </ul>
<p>È chiarissimo che non può sostituire al 100% assolutamente nessuna sezione del sitoctt, 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> <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>
<p>Mi stavo <em>quasi</em> per rassegnare, ma per fortuna ho il lampo di genio: <em>Ma posso scrivere su Standard Notes, ed avere le note che in automatico si sincronizzano come file sul sito? ...No, non c'è verso. No, aspè, e chi lo ha detto? Io dico che c'è verso.</em></p> ## Il blogoctt con Standard Notes
<p>Ora, Standard Notes, come ho detto, usa un sistema di cifratura client-side dei dati, quindi per accedere alle note dal proprio account va usato un software un minimo specializzato.<br> <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> 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>
<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> ### Soluzione "a modo mio"
Io dico che, visto che per qualche motivo l'HTML di un blog su Listed (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) include come stringa JSON i dati di tutti i post, allora io posso semplicemente pubblicare su Listed da Standard Notes ed avere un programma che fa lo sporco - ma in questo caso davvero semplice, visto che deve solo scaricare e parsare 1 file - lavoro dello scraping.</p>
<p><em>E script fu scripto.</em> Lo lascio qui: <a href="https://gitlab.com/octtspacc/sitoctt/-/blob/main/Scripts/ListedDownsync.js" rel="noopener nofollow" target="_blank">gitlab.com/octtspacc/sitoctt/Scripts/ListedDownsync.js</a>; attenzione però che non c'è niente di bello da leggere, anche perché non ho ancora implementato tutto quello che dovrebbe servirmi a lungo termine, ma per chi vuole usarlo sta là.<br> <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>
È tecnicamente indipendente dal sitoctt e da staticoso, in quanto salva semplici file Markdown su disco (anche se la sintassi delle righe di metadati in essi scritti è quella mia; per cui, in caso, andrebbe cambiata qualche stringa di testo nel programma per supportare il più classico formato dei metadati YAML).</p> 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>
<p><em>E script fu scripto.</em> Lo lascio qui: <a href="https://gitlab.com/octtspacc/sitoctt/-/blob/main/Scripts/ListedDownsync.js" rel="noopener nofollow" target="_blank">gitlab.com/octtspacc/sitoctt/Scripts/ListedDownsync.js</a>; attenzione però che non c'è <em>niente di bello da leggere</em>, anche perché non ho ancora implementato tutto quello che dovrebbe servirmi a lungo termine, ma <strong>per chi vuole usarlo</strong> sta là.<br>
È tecnicamente <strong>indipendente dal sitoctt</strong> e da staticoso, in quanto <strong>salva</strong> semplici <strong>file Markdown</strong> su disco (anche se la sintassi delle righe di metadati in essi scritti è quella mia; per cui, in caso, andrebbe cambiata qualche stringa di testo nel programma per supportare il più classico formato dei metadati YAML).</p>
<p>Non voglio dire che ho pensato davvero a tutto, però ci sono andata vicina.<br> <p>Non voglio dire che ho pensato davvero a tutto, però ci sono andata vicina.<br>
No non mi so ancora decidere - per colpa di mie paturnie - su che standard usare per indicare blocchi speciali (di metadati, o di HTML da non far interpretare al SSG di Listed).<br> No non mi so ancora decidere - per colpa di mie <em>paturnie</em> - su che standard usare per indicare blocchi speciali (di metadati, o di HTML da non far interpretare al SSG di Listed).<br>
No, non ho ancora fatto lo script da avviare come cronjob sul server, che ogni tanto dovrebbe scaricare i dati dal blog di Listed e aggiornare i file nella repository Git se ci sono aggiornamenti.<br> 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> 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>
<p>Come concludere, dunque.<br> ## Conclusioni
Oggi ho già scritto troppo, e la chiudo qui. Però spero vivamente che tutta questa nuova efficienza e comodità, l'avere ulteriore tecnologia che lavora per me, 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 farmi scrivere di più e con più piacere. Che sia sul <a href="https://sitoctt.octt.eu.org" rel="noopener nofollow" target="_blank">sitoctt</a>, o sulle lastre di pietra.</p>
<p>Ah, si, questo qui è stato il primo post sul <a href="https://listed.to/@u8">mio blog Listed</a>, è giusto precisarlo per chi legge dal sitoctt... ma io spero che almeno la versione Listed del blog possa venire indicizzata per bene e scoperta da più persone, già che ci siamo.</p> <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>

View File

@ -8,9 +8,13 @@ const SiteName = 'sitoctt';
//const DefaultMode = 'Include' // 'Include' or 'Exclude' | Not implemented //const DefaultMode = 'Include' // 'Include' or 'Exclude' | Not implemented
const PostsFileDate = true; // Append dates (YYYY-MM-DD) to posts file names const PostsFileDate = true; // Append dates (YYYY-MM-DD) to posts file names
const Replacements = { // Format: { ReplaceWithString: [ToFindString] } const Replacements = { // Format: { ReplaceWithString: [ToFindString] }
"## [:HNotesRefsHTML:]": "<h2>🏷️ Note e Riferimenti</h2>",
"<a href=\"[staticoso:CustomPath:Assets]/": "<a href=\"https://sitoctt-assets.octt.eu.org/", "<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/", "<img src=\"[staticoso:CustomPath:Assets]/": "<img src=\"https://sitoctt-assets.octt.eu.org/",
// TODO: Fix anchor rels // 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)'; const MetadataBlockSelect = '.MetadataBlock, .MetadataBlock + :Where(Div, Pre, Code)';
@ -207,7 +211,7 @@ const HandlePost = PostSrc => {
TryMkdirSync(PathDir); TryMkdirSync(PathDir);
fs.writeFileSync(FinalFilePath, `\ fs.writeFileSync(FinalFilePath, `\
${MakeMetaStr(Post)} ${MakeMetaStr(Post)}
# ${Post.Meta.Title} # ${Post.Meta.HTMLTitle ? Post.Meta.HTMLTitle : Post.Meta.Title}
${Post.Content} ${Post.Content}
`); `);

View File

@ -1,13 +1,10 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import hashlib import hashlib, os, shutil, sys, time
import os
import shutil
import time
from pathlib import Path from pathlib import Path
from deepl import deepl
Engine = 'Google' # 'Google' or 'DeepL'
SourceLang = 'it' SourceLang = 'it'
DestLangs = ['et', 'ja', 'lt', 'lv', 'de', 'hu', 'ru', 'zh', 'ro', 'da', 'it', 'es', 'nl', 'fr', 'sk', 'sl', 'pt', 'en', 'sv', 'fi', 'pl', 'el', 'bg', 'cs'] # All from output of `deepl --help` DestLangs = ['de', 'en', 'es', 'fr', 'it', 'jp', 'ko', 'pt', 'ru', 'zh'] #['et', 'ja', 'lt', 'lv', 'de', 'hu', 'ru', 'zh', 'ro', 'da', 'it', 'es', 'nl', 'fr', 'sk', 'sl', 'pt', 'en', 'sv', 'fi', 'pl', 'el', 'bg', 'cs'] # All from output of `deepl --help`
# With shutil.copytree copy only folder struct, no files; https://stackoverflow.com/a/15664273 # With shutil.copytree copy only folder struct, no files; https://stackoverflow.com/a/15664273
def IgnoreFiles(Dir, Files): def IgnoreFiles(Dir, Files):
@ -31,21 +28,31 @@ def StrReverse(Str):
def TryTranslate(Text): def TryTranslate(Text):
try: try:
#Trans += GetMetaComment(Target, i) + '\n' + Translate.translate(Target) + '\n\n' if Engine.lower() == 'google':
#Trans = GetMetaComment(Target, i, len(Paragraphs)) + '\n' + Translate.translate(Target) + '\n\n' + Trans return json.loads(urlopen(Request(f'{LingvaInstance}/api/v1/{SourceLang}/{Lang}/{URLParse.quote(Text, safe="")}')).read())["translation"]
elif Engine.lower() == 'deepl':
return Translate.translate(Text) return Translate.translate(Text)
#Target = ''
#except deepl.DeepLCLIPageLoadError:
# raise
except Exception as e: except Exception as e:
print(e) print(e)
return False return False
#Trans += GetMetaComment(Target, i) + '\n' + Target + '\n\n'
#Trans = GetMetaComment(Target, i, len(Paragraphs)) + '\n' + Target + '\n\n' + Trans
if Engine.lower() == 'google':
LingvaInstance = sys.argv[1]
import json
from urllib import parse as URLParse
from urllib.request import urlopen, Request
elif Engine.lower() == 'deepl':
from deepl import deepl
try:
DestLangs.remove(SourceLang) DestLangs.remove(SourceLang)
except Exception:
pass
for Lang in DestLangs: for Lang in DestLangs:
if Engine.lower() == 'deepl':
Translate = deepl.DeepLCLI(SourceLang, Lang) Translate = deepl.DeepLCLI(SourceLang, Lang)
for Dir in ('Pages', 'Posts/'): for Dir in ('Pages', 'Posts/'):
shutil.copytree(Dir, f'i18n/{Lang}/{Dir}', ignore=IgnoreFiles, dirs_exist_ok=True) shutil.copytree(Dir, f'i18n/{Lang}/{Dir}', ignore=IgnoreFiles, dirs_exist_ok=True)
@ -62,27 +69,15 @@ for Lang in DestLangs:
print(f' {i}', end='') print(f' {i}', end='')
Backoff = 0 Backoff = 0
Target = StrReverse(Paragraph) Target = StrReverse(Paragraph)
#if len(Target+Paragraph) < 5000:
# Target += GetMetaComment(Paragraph, Num) + '\n' + Paragraph + '\n\n'
# #print(Paragraph)
# continue
#with open('Translate.tmp', 'w') as f:
# f.write(Target)
if not Target: # There were more than 2 line breaks if not Target: # There were more than 2 line breaks
Trans += '\n\n' Trans += '\n\n'
continue continue
Done = '' Done = ''
while not Done: while not Done:
time.sleep(5 + (Backoff*1.25)) time.sleep(0.5 + (Backoff*1.025))
Backoff += 1.25 Backoff += 1.025
Done = TryTranslate(Target) Done = TryTranslate(Target)
Trans = GetMetaComment(Target, i, len(Paragraphs), Done) + '\n' + Done + '\n\n' + Trans Trans = GetMetaComment(Target, i, len(Paragraphs), Done) + '\n' + Done + '\n\n' + Trans
#while True:
#continue
#Translate.translate(Paragraph)
#Trans += os.popen(f'cat ./Translate.tmp | deepl -s --fr {SourceLang} --to {Lang}').read()
with open(f'i18n/{Lang}/{File}', 'w') as f: with open(f'i18n/{Lang}/{File}', 'w') as f:
f.write(Trans) f.write(Trans)
#print(Trans)
#exit()

View File

@ -51,7 +51,7 @@ Redirect = False
[Macros] [Macros]
# Note: For some macros, because of a problem with python-markdown's "attr_list" extension, the quotes need to be written messy here # Note: For some macros, because of a problem with python-markdown's "attr_list" extension, the quotes need to be written messy here
HNotesRefsHTML = <span class="twa twa-label"><span>🏷️</span></span> Note e Riferimenti HNotesRefsHTML = <span class="twa twa-label twa-🏷️"><span>🏷️</span></span> Note e Riferimenti
HTMLTgtBlank = target="_blank" rel="noopener" HTMLTgtBlank = target="_blank" rel="noopener"
MdTgtBlank = " target="_blank" rel="noopener MdTgtBlank = " target="_blank" rel="noopener
MdTgtBlankNofw = " target="_blank" rel="noopener nofollow MdTgtBlankNofw = " target="_blank" rel="noopener nofollow