Evolution of a Go program

About the development of Moyo Go Studio, software to (help) play the Oriental game of Go. Go is a two-player zero-sum game of perfect information. It is considered much harder than Chess. Currently, in spite of enormous effort expended, no computer program plays it above the level of a beginner.

Wednesday, November 30, 2005

Win - Win

Yesterday, AGA published a nasty bunch of lies about my software. Or, to be exact, not about my software per-sé - it was a FUD article. Fear, uncertainty, doubt. They said that nobody in the cyber-Go world was interested in my software, and that in the eyes of some of my competitors, I am a criminal. The situation is that the GoGoD dudes are friends with Roy Laird, an AGA board member. AGA has refused a Moyo Go review in the past, with the remark that GoGoD objects to using games from their CD, and that GoGoD thinks this is "criminal".

Of course, this is completely legal according to the Berne Convention on Copyright, and it became even ethical, after John Fairbairn of GoGoD said a few times in public (before I used the games on the GoGoD CD) that my software was not only very lousy, he also was afraid it would mess up his computer, that he lost all trust in my software etc. etc. I guess he was pissed off about my refusal to give my software to him, to be sold as part of his GoGoD CD.

I am not well-versed in the politics of the Go world, but I understand that the folks I am the biggest competitor to (e.g. Gobase and GoGod) won't link to me - fair enough - even though GoBase links to every other Go software - giving the impression that Moyo Go doesn't exist. Power-politics of asking distributors not to sell my software is illegal. Colluding with the Go-media to libel and slander a competitor is illegal. And Arno Hollosi's and Morten Pahle's decision of banning me from advertizing, taking the position as judges as to who is right and who is wrong in the dispute between myself and Go game record "appropriators" and punishing me is totally uncalled for. I had half a dozen online retailers eagerly promising to do business with me, Janice Kim even promised to purchase an initial minimum of 30 copies, after reviewing Moyo Go Studio. GoGoD's criminal operations of trying to dominate and monopolize the Go game record market and all software that uses it remind me of a case in Norway recently. A large diary company offered a supermarket a better price if they would stop selling a smaller competitors' products. This backfired in a spectacular way - their sales dropped overnight by 20% and the smaller one's doubled. And a police investigation was launched. GoGoD has told their distributors that I am a criminal (of course, only in their opinion), and that nobody should sell my products or link to me, and they have secured the cooperation of journaille like AGA to "spreak the word".

The FUD GoGoD spread amongst Go software retailers has proven very effective, which presumably has less to do with the "ethical" or "legal" side, but much more with the fact that the GoGoD CD is a hot seller, and that, when given the choice, retailers preferred to sell GoGoD than Moyo Go.

I feared that the AGA article - a vile pack of lies if there ever was one, several people have lodged official complaints with them about the article - would affect sales in a negative manner. Well.. I sold four copies yesterday! That is not "normal" by a long shot. Mr. Laird: The picture above is one I took just now, before going to the post office. On a very good day nowadays, I sell two copies a day. The average is about two or three a week.

I am grateful for the trust put in me by my new customers and I will do my best not to shame it.

Sunday, November 27, 2005

Moyo Go's own Sensei's page :)

After four years of work on Moyo Go Studio, I thought it was time to give it its own Sensei's Library page.

It's a Wiki page, so if you want you can say something nice about Moyo Go in the User Comments :)

Saturday, November 19, 2005

40,000 pro games!

One of the reasons I wanted to have Unicode capability was the fact that I recently found 4,000 professional games not yet in Moyo Go Studio's collection. But the players' names are in Chinese.

Moyo Go's next update (in 24 hours, heaven permitting) will be capable of displaying the CJK languages (when enabled in the Windows setup). Tomorrow I'll make a new pro database update available here which includes those four thousand games. Later, there might be a function available that transliterates Chinese, Korean and Japanese names to their corresponding phoneticized equivalents. I am working on more advanced database- adding filters, like keeping either the phonetic or the native names.

Moyo Go Studio now has by a very wide margin the most pro games on the market.

Friday, November 18, 2005

Tygem, Cyberoro & IGS

On of my customers (his name is Neil Mclean) made importers for the games for the most popular Go servers. I can't thank him enough for that.

I hope he doesn't give his sources to the "competition" ;-D

The only thing left to do for me was to figure out which encoding is used, and to display this correctly in Moyo Go Studio. Behold the result!

Neil also downloaded and donated 21,000 of the strongest Tygem games, so you can imagine how happy I am.

Sunday, November 13, 2005

You Can Only Think Outside The Box When You Know What Lies Outside That Box

Sometimes, the seemingly most logical solution is not the best. I can't think of a software-related example right now but listen to this:

I use a cordless mouse and recently the signal became too weak for it to work properly. My PC stands behind the door in the hallway, so I moved the receiver as much forward as its cables would allow (about a metre), and that helped. The big drawback to that solution was that the thing obstructed the door to the bathroom, and it would be only a matter of time before I would crush it.

So, I moved it half a metre backwards again. But that caused the reception problem to re-appear. The only other option, it seemed, was to change the angle of the thing, so that the radio signals might arrive more advantageously. I know some stuff about antennea and RF signals and I thought it was worth a try. Unfortunately, if didn't help much.

And now we arrive at the "thinking outside the box". The changing of the angle was already a little bit of TOTB, but the real TOTB was when I, in spite of the fact that the empirical facts supported the premisse that "further away equals worse signal", started to remember some more stuff about RF signals. One of the things I remembered was that they have a rather undesirable tendency to inject themselves into other wires. This is why the FDC requires shielding on just about every electronic applicance that might produce some RF (Radiofrequent) signals, so that it can't interfere with other applicances.

Behind my PC (and as far away from my desk as can be) is a bundle of cables that lead all the way to my desk. I thought that if I would place the mouse's receiver on top of that bundle, it would be in an advantageous position to pick up some of the RF energy absorbed by the cables. My theory was that the mouse would radiate some of its energy into the cables near my desk, that the cables would carry this signal to the coil behind the PC, and that putting the receiver inside that coil would allow the receiver to pick up enough signal.

This indeed worked. Instead of placing the transmitter a metre forward, I moved it quite a bit further away (and behind a wall as well) and it solved all problems perfectly. The device wasn't even visible any more.

Of course anyone could have arrived at the same result simply by "exhaustive search" (trial and error) but often a programmer doesn't try a certain thing because it simply doesn't occur to him. It's not that you have all the time in the world to try everything, usually you design something and then implement it.

My point is that in order to achieve true excellence (= solving the problems best), you have to think outside the box, and this cliché can only be fulfilled if one actually knows what's going on outside that box.

Quest for Speed

This is how my CPU utilization graph looks when doing a time-consuming database query. CPU usage is 30% on a 4-CPU machine, meaning that there is some multithreading occuring.

Saturday, November 12, 2005

Corrupted Custom Cursor Conundrum

It's a pity I don't have champagne, because two nasty bugs have been squashed.

Moyo Go uses custom cursors to show what you're doing. When annotating board labels with green letters for example, and you have just put an "A" and a "B" on the board, the cursor is a little hand with a green "C" underneath an outstretched finger, because the next time you click the board, a green "C" will appear.

This is of course highly cool.

For some weird reason however, the cursor, at startup, looked "corrupted". Sometimes. It became partially a fuchsia color, or it got a photo-negative kind of appearance. I looked at my code and it seemed OK.

Little did I know that Delphi's Bitmap Canvas objects were not threadsafe, and that right in the middle of a loop that made the custom cursor's transparency mask, its handle would become invalid!

I solved it by putting a "canvas lock" around the loop.

x64

I can now confirm that Moyo Go Studio works on 64-bit Windows™. I was a little nervous about that - quite a few well-known software packages don't yet. Another thing I can confirm is that MoyoGo works on multi-CPU machines. Also this is a non-trivial thing for multithreaded applications, programs that use multiple threads of execution can work fine on a single CPU but if no care is taken by the programmer, they might "hang" when multiple CPU's are present.

Yet another thing that has been verified to work is running on a machine with more than 3 GB of memory. The only thing I had to do was to get rid of the "Moyo Go needs at least 360 MB to work comfortably" warning, because for some reason having 4 GB of RAM made it think it had almost no RAM to work with. Google Earth has yet to fix this: When I tried to install it it told me that my computer did not have enough memory or a powerful enough CPU, and it refused to install. I suspect it is not an API issue, but due to an assymmetric allocation of NUMA resources.

Monday, November 07, 2005

Kimchi

I am falling in love with Korean culture.

I watched two Korean films recently, Park Chan-Wook's "Old Boy" (or "Oldboy") and Kim Ki-Duk's "Spring, Summer, Autumn, Winter and Spring". These films were awesome.

So I decided to buy a kilo of kimchi (-: Oslo recently got its first Korean toko/restaurant. I'm afraid the peasants here won't give it the time of day though.

Kimchi has been shown in peer-reviewed medical literature to help cure H5N1, Avian Influenza. Nobody knows why. It's "Sauerkraut++", spiced-up fermented cabbage. Lots of good Acidophillus bacteria, and I need those because I have been taking incredibly high doses of antibiotics since the previous millenium. I have a chronic infection in my brain (neuroborreliosis) and anything I can do to ameliorate the bad effects of the antibiotics - especially when it tastes as good as kimchi or natto - is welcome.