Vai al contenuto

2024

the fog

Un bucone nel postaggio... finisco di scrivere stamattina, perché ieri sera ero fuori e non ho avuto il tempo. Ieri pomeriggio pensavo ad una cosa scomoda... cioè, una ben sedimentata nel mio repertorio, ma applicata alla coordinata spaziotemporale specifica del tale momento: è estremamente difficile, fin troppo, essere nella condizione giusta per svolgere lavori mentali, mentre altre cose bene o male si fanno sempre. Ma perché esattamente è così, babbuina la maremma?

L'opposto sarebbe che l'altra sera, un po' per la scusa di non passare l'ennesimo sabato a casa, un po' perché era un'occasione utile di provare senza pressione un tipo di lavoro che non avevo mai fatto — e che, a questo punto, chissà se dovrò finire per fare davvero un giorno, il destino è ignoto — ho partecipato a una sagra... un bordello allucinante, era più o meno come sospettavo, e appunto nulla che io avessi mai provato. 7 ore sono stata lì, con scarsi momenti in cui fermarsi, a spostare e sistemare sedie e tavoli prima, ogni tanto durante andare in giro per ripulire tavoli e levare la roba, io in particolare diverse ore a preparare cassette di legno usate come vassoi di bubbazza (ne avrò fatte almeno mezzo migliaio mi sa), e a mezzanotte inoltrata pure a pulire con la scopa il fottutissimo cortile esterno che c'è lì. Più di ventimila passi ho fatto in tutta la serata, i piedi doloravano, le spalle leggermente spacc, però alla fine ho fatto tutto senza problemi.

Ovviamente, tornata a casa poi ero stanca, ma non eccessivamente drenata... ho mimito più o meno alla stessa ora solita, non ero in condizione tornando quasi all'una di fare granché, quindi boh ho solo visto un po' YouTube, ma non è che sono crollata sul letto senza riuscire neanche più a muovermi. Stessa ora a tornare di proprio ieri sera praticamente, anche se appunto non ho lavorato, e in questo caso volevo scrivere qui ma non carburavo, seppure il corpo non fosse particolarmente stanco. E invece, si, avendo dormito giusto 7 ore poi ieri mattina non ero proprio in formissima fisicamente, ma dalla tarda mattinata stavo bene, e stamattina anche sto bene... però, ancora, scrivere questo post qui si sta rivelando un po' difficile, voglio dire quello che sto scrivendo, ma un po' mi distraggo e un po' non riesco a mettere in ordine i pensieri (aiuto devo pure rileggere)...

E mica solo questo... per finire il contrasto, basta anche vedere l'altra cosa che volevo fare verso ieri, ma non sono riuscita a portare avanti quanto avrei potuto nello stesso tempo se le stelle fossero invece state ben disposte. Ieri mattina stavo cercando di espandere WuppiMini come avevo detto mi servirebbe, ma non riuscivo a fare granché, però sarà stata in parte la scomodità del programmare da telefono (non ero a casa)... Tornata poi a casa, dopo pranzo ho continuato dal computer, ma percepivo molto sussy e poco worky... Dopo un po' mi sono fatta la doccia e ho provato a continuare, ma non usciva moltissimo... E si è fatto tardino a un certo punto, mi rimaneva giusto una ventina di minuti prima che avrei dovuto cucinare e cenare e prepararmi a scendere, quindi ho detto avvita esso, ho cucito un pochissimo po' (aiuto non ho ancora finito la bandiera perché nei giorni precedenti non ho avuto mai un attimo) e, incredibile, essendo lavoro di manine ho fatto almeno quello che potevo aspettarmi in quella quantità di tempo.

Non so se è che ho la mente [offuscata dalle rogne](../../../2024/07/06/io-m.md) ultimamente, colpa del caldo, o se sono davvero le pareti, ma comunque il problema è evidente... e, anche solo per richiamare cosa ho fatto nel pomeriggio di ieri, percepisco in realtà buchi fin troppo grossi che non riesco ad associare a nessuna grossa azione. Davvero ho passato un pomeriggio consumando 5 minuti alla volta di piccole distrazioni diverse? La mia mente mi dice che è improbabile, ma la matematica dice che è l'unica ipotesi che fa quadrare i conti. The fog is not coming: Ĩ̵̱T̶͖̈́ ̶̦HAS Ą̴͋L̵̮̏R̵͎̿E̵̖͠À̴͔D̶̞̓Y̴̯͘ ̸̨̓C̸̬̈O̸̺̒M̶̢̂Ė̴̼.

maledizione incastrata in faccia

Stamattina ero abbastanza fuori per dei servizi e, visto che a questo punto mi ritrovavo, visto che comunque era una cosa che mi serviva da fin troppo tempo (mesi?), sono passata da #Wycon... Regà, m'hanno fatto la pelle, sono tornata a casa letteralmente spennata, come se fosse caduto un ordigno atomico all'interno del mio portafogli. È stato così forte il #danno che, in tutto il tempo per tornare a casa, non ho più nemmeno percepito il caldo di cui stavo fino ad un attimo prima soffrendo, mi sono dissociata davvero fino a tal punto. 💀 (Vediamo se scrivendo riesco a ritornare in me.)

77 euro e 42 centesimi. Let. That. Sink. In. Cioè, sapevo che avrei speso non poco, anche in questo caso le ricerche le ho fatte e la teoria l'ho alla bene e meglio studiata, ma non immaginavo addirittura così tanto... Purtroppo ho un problema sul #viso, che ogni volta sembra attenuarsi, altre volte peggiora, ma non riesco davvero a risolverlo definitivamente; credo che l'unica soluzione vera sarebbe una pulizia laser, ma quella decisamente non è cosa da poco... l'unica alternativa che Internet suggerisce è usare i #trucchi. Il fatto è che c'ho sempre un alone di merda che va dal naso alla bocca, che non si toglie mai completamente, nemmeno col rasoio più affilato dell'universo, perché è tipo causato dai peli che stanno sotto la pelle e che non crescono mai abbastanza velocemente da essere tolti. Questa cosa mi fa IMPAZZIRE, rovina tutta l'armonia della mia faccia, e di conseguenza mi rende inguardabile, veramente non ce la faccio. 😭

Comunque, almeno, i #soldi sono volati così tanto perché mi servivano anche altri prodotti che non avevo da parte, e che non riesco a rubare a mia madre, dato che pure lei di trucchi usa poco e nientissimo: il correttore per andare ad effettivamente coprire la smerdata grigina-verdognola, un primer sennò non si tiene niente, il fondotinta perché altrimenti andrei solo a fare un'altra macchia, e poi il robino per fissare il trucco, che altrimenti con la prima goccia di sudore fa ciao ciao. Boh, ormai i soldi son spesi, alternative non ne avevo, non era più possibile andare in giro col viso così in contrasto proprio in quel punto lì... speriamo solo duri abbastanza tutta questa roba, ecco, che oggi ho proprio perso sangue. Metà di queste sostanze dipendono dal mio colore della pelle, quindi penso che i risultati non sarebbero stati buoni se avessi scelto di cucinarle io in casa seguendo un manuale di #makeup fenicio (antico!). 😶

io m

Sembra strano, ma sono gli astri che sono strani: non capisco perché a volte mi succede che... boh, sono in balia di una flumina incessante di pensieri alternati, qualcosa va leggermente storto e quindi va a generare in me tanti pensieri scomodi che si forkano e mi distraggono, facendo a botte con i pensieri più piacevoli generati dal divertissement che sembrano cadere di continuo, tutto un qualcosa che si sintetizza nell'implosione della mia mente. Non capisco se dipende magari dal ciclo lunare, cosa che sarebbe a questo punto plausibile... ma mi accorgo appunto di non aver registrato abbastanza dati nel tempo per poter dire si o no. (Evidentemente il microblog non è adatto a registrare le mie micro-emozioni in ogni momento, perché non sempre c'è qualcosa da scrivere, ma questo è un problema per un altro giorno.) Oppure, dipende tutto dall'entropia?

Non si possono neanche individuare cause specifiche, perché ciò che mi porta a questo stato sono robe magari di per sé del tutto ignorabili, ma stranamente oggi che c'è la luna nuova (cioè, ieri, 5, stando a scrivere passata mezzanotte) avverto fastidi. E, quando qualcosa non da più fastidio, magari una problematica si è risolta, magari un pensiero è stato sciolto via, subentra qualcos'altro, e così via via; a volte qualcuna delle pulci che avevo in testa non se n'è manco andata, si è solo rimessa in coda per tornare dopo il turno delle altre... È come se fosse in atto una specie di sabotamento, con ogni volta che magari mi rallegro che torna qualcosa a mettermi a posto, e costringermi a continuare a pensare mentre vorrei soltanto vivere. Non voglio ora cacciare la stronzata di "è colpa del denpa che frigge il cervello", lo so perfettamente che non è colpa di onde elettromagnetiche, però comunque alla base c'è qualcosa di etereo e totalmente presente allo stesso momento.

In questi casi mi viene anche da pensare, diciamo ironicamente ma diciamo no, che in realtà è un po' assurdo come io da, boh, 6 anni fa a questa parte, non sia ancora morta. Nel senso, non è statisticamente strano che non mi siano mai capitati incidenti circostanziali, ma è strano che non sia mai successo qualcosa di più sinistro e meno imprevedibile... Idk, 6 anni non sono pochi da passare. ...In realtà, su questo ho una teoria banalissima: è la prova che sono una ragazza magica, in quanto è pacifico che le ragazze magiche non possono morire di loro volontà (se non hanno alcun problema fisico, intendo; è ovvio che potrebbero sempre morire se un giorno decidessero di iniziare a non prendere più una medicina vitale, per dire); a seconda dei casi, o non si riesce mai ad arrivare al momento in cui qualcosa di irreversibile può accadere, o se ci si arriva in realtà il tentativo fallisce. "The show must go on", dicono gli inglesi, quindi l'universo fa in tutti i modi si che i personaggi principali non possano mai sparire dal palcoscenico... Insomma, la mia maledizione.

negoziocto alla riscossa

Non pensavo avrei fatto progressi sul fronte moneygrabbing dopo appena un giorno dai problemi insormontabili, ma ecco qui. È evidentemente un segno delle stelle: l'universo vuole a tutti i costi che il Negozioctt (per ora, e probabilmente per sempre, si chiama così) nasca e fiorisca... perché ho trovato la soluzione al problema di ieri totalmente a casaccio. Giochicchiando un po', ho visto che il bug del carrello vuoto non si presenta se la sua pagina è impostata come bozza... e non ho capito il perché, dato che non sono riuscita manco a trovare la chiamata API REST che cambiava, ma ho fatto un tentativo creando una pagina con il vecchio shortcode [ woocommerce_cart ]. Brutta figura per #WooCommerce che la roba da loro definita legacy funzioni correttamente, mentre quella moderna predefinita è del tutto rotta, ma quindi questo non è un problema mio! 🙃️

Il #negozio deve fiorire, dunque la valuta interna che ho inventato per farlo girare è il digifiore, cioè un fior(ell)ino digitale. Da un lato forse avrei preferito le stelline, ma... sono davvero troppo usate, prima da Nintendo e poi da Durov, mentre io vorrei qualcosa di unico e non confondibile (e, fidatevi, fiori come moneta virtuale non ne ho visti da nessuna parte). Fortunatamente, per quanto siano decisamente più terreni e mortali, credo che i fiorellini comunque si addicano abbastanza alla magia della mia persona (con tutte le sue personalità) coi loro colori infiniti, le forme eleganti... insomma, avete capito. (Vi prometto che sono ancora totalmente magica, vi chiedo per favore di non abbandonarmi...) Tra le innumerevoli immaginette Unicode, ho scelto la "rosetta"... che in realtà non è un fiore, ma una decorazione a forma di fiore; però l'altra mia scelta, cioè il #fiore giallo cresciuto generico, cambia troppo tra le varie piattaforme... su alcune non è manco giallo. Almeno la rosetta va sempre dal giallo all'arancione, quindi ricorda un po' una moneta, che è quello che volevo. 🏵️

Mi stanno nel frattempo venendo idee (anche se un po' scarse), sia su che articoli (digitali) vendere, sia su che metodi implementare per permettere agli utenti di guadagnare digifiori senza pagare. Non mi dispiacerebbe permettere di acquistarli direttamente con criptovalute eh, così almeno ci guadagno qualche spicciolo dagli utenti che vogliono un prodotto ma si scocciano di usare i metodi, ma con gli utenti che non pagano in #soldi veri il mio intento è comunque di ottenere più engagement e pubblicità. (Era ovvio, se da qualcosa non guadagno soldi allora è perché voglio guadagnare potere, espandendo il mio Regno del Terrore ad ancora più seguaci.) No grossi spoiler, ma: leggere ogni giorno i post, commentando e condividendo su altre piattaforme, sarà il modo principale di ottenere la moneta. E, prendendo seriamente un consiglio ironico: ci saranno anche tantissimi modi di perdere soldi, perché mi sfizierò implementando giochi arcade e da casinò direttamente nel sito! (casinocto...) 😼️

Schermata del carrello con il Prodotto di test(o) inserito
Comunque [il prodotto di ieri è di nuovo disponibile](../../../prodotto/prodotto-di-test.md), e l'ho messo in offerta a 0 digifiori, finché non avrò iniziato a implementare i metodi di guadagno, e vi chiederei magari di provare a comprarlo, per testare un po' il sito... chiederà solo un'indirizzo mail, e dovrebbe accettare caselle usa e getta, e otterrete un file scaricabile. Ho cercato anche di rendere più snello lo user flow rispetto al predefinito di WooCommerce, ma non saprei com'è per gli altri, per cui chiedo. A proposito... quanti fiori paghereste seriamente per le foto dei miei piedini? 🤑️

bandieroct quasi a metà

Dunque... la bandiera Octt non l'ho ancora finita, ma ho continuato. Ieri praticamente ho tagliato l'ultima striscia e iniziato a cucire, e insomma, devo ancora vedere come va. Ho tantissima voglia di finirla, perché avendo visto (disponendo le strisce vicine giusto per) quanto verrà sorprendentemente grande, ho già goduto, quindi ora voglio possederla effettivamente sventolante, appendibile, idk, tutte le proprietà che una bandiera normale ha. Eccetto che questa è bella grossa, un metro e mezzo dal lato lungo (come quelle dello stesso prezzo su AliExpress alla fine, eccetto che il materiale di questa è meglio, seppur non la produzione, ma nessuno produce commercialmente la #bandiera Octt). ✨️

E comunque, si, la differenza tra la parità della prima striscia che ho tagliato e le altre due si vede... nulla di troppo male, non ho avuto difficoltà a #cucire le due parti bene per via delle differenze, ma a seconda di quanto farà schifo il retro dopo che sarà tutto cucito dovrò fare più aggiustamenti per regolare gli eccessi. I problemi causati dalla mancanza di skill si risolvono acquisendo nuove #skill, quindi silenzio. Tuttavia, appunto, considerando che mi manca ancora una piccolissima parte della prima coppia di strisce, e poi devo ancora cucire l'altra striscia, e poi cucire i bordi del tutto per avere un aspetto pulito ed evitare che si rompano, e poi chissà se esce qualcosa all'ultimo... ahi ahi. 💣️

Tra stamattina e oggi pomeriggio non ho avuto il giusto tempo (e #mannaggia!) per continuare a cucire, quindi l'ho fatto solo stasera, fino a un'ora prima, arrivando fino al punto in foto... non ironicamente mi ci vorranno letterali altri giorni con questo ritmo, ma la Octt di qualche giorno fa sarebbe molto triste se non finissi il lavoro, quindi lo finirò, tanto almeno questa è una cosa non stressante. Anzi, in effetti cucire così, anche se è estremamente ripetitivo, non è scocciante se fatto con YouTube davanti, mi pare una cosa un po' come lo scavare la sabbia su Minecraft per poi usarla per prosciugare laghi interi, e poi giustamente riscavarla (con le torce stavolta) per ottenere il fosso. È forse un pochino scomodo alla scrivania, perché un po' devo stare bent (devo guardare in basso)... ma me ne esco che non ho alcun dolore, al contrario di quando faccio altre cose alla scrivania, dove sto dritta ma invece me ne esco coi dolori (per favore possiamo ritornare ad avere app che funzionano 100% senza mouse...?). What gives, perché è circa rilassante? 🤥️

soldi soldati

Da ieri sera: sono letteralmente nella mia imprenditrice digitale era... Non mi sveglio alle 4 di mattina (anzi, è sempre peggio), però potrei star già scrivendo da Dubai (ho usato la magia per rilocare la mia camera-ufficio nel sonno), il #grindset è iniziato, ed ora sono #moneygrabber (ha senso, visto che sono tirchia). 🤑️ 🤑️ 🤑️

Foto mia messa a 29 stelle sul mio canale, con didascalia "Du Rove ha trasformato Telegram in OnlyFans"
Insomma, Telegram da poco ha aggiunto una funzione per vendere media sui canali... usando una valuta virtuale, le Stelle, che si pagano con valute reali. Ho una specie di deja-vu, ricordo che ci fosse già una funzione simile, ma con i #soldi reali... forse fu tolta per via delle lagne dei gatekeeper digitali, e le regole stringenti dei i loro app store? 😵‍💫️

Questa funzione comunque è una grandissima cagata, per come è implementata. Chi vende contenuti riceve pagamenti in TON, la criptovaluta di Telegram, e fin qui OK, anche se non mi fa impazzire come crypto... però, chi deve comprare le Stelle per pagare, deve farlo con valuta fiscale, quindi o attraverso il bot che funziona solo con le carte di credito, oppure da App Store e Google Play (e almeno su questi ultimi puoi pagare con SIM e gift card, ma i Gatekeeper si fottono il 30%). Ho cercato un po', perché il blog di Telegram non dice nulla, ma non ho trovato nessun modo per comprare Stelle usando TON... che sola. Spero di sbagliarmi. 🧨️

Non darò mai i miei soldini al miliardario Russo, e non voglio che gli altri debbano farlo solo per farmi avere in cambio una criptovaluta di serie B, quindi: ritorna dopo mesi il tema della mia valuta virtuale. A pensarci meglio, è forse inutile fare una crypto, troppa fatica per qualcosa che nessuno userebbe fuori dal mio sito... quando tutto quello che io vorrei è vendere #prodotti digitali, permettendo però agli utenti di ottenere credito anche solo facendo specifiche azioni sul sito, non necessariamente pagando soldi veri; un programma fedeltà, a tutti gli effetti. 🥰️

Schermata della pagina per il "Prodotto di test" creato sul sito: "Questo è un prodotto di test che ho appena creato per capire come cavolo devo usare WooCommerce. Comprando questo prodotto potrai scaricare un file di testo contenente qualcosa di stupido che ho scritto al momento, kek."
Vabbé, con i requisiti così ridimensionati basterebbe WooCommerce con il plugin del wallet, e del codice custom per dare via i punti come serve... Ero arrivata a questo punto, ma ho dovuto disattivare tutto ora che mi sono accorta che WooCommerce va in conflitto con altre parti del sito (almeno ActivityPub), che non posso cambiare... e non è una questione leggera, il carrello si riempie ma appare vuoto, e non è svuotabile. Quindi sono punto e a capo. Penso che modificherò il plugin come necessario, piuttosto che fare il mio da zero, ma non so... ☠️

Edit, dimenticavo: la foto che ieri sera ho messo a 29 stelle l'avrei valutata 15 centesimi di euro... ma a quell'ora ho fatto male i calcoli, quindi in realtà a quel prezzo vale ben 60 centesimi. Non si può modificare una foto a pagamento dopo averla pubblicata, e non la cancellerò per ripubblicarla col prezzo giusto, quindi arrangiatevi suppongo...

mbviewer a casissimo

Mezzo secolo fa avevo fatto una modifica al frontend del mio FreshRSS per renderlo più piacevole per i microblog... e poi però ho smesso di usarlo per quello, perché era comunque abbastanza scomodo, molto clunky e legnoso, la UI tutta rotta. Altri client per FreshRSS che ci sono, e ce ne sono tanti, purtroppo non li ho mai visti affatto ottimizzati per post senza titolo, corti, che sono tanti di fila, ecc... quindi, comunque la mia soluzione aveva un motivo di fondo per esistere, ma il problema è che, appunto, non è buona, ahimé. 🥴️

Quindi, tipo l'altro giorno mi è tornato in mente il fatto, e ho pensato che a questo punto mi serve il mio client... ho già una app che può mostrare messaggi con lo stile giusto, #MBViewer, quindi ho aggiornato già quella per, se non integrare con la API di FreshRSS, almeno aggiungere una lista di sorgenti permanente, a cui se ne possono aggiungere di nuove aprendole e poi premendo il tastino. Per il resto funziona come prima, quindi non ha neanche alcun tipo di sincronizzazione dei messaggi, e quindi nemmeno contatori di messaggi non letti (piangere a riguardo di ciò). hub.octt.eu.org/MBViewer. 🤗️

C'è però un piccolissimo problema che avevo dimenticato, non avendo toccato il codice di quel coso per mesi: è talmente spaghetti che non credo di poter fare un buon lavoro, se ora lo usassi come base per aggiungere anche quest'ennesimo caso d'uso. Purtroppo l'ho totalmente riciclato dalla webapp di anteprima di t.me, espandendolo costruendoci da sopra e non dentro, quindi era inevitabile che finisse così, ma, non so perché, ci spero ogni volta... e invece puntualmente deve dimostrarsi solo poco più di un proof-of-concept. Vabbè, ci si goda il pochissimo nuovo che ora fa in più di prima. 😪️

Mi sa che piuttosto, non volendo fare una nuova cosa da zero (perché mi sembra molto superfluo), conviene un'altra cosa che avevo in programma ma poi non ho mai fatto, cioè aggiungere funzioni di visualizzazione, oltre che di scrittura, ad un altro programma che non tocco da mesi, WuppìMini, che invece non è spagoot. Sicuramente, parte della logica di gestione dei dati la posso riciclare da MBViewer comunque, quindi non sono totalmente rovinata... 😾️ (E, essendo quella una app ibrida solo-server e solo-client, sarebbe anche più versatile, è anche per questo che l'avevo fatta così.)

cucire esplodo

Non so perché, ma è da mesi che a volte ho pensato che sarebbe figo #imparare a #cucire, potenzialmente qualsiasi cosa... secondo me è un'attività artistica abbastanza ganza, ed è una delle poche che non è stata mangiata dai computer dopo la rivoluzione digitale. Mai ho avuto il coraggio di iniziare, però, perché è un casino, la lore è profondissima, e veramente non saprei proprio bene muovermi... sembra tutto semplice cercando guide online su come cucire una specifica cosa, ma se effettivamente provi a immaginare come sarebbe compiere il processo, è tutto abbastanza fumoso (stesso concetto di "come disegnare un gufo: disegna un cerchio, poi disegna il resto del fottuto gufo"). 😱

Mi è venuto proprio l'altro giorno in mente che, anziché qualcosa di abbigliamento, forse una scelta furba se voglio iniziare sarebbe fare una #bandiera, più semplice di così veramente non si fa nulla... Ho comprato qualche utensile più specifico dai cinesi nei giorni passati (ma niente di neanche lontanamente pro), e stamattina in merceria ho preso delle strisce di stoffa. Ho speso veramente poco quanto immaginavo, anche se i colori della stoffa sono appena vicini a quelli della bandiera, e non proprio uguali... e ho dato bella mostra alla commessa di come non sapessi una benedettissima mazza di cosa devo fare, ma vabbè. 🥺

...È veramente tutto complicatissimo, ops! Non ho neanche ancora iniziato a cucire, perché mi sono accorta che giustamente le strisce che mi sono state tagliate con la forbice lì in negozio non sono per nulla precise, e quindi devo pareggiare un minimo i lati ancora prima di cucire, altrimenti andrei ovviamente a fare linee tutte storte (probabilmente basterebbe anche marchiare con un pennarello una linea pareggiata a mo' di guida, ma tanto comunque poi dovrei #tagliare le discrepanze, quindi tantovale farlo prima, così dicono su Internet). Giustamente però, cercando nello specifico come cucire una bandiera, le altre persone hanno già le strisce (quasi) perfette, ma non dicono se le hanno minate off-camera oppure le hanno comprate già così (dove?). 📑

Il fatto veramente assurdo è quanta roba devo star imparando tutta insieme solo per fare questa apparente scemenza... come stendere la #stoffa per allineare i bordi del taglio, come mettermi poi a tagliarla visto che andando di forbici si rischia di sbavare ancora, e solo la metà di questo purtroppo è direttamente teorico, il resto devo scoprirlo io... Infatti, la prima striscia che ho tagliato è venuta circa ok, meglio di com'era grezza, ma comunque un po' male, perché quello che non c'era scritto non poteva essere automatico; la seconda non ho ancora finito di tagliarla, ma, avendo fatto quei piccoli errori un attimo prima, dovrebbe star già venendo meglio con i dettagli che ho automaticamente assimilato. (Con un righello lungo, un taglierino, parti della scrivania per allineare strumenti e stoffa, e varia roba per tenere fermo il necessario.) 💡

Mi manca poi la terza e ultima striscia, e domani vedremo se riesco a cucire. Anche qui, la teoria l'ho studiata, ma il diavolo sta nella #pratica... e non ho neanche la macchina da cucire, giustamente, quindi devo fare tutto a manina con la dovuta pazienza (ma, dall'altro lato, la teoria senza macchina è più semplice). Oh, pensavo di finirla forse domani, ma evidentemente ho sottostimato... still, ormai che ho comprato la stoffa voglio giustamente finire il lavoro, anche se non verrà neanche lontanamente perfetto perché, se non faccio errori catastrofici (non dovrei), al prodotto finale ci dovrei arrivare comunque. E, se finisce bene e continua ad intrigarmi, la prossima volta potrò tentare qualcosa di più #difficile... ❤️‍🔥

wincane no-js

Stavo quasi per finire la parte di base del bridging di messaggi oggi in #WinDog, che grazie alla API cross-platform che ho costruito dovrebbe in realtà essere questione di poco conto... perché si tratta di usare funzioni già esistenti per elaborare strutture dati già pronte, ma in modo diverso. Peccato che c'è qualche inconveniente per come i messaggi vengono sdoppiati, oltre al fatto che per le varie piattaforme ho ancora da implementare una marea di metodi (su tutte mancano modifica e cancellazione dei messaggi, pensa te), quindi mi sono scocciata oggi pomeriggio e ho pensato... ma quasi quasi ci vuole un bel proof-of-concept della futura versione #web del #bot, totalmente funzionante senza #JavaScript... 👽️

Beh, dopo essermi fatta distrarre da altri esperimenti in realtà ho già fatto e finito qualcosa di molto grezzo, però neanche io credevo di riuscirci a questa maniera... Il punto è che, prendendo ispirazione da github.com/kkuchta/css-only-chat (anche se io ho implementato tutto in modo molto diverso, senza la brutta #hack CSS), ho creato una live chat in HTML puro, che si aggiorna di continuo e con latenza bassissima, senza costringere a ricaricamenti della pagina, ma sfruttando il meccanismo pazzoide che ho fatto meglio a illustrare in video. Fatto al volo eh, senza manco il tempo di sistemarlo, tant'è che ci sono dei memory leak sicuri, ma questo sarà un problema dell'Octt del futuro (di domani o chissà quando). 💨️

Non so se lo lascerò ancora prima di sistemare estetica e codice, ma nel dubbio, dovrebbe stare su WinDog.octt.eu.org. Il meccanismo per cui la pagina si aggiorna senza script e senza flickering, lo spiego meglio, è fighissimo: con l'header HTTP Content-Encoding: chunked, il browser è forzato a renderizzare l'HTML senza aspettare che la connessione si chiuda; dall'altro lato, il server non termina mai la connessione (infatti c'è un loop infinito che preleva dati da una coda, e wow, quella struttura ritorna dopo appena un giorno...), inviando via via frammenti di #HTML che vengono appesi in fondo alla pagina. Stranamente, questo comportamento si vede funzionare correttamente solo collegandosi con normali browser o client TCP grezzi (netcat)... curl semplicemente si blocca, invece. E, ancora, il Content-Type deve essere esattamente text/html; charset=UTF-8, basta anche solo omettere il charset per rompere tutto! La casella di invio, invece, è banalmente dentro un iframe. Direi allora che questo è abbastanza #HTTP 1.1 per oggi... 🥰️

od(io) async(io)

Oggi #rant allucinante, è la prima volta che Python mi fa venire così tanta voglia di #piangere... mi farebbe proprio molto piacere conoscere chi sono i PAZZI pazzoidi che hanno completamente ROVINATO il linguaggio introducendo asyncio. Maremma trogolaia, è un merdaio allucinante secondo me, un'implementazione apparentemente furba di async/await, che però è estremamente malata: nel momento in cui si hanno davanti problemi reali, la presenza di anche un solo po' di codice asyncio va a contaminare tutto il resto che ne dipende, ed è un incubo... Sento già il "beh, se fa schifo questa funzione di Piton allora non usarla..."; peccato che tutte le librerie di terze parti che adottano questa maledizione per il loro funzionamento, puntualmente, vanno a deprecare il vecchio codice normale. Quindi si può solo piangere, concedetemelo. Fortunatamente, sembra che io non sia l'unica ad odiarlo... 😭️

Apparentemente, asyncio sembra appunto simile all'asincronicità che si ha su JavaScript da ES6, ma è molto, molto peggio. Il problema più grosso è che costringe alla propagazione, cioè: funzioni async possono essere chiamate solo usando await, ma la parola await può essere specificata solo dentro funzioni async... quindi, tutto un dato stack di chiamata deve essere fatto tenendo conto di asyncio, e questo significa dover ristrutturare per intero vecchi programmi (mentre, su JavaScript, funzioni asincrone possono essere richiamate anche senza attenderle, semplicemente omettendo await). Io il restructuring non la farò, perché non andrò a perdere ore solo per il risultato di rendere il mio codice ancora più complicato da mantenere, quindi... Per fortuna, esiste il metodo .create_task() per avviare qualcosa di asincrono da un contesto asincrono e lavarsene le mani... però, aspetta, esiste anche .ensure_future(), e... non se ne esce... 🥴️

Ecco un altro problema di asyncio che, coincidentalmente, fa anche rendere conto di quanto brutta di una hack sia la sua implementazione... è letteralmente costruita alla bene e meglio al di sopra di parti già esistenti di Python e che non avrebbero mai dovuto accomodare niente di simile. E, nel corso dei vari major update, questo modulo ha accumulato così tanta roba, teoricamente tutta diversa ma nella pratica indistinguibile per le differenze troppo sottili, che a questo punto non mi stupisco di come mai ho perso ore e ore appresso al mio problema oggi. Non ho letto il codice che ci sta dietro eh, mi risparmierò questa tortura, ma ho come il presentimento che sarà proprio la sagra del lasagna code... persino la documentazione ufficiale fa parecchio paura, e ciò fa pensare, perché in genere quella di Python mi pare tutto sommato buona — ho visto di meglio eh, però certamente non è malvagia. ⛏️

Addirittura asyncio avrebbe tecnicamente una specie di stato globale (bad!!!), al di sopra di cui è costruito un event loop. È per questo motivo che ha una serie spaventosa di metodi globali per gestirne il funzionamento (che non posso realisticamente elencare nella totalità), ed è questo che poi fa scaturire i problemi pratici nel mischiare codice asincrono con tradizionale. Soprattutto quando, come nel mio caso, il codice tradizionale gira molto attorno all'uso di thread secondari (perché deve lavorare in un modo che è sempre non bloccante, che non ha mai da awaitare niente). Vi giuro, ci ho provato in tutti i modi più strani letti da una decina di discussioni online diverse, ma no, non c'è verso di richiamare metodi gestiti da asyncio da un thread diverso da quello in cui questi risiedono (o partono errori, oppure addirittura comportamento indefinito). Su #Python non si può abusare il sistema degli eventi come su JavaScript per mettere una pezza a ciò, quindi la situazione è nera. 🕋️

Mi disp, dovevo sfogarmi, visto che tutto questo è stato semplicemente per... mettere le fondamenta per il bridging dei messaggi tra piattaforme diverse in #WinDog... nello specifico, verso Matrix (@windog:matrix.org), perché è con la libreria matrix-nio che sto sclerando. Maledetti loro che hanno fatto a pezzi il vecchio HttpClient, continuando a mantenere solo l'AsyncClient. Ancora non ho caricato il nuovo commit, ma comunque, questo è il codice che alla fine ho scritto per risolvere il problema... bruttissimo, non volevo davvero ricorrere a ciò, ma non voglio nemmeno ristrutturare l'intero bot, né tantomeno buttare questa libreria e reimplementare a manina in HTTP le tantissime API che mi servono. Quindi, la mia soluzione è stata usare una coda in cui inserire i dati che vengono da thread separati, e questa poi verrà gestita dall'unico thread dove gira il #codice di Matrix... tutto con un uso molto specifico dei vari metodi di asyncio. È dolore. 👇️

def handler(...):
  async def queue_handler():
    asyncio.ensure_future(queue_handler())
    if not len(queue):
      # evitare che la CPU vada al 100% ☠️
      time.sleep(0.01)
    while len(queue):
      sender(*queue.pop(0))
  async def client():
    # [...]
    asyncio.ensure_future(queue_handler())
    # [...]

def sender(...):
  try:
    asyncio.get_event_loop()
  except RuntimeError:
    queue.append(...)
    return None
  asyncio.create_task(...room_send(...))