Italian B4A: come implementare un'interfaccia per motori scacchistici UCI?

Discussion in 'Italian Forum' started by Stolcius Von Stolcenberg, Mar 12, 2017.

  1. Stolcius Von Stolcenberg

    Stolcius Von Stolcenberg Member Licensed User

    Salve a tutti,
    ho già postato un 3D simile su "Android Questions".

    Avrei intenzione di sviluppare una GUI che possa comunicare con gli engine scacchistici per SO android con protocollo UCI(e.g. Stockfish for Android https://stockfishchess.org/download/).

    Non saprei però come interfacciarmi con essi in B4A.

    Nessuno di voi si è mai cimentato in una siffatta impresa?

    TIA per l'aiuto,
    Stolcius
     
  2. MarcoRome

    MarcoRome Expert Licensed User

    Hai bisogno di creare un wrapper.
    Comincia con il guardare QUESTO
     
  3. Stolcius Von Stolcenberg

    Stolcius Von Stolcenberg Member Licensed User

    Grazie, Marco, ammetto però di avere le idee un po' confuse.

    In ambienti linux/windows si comunica con gli uci engine tramite le pipe/subprocess per mezzo dei quali si inviano comandi uci in formato string(e.g. "startpos moves e2e4 e7e5"), qui, invece, dovrei creare un wrapper, vale a dire un layer che traduca le interfacce del motore compilato per android(e.g. "stockfish-8-armeabi-v7a") in interfacce compatibili con l'ambiente B4A?

    Ahimè, la vedo duretta... :-(

    Un saluto e grazie K per la pronta risposta :)

    Stolcius
     
  4. Stolcius Von Stolcenberg

    Stolcius Von Stolcenberg Member Licensed User

    Infine sono riuscito a creare un Proof of Concept dell'interfaccimanto con un motore stacchistico UCI(il progetto è allegato al presente 3D).

    L'engine opensource stockfish for android (nella fattispecie "stockfish-8-arm64-v8a" scaricato da https://stockfishchess.org/download/) viene elaborato come segue:
    1. viene copiato da File.DirAssets in File.DirInternal;
    2. gli vengono attribuite le execution permission con il comando shell "chmod 777"
    3. viene lanciato in un processo tramite il metodo java inline startUciEngine(String fileFullPath)
    4. detto metodo crea una stringa di ciò che viene intercettato nell'inpustream e lo restituisce alla variabile "response"
    Ora, se installo l'app sul mio smartphone(Android 6.0) il tutto funziona egregiamente.
    Code:
    Logger connected to:  HUAWEI ALE-L21
    --------- beginning of main
    ** 
    Activity (main) Pause, UserClosed = true **
    ** 
    Service (starter) Destroy **
    ** 
    Service (starter) Create **
    ** 
    Service (starter) Start **
    ** 
    Activity (main) Create, isFirst = true **
    APP STARTED - 
    16:04:33
    FILE REPOSITORY: /data/user/0/b4a.uciengine.poc/files/stockfish-8-arm64-v8a
    FILE PERMISSIONS: -rwxrwxrwx u0_a93   u0_a93     674192 2017-04-01 16:04 stockfish-8-arm64-v8a
    STARTING ENGINE...
    ENGINE RESPONSE: Stockfish 
    8 64 by T. Romstad, M. Costalba, J. Kiiski, G. Linscott
    ** 
    Activity (main) Resume **
    Il response: "Stockfish 8 64 by T. Romstad, M. Costalba, J. Kiiski, G. Linscott" è la prova che l'engine riponde.

    Se però, tramite AVD, installo la stessa app su un emulatore Android 6.0 il response è null...
    Code:
    ** Service (starter) Create **
    ** 
    Service (starter) Start **
    ** 
    Activity (main) Create, isFirst = true **
    APP STARTED - 
    14:09:48
    FILE REPOSITORY: /data/user/0/b4a.uciengine.poc/files/stockfish-8-arm64-v8a
    FILE PERMISSIONS: -rwxrwxrwx u0_a55   u0_a55     674192 2017-04-01 14:09 stockfish-8-arm64-v8a
    STARTING ENGINE...
    ENGINE RESPONSE: (NO RESPONSE)
    ** 
    Activity (main) Resume **
    IYHO quale potrebbe essere la ragione di questa discrepanza operativa?

    TIA per le risposte,
    Stolcius
     

    Attached Files:

  5. moster67

    moster67 Expert Licensed User

    Ora non so se questo è il tuo problema:

    La tua libreria nativa è architettura Arm or x86? Sembra essere Arm...
    L'emulatore di Google può essere installato sia come Arm o x86. Assicurati che hai lanciato l'emulatore che gira con Arm.
     
  6. MarcoRome

    MarcoRome Expert Licensed User

    Hai risolto il problema utilizzando inline Javacode ( ottima soluzione ).
    Come spesso accade gli emulatori si comportano diversamente da un vero device ( Vedi QUI ).
    Un consiglio... utilizza sempre e comunque un device reale. In fin dei conti il prodotto dovrà girare su di essi.
     
  7. LucaMs

    LucaMs Expert Licensed User

    Sì ma dovresti testarlo anche su altri dispositivi, sia per questioni di grafica che di versione di Android: che fai, compri decine di dispositivi fisici?
     
  8. MarcoRome

    MarcoRome Expert Licensed User

    Ti riporto la mia esperienza, che ovviamente è del tutto personale e non è detto che sia corretta ( ma funziona ).
    Personalmente ho 8 dispositivi tra tablet / smartphone Samsung, Huawai, LG e compatibili ( made in china ). Con Versione Android differenti 2.2, 4.X, 5, 6 e 7.

    - GRAFICA
    Ho alcuni script testati da tempo relativi al Designer, dove di volta in volta in base ad alcune necessità cambio il codice. Solo nella parte Designer provo a visualizzare le diverse varianti:
    upload_2017-4-2_12-55-29.png

    in modo da avere non la certezza ma una buona probabilità che il tutto funzioni come ci si aspetta, poi ovviamente la sorpresa è sempre in agguato. Non penso che utilizzando dispositivi virtuali si sia comunque certi del risultato. Anche perchè ogni dispositivo virtuali lo configuri ad hoc ( vedi card interna, versione s.o, etc ).

    - COMPATIBILITA'
    Caricando l'APK in Play Store hai già una primo ritorno della compatibilità degli stessi:
    upload_2017-4-2_13-3-56.png

    Poi come detto più volte da Erel e altri colleghi ( e concordo in pieno ):
    upload_2017-4-2_13-6-38.png
     
    moster67 likes this.
  9. moster67

    moster67 Expert Licensed User

    Se si usa la versione con l'accelerazione hardware (x86), io la trovo invece abbastanza veloce e affidabile - molto, ma molto, meglio di una volta.
     
    MarcoRome likes this.
  10. LucaMs

    LucaMs Expert Licensed User

    Perché viene letto il manifest, ma questo non ti assicura certo che la tua app non abbia problemi a seconda della versione di Android sulla quale sarà installata.
     
  11. MarcoRome

    MarcoRome Expert Licensed User

  12. LucaMs

    LucaMs Expert Licensed User

    Ad esempio, recentemente ho installato un sw prodotto da uno sconosciuto sviluppatore, tale... Google. Se non sbaglio, il nome dell'app è GBoard, cmq si tratta di una tastiera; bene, sul mio smartphone con Android 4.0.4 non funziona.
     
    MarcoRome likes this.
  13. MarcoRome

    MarcoRome Expert Licensed User

    Si vero. Ma se vogliamo parlare di "sicurezze" non penso ci sia emulatore che possa darti la stessa. Di fatto e che in alcuni casi ( parecchi ) le cose sugli emulatori non funzionano.
    Poi è chiaro che dipende da cosa sviluppi, con cosa ti interfacci, etc. Ma io ho rinunciato agli stessi da tempo.
     
    LucaMs likes this.
  14. MarcoRome

    MarcoRome Expert Licensed User

    Bhè molte volte capita che su stessa versioni di Android ci sono comportamenti differenti ( versione brandizzate, etc ) . E comunque l'utilizzo dell'emulatore non ti garantisce che lo stesso funzioni.
     
    LucaMs likes this.
  15. LucaMs

    LucaMs Expert Licensed User

    Anch'io quasi non li uso ma, come detto, non è che posso uscire ed andare a comprare una ventina di dispositivi. Esce la versione 8 di Android e vado?
    Saranno prove poco affidabili ma sempre meglio che niente.
     
  16. MarcoRome

    MarcoRome Expert Licensed User

    Ahhh... thò beccato eh :D:D:D

    E se poi non ti funziona sulla 8 in emulazione che fai :confused::confused::confused: ??
     
    LucaMs likes this.
  17. LucaMs

    LucaMs Expert Licensed User

    A proposito di novità: nuova cazzata (di solito uso giri di parole o sottolineature per i caratteri, se voglio usare espressioni volgari; in questo caso sono proprio incazzato, quindi sono più esplicito :mad::)), hanno "inventato" dispositivi con grafica 18:9!

    Questo comporterà problemi (vedi questo thread) ai programmatori, come sempre.

    Anziché fissare un rapporto unico, per tutti i produttori (esattamente come con i TV), fanno gli "originali", sti cazzari!
     
    Last edited: Apr 2, 2017
  18. LucaMs

    LucaMs Expert Licensed User

    Passo l'apk a @udg, che nel frattempo avrà 15 dispositivi fisici :p


    azz, piccolo errore: ho confuso @udg con te, Marco, sei tu che hai ben 8 dispositivi!

    Va beh, lo invio a te, che problema c'è? :D
     
    Last edited: Apr 2, 2017
    MarcoRome likes this.
  19. MarcoRome

    MarcoRome Expert Licensed User

    Già :D:D:D
    Comunque battute a parte chi sviluppa in modo professionale è necessario fornirsi dei "ferri del mestiere". E poi, in definitiva, in questa gran bella community le soluzioni sono sempre abbastanza rapide.
    Come ti ha risposto anche @Pendrush
     
  20. LucaMs

    LucaMs Expert Licensed User

    E infatti quella risposta è sbagliata (o meglio, aveva dei dubbi), perché non è sufficiente.

    C'è un'impostazione di base, android.max_aspect, che va cambiata, gli ancoraggi non sono sufficienti, altrimenti.

     
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