Italian Chiacchiericci

Discussion in 'Italian Forum' started by LucaMs, Feb 13, 2016.

  1. LucaMs

    LucaMs Expert Licensed User

    Io ieri ho iniziato una cosa "geniale" (leggi: stronzata!): sviluppare server+client "vergini" o quasi. Insomma, una sorta di template.

    Cerco di aggiungerci poca roba ma mi sto accorgendo che passo dopo passo ci sto aggiungendo parecchio.

    Se vi interessa...!
     
  2. LucaMs

    LucaMs Expert Licensed User

    La stronzata più che altro sta nel fatto che in realtà, per il momento, non mi serve, dovrei invece rifare (?) Penny.
     
  3. LucaMs

    LucaMs Expert Licensed User

    Se riprendi il mio esempio, cambi ExtraSize da 20 a 5 ed imposti a 0 la durata dell'animazione del layout layContactItem (nel Designer, ovviamente), la cosa diventa più veloce.
     
  4. Sagenut

    Sagenut Active Member Licensed User

    Faccio un ultimo giro di prove e poi cambio tutto altrimenti non mi muovo più da quì.
    Se poi più avanti capirò come migliorare allora farò un bel update, che fà anche sembrare che ci tieni e dai supporto. :D
     
  5. Sagenut

    Sagenut Active Member Licensed User

    Ho deciso di cambiare approccio e fare come avevo già detto:
    - Richiesta Permessi all'avvio dell'app
    - Compilazione Lista Contatti all'avvio dell'app mentre ancora non è visibile
    - Aggiornamento Lista solo tramite Refresh richiesto dall'utente
    Purtroppo vedo che il tentare di implementare il Lazy Loading crea effetti molto peggiori, quasi sicuramente a causa delle mie Sub già presenti che cozzano e fanno fare dei cicli inutili.
    Non avendo per ora voglia di smenarci altro tempo preferisco passare ad una modalità più basica e rozza.
    Poi come ho detto vedrò di migliorare in futuro, se ne varrà la pena per questa App.
    Grazie a tutti per i consigli.
    Altrimenti dove finisce tutta la mia Saggezza quando scrivevo a @LucaMs:
    Pensa a finire Penny in qualche modo.....a migliorarla ci pensi dopo. ;)
     
    LucaMs likes this.
  6. LucaMs

    LucaMs Expert Licensed User

    Sapessi cosa sto "per facendo io"...

    Non so nemmeno io stesso se l'ho capito bene né se funzioni :D

    Per spiegarlo bene, dovrei usare circa 4.000 parole (e magari avere prima le idee più chiare).

    Ci provo ugualmente (anche se mi sa tanto che questi miei post prolissi li leggo solo io :p).

    Comunicazioni Client (b4a) - Server (b4j) websocket.

    Lato Client c'è una UNICA routine, creata da Erel, che riceve i messaggi (stringa JSON) dal server.
    Questa routine elabora la JSON, ne ricava il nome della routine del client da lanciare ed una List che contiene i parametri:
    Private Sub ws_TextMessage(msg As String)
    dall'interno della quale viene chiamata la routine che il server vuole lanciare sul client, ad esempio può chiamare:
    MiaRoutine(params As List)
    ed il parametro è appunto sempre una List (params).

    Ora, l'ideale sarebbe che dalla parte opposta, ovvero sul server, la cosa funzionasse nello stesso modo, ovvero ci fosse un'UNICA routine che ricevesse un JSON dal client e che "smistasse" le chiamate, ovvero ricavasse un nome di una routine del server da lanciare e gli passasse dei parametri.

    Beh, non è così; per come è stata realizzato il tutto (da Erel), in realtà il client chiama direttamente una delle tante routine del server (routine che stanno nella classe che contiene il websocket) e come parametro devono ricevere una Map.

    Quindi quello che ho tentato di fare (e sembra funzionare) è stato di creare un "metodo" per ottenere questa funzionalità, ovvero rendere omogenea la cosa, cioè anche lato server c'è una sola routine da chiamare che a sua volta lancia quella richiesta dal client, con parametri.

    Inoltre, non mi piace che i parametri siano una List, preferisco una Map (in modo da poter ricavarli tramite nome, anziché numero ordinale), quindi ho cambiato anche questa cosa.


    Tutto questo... a che pro? Certo, dal mio punto di vista, il tutto così è migliore ma... quanto mi rende? Quanto mi sarà utile? Non sarebbe stato meglio occuparsi di Penny? Domanda retorica :(


    [Si è almeno capito ciò che ho scritto? :(]


    P.S. dimenticavo: queste modifiche rendono anche possibile cifrare/decifrare le stringhe JSON di comunicazione (in entrambi i versi).
     
    Last edited: Jun 13, 2018
    Sagenut likes this.
  7. Sagenut

    Sagenut Active Member Licensed User

    Potrebbe sempre tornarti utile per Penny.
    E di certo potrebbe tornare utile ad altri una base di un server, sulla quale poi eventualmente lavorare per adattarlo alle proprie esigenze.
    Io intanto forse ho trovato una pace dei sensi con la mia Lista Contatti.
    Ora finalmente posso proseguire oltre.
     
    LucaMs likes this.
  8. LucaMs

    LucaMs Expert Licensed User

    Mi sono arenato... di nuovo. Non per impedimenti tecnici, per stancheSSa mentale, totale apatia.

    Sono mezzo soddisfatto di quanto fatto (vedi post precedente, #3447 :eek:) ma adesso devo aggiungerci un paio di cosette (probabilmente conserverò due coppie - client+server - di progetti diverse).

    Quanto fatto, tentando di ricapitolare sinteticamente, è stato di ottenere una certa uniformità nel "modo" di comunicare tra client e server (sempre websocket, eh), ovvero in entrambi i progetti c'è un'unica routine che riceve il messaggio (ed una che lo invia) ed il tipo di dati che le routine inviano a questa è sempre una Map. [Questo potete saltarlo: nel codice base di Erel non è così - da una lato c'è un'unica routine, dall'altro no; da una lato si invia una List, dall'altro una Map, quindi non c'è uniformità, appunto].

    Ora resterebbero da fare due cose:

    1) implementare il tutto come WSS;
    2) i messaggi "fisicamente" inviati sono stringhe JSON e sarebbe il caso di cifrarle (criptarle), benché WSS sia già in parte una sicurezza.

    Per il punto 1) feci già degli esperimenti e, dopo varie pere per zie, visto che ci sono problemi con vecchie versioni Android (Erel risolse la faccenda ma è complicata), riuscii a far comunicare le due "macchine" con questo protocollo. Piccolo problema: servirebbe un IP statico lato server ed il mio è dinamico (benché io non spenga mai il router e normalmente non cambi). Comunque, anche questa procedura è "lunga e complessa". Ma s'ha da fa' !

    Per il punto 2) la cosa è ancora peggiore. Nel giochetto A9 ho usato qualche libreria per l'RSA; però comunica con pagine PHP, in cui è ovviamente presente la cifratura-decifratura. Per quanto ne so non ci sono librerie per b4a e b4j che consentano di gestire questa cosa, con tanto di chiavi pubbica e privata.
    Potrei usare B4XEncrytion e jB4XEncryption ma appunto non ci sono scambi di chiavi, semplicemente una parola chiave da usare per cifrare/decifrare; ma come, dove salvarla/inviarla?

    Forse mi conviene fare in modo che i primi dati scambiati tra client e server siano in chiaro (comunque "sotto" WSS), l'utente venga autenticato tramite nome-utente e password e poi usare quest'ultima per la cifratura; che ne ditO?

    P.S. potrei anche inviare al client, una volta autenticato l'utente, un codice che serva come chiave per la cifratura, ma tanto se qualcuno avesse scoperto nome-utente e password, riceverebbe comunque questo codice, no? Quindi tanto vale usare la sua password.
     
    Sagenut likes this.
  9. Sagenut

    Sagenut Active Member Licensed User

    Attento che l'IP può cambiare anche se lasci il router sempre acceso.
    Almeno a me accade che di tanto in tanto mi mandino tipo un comando di Resync (o come volete chiamarlo) dalla centrale e il router perde la connessione e poi si riconnette.
    In quel frangente mi viene anche cambiato l'IP perchè ovviamente non riprende mai lo stesso slot di prima.
    Che sia una loro necessità o una cosa voluta per impedire che l'IP non sia lo stesso per troppo tempo non lo sò.
    Poi magari è solo una condizione della mia linea decadente.
    Dovresti almeno usare un servizio di DDNS secondo me.
    Ce ne sono alcuni gratuiti tipo NOIP.
    Oppure acquistare un VPS, che senza introiti per mantenerlo diventa pur sempre una spesa anche nella sua forma minore.
     
    Last edited: Jun 14, 2018
    LucaMs likes this.
  10. LucaMs

    LucaMs Expert Licensed User

    Infatti lo uso (ad esempio per Penny) ma per creare le chiavi WSS è obbligatorio passare un IP; per questo, momentaneamente, avrò due coppie client+server, una con e una senza WSS. [Ripeto che quanto sto facendo DOVREBBE essere, alla fine, una sorta di template di base, non riguarda direttamente Penny]
     
  11. Sagenut

    Sagenut Active Member Licensed User

    Appunto.....se viene sniffata la parte in chiaro salta tutto.
    Eventualmente fare in modo che vengano scambiati alcuni dati univoci, tipo ID Dispositivo/Nome Utente/Password, e sia su server che su client ci sia un algoritmo personalizzato che calcoli la chiave sulla base di questi dati senza trasmetterla.
    Idea balorda?
    Se uno è bravo a decompilare scova tutto.
    Diverse volte mi sono messo a pensare a questa situazione e...............BOH.
     
    LucaMs likes this.
  12. LucaMs

    LucaMs Expert Licensed User

    Per questo, di norma, si usa la faccenda chiave-pubblica, chiave-privata. Ma mentre tra client b4a e server classico Apache con pagine PHP ho potuto farlo, non mi pare che ci sia modo tra client b4a e server b4j. Magari dovrò cercare meglio, ma ne sono quasi certo.
     
  13. LordZenzo

    LordZenzo Well-Known Member Licensed User

    io penso che sebbene ci voglia un minimo di protezione, impelagarsi cercando la soluzione estrema che migliori anche i server della NASA forse è solo una perdita di tempo, una scusa per non andare avanti
     
  14. LucaMs

    LucaMs Expert Licensed User

    Per una volta non è così. Ricordi quando in A9 entrava un tizio e si metteva record irraggiungibili, non realizzabili? A quel punto gli altri non giocherebbero più; mentre adesso... non giocano lo stesso :D
     
  15. LucaMs

    LucaMs Expert Licensed User

    In questo momento sto vedendo un film, "In time".

    Esattamente a 25 anni le cellule dei protagonisti smetteranno di invecchiare!

    (poi c'è dietro tutta una storia senza senso; l'unico senso "logico" è che i ricchi saranno sempre ricchi ed i poveri sempre poveri)
     
  16. LordZenzo

    LordZenzo Well-Known Member Licensed User

    veramente non lo ha fatto nessuno, per entrare in un db mysql ci vuole comunque la password , oltre a saperne IP e username, e sono dati non facilmente estrapolabili dal apk, che comunque è protetto da android
     
  17. LucaMs

    LucaMs Expert Licensed User

    Inviava punteggi falsi, non entrava direttamente sul db.
     
  18. LucaMs

    LucaMs Expert Licensed User

    I permessi che vengono visualizzati sul mio vecchio smartphone (Android 4.0.4) installando un progetto B4A completamente vuoto:

    upload_2018-6-15_2-4-26.png

    1) che ne pensate?
    2) "Lettura dati di registro sensibili", che in italiano può terrorizzare, in inglese è "solo": "Read sensitive log data".

    Perché poi dovrebbe richiedere l'accesso alla scheda SD (suppongo che intenda proprio la scheda "esterna")?

    Notare che l'IDE, invece, indica che non sono richiesti permessi.
     
  19. Sagenut

    Sagenut Active Member Licensed User

    Forse per via del TargetSDK a 26?
     
  20. LucaMs

    LucaMs Expert Licensed User

    Pare che visualizzi quell'avvertimento solo se installo in modalità debug e solo tramite bridge!

    Va beh, niente di preoccupante, quindi (già, avrei potuto provare ad installare direttamente l'apk, salvandolo nella Root; scommetto che non avrebbe visualizzato quella dialog).


    P.S. Infatti, è così.
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice