(Questa #creazione è un’ennesima manifestazione della legge di Murphy, comunque, perché non posso ribadire mai abbastanza quanto ora sarà complicato categorizzare ogni cosa, ma se non lo facessi sarebbe inutile… però è una bella trovata, quella di far convergere in un solo luogo i #dati di #siti incompatibili.)
La très macroniste Tribune du dimanche enterre Hidalgo: la maire de Paris serait "acculée" face à Dati en 2026. La ministre de la Culture, qui considérait Renaissance comme "une bande de traîtres", surpasse même Attal dans les intentions de votes. Ses casseroles judiciaires sont réduites à une phrase en chute d'article, alors que l'ex-idole LR a été mise en examen et que Macron avait assuré qu'il n'avait pas passé de deal avec elle.
Questa cosa è successa ieri sera e volevo scriverla prima di mimir, ma ero talmente seccata che ho detto #fanculo…
Volevo provare un po’ ad usare il lettore musicale predefinito di Xiaomi, ma non legge i file con estensione .opus; i flussi audio Opus in sé li legge però (presumibilmente perché usa i codec integrati in Android), quindi la soluzione è rinominare tutto in .ogg, senza fare ricodifiche o altro. Problemino: per rinominare ogni cosa ho usato (direttamente da shell ADB) un comando find -type f -name "*.opus" -exec mv "{}" "{}.ogg" ;… che, sul momento, credevo sarebbe stato corretto, ma a quanto pare questo programma di #merda che è find (che normalmente non userei, ma in questo caso avevo a che fare con sottocartelle quindi non avevo scelta migliore) non piazza il nome del file in tutte le occorrenze di {} nel comando, il che significa che tutte le mie canzoni sono state spostate su un unico file chiamato proprio “{}” una dopo l’altra, e quindi le ho perse tutte, e quindi proprio ora sto risubendo la lenta tortura di ricodificarle e ricopiarle dal mio HDD… almeno ora ho l’adattatore microSD bono e veloce, però comunque aiutoooooo 😭️
La cosa strana, ho notato dopo l’incidente, è che non si è liberato spazio sulla scheda; si è invece riempita una cartella “FOUND.000” con più di 2000 file, ma avevano tutti dimensioni un po’ rotte nonché nomi ordinati ma non descrittivi (ed estensione .CHK)… forse potevo recuperare da lì qualcosa (ma mi chiedo perché si sia formata roba lì?), ma chissà quanto e con che fatica, quindi non ne vale la pena ed è meglio che metto semplicemente il PC a riconvertire le canzoni, che è vero che impiega mezza giornata, ma almeno fa tutto da solo. 😤️
Nel frattempo devo anche finire di #ricopiare sulla #memoria interna del #telefono tutti i #dati vari backupati sul PC (principalmente foto e video), è la terza volta che ci riprovo e stavolta vado una cartella grossa alla volta perché, durante i precedenti tentativi di copie totali, il collegamento USB è saltato, perché pure la scheda madre del mio PC è cacca e gestisce male la corrente data alle porte frontali… non ne uscirò mai. 💀️
Un po’ di #rosik e #delusione ora che mi rendo conto che la #ricerca di #WordPress non è poi così tanto epica e funzionale come speravo, credevo, e dicevo… rimane comunque mooolto meglio di quella di Telegram, su questo punto ci rimango perché lo avevo detto con cognizione di causa, e perché su quella #piattaforma la ricerca di #messaggi specifici (che ricordiamo, non ha operazioni avanzate) fa spesso così incredibilmente cilecca; però ecco, migliore non vuol dire perfetto. Ci sono due #mancanze principali: il fatto che la ricerca non sia veramente agile, e non aggiorni i risultati immediatamente durante l’input, ma bisogna sempre ricevere la pagina nuova dal server, e poi il fatto che sia limitata in termini di #filtraggio dei #dati. 🦍
Il primo #problema direi che almeno un pochino l’ho risolto installando semplicemente il plugin Relevanssi Live Ajax Search; ho anche modificato il codice in relevanssi-live-ajax-search/templates/search_results.php, modificando l’HTML sotto il blocco the_post(); per far apparire anche un estratto del contenuto di ogni risultato, aggiungendo <?php the_excerpt(); ?>, che avere solo il titolo non è cosa buona (alcuni miei post neanche lo hanno il titolo). ☢️
Quello che mi fa impazzire è il secondo! Ho cercato e provato tanti #plugin, ma nessuno fa cosa mi serve, cioè #filtrare i #risultati con #query complesse includendo ed escludendo certi termini, specificando magari anche il tempo, e così via. Insomma, vorrei avere una ricerca simile a quella che Twitter ha da un secolo, o che, addirittura, ormai anche Mastodon ha (seppur con alcune sue limitazioni arbitrarie di design, che personalmente meh, però sul livello tecnico è ottima)! Su Twitter ricordo che si potessero usare operatori logici AND e OR per formare #richieste molto complesse, mentre su Mastodon vedo sicuramente che si possono usare i simboli più (+) e meno (-) per forzare l’inclusione o l’esclusione di alcune #parole, oltre ad esserci #filtri specifici per il prima o dopo una data, ed altre robe. 👑
Il vantaggio di un normale sito web è che almeno posso #arrangiare con motori di ricerca generali quando quello integrato sul mio non mi basta (ammesso che il sito non sia bistrattato dagli algoritmi e dai crawler, fortunatamente questo su dominio Altervista è indicizzato), ma fa #schifo: non è detto che esca davvero tutto in ordine cronologico come a me serve, e non escono nuovi #post se non dopo ore o giorni. 🐌
Dovrò vedere come giostrarmela, perché al momento per quanto io personalmente riesco a ritrovare singoli post vecchi per qualunque scopo, mi è impossibile condividerne molti insieme con la semplicità che vorrei: 1 solo link verso una pagina di ricerca con una comanda appositamente costruita. 🦴
La dualità del fixare #bug (o, in generale, far funzionare il #software?):
Perdi almeno 1 ora buona appresso ad un #glitch oscurissimo (spoiler: la codifica del testo centra sempre in tutti questi bug, in realtà estremamente stupidi), facendo svariati test e tentando varie opzioni prima sensate, e poi senza senso perché altrimenti non sai nemmeno come continuare. 🤥️
Nel frattempo si è fatto #tardi in culo, ti prepari per andare a #dormire e nel frattempo pensi, ma niente… a metà spegni ormai il PC, finisci di prepararti, e continui a #pensare, e solo a quel punto un’idea ovvia viene in testa. Troppo tardi ormai. 💀️
E poi ancora, perché le #incoerenze non sono mai abbastanza:
Giustamente nel letto ti irrequieti e non prendi #sonno, perché il cervello non prende pace senza vedere il #problema finalmente risolto dopo tutta la #pazzia passata, anche scommettendo che l’#idea appena venuta è giusta al 100%. 🥴
Però prima o poi il sonno lo prendi, e dopo ore arriva la #mattina dopo, in cui la sveglia suona e… pensi “zzzzzzz voglio stare nel lettino ancora, tanto la #rogna in mente l’ho risolta, chi me lo fa fare di ammazzarmi a prima mattina [prima mattina: le 9:30, ndr.]”. 🥹
Insomma, è una #condanna. Non se ne esce. Comunque si, il mio #errore era #stupido: stavo cercando di caricare #file nella galleria cloud di #WordPress tramite la #API REST, ma ricevevo sempre un rest_upload_sideload_error… controllo gli header, tutti giusti; cerco in giro, poca roba che non mi aiuta; provo #minuzie come mettere gli header lowercase, ancora niente; tento di settare a mano content-type parziali o estensioni file arbitrarie, e ovviamente non risolvo. 🤯️
Però, noto che un caricamento da curl, anziché dal mio #codice JS, va a buon fine. Allora, provo a caricare verso un server netcat in entrambi i modi, così da poter vedere al volo i dati della trasmissione #HTTP, e noto una differenza stronzetta: il corpo generato dal mio #server è molto più grosso del peso normale del file… quindi qualcosa lo sta corrompendo E qui, però, mi sono ribloccata. 🤔️
Solo poi, quando ormai avevo chiuso tutto come ho detto, ci ho pensato: ma io, nella parte del #programma che legge i #dati trasmessi dal client, vado a castare tutto ad una stringa; sarà questa la causa? …E, ricordandomi di altri #incidenti simili capitati in #NodeJS, capisco subito che è così. Detto in breve: la #codifica del testo centra sempre e rovina ogni cosa. Se esistesse solo l’ASCII, ecco che castare dati binari a stringhe non causerebbe alcun danno. E invece abbiamo deciso che i #computer devono supportare nella loro codifica migliaia di #caratteri discutibili, come tutti quelli emoji. E io, dopo aver apportato questo #fix, devo ora continuare a programmare. Non. Se. Ne. Esce. 😭️
Anche oggi, per l’ennesima volta in cui mi faccio distrarre da #collegamenti colorati durante la mia #navigazione errante nell’oceano del #web, scopro nuove cose #interessanti. 😼
Nel #footer di un sito c’era un collegamento ad un “#IndieWeb#Webring”, il cui nome di dominio è una sequenza di emoji. Lo apro, e anziché una classica lista di membri, mi trovo un insolito modulo che mi chiede di fare login nel sistema inserendo il #link del mio #sito. Scopro che questa cosa posso farla con questo sito #WordPress, dopo aver installato il #plugin#IndieAuth; quindi, ci provo, e mi viene chiesto di aggiungere alla home del sito i link di navigazione del webring, e poi di preparare #dati del #profilo secondo lo standard h-card. 📟
È stata un’occasione per fare una robina che mi sono sempre seccata, cioè inserire le #info del mio profilo autore (inclusive di bio, come escono sul Fediverso) sulla sezione #MicroBlogdel fritto misto. Purtroppo, questo #standard ben predicato sembra razzolare male: non c’è stato verso di far vedere al #validatore del webring la mia descrizione, e mi devo accontentare di URL, nome, e foto profilo… però, un validatore a parte, che viene consigliato dalla stessa pagina, invece valida tutto come vorrei io. Uno #schifo. 😶
Non so cosa è peggio: che non riesco a trovare in giro #editor grafici decenti di #tabelle per l’editoria #web, che crearle con roba come #HTML, #WikiText, Markdown, ecc è #scomodo oltre il sopportabile (non si vede a colpo d’occhio che intersezione di riga e colonna si sta modificando), o che #TiddlyWiki si dimostra anche questa volta un #tremendo#rabbithole in cui perdersi a #sviluppare#visualizzazioni#avanzate con tutte quelle funzioni #esoteriche integrate, anche per le tabelle. Ho creato ora, per questa #tabella che sto costruendo, una #macro che integra la modifica dei #dati direttamente nella versione renderizzata, così non devo usare scomodi linguaggi di marcatura. …e funziona, ma solo ora mi rendo conto di dover trovare un modo di aggiungere righe e colonne in mezzo a quelle esistenti, e con la struttura dati che questa roba in automatico costruisce, fidatevi, non sarà facile. Ci impazzirò temo. L’ennesima mia #megafine. 💀️
Codice e anteprima della tabella specialeComunque, a dire il vero una piccola app l’ho trovata cercando: https://www.htmltables.io/. Fa modificare una tabella tramite anteprima #grafica (scarna ma adeguata), ma permette di copiare ed incollare (o modificare direttamente, ma a me non serve) il #codice HTML (anche lì, unico modo per spostare righe e colonne, non va dalla #GUI)… solo che, quest’ultimo passaggio è macchinoso, almeno a lungo termine, perché mi troverei a fare avanti e indietro tra modificare i dati e salvarli dove mi servono, quindi… ecco giustificato il trovare una #soluzione nativa alla mia #OcttKB. (Ci sarebbero poi i programmi di fogli di calcolo, ma ecco… non mi servono tutte le loro funzioni, devo solo disporre testo, quindi usare quella roba significherebbe bloat e sofferenza, tra UI disfunzionali su mobile e app in generale laggose.) 🤥️
L’ultimissimo miglioramento che ho in ogni caso poi fatto ad #MBViewer è stato l’aggiunta di una funzione per importare codice #CSS e #JavaScript, per modificare come i post possono essere visualizzati. Entrambi funzionano allo stesso modo, con i relativi parametri URL che accettano sia #URL esterni che data URI. Niente di particolare per gli stili, semplicemente importo nella pagina la qualunque cosa venga data lì, ma per gli #userscripts è stato leggermente più #complicato. 😕️
Il punto sta nel voler evitare che #script essenzialmente non affidabili siano iniettati nel contesto della pagina semplicemente da URL, perché potrebbero fare tante cosine cattive; prima fra tutte, rubare #dati dall’archiviazione del #browser del mio dominio, cosa che è un #problema, perché gli utenti inesperti che aprono la app da #link non andranno a cercare di investigare cosa accade dietro le quinte (e, molto probabilmente, non lo farei realisticamente nemmeno io, seguendo la logica del “i miei siti sono miei e li conosco, sui siti altrui ho le protezioni del browser attive“). E quindi inizio a scendere in un rabbithole… ☠️
#Iframe? Hmm… non so, non è il caso, sarebbero insicuri, ci sono alcuni modi in cui una pagina in frame può fare robe fastidiose. Non può essere assolutamente un’idea, proprio mai (foreshadowing). 🪟️
Trovo un bel po’ di #librerie vecchie che ricompilano codice #JS per rimuovere pericoli, o lo analizzano preventivamente per la presenza di operazioni dannose così che possa non essere mai eseguito… praticamente tutte abbandonate, qualcuna esplicitamente dichiarata insicura e non patchata, e per qualcun’altra lo possiamo dare per scontato. 🐛️
Forse questa libreria più recente, jailed, che sfrutta un iframe assieme ad un Web Worker per creare una sandbox forte e bloccare tutte le #API eccetto alcune che si decidono… No, l’ho provata e non va bene, non si riescono a passare alla sandbox oggetti complessi, tra cui i costruttori, è impossibile far funzionare API tipo quella del DOM. 🚧️
Sarebbe stata un’idea usare qualche reimplementazione del #DOM per NodeJS tramite browserify, tipo Cheerio, ma farla anche solo girare lì dentro è un altro casino allucinante. 🥴️
WASM tecnicamente è una #sandbox a sua volta, e non accede alle API del browser se non con codice colla, quindi magari… teoricamente ok, ma nella pratica non ho trovato nessuna soluzione già bella e pronta che potessi usare per questo specifico scopo. 🕳️
La #pazzia: PyScript… sarebbe quasi già pronto, ma avrei dovuto comunque modificarlo per bloccare tutte le API insicure (rimuovere #codice), e poi richiede 15+ MB di dipendenze di runtime… non ideale. 🗿️
Alla fine ci ho pensato meglio, e sono arrivata alla conclusione che è abbastanza sicuro far girare gli script in un iframe con proprietà src="data:[...]" e sandbox="allow-scripts" (che significa, “blocca tutte le proprietà sensibili eccetto gli script”)… voglio dire, nel visualizzare il contenuto dei siti, già permetto eventuali iframe provenienti dai post, e quelli teoricamente possono già fare quello che vogliono eccetto accedere ai dati della finestra root. Nella pratica, i programmini degli utenti quindi hanno accesso a (quasi) l’intera API JavaScript senza poter fare cose bruttissime. 🎉️
https://octospacc.altervista.org/wp-content/uploads/2024/02/image.pngEcco un esempio di tutto, alla fine: questo URL carica il mio MicroBlog, importa un foglio di #stile che mette questo font buffo, e uno script che colora le parole dei #messaggi in base a come si ripetono man mano (inutile, ma serve giusto per dare idea delle potenzialità)… <a href="https://hub.octt.eu.org/MBViewer/#/siteUrl=https://octospacc.altervista.org|platform=wordpress.org|includeStyle=data:text/css;utf8,@import%20url('https://fonts.googleapis.com/css2?family=Single+Day&display=swap');.MbPost{font-family:'Single%20Day',cursive;}|includeScript=data:text/javascript;utf8,function%20MbViewerFunction(data){const%20dom=new%20DOMParser().parseFromString(data.html,'text/html').body;const%20tokens=dom.textContent.split('%20');const%20words={};for(const%20i%20in%20tokens){const%20word%20=%20tokens[i];if(words[word])words[word]++;else%20words[word]=1;tokens[i]=%60%3Cspan%20style='color:${atob('Iw==')}${[0,'b58900','cb4b16','dc322f','d33682','6c71c4','268bd2','2aa198','859900'][words[word]]};'%3E${word}%3C/span%3E%60}data.html=tokens.join('%20').replaceAll('nn','%3Cbr%3E');for(const%20img%20of%20dom.querySelectorAll('img'))data.html+=img.outerHTML;MbViewerReturn(data)}">https://hub.octt.eu.org/MBViewer/#/siteUrl=https://octospacc.altervista.org|platform=wordpress.org|includeStyle=[...]|includeScript=[...]</a> (il link con tutta quella roba messa inline è una stringa di quasi 1 KB!). Userò tutta la cosa per rendere gli hashtag nel testo meno intrusivi per il mio sito anche lì, oltre che sul dominio originale. 👋️Finisco con dati ancora più tecnici, per chi non ha una vita: con questo #design, ogni #userscript deve provvedere ad esporre una funzione che, tramite la Channel Messaging API, viene richiamata dalla #app per ogni messaggio appena questo viene aggiunto al documento visibile; questa funzione riceve dati utili (per ora, solo l’HTML del contenuto; oltre a dati come l’id del messaggio nel flusso, che non sono granché utili all’utente ma devono essere restituiti alla app) e può rimandare nuovi dati indietro richiamando una funzione che è invece l’applicazione ad esporre allo script. Tutto questo ambaradan permetterebbe agli script di effettuare anche operazioni asincrone, comunque, non per forza di dover agire immediatamente alla chiamata. 🤓️
Tra i giorni passati fino a ieri, ho fatto delle robine #sperimentali su #MBViewer, era questo che dovevo #scrivere… La prima è stata, più che altro perché mi serviva effettivamente da tempo una piccola #app in grado di fare questa cosa, implementare la lettura del formato di esportazione chat in #JSON di #Telegram. Infatti, le #conversazioni da lì possono essere esportate anche in JSON per usi di manipolazione dati futuri, oltre che HTML per consultazione immediata; però, appunto non c’è ufficialmente un modo per leggere una #chat esportata in quel #formato macchina, e la conversione in HTML statico dopo sarebbe facile ma bruttina: avere un lettore con un’interfaccia a bolle classica so già che può tornarmi utile, perché ho qualche dump non-HTML da parte. 📦️
A parte la #scocciatura per interpretare la struttura #dati del testo di Telegram e trasporla in #HTML corretto, non è stato complesso… eccetto che c’è un #problema. Il sistema funziona, ma il #programma tende a soffocare male con dump di troppi #messaggi. Dopo poche migliaia, già subentrano #rogne, con l’uso di RAM della scheda del #browser che arriva a più di 1 GB, e il caricamento, se riesce a finire senza che tutto crashi, è veramente lentissimo. Potrei in teoria risolvere la cosa, ma è veramente una #pazzia, dovrei portare ancora di più la codebase all’assurdo per fargli caricare elementi DOM a mano a mano da una struttura che di base è comunque un singolo file tutto in memoria, perché così è il formato… per ora lascio tutto così, purtroppo nessuno mi paga, quindi nessuno godrà al 100%. 😈️
Stamattina mi è venuto un colpo quando ho notato che il mio #FreshRSS non ha accumulato nessun nuovo elemento da ieri sera… cosa che ovviamente è sintomo di un problema, perché ho quasi 700 fonti #RSS, di cui alcuni che normalmente non stanno mai in silenzio. 😩️
Vado a vedere nei #log, ed è da ieri sera che a caso è iniziato uno spam di #errori “SQL error addEntry: HY000: 21 bad parameter or other API misuse while adding entry in feed 417 with title: […]”. Stranamente 1 #feed ha continuato ad aggiornarsi a quanto pare, ma la maggior parte no. Ovviamente, il file del #database in sé posso scommettere che non si è corrotto, perché è su archiviazione interna che si è altrimenti dimostrata affidabile, e sul mio sistema non sono successe cose pazze ultimamente… ma magari si è #corrotto mesi e mesi fa (possibile, perché mi dava problemini di altro tipo da tanto tempo), quando ancora non avevo il #server buono che ho ora, ma un Raspino che saltava ogni giorno. O magari semplicemente l’universo mi odia, sarebbe plausibile considerando il resto della mia vita. 🌋️
Ovviamente, ho cercato sul web, e nessuno ha mai avuto il mio stesso identico #problema. Fortunatamente, sembra che si sia tutto risolto creando un nuovo #file di database (copiando prima tutti i #dati dal vecchio, con sqlite3 old.sqlite ".dump { tutte le tabelle }" | sqlite3 new.sqlite); ha dato qualche errore riguardo una manciata di entry al momento della clonazione, ma intanto ora il mio #aggregatore funge senza #rogne. La mattinata è salva, posso risparmiarmi dal dover tirare un numero di imprecazioni al cielo pari al numero di sorgenti da importare su un nuovo profilo o #software. 😤️
Non sono passati nemmeno 10 giorni da quando avevo detto “aaa è improbabile che aggiornerò ancora #MBViewer, dovrei provare a far iniziare a funzionare il progetto definitivo #alternativo migliore…” 🥴️
Però poi mi sono resa conto che: magari del #progetto alternativo non è semplice progettare tutta l’interfaccia e il suo funzionamento (cosa che va fatta, essendo una cosa da #costruire da zero), ma certamente non si posso comunque granché se prima non preparo dei #componenti logici che so già che mi dovranno servire… e allora, tanto vale iniziare a lavorare per quelli, integrandoli nella #app che (per quanto #spaghetti) è già esistente e funzionante, e acchiappare un bel 2 in 1 (espandere quel #programmino, e nel mentre accumulare codice che mi servirà per quel molto altro più tardi). 📦️
La prima cosa un po’ intricata che serve è il supporto all’ingestione di dati da #piattaforme diverse, con #schemi diversi. L’idea è di avere un solo #schema di dati che la app usa per lavorare internamente, per evitare di avere spaghetti, ma questo vuol dire che bisogna fare qualche tipo di conversione. Ci sarebbero diversi approcci: 🔪️
Il più classico sarebbe quello di scrivere (come degli schiavi indiani) delle #procedure di codice per tradurre ogni tipo di entità #API dai #formati esterni a quello interno, e viceversa… il che non solo è una pazzia, e richiede un botto di #lavoro (va scritto un numero di #funzioni complesse pari alle piattaforme da supportare, moltiplicato per 2), ma finisce per dare #rogne: appena decidiamo che lo schema di API interno va modificato o allargato, ecco che bisogna modificare in ognuna di quelle parti, ed ecco che magari escono nuovi errori e problemi. Ehhh, no, non ci sto dentro. 😩️
La mia idea, invece, è di usare un #documento di #trasformazione, almeno per quando le task sono semplicemente selezione e riassegnazione di chiavi di #dati (per operazioni più complesse, il codice è più appropriato del #markup). Era questo che avevo già provato a fare mesi fa (e funzionava eh!), ma, riguardandolo ora, mi stavo rendendo conto che lo strano #formato JSON da me inventato ha dei #limiti abbastanza forti, tra cui penso sia un casino tremendo usare 1 solo documento di #traduzione per fare sia avanti che indietro. Quindi, ho iniziato a ripensarlo da capo, ma ho pensato abbastanza in fretta che, beh… #JSON non va bene per sta roba, lo si vede anche dal come devo mettermi a scrivere chiavi tipo “__robo__“; JSON abuse, doing I am. Però l’idea credo sia bona… 😋️
E allora, fortunatamente sono tornata sana giusto in tempo, prima di #impazzire ancora una volta dopo mesi con Jason; almeno, abbastanza sana per capire che è meglio impazzire con #XML, se proprio proprio, in questo caso. E, boh, ci ho perso 1 giornata e qualcosa (soprattutto l’altra sera in cui, mezza drogata di sonno, mezza cringiata per colpa della situazione, ho iniziato ad andare un pochino mentale), ma bene o male l’ho fatto funzionare un minimo. C’è stato di tutto in mezzo ovviamente; tra cui, il #godere per aver sistemato un #bug, eccetto scoprire poco dopo che, no, nulla era sistemato… e averci dovuto perdere un’altra mezza giornata. 📆️
https://octospacc.altervista.org/wp-content/uploads/2024/01/image-9-960x451.pngIn #screenshot, i documenti di trasformazione: a sinistra, quello XML nuovissimo, credo definitivo; al centro, quello JSON vecchio: a destra, quello JSON nuovo che ho sperimentato per pochi quarti d’ora. 💎️Questa è una di quelle cose capaci di stupirmi anche se fatte da me: la sola #idea di poter raggiungere il 90% di quello scopo intricato semplicemente #componendo un documento XML in maniera adeguata, e avere vita facile per ogni #modifica, la trovo #pazza in concetto. Comunque, ho dovuto (iniziare a) scrivere una mega-funzione totalmente #originale per questa cosa perché, come già avevo constatato mesi fa, ma riconfermato appunto ieri, tutte le #librerie in giro per fare trasformazioni di dati così sono troppo generiche, a quel punto usare quelle sarebbe anche peggio che fare tutto in #codice. E credo di aver cercato fin troppo in giro. E, ahimè, prima o poi soffrirò di nuovo, perché dovrò scrivere pure la #funzione di traduzione inversa! 😵💫️
Che centra con la #applicazione mezza kangata? In pratica, avendo integrato questo #sistema già da ora, MBViewer può visualizzare (alcuni) #feed#RSS, e (con qualche problema, per ora) #profili#Mastodon, il che non è male. È male, invece, il mio aver scoperto solo ora che su Firefox avviene un problema con il parsing dei feed RSS, che dovrò sistemare… ma su #Chromium funziona tutto. Oh well. Ohhh, it’s so well. I #glitch non finiscono mai, la tortura della #programmazione è eterna!!! 😭️
Questi #grafici hanno fatto un #danno: una cosa che prima mi dava #fastidio perché la conoscevo e basta, ora la vedo anche e quindi la mia #mente non prende proprio più pace. ☺️
Quindi… per ora le ho semplicemente cambiate tutte, per fargli pescare la #data#GMT di ogni cosa, che è convenientemente 1 ora indietro rispetto all’Italia, quindi è decente (ma non perfetto). Ah, e stasera ne ho approfittato per finire al volo questa ennesima #tabella#inutile che, ispirata al muro di #piastrelle di #commit di #GitHub, illustra #visivamente quanti #post carico ogni giorno, per ogni #settimana, in un intero #anno. #Pippe mentali. 😇️
Ieri sera è successa una roba estremamente #inaspettata: come 3-4 settimane fa il supremo #algoritmo di Telegram ha deciso di darmi un #ban dal nulla, ieri sera a caso il mio profilo #utente è tornato dalla tomba di “Account eliminato”, ed il numero di #telefono risulta #sbannato, e ho potuto fare #login. Non so come sia possibile, tra le altre cose, che diverse persone su gruppi diversi lo abbiano notato quasi insieme, ma tant’è. 🤯
Ora dovrò aggiornare il vecchio post sulla Spacc BBS con questo dettaglio (visitatelo più tardi, scriverò più informazioni)… ma le cose non cambieranno rotta, bene o male. Il canale #Telegram, che era diventato un semplice mirror di questo #MicroBlog adesso, lo farò tornare attivo tramite #bot RSS, ma per il gruppo di #spacctorium 2 configurerò un nuovo #bridge con la stanza #Matrix, e rimarrà quello il canale preferito. 👆
Mi piace pensare che a sto giro ho fatto un danno di immagine a Telegram talmente grande, e/o si sono cagati in mano per la mia #mail riguardo la portabilità dei #dati (#GDPR) (sono sicura di averla condivisa ma non la trovo???), che hanno dovuto sbannarmi per forza… ma per le altre #vittime, passate e future, non è stato e non sarà così semplice, quindi ho #paura. Vabbè, grazie comunque #Durov. 🙃
https://octospacc.altervista.org/wp-content/uploads/2024/01/image-6.pngLa nuvola dei #tag è integrata nel #CMS e l’avevo messa da subito sulla #home (ora spostata), mentre il resto è grazie a questo cosiddetto #SQLCharts.Se come me #amate queste robe, fatevi un giro, e magari datemi qualche #suggerimento su che #illustrazioni in più #programmare… ho anche modificato il #codice del plugin per fargli sputare il #source#SQL utilizzato per ciascun grafico, che potete #copiare ed usare sui vostri #siti. ❤️ (Se volete la stessa #modifica, sappiate che vi basta aggiungere, nel file wp-content/plugins/sql-chart-builder/functions.php, alla funzione guaven_sqlcharts_local_shortcode, la seguente stringa in una parte che preferite della zona HTML: <?php echo htmlspecialchars($sql);?>)
Dunque, quel bellissimo #MBViewer, che ho iniziato a realizzare appena 3 giorni fa… è già #SpaghettiCode. Ehh, si, quel codice di #Telegram lì non è proprio fatto per gestire un caricamento di dati troppo avanzato e tutto #ClientSide: nel suo normale caso d’uso riceve #HTML già preparato dal server, ed usa #JavaScript non #moderno, quindi tentare il #retrofitting che ho fatto io è chiaro porti a difficoltà. Si può fare, perché nella #programmazione si può fare tutto, ma è un #casino. …E un po’ me lo aspettavo, e lo sapevo da quando ho iniziato. 😁️
Considerate, questa #idea mi era venuta per un motivo molto #semplice: era da un po’ che volevo implementare una vista più #minimale e con #comodità moderne (come lo scorrimento infinito, o la vista in contesto) per il #MicroBlog nuovo, ma tenendo comunque io il controllo dei miei #dati. Farlo dentro #WordPress non mi va, dato che alla fine comunque dovrei usare #script#JS, e a questo punto ho ritenuto #intrigante l’idea di fare proprio una cosa a parte, che potesse potenzialmente essere facilmente adattata per prendere i #contenuti anche da altre fonti (e lo fa, legge #JSON da ovunque, se opportunamente assemblato), qualora il #sito Altervista dovesse avere dei problemi. 🧭️
Però, questa non è la mia #soluzione a lungo termine. Per quello, in realtà, ho in mente un #progetto semi-segreto che iniziai mesi fa, ma che poi, presa da altre cose, non continuai. Doveva essere una #webapp per il Fediverso e, potenzialmente qualunque altro #protocollo#social grazie ad un layer di astrazione di #API interno. È Il#software che vorrei far funzionare con una doppia #interfaccia, a #messaggi o a “piazza” (stile Miiverse), e quindi in secondo luogo anche come #client Matrix, e in terzo e quarto per #blog e #feed standard… problema è che, dovendo non solo #progettare tutto il #frontend, ma anche svecchiare una spaventosa porzione del #codice, non è affatto una cosa rapida arrivare ad uno stato di primissimo #MVP. 😳️
Insomma, è per questo che questa piccola #applicazione, tirata su alla bene e meglio e che esiste in buona parte per via di #lavoro non mio, l’ho chiamata “#distrazione”. Continuerò ad aggiornarla, anche dopo che ora ho aggiunto l’ultima funzione fondamentale, ossia l’apertura di #post specifici? Probabilmente no, sarebbe meglio pensare a sistemare quell’altro progetto e fare un robo fatto bene. Importa qualcosa? Naaaah… come si dice, “the first rule of gun safety is to have fun“? Vale la stessa cosa per il #coding, quando l’arma è la propria tastiera insomma. Basta sia stato #divertente. 😈️
Dati minitre de la culture, c'est comme Depardieu au milieu de l'allocution sur le passage en force de la loi immigration.
Juste un contre-feu, un debat stérile.
On s'en fiche.
C'est quand la dernière fois qu'un.e ministre de la culture a fait un truc qui vous impacte au quotidien ?
Les vrais débats, c'est le pouvoir d'achat, l'état de l'école, de la santé et cett loi immigration.
Ne parlons pas de #dati dont on ne reentendra pas parler et parlons de la manif du #21janvier !
👏 #dati est tout naturellement nommée ministre de la #culture du gouv #attal, elle coche toutes les cases:
✔️ Elle adore #macron "Emmanuel Macron n'a pas de cap, pas de projet, pas de direction"
✔️ Elle est mise en examen
✔️ Rien dans son parcours indique un appétence pour la culture... (Sauf si on considère la fashion week comme culture)
Bref un gros 🖕 aux français et en particulier au monde de la culture...
A ce niveau de #foutagedegeule il faut inventer un nouveau terme ... #attalisme ?