Posts

Animation of Engine Moves

Because it is hard to print all information from the UCI engine on the phone screen, I am toying with a feature where the current move considered by the UCI engine is shown graphically. Below is a short demo of this feature. Let me know what you think!

Chess for Android 2.4

I just released version 2.4 of Chess for Android at the Android Market with the following new feature: basic UCI engine support (ability to replace built-in Java engine with any third party UCI engine compiled "natively" for Android) Instructions on how to setup an UCI engine are given at UCI for Android . As far as I know currently only BikJump is available as stand-alone UCI engine for Android. Although stronger than the built-in engine, I hope I will be able to add links to much stronger third party UCI engines soon. Please note that support is still rather basic (elaborate setup, only tested on one engine, GUI does not support engine options, time control restricted to time-per-move, position sent as FEN, making the engine more prone to three-fold repetition, no tournaments, etc.). Nevertheless, I hope it is an interesting start.

UCI Engine on Android

Image
Here is an UCI engine running on a Nexus One in Chess for Android, probing the complete 3- and 4-piece Nalimov endgame tablebases (29.6 MB) from SD card. Here is a screenshot where the UCI engine already reports a mate (using the tablebases), while the internal Java engine only reports a negative score for white given a search tree of depth 9. Steps to make this work are shown at UCI for Android .

More UCI Support for Android

Image
The UCI engine output is now presented in a slightly better format, where information is broken up into individual fields. Also, I have compiled BikJump v2.1 natively for Android, which is more elaborate multi-threaded bitboard-based engine that also supports the Nalimov endgame tablebases (with kind permission from Eugene Nalimov and Andrew Kadatch). I copied a few tablebases into the emulator's SD card and started the engine analysis. As can be seen in the screenshot below, the engine together with the probing code run fine on the Android emulator.

UCI Support for Android

Image
The UCI ( Universal Chess Interface ) protocol defines an open interface between a chess engine and a graphical chess program, which allows chess programmers to focus on their engine rather than GUI details. Many programs on Windows, Linux, and MacOS support the UCI protocol (e.g. ChessBase, Arena, Sigma Chess, Lucas Chess), but as far as I know, no UCI support exists for Android. Even Chess for Android uses a simplified Java port of my own UCI engine BikJump rather than going through the UCI interface. Therefore, I am prototyping UCI support in Chess for Android with the idea that, in the long run, this will allow importing third party engines into the GUI. So far, I added a "kibitzer feature". Any UCI engine binary that has been "natively" compiled for Android (using a compiler that ships with the Android NDK ) can be imported through a file finder dialog, as shown below for a natively compiled version of BikJumpv1.8 running on the Android emulator. Once impor

Chess for Android 2.3

Image
Version 2.3 of Chess for Android has following changes: replay buttons for full game navigation improved draw detection added two levels (longer thinking time) more efficient game storage in memory There are now five on-screen buttons. The first one is: ← : undo button, accepted any time to correct mistakes (even when engine is thinking), discarding all subsequent moves when used during navigation The replay buttons are useful to navigate through a game without discarding any moves. These buttons are only accepted when the engine is not thinking, and work as follows: << : goes to beginning of current game <  : steps back one move >  : steps forward one move >> : goes to end of current game During navigation, all subsequent moves not played yet are greyed out (see screenshot). Playing any move while navigating (including switching sides) discards all following moves (even if the moves matches the subsequent play; use replay buttons to maintain the

Fidelity Electronics Chess Challenger

Image
As long as I am making a trip down to memory lane, I remember how happy I was when I got a Chess Challenger for my birthday in 1981. As a starting young chess player, I certainly learned a lot from playing this computer, and I was thrilled when I had beaten the highest level for the first time. It certainly has sparked my interest in chess programming. After playing for a while, I discovered that if Chess Challenger responsed to e2-e4 with e7-e7 from its random opening book, it could always be beaten at Level 1 through the game shown below. As depicted on the corresponding photo, the Chess Challenger would admit its defeat by flashing all 64 red indicators. [Date "sometimes in 1981"] [White "a much younger Aart Bik"] [Black "Chess Challenger (Level 1)"] [Result "1-0"] 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. Nxe5 Qd4 6. Qh5 Qxe4+ 7. Kd1 Qxg2 8. Qxf7+ Kd8 9. Qxf8# 1-0 Although modern chess software is much more practical, it lacks some

Casio FX-700P

Image
This week I realized that it has been more than 25 years since I learned programming on the Casio FX-700P programmable calculator. This little computer is powered by a 455KHz HD61913 processor and features 2KB RAM, with exactly 1568 bytes available for BASIC programs. Output can be printed with the Casio FP-12 mini thermal printer and programs and data can be saved and loaded using the Casio FA-3 cassette interface. I still use the FX-700P as my desktop calculator, but this week I also tried the printer and cassette interface. The internal battery of the FP-12 was exhausted, so I had to improvise an external battery holder. But after that, the printer still produces those little thermal listings! The FA-3 also still works after all those years, although I could not read my old programs back unfortunately. Time had taken its toll on those old cassettes.

One Deeper Perft for Checkers

I optimized the distributed implementation for 8x8 checkers with a transposition table (but one that stores full board positions to avoid the risk of "hard collisions"). The speed improvement enabled me to compute perft(23) on a cluster of machines in a relatively short time. As before, the table below shows the perft breakdown per move (called "divide") from the start position, but now for depths 21 to 23. move divide(21) divide(22) divide(23) --------------------------------------------------------- 12-16: 52945190026737 243598269855110 1123463594881857 11-16: 53527954221225 246743868125768 1131373985922218 11-15: 44775005468548 209016678583301 984253557821317 10-15: 46574865098865 215412869777867 1000606302770349 10-14: 39822944739732 184865466345796 856779998157523 09-14: 45530585259776 213736468971938 1003310451936358 09-13: 61923979665936 288999100078322 1337748969176591 -------------------------------------------

A Very Short Defeat

Image
I got a kind email from Thorsten Czub , who is very active in testing chess programs in general and, currently, chess programs for Android in particular. He conducted a few tests with Chess for Android running on a Rockchip Android Tablet (600MHz ARM) with Android 1.5 against some programs running on other platforms. Below is a game between Shredder Java running on a Motorola ROKR Z6 (550 MHz ARM) with white and Chess for Android on the tablet with black. [Event "average 30"] [Date "2010.07.08"] [White "Shredder Java"] [Black "Chess for Android"] [Result "1-0"] 1. e4 e5 2. Nc3 Nf6 3. g3 Be7 4. Nf3 Nc6 5. d4 exd4 6. Nxd4 Nxd4 7. Qxd4 O-O 8. e5 c5 9. Qc4 Ne8 10. Bd3 a5 11. O-O Nc7 12. Be3 Ne6 13. Nd5 f5 14. exf6 gxf6 15. Qg4+ Ng5 16. Rfe1 d6 17. Bxh7+ Kxh7 18. Qh5+ Kg7 19. Bxg5 Rf7 20. Bh6+ Kg8 21. Qg6+ 1-0 White will mate soon. Embarrassing how quickly king safety was lost.

Perft for Checkers (yet again)

Rein Halbersma recently posted 8x8 checkers perft results for depth 22 with a request for confirmation (because he uses a hash table, he wanted to make sure no "hard collisions" occur). So I verified his results for depth 22 using a distributed, brute force implementation (no hash tables). The table below shows the perft breakdown per move (called "divide") from the start position for depths 20 to 22. move divide(20) divide(21) divide(22) ------------------------------------------------------- 12-16: 11531470109861 52945190026737 243598269855110 11-16: 11736729175821 53527954221225 246743868125768 11-15: 9515983205474 44775005468548 209016678583301 10-15: 10055597639275 46574865098865 215412869777867 10-14: 8600202424158 39822944739732 184865466345796 9-14: 9698986164172 45530585259776 213736468971938 9-13: 13406062152792 61923979665936 288999100078322 ------------------------------------------------------- 7454503

Android Demo

If your browser supports the video tag, below you will see a short movie of my first Android animation demo. Otherwise you will just see a boring text message. Let me know if this works for you; it seems an interesting new way of presenting features in my Android applications. your browser does not have   video support

Animation on Android

Image
I wrote my first animation on Android! It is actually part of a simple screen tester, where I can inspect the screen size of a device and see different font sizes, colors, and text positions. For fun, I added three moving balls (the circles in the screenshot below), all bouncing between the four screen borders.

Checkers Move Coach

Image
I received an email from Rein Halbersma who suggested an improvement for Checkers for Android by accepting a move as soon as any ambiguity has been resolved. In many cases this enables single click input. I have implemented this request, together with extending the "move coach" to show all valid moves, as illustrated below. Hopefully this new option is useful for people that are learning checkers. Both improvements are available in v2.3 of Checkers for Android.

Board Gradient

Image
Although I like the wooden board textures that I use for chess and checkers, I was never quite happy with the board texture I used for Reversi for Android (some called it a dirty pool table :-). Therefore, I am trying something new in version 2.3. Instead of using a texture, I use a radial gradient on the board, which gives the impression that the board has been placed under a lamp. This new approach also slightly reduces the size of the binary. Let me know what you think.