il matrimonio equivale all’eiaculazione per le donne
Archivi autore: Cippo
Mega pippa mentale sul mio senso della vita
Madonna in questi giorni sono gasato al 2000 % per Social.Art. non riesco a pensare ad altro.
Solo coordinate assolute
Conversione alle coordinate assolute completata.
Per affrontare il problema di visualizzazione alle buone coordinate avevo seguito la strada di convertire e mantenere aggiornate nella memoria locale tutte le coordinate assolute in px dello schermo. Ora che la visualizzazione funziona correttamente l’ho modificata per farla funzionare utilizzando solo coordinate assolute.
In questo modo devo fare molti meno calcoli su drag per mantenere aggiornata la cache locale. Ho comunque conservato il codice commentato perché potrebbe rivelarsi la soluzione migliore per individuare il disegno non trasparente indicato dal cursore.
Ciao a tutti!
FINALMENTEEEEEEEE!!!!!!
Finalmente funziona!
Sono stato sveglio fino alle 5, ma ne è valsa la pena! Un test illuminante (che avrei anche potuto pensare prima…) mi ha mostrato che il punto di origine rimane fisso. Se solo lo avessi saputo fin dall’inizio avrei evitato mille pippe mentali su quel fottuto punto. È stato più complicato da trovare del misterioso punto G di una figa nuova.
In effetti sono settimane che non faccio altro che interrogarmi sull’origine del punto G. Anche informaticamente parlando, viva la figa.
Comunque, ora posso avanzare col progetto. Ci sono ancora dei piccoli problemi di arrotondamento, e avendo finalmente compreso come funziona la tecnologia che sto usando posso valutare di tornare ad avere solo coordinate assolute per semplificarmi i lavoro JS. Ma le coordinate sono comunque date per fatte.
Ora devo separare versione Dev e versione Beta pubblica, con due db diversi, due url e due versione del codice, e lasciare sempre attivo il servizio backend della Beta. E si comincia!
Ho dato una letta ed una pulita al progetto su Trello, ed ho ritrovato un sacco di idee fighe veloci da implementare. Credo che nel breve periodo mi dedicherò a queste aggiunte di nuove funzionalità per ritrovare un po il piacere di programmare e veder avanzare il progetto, sparando una raffica di commit.
Bug coordinate Dashboard #8
News veloce veloce.
Mi sfugge il perché, ma ora sembra proprio che il punto di origine di ogni immagine aggiunta in futuro sia il punto di origine della prima immagine, che essendo inserita quando il tag g è vuoto parte dal punto di origine dell,svg, che nella dashboard è l’origine dello schermo.
Quindi _groupCoordX e Y partono da (0, 0) e devono subire lo stesso trattamento di drag e zoom delle coordinate delle singole immagini, e dovrebbe funzionare.
Stay Tuned, e porcoddio finchè non funziona.
Bug coordinate Dashboard #7
OOOOOttimi passi avanti!
Ovviamente non funziona ancora, ma questa volta davvero si vede la luce in fondo al tunnel.
Ora posso dire con assoluta certezza (ahahaha come no) che i calcoli sono corretti! Pxx Pxy risultano sempre coerenti.
Il solo problema è che ancora una volta il funzionamento del tag g non è quello che mi aspettavo, e trovare documentazione su come cambia il sistema di coordinate relativo all’interno del tag g non è facile. Ma non si tratta più di un problema di calcoli o di algoritmo! Ora devo solo capire da che punto applicare le coordinate dei disegni e poi tutto funziona.
Sembrerebbe che il tag g viene inizializzato meno volte possibile, significa che finché il primo disegno è presente, sarà lui a determinare il punto di origine di tutto il tag g. Finora se volevo aggiungere 3 disegni alle coordinate x assolute -1 -5 e -10, li visualizzavo passando -1 -4 e -5, perché pensavo che ogni nuovo disegno ridefinisse le coordinate dell’intero gruppo. Invece devo richiamarli con -1 -4 e -9, perché l’origine è stata settata solo la prima volta.
Questo almeno finchè il disegno di origine non viene rimosso. In quel caso il nuovo punto di origine diventa il px più in alto a sinistra di tutti i disegni del gruppo. Potrei cercare di stare dietro a tutti questi cambiamenti, ma troppo sbatti.
Quindi la nuova idea è di aggiungere un elemento fasullo al tag g, tipo un rect di 1 px X 1 px (meglio 0 X 0 se funziona comunque) nella funzione GoToXY, e non rimuoverlo mai. Così dovrei avere un punto di riferimento fisso per sempre, fino al prossimo salto ad un altro punto della lavagna. E se lo imposto alle coordinate correnti della lavagna mi semplifico di molto i calcoli perché potrei usare direttamente la x e la y assolute che ricevo dal server moltiplicandole per lo scale. Potrebbe funzionare! E semplificarmi di molto la vita.
Bug coordinate Dashboard #6
Santo Graal delle bestemmie trovato!
Come ho fatto a non pensarci prima. I px all’interno del tag G sono sempre da intendersi con scale = 1! Quindi è ovvio che ragionare in px dello schermo non va bene, perché all’esterno del tag G 1 px della variabile = 1 px dello schermo, ma all’interno del G 1 px della variabile = (1 / scale) px dello schermo.
Non sono sicuro che questo risolva tutti i problemi, ma di sicuro in quando non correggo questo problema non potrà funzionare.
Come fare… mmm.. dunque
Ho comunque bisogno di coordinate in cache in px schermo di ogni disegno per quando implementerò il click sulla dashboard (magari in futuro questa idea si rivelerà una cazzata ed eliminerò parecchio codice su drag e zoom, ma per ora lo tengo), quindi continuo con gli _updateCacheForDrag e _updateCacheForZoom. Ma al momento della visualizzazione oltre che sottrarre le attuali coordinate in px generali del gruppo, devo anche moltiplicare per lo scale.
E fine, speriamo che funzioni e che non ci sia altro.
Ho modificato anche il socket backend per non inviare 2 volte lo stesso disegno allo stesso client. Quando implementerò la cache client che elimina i disegni vecchi, dovrò comunicare al server che in caso di bisogno devono essere trasferiti di nuovo.
Bug coordinate Dashboard #5
Le idee esposte nell’articolo precedente sono state implementate. Non so se alla perfezione perché non ho avuto molto interesse nel testarle bene visti i continui problemi, ma sembra comunque risolto il problema del tag <g>.
Non capisco per quale fottuto motivo ma i disegni e le loro coordinate sono sfasati nel tempo. Sono asincroni, perché le coordinate alle quali vengono visualizzati dipende da quanto zoom /drag hai fatto da quando hai richiesto il disegno. Ciò è palese con lo zoom: compaiono in posti diversi in base a quanto velocemente hai zoomato.
Ovviamente so il punto della logica del codice dove questo problema, perché sono pochi i punti del codice in cui vengono richiamate funzioni sincronicamente rispetto al resto dell’esecuzione. Ma cazzo il calcolo di dove visualizzarli avviene appunto dopo queste chiamate, quindi in modo sincrono rispetto alla reale aggiunta alla dashboard.
Quindi che cazzo gliene frega al codice se quando ho richiesto il disegno dal server avevo un livello di zoom e coordinate assolute diverse?
1) mouseWheel
2) “quando hai tempo” fai lo zoom
3) zoom della dashboard attuale e richiesta dei disegni nuovi
4) “quando ricevo un disegno” calcolo dove visualizzarlo in base alle coordinate / zoom attuali.
Che cazzo me ne frega se ci sono passaggi asincroni? Tanto dal server ricevo sempre le coordinate assolute, e la conversione a relative è fatta solo al momento della reale visualizzazione, in base allo stato della dashboard in quel momento.
Che cazzo ne so
Comunque una news interessante oggi c’è. A lavoro mi stanno insegnando parecchio su come testare le reali performance di ogni parte del codice, l’utilizzo di memoria, e tempi di esecuzione di ogni funzione grazie ai tool di chrome. Quando sarà il momento di ottimizzare il codice verrà fuori un prodotto eccezionale.
Bug coordinate Dashboard #4
Eccomi di ritorno.
Mi son preso una pausa tra vacanzina in italia e depressione per i mille bug riscontrati.
I bug sono tanti, ma le madonne sono ancora di più. Vinceremo noi
In pratica cosa ho deciso di fare:
- In cache ogni oggetto avrà x , y , w , h , come valori assoluti in base alle coordinate della dashboard, e pxx pxy pxw pxh che saranno tarati in funzione dei px dello schermo, ed un flag isVisible;
- su drag e zoom aggiornerò i 4 parametri px di tutta la cache, ed il flag isVisibile, ed anche l’array _imagesVisibleIds;
- creo due array con tutte le coordinate pxx e pxy di tutti i disegni visibili sulla dashboard:
- su aggiunta e rimozione di un disegno sarà sufficiente aggiungere / rimuovere la sua coordinata dagli array
- su drag e zoom dopo aver aggiornato tutta la cache, ricreo questi array con tutte le coordinate dei disegni isVisible === true
- quando devo aggiungere un nuovo disegno uso le coordinate minime di questi array come coordinate del tag <g>
- e su _appendDraw devo sistemare che vengano impilati correttamente in ordine di ID
Dovrebbe funzionate, ma ormai meglio non illudersi più
Bug coordinate Dashboard #3
Problemi di coordinate sempre nuovi :(
Dunque, questa volta credo sia proprio colpa mia, che non ho capito il funzionamento delle tecnologie che ho deciso di utilizzare.
Quel fottuto transofrm matrix del tag <g> del svg non fa ciò che io pensavo. Sono stato tratto in inganno dal fatto che il browser inspector me lo evidenza come un elemento, con larghezza e altezza e una posizione, ma a livello di API è solo una scorciatoia per applicare modifiche ad un gruppo di elementi in un colpo solo. Niente di più.
Ma in quest’ottica non capisco che senso abbia dover specificare coordinate relative al tag <g> per poterci aggiungere una nuova immagine, visto che poi le sue proprie coordinate, all’interno del svg, continuano a cambiare ad ogni aggiunta / rimozione di un figlio.
In sostanza, il passaggio da coordinate dello schermo a coordinate del gruppo fallisce stupidamente, perché io mi affidavo alle x e y del matrix, che a differenza di quel che pensavo io non sono le coordinate ma solo l’equivalente di quanto è stato traslato il tag dal momento della sua creazione.
Quindi, che fare? L’illuminazione migliore avuta fino ad ora mi è arrivata stamattina al risveglio. Ad ogni aggiunta o rimozione sulla dashboard, tengo aggiornati due array che contengono tutte le coordinate x e y delle immagini presenti nel svg. In fondo il tag <g> come coordinate ha praticamente la minima x e la minima y tra tutte le immagini che contiene.
In questo modo lavoro su 2 array di numeri e non su un array di oggetti grossi come le immagini. Penso possa andare.
Ma questa volta prima di partire col codice voglio studiare bene l’argomento. Cercherò su internet altre possibili soluzioni per questo problema, e leggerò la documentazione.