Ieri ho effettivamente provato un po’ il #gaming Switch dal 3DS in portatilità, alla fine, e… che dire. 7/10. Certo, ogni tanto la connessione fa scherzetti e il gioco inizia a freezare per un po’, ma nel complesso si gioca con un lag accettabile e un video senza strani artefatti, veramente apprezzabile. Devo però capire perché in certi rari momenti il client crasha completamente invece di riuscire a ristabilire la connessione, e temo anche la batteria del 3DS si appiattisca troppo velocemente con questa #applicazione… ma vabbè, a sistema consolidato potrei anche usare il telefono. 🐚
Visto che voglio provare meglio il setup, mi sono portata avanti e ho fatto un programmino per #PC che legge direttamente gli input del gamepad virtuale e li invia alla #console; quindi, eliminando quegli altri due programmi necessari, sostituendoli con uno solo. La finestra inoltre visualizza il video da dispositivi di cattura standard, e quando lo implementerò riprodurrà anche audio, quindi sostituirà anche il riproduttore multimediale… per ora non ho ancora la scheda di cattura HDMI, quindi devo ancora usare SysDVR, ma almeno mi mostra il video della webcam (che mi serve per navigare nei menu di sistema, il DVR non lo trasmette), quindi già scendo da 4 app e finestre a solo 2. ✨️
https://octospacc.altervista.org/wp-content/uploads/2024/05/image-1.pngImplementare la lettura degli input del controller, e l’invio al demone sys-botbase tramite socket TCP, è stato un po’ intricato, ma alla fine il codice è venuto pulito, i tasti rimappabili tramite file config, e sorprendentemente sembra tutto ben funzionante dal primo momento… Nel senso, i comandi sembrano rispondere bene senza particolari accorgimenti; anzi, anche meglio di NXController, perché io invio direttamente i valori degli stick analogici alla console, mentre lui deve leggere valori rimappati alla tastiera e quindi tutti digitali. In effetti non ci avevo pensato quando mi era venuta questa #idea, ma effettivamente ho migliorato la mia #UX anche in questo modo, ora ho input più precisi. 🤏️Volevo inizialmente usare Ren’Py, ma ho subito scoperto che non include funzioni per accedere ai dispositivi video, né tantomeno ha la classe camera nella sua implementazione di #Pygame, quindi… ho usato semplicemente Pygame, e in poche righe di codice funziona già tanta roba, anche se la UI non è delle migliori. Dovrò investigare se davvero non ci sarebbe stato verso di usare l’altro engine oppure si, perché potrebbe tornare utile in futuro. Ancora versione molto WIP, diversi bug da sistemare, ma almeno l’ho già caricata … poi creerò anche dei pacchetti standalone (che includono già #Python e le librerie) per Windows e Linux. L’ho chiamato #FrameNX comunque, meglio evitare qualunque pretesto di violazione del trademark di #Nintendo per il nome #Switch… 🚨️
Ma, ovviamente, non era un mio #progetto secondario se non saltava fuori un #problema inaspettato mentre programmavo e testavo… il codice che controlla la versione dell’OS di pygame.camera è rotto su Windows Server, e quindi l’inizializzazione fallisce… evviva. L’ho identificato e sistemato subito, ho anche inviato la PR #4221, quindi non è stato un vero problema, però… che cazzo, non è possibile che tutto quello che finisce in mano a me si rompe… trovare bug in librerie così utilizzate e famose senza fare nulla di particolare non è roba da tutti, eppure ormai siamo ad uno a settimana, e chissà cosa mi riserva il futuro. 💣️
https://octospacc.altervista.org/wp-content/uploads/2024/04/screenshot_2024-04-21-01-09-00-703_us3219597754036554679-960x536.jpgLa #programmazione oggi sottrattami una non ignorabile quantità di tempo. Realmente però, da stamattina fino a oggi pomeriggio sono dovuta impazzire per far funzionare il menu delle opzioni su #SpiderADB come in figura… cioè esattamente come nella #UI di #Android, dove i tastini della barra del titolo vanno a collassarsi in un menu quando non c’è più spazio. Purtroppo la libreria che ho usato per questo stile non è per nulla funzionale di suo, quindi ho dovuto implementare io queste cose. 🥱A parte che non ho in teoria manco finito con quel menu, perché non si chiude ancora cliccando fuori su qualsiasi altra cosa che non sia il bottone di apertura (ma questa è una rogna sottile), ma poi ho dovuto spendere altro tempo per implementare quello che avrei già dovuto fare ma non potevo prima perché sarebbe mancato lo spazio per il bottone di attivazione della funzione, ossia effettivamente la disinstallazione dei pacchetti lì… Ovviamente sono sempre usciti fuori altri problemi strambissimi strada facendo, che sempre ho dovuto risolvere dolorosamente, ma alla fine ecco qua… 🙏
Volevo in realtà iniziare un altro #progetto stasera, probabilmente a lungo termine invece, ma ho giustamente deciso di finire prima ciò che avevo iniziato appena poco prima, per una buona volta, altrimenti sappiamo come va a finire. Quindi bene. Però, da domani, e adesso vi droppo una bomba, devo iniziare il mio sistema operativo #web. Sembra una pazzia, e lo è, ma voglio creare qualcosa che sia come quegli pseudo-OS HTML5 a scopi di portfolio, ma che sia per me anche un software di uso quotidiano, andando leggermente oltre le limitazioni di tutti quelli fatti solo come esercizio di stile… visto che non mi va bene nessun OS desktop o mobile, perché non farne uno io per entrambi, eh? 😇
https://octospacc.altervista.org/wp-content/uploads/2024/03/image-6-960x960.pngI side #projects non finiscono mai: ogni volta vengono quelle #idee che devono per forza essere stuzzicate… e puntualmente ciò che doveva essere un progettino di 1 giorno o 2 si protrae sempre più a lungo (e se non è tecnicamente già successo, sta nell’aria), e da #progetto collaterale diventa un nuovo progetto principale. E i #progetti precedenti? Beh… diventano a loro volta secondari! 😬️Praticamente, qualche settimana fa pensavo che avere una roba simile alla #fotocamera DSi (si, ormai quello è un chiodo fisso nel mio cervello, anche se mezzo arrugginito, e l’articolo non è ancora finito) ma open-source e per dispositivi #mobile moderni sarebbe figo, si può sviluppare qualcosa di versatile e potente… però non avevo personalmente iniziato nulla. Da però qualche giorno ho pensato di voler creare una piccola #webapp semplificata per fare questi memini con le scritte, e magari pure varie decorazioni (per il momento sto usando GIMP, che è molto tedioso). Stamattina ho pensato… “Perché non unire tutte e due le cose? Una versione molto basica riesco a farla in qualche giornata scarsa…”… si si 🤣️
Beh, non iniziamo al meglio, perché la prima metà giornata l’ho spesa a pensare “hm ok voglio qualcosa di multipiattaforma”, ma “il mio amore #web vanilla non va bene perché su telefoni più scrausi con camere marce non girerebbe bene, e quindi “vabbé quasi quasi provo #React Native”, solo che “ah mi sa che per avere un canvas di disegno su tutti i target di build devo usare questa libreria particolare”, peccato che “aiuto è un casino tra documentazione e dipendenze dell’ambiente non so cosa è più mentale”, e quindi “aspetta ma se usassi Godot?”, per poi scoprire che “mannaggia solo la versione iOS di Godot supporta le fotocamere (non ci godo[t])”, e allora “vabbé, Unity funzionerá”, e quindi via con la pazienza di installare un SDK LTS vecchio che supporta ancora Android KitKat (è stato lentissimo sulla mia VM cloud), peccato che poi “aiutoooo Unity è complicatissimo è impossibile fare qualsiasi cosa senza soffrire”, e anche se “magari ci sono altri engine #multipiattaforma che fanno al caso mio?”, purtroppo “no, non esiste un bel niente”. 😶🌫️️
E comunque alla fine mi sono convinta che in qualche modo questa cosa l’avrei fatta funzionare per forza su #ReactNative, che di tutte le probabili #soluzioni mi sembra ancora quella meno malata; per fortuna, #giochicchiando fino all’ora precedente (con non poca confusione), ho tirato su una base che mi dimostra all’atto pratico che ciò che mi serve è facilmente implementabile. Quindi, essendo la domanda del perché sempre esaurita da un “perché no?”, e risolto il dubbio del come, ora l’unica cosa che mi chiedo è il quanto… quanto #tempo e sudore prima di pubblicare la prima grezza build online? 💀️ (Ammesso che vada tutto liscio, perché sulla carta ora dovrebbe, ma nella pratica non ho ancora testato il funzionamento su Android, solo quello via browser…)
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!!! 😭️
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. 😈️
Diversi anni fa testai, con scarsi risultati, https://nebula.chat, una #reimplementazione#OpenSource del #server di Telegram, perché ne scoprii l’esistenza ed era #intrigante come concetto. A quanto pare ha cambiato nome, ora si chiama #Teamgram, l’ho scoperto qualche ora fa quando mi è tornato in mente questo fatto e ho voluto ritestare il #progetto. 💍
Sembra che lo #sviluppo sia andato parecchio avanti, ora pare che le #chat private e i canali funzionino in modo praticamente perfetto (non ho testato i gruppi), con addirittura le #chiamate vocali (credo, non ho potuto controllare se si sentisse), e anche i bot. Questo l’ho verificato sulla #istanza ufficiale di #test, ma in teoria è #selfhostabile… solo che non capisco come mai sul #Git il #README dica che queste ultime #funzioni succose siano “enterprise” (e di contattare il tizio lì se se ne ha bisogno), e tra le #issue c’è chi dice che non riesce appunto ad usarle, ricevendo errori che dicono proprio che siano cose di un’edizione #enterprise. Cercando nei #sorgenti stringhe come ErrEnterpriseIsBlocked riesco a trovare qualche parte che fa riferimento a “chiave di licenza da https://teamgram.net/ richiesta per sbloccare le funzioni enterprise”, ma non vedo controlli di licenza nelle molte parti che tirano questo errore, che tralaltro sembrano fare esclusivamente quello. In sostanza, sento puzza di #codice mancante dalle #repo pubbliche, e se ci ho azzeccato è un peccato. 👾
In ogni caso, non so che tipo di utilità pratica possa avere. Forse giusto se si vogliono creare #comunità#online#sovrane in contesti dove #Telegram sarebbe preferibile (per abitudine, principalmente), ma quello vero per un motivo o un altro non si può usare (visto che ormai è gestito sempre peggio…), o probabilmente in #team collaborativi, perché altrimenti l’assenza di federazione è limitante. Comunque è giusto tenerci su un occhio. https://github.com/teamgram ✈️