Vai al contenuto

MicroBlog : Fritto Misto di OctoSpacc

Amicini wordpressiani

In procinto di provare una cosa estremamente #interessante: il #plugin Friends per WordPress. A quanto pare, nasce molti anni fa con l'idea d'uso di un #blog come parte in una generica rete #social #decentralizzata, ma le implicazioni pratiche allo stato attuale sono... wow. 🤯️

  • Di per sé è un lettore RSS (#ganzo averlo in WordPress, ma niente di che) ed ActivityPub (e questo già è #impressionante). Pare sorprendentemente potente, con diversi filtri sui contenuti che si possono applicare per ogni entità che si segue, più granulari di cosa piattaforme come Mastodon permettono.
  • Permette di pubblicare post e messaggi privati sul proprio sito, visibili agli utenti messi come #amici, e questa cosa funziona sia per altri #siti #WordPress che per istanze #ActivityPub. Gli utenti amici possono rispondere alle pubblicazioni visitando il sito di destinazione, dove è come se fossero automaticamente loggati con il profilo del proprio #sito.
  • Dovrebbe aggiungere le reazioni sui #post (personalizzabili tra la totalità di emoji Unicode), e credo mi faccia rispondere da qui ai messaggi di #ActivityPub, o in generale interagire con la gente lì.

L'ho installato, e ora... boh, lo provo. Non lo userò come aggregatore RSS per notizie o video, perché per quello ho già il mio FrescoRSS, ma forse questo è più adatto per i #microblog e le cose correlate. (Vuoi vedere che magari il mio #social Miiverse-like lo faccio semplicemente stabilendomi così, lol?) ❤️‍🔥️

What C taketh away, it give back?!?!

[sc name=quote-embed-post]2024/02/10/cazate-per-il-c/[/sc]

Dopo aver perso altre incalcolabili quantità di tempo oggi, alla fine, finalmente ho finito quel #programma malefico... circa, perché ha un #problema di cui ora non ho proprio manco la voglia di venire a capo: quando prova a convertire #foto che (a quanto pare) sono corrotte, manda in crash tutto il sistema. #Pazienza, questo ed altri brutti dettagli li lascio ai posteri. 😇️

La scelta un po' bizantina di usare un #server per l'effettiva #conversione delle #immagini si è rivelata vincente (anche perché davvero ero a corto di soluzioni...), e sorprendentemente non è nemmeno troppo lento, impiega in media 1 secondo per file (nonostante il WiFi sulla #console faccia pena, ma al netto dell'avere il server in LAN). Creare lo script PHP è stato facilissimo, ovviamente, non è mica quello che mi ha fatto perdere il pomeriggio sano... è stato il fatto che c'è un #bug, da qualche parte in quella #monnezza di httpc (il servizio per le cose #HTTP) dentro libctru (la libreria per gli #homebrew del 3DS), se non direttamente nello stack di #rete di #HorizonOS, che faceva fallire il trasferimento di dati via #HTTPS verso o da il mio server, nonostante la connessione in sé avvenisse, e con altri server non ci fossero #problemi di alcun tipo. Io ovviamente ho provato tremila cose, e solo alla fine ho tentato di collegarmi senza cifratura, e ho visto tutto funzionare. 😤️

Ora quindi posso catturare #screenshot in qualunque gioco usando il menù Rosalina, poi avviare la mia #applicazione per avere tutto quanto convertito in #JPEG e messo nell'album di sistema in #automatico (non devo premere nulla), quindi tutto visibile dal selettore #media del browser web... e a quel punto posso pubblicare qui sopra direttamente da lì, per qualsiasi titolo. Forse però dovrei espandere il codice #ServerSide, facendogli scrivere le date delle foto nei parametri EXIF, altrimenti il #Nintendo3DS vede tutto come datato 01/01/1900... nulla di grave eh, ma un po' scomodo per navigare nella galleria. 💀️

Il 3DS che esegue il programma, con lo schermo inferiore che lista i file convertiti.
Tutto il #codice, e il binario 3DSX compilato, è su https://gitlab.com/octtspacc/OcttBitsOfFun/-/tree/main/LumaBmp2NinJpg.

C(azate per il C)

[sc name=quote-embed-post]2024/02/10/cazo/[/sc]

Hanako Kun e i 7 misteri dell'Accademia Kamome, Capitolo 9, Yashiro chiede ad Hanako alcuni dettagli personali per calcolare la compatibilità astrologica, tra cui la data di morte.
Se Yashiro mi chiedesse la mia data di morte, direi che probabilmente è: stasera!!! Perché non funziona niente!!! 🥰

Scherzi a parte, credo di aver risolto quella #rogna, avendo scritto #codice abbastanza sensato che pare funzionare, per gestire la struttura #DCIM... ma nel frattempo ho scoperto un altro #problema: quella pseudo-libreria per convertire da BMP a JPG fa le bizze con una buona quantità di file di input (non ho però capito sulla base di cosa...): crasha, e non converte un bel niente. E non credo di trovare altre opzioni... ci sarebbe libjpeg ma non mi è chiaro come dovrei usarla per codificare da dei Bitmap. Quindi R. ☠️

Un'altra mia #idea era trovare il modo di caricare una pagina web arbitraria (realisticamente, il sito che ho fatto ieri) nell'applet di Miiverse, che è a tutti gli effetti un browser web con API speciali, tra cui una per caricare screenshot, come servirebbe a me. (Era per questo che ricordavo male, e pensavo si potesse fare dal browser normale, perché a suo tempo usavo quest'altra cosa). Tuttavia, anche qui, vai a capire come. Se avessi voglia dovrei sperimentare con il self-hostare rverse, e da lì potrei probabilmente giostrarmela, ma non ora. 💤️

Però tipo... chi lo ha detto che devo fare le cose per bene? Se non posso codificare JPEG direttamente sulla #console, allora lo faccio sul mio server Linux; sul #3DS il mio programma può caricargli via Internet le immagini di partenza, e scaricare al posto giusto quelle convertite... c'è già il codice pronto per usare richieste HTTP POST... 😈️

C(azo)

Una apparente #maledizione si è appena abbattuta su di me oggi: non riesco a far funzionare un #programma C!!! 😭️

Il problema è il seguente: il programmino di ieri per pubblicare su WordPress dal #3DS funziona benissimo, ma mi sono ricordata che dal browser del 3DS non si può caricare come #foto la schermata del gioco in pausa, ma solo cose dall'album... e non tutti i giochi permettono di salvare lì. Per salvare #screenshot da qualunque gioco c'è il menù #Rosalina, ma salva foto non-JPEG e in una cartella diversa. 😪️

Ho pensato per un attimo di forkare #LumaCFW (ho controllato e nessuno lo ha fatto, almeno non per versioni recenti), e modificare la funzione di screenshot per salvare in #JPEG, ma dopo qualche prova mi sa che evito, perché è un casino: l'ambiente di esecuzione è talmente ristretto che non vanno nemmeno tutte le funzioni della #stdlib #C, quindi non è immediato far funzionare tutto. 😮‍💨️

La seconda opzione, più sfavorevole ma comunque decente, sarebbe un #homebrew che converte le foto da #BMP a #JPG e le mette nella cartella giusta... e ovviamente non esiste, esistono cose simili ma non questo, quindi devo farlo io. Ho trovato questa repo da cui posso semplicemente rubare il #codice di #conversione, che sul 3DS compila e quindi dovrebbe tranquillamente fungere. E però mi sto incartando su tutto il resto, cioè la navigazione tra le cartelle e la gestione dei #file (automatica, non pianifico di mettere menù o cose, deve semplicemente aprirsi, convertire, e chiudersi). #Mannaggia! 🤢️

Purtroppo C per fare cose di #utilità pratica (ossia non videogiochini, o roba tipo demo audiovisive, e così via) è #tedioso... soprattutto perché la #API della stdlib fa proprio schifo, con tutti i nomi di funzioni e tipi scritti tutti in minuscolo e spesso senza vocali perché a qualcuno pesava il culo di scrivere parole intere. E quindi finisci per creare millemila macro e funzioni intermedie di astrazioni per evitare di ripetere di continuo le stesse criptiche righe ma così vai a creare astrazioni ancora più astruse per passare i dati in giro e così via. Mi chiedo come sia possibile usarlo per fare addirittura interi sistemi operativi, #pezzi. Vabbè, oggi si soffre. 💀️

insetti utf nel mio codice!!!

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. 😭️

WP…GPT?!?!

Fino ad ora ho apportato vari piccoli #miglioramenti al #sito del #MicroBlog con vari metodi, nessuno che includa anche il creare veri #plugin. Troppa sbatta perché si devono imparare tutte le API, ecc... Però, che posso fare quando sembra proprio che l'unica soluzione elegante per estendere le funzionalità di #WordPress sia quella? 😫

Quindi, ieri sera, non avendo molto tempo da perdere, ho provato a chiedere a #ChatGPT. E, con mia sorpresa, non solo non ha allucinato creando #codice rotto, ma addirittura sembra aver studiato ciò che io non ho fatto, e si è curato di fare le robe per bene, addirittura usando le funzioni sicure per scongiurare problemi come le #SQL injection! Alla fine gli ho fatto esporre uno #shortcode, da aggiungere su normali pagine, che visualizza l'HTML generato dal #PHP. È stato proprio carino questa volta, poi guardate come l'ho ringraziato alla fine... https://chat.openai.com/share/9072c3ea-f3f5-42bb-88ae-03efa795a66f. ❤️‍🔥

Al netto di qualche errore di interpretazione suo, che mi ha portato a dover fare piccole modifiche, ho già messo a frutto lo #script, attivandolo su una nuova pagina: Ricerca 🔍️. Essenzialmente quello che mi serviva era una #ricerca dei post di tot caratteri o meno (che per <= 500 ho chiamato Tootin', riferendomi a chissà cosa)... e lo so che per ora è subottimale, ma è un inizio, poi magari la migliorerò. 😁

mannaggia a Vodafone, di continuo

Di cosa dovrei #incazzarmi di più: del fatto che ormai da mesi — e in questi ultimissimi giorni la #storia è peggiorata #tragicamente, guardare per credere — la linea #Internet di casa salta di continuo, mettendo da sé continui bastoni tra le ruote al mio workflow... o del fatto che quando collego il telefono via tethering USB il mio sistema desktop sembra non essere sempre in grado di routare correttamente i pacchetti — in certi casi capisce che deve farli passare attraverso il telefono sennò non vanno da nessuna parte, ma altre volte si ostina a mandarli al mio bridge ethernet? #MANNAGGIA!!! 🗡️🗡️

È una domanda retorica, ovviamente; mi #incazzo più con #Vodafone, che mio padre paga per farci avere in cambio un servizio che dire #scadente è fargli un complimento, di quanto mi possa mai arrabbiare contro un software no-profit per un #problema che posso aggirare praticamente scollegando dei cavi. Però davvero non ne posso più, non solo questo comportamento mi ruba tempo quando lavoro al PC, ma mi manda pure giù le cose che ospito sul serverino in casa, e che palle. 😭️

Ogni tanto ricordo di questo bordello a mio padre, ma fino ad ora ancora non l'ho convinto a provare a comprare un #router nuovo, uno vero con cui rimpiazzare quel rottame della #VodafoneStation... lui dice che probabilmente i problemi sono sulla linea, e in parte anche io credo sia così (ma chissà quale segmento della linea!); però se anche così fosse il caso, resta comunque indecente il fatto che, mentre il #collegamento alla WAN si scollega e il #modem tenta di ricollegarsi, la Station non è nemmeno in grado di roteare pacchetti in LAN... cioè, fai ping e avoja ad aspettare, non risponde. È evidente che pure il #software che sta lì sopra fa schifo, mica solo la linea. E-waste puro. 💀️

Ah, non centra con questi #problemi (mi è sempre capitato, e non impatta su questa situazione), ma guardate qui sto #bug: certe volte (credo a furia di disconnessioni e riconnessioni?) #NetworkManager sfancula e cambia i nomi delle mie schede di #rete nel pannello rapido (in questo caso di GNOME, ma lo faceva anche su Cinnamon)... ma poi nelle impostazioni i nomi sono corretti. Mamma mia che #disagio il software. 😩️

Colpo di #genio estremamente radicale per risolvere un annoso #problema: il creare una data #webapp, che non abbia bisogno di grande interattibilità (vedi un social network, o un CMS), senza dover mantenere 2 #codebase separate e quindi impazzire, facendola funzionare sia con un #server che totalmente senza... ossia, come unire in una sintesi circa accettabile i due maggiori paradigmi del #frontend? 🤔️

  • Quello antico, delle prime #piattaforme #web, dove il server genera tutto l'HTML e il browser lo visualizza com'è, spesso con (quasi) zero #JavaScript (vedi la Spacc BBS). 📦️
  • Quello moderno, dove nel #backend si espongono API (spesso JSON REST), e il fronte viene sviluppato a parte come app che gira totalmente lato #client, con il #browser che richiede pezzetti di dati e fa i suoi iperprocessamenti. 💱️

Ormai quello antico non si usa quasi mai per #progetti nuovi, perché gli svantaggi sono pesanti appena si vuole andare un po' più in là: per tappare i buchi nel progetto medio si finirebbe a dover scrivere talmente tanto #codice #ClientSide, che a questo punto era meglio fare tutto nel secondo modo, senza menzionare i modelli e le #API da esporre nel server che altrimenti non si sarebbero implementati. Però, le webapp antiche girano bene anche sul computer tascabile meno performante (average Ximi), sui browser vecchi, e spesso sono le uniche che vanno quando tutto il resto ti lascia a piedi. D'altro canto però, anche se in teoria quella #app potrebbe funzionare #offline, magari mostrando dati cachabili, se è sviluppata in modo attaccato al server ecco allora che non si può fare nulla: muore il server, muore tutto. 💣️

Quindi la mia #idea paxxerella, dato che devo fare banalmente una #applicazione come frontend per un altro servizio già esistente, ma voglio i vantaggi appena millantati: sviluppare con i paradigmi #ServerSide in un framework JS adatto, che giri sia in Node che nel browser. A quanto pare, qualcuno ci ha pensato prima, e qualcosa di già fatto ho trovato (Express+FrontExpress, Koa+Koa-Client, Rill)... ma è tutta roba ormai abbandonata, che o non funziona (ho provato) o ha altre #rogne. Te pareva che trovavo mai qualcosa di buono già pronto... Però, in un quarto d'ora ho tirato su uno #script scheletrino, giusto per poter partire per questa via. ☠️

Rapido #esempio: questo #programma (giusto da #dimostrazione, non fa nulla se non mostrare questo testo e far navigare tra pagine) gira sia come server su #NodeJS, che come script in una pagina #HTML totalmente #locale, e l'esperienza non cambia. Percepisco il potenziale, continuerò così. 😤️

Prima ho pensato: che mancanza di #rispetto nei confronti di quei #carabinieri che hanno suonato subito prima dell'inizio di #Sanremo! Voglio dire, non gli hanno fatto nemmeno mettere piede sul palco, come a dire "si vabbè, vi facciamo #suonare, però col cazzo che entrate dentro l'Ariston!". 💀️

Mia madre ha detto: "eh ma stanno a #cavallo, come facevano a farli salire sul palco?!", e allora io dico: ma voi immaginate che qualcuno, lì dal fottutissimo #festival della canzone italiana, vi invita, e vi dice che suonerete, ma poi quando arrivate lì non vi degnano nemmeno di entrare nel teatro, vi costringono ad esibirvi appena fuori... non vi sentireste di fregare? Io si, e non poco. Ragà, l'ingresso è grosso, li riuscivano a far entrare i #cavalli secondo me, se avessero voluto, eddai. 😖️