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

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
 

Stolcius Von Stolcenberg

Member
Licensed User
Hai bisogno di creare un wrapper.
Comincia con il guardare QUESTO

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
 

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.
B4X:
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...
B4X:
** 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
 

Attachments

  • UciEnginePoC.zip
    289.9 KB · Views: 253

moster67

Expert
Licensed User
Longtime 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.
 

MarcoRome

Expert
Licensed User
Longtime 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.
 

MarcoRome

Expert
Licensed User
Longtime 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

Expert
Licensed User
Longtime User
Poi come detto più volte da Erel e altri colleghi ( e concordo in pieno ):
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.
 

LucaMs

Expert
Licensed User
Longtime 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.
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

Expert
Licensed User
Longtime 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.
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.
 

MarcoRome

Expert
Licensed User
Longtime 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.
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

Expert
Licensed User
Longtime 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.
 

LucaMs

Expert
Licensed User
Longtime 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:

MarcoRome

Expert
Licensed User
Longtime User
Passo l'apk a @udg, che nel frattempo avrà 15 dispositivi fisici :p
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
...
NOTE: All my activities use anchors and designer script, so I don't need to think what resolution is on device.
 

LucaMs

Expert
Licensed User
Longtime 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.

Note: if you don't set a value, and android:resizeableActivity is not true, then the maximum aspect ratio defaults to 1.86 (roughly 16:9) and your app will not take advantage of the extra screen space.
 
Top