Sunday, April 29, 2007

Moyo Go's Pattern System in IEEE

A recent IEEE article (in IEEE Intelligent Systems) mentioned Microsoft's "research" "progress" in computer Go, but failed to mention Microsoft's shameless ripoff of Moyo Go Studio's pattern system.

Even though there are more and more wannabe Moyo Go clones popping up (for the record - I must say that these are done by very talented programmers and generally likable human beings) - so far, none of them has duplicated the pattern system.

Sad how those who publish other people's achievements get the credit. I do a few years of work, Microsoft publishes a paper on it to steal the glory. Complaining with the IEEE and TheRegister.com doesn't help - they are there to make money, not to investigate the truth. It's easier to have a story on how Microsofts' boffins made a stride in comp. Go, than how some bad-at-math, non-Go-playing dude made a stride in comp. Go, and how Microsoft stole the idea from my website and claimed it was theirs.

I realize (especially with my reputation for being "strange") that this sounds highly paranoid, so here is MS's paper on "their" Go pattern system, in which they mention my name a few times, saying that they were "inspired" by my system, and that they "improved" upon it: PDF

Some people say I am "reading too much" in MS's paper - just STFU, will ya. My records show their R&D campus building in Richmond as one of my first customers - they bought TWO copies, and one of the sentences in their paper goes: "These are the same pattern templates as used by de Groot in his Moyogo System
[7]". And that's just about the templates, they also copied the entire principle, the idea and implementation details. Not that I'm proud - I'm pissed off - especially that some clowns call me "paranoid" about it.

Monday, April 02, 2007

Early Optimization Considered Essential

The ink on the previous posting is not yet dry, or a posting appeared on a German Go site: "Moyo Go Studio partially throws the towel in the ring". The intention was honorable though - drawing attention to the precarious situation the software is/was in, in terms of its commercial survivability, as a consequence of illegal/immoral attacks on me and my activities in the comp. Go scene.

Hm.

Switching from semi- full-time to "hobby" isn't exactly "partially giving up", at least not with me, I have done lots of things as a hobby, including writing a commercially available 2D-CAD system that rendered faster than AutoCAD at the time.

Since yesterday, I did two things - fix a customers' PC that didn't want to POST - I made 800 NOK (about 100 Euro) on that - and I hobbied a little on Moyo Go. Programming is so much more fun when you don't rely on it to pay the bills!

Enfin, I just hobbied. I hobbied the translation into C++ of a Object-Pascal class definition that I wrote for the TsumeGo (Tactical Go-problem solving) module. The entire class is done (I mean written in Delphi), and now I'm porting it to C++. I said it before, C is beautiful for applications like TsumeGo.

As to the implentation, I have no idea how it works anymore (I only remember it was a work of either a raving madman or a genius ;-) and besides I optimized it so agressively that even if I did remember the particulars, it would be utterly impossible to map sourcecode back to high-level concepts.

That's not so bad, really, because this class is small and does nothing else but maintaining the board state. It's a black box. All I care about is the absolute fastest means of making and unmaking moves, and getting all state info I require. For the rest, all that matters is documenting the data formats. The thing should get the crap debugged out of it (the first time I will use automated testing, it would be insane to omit that in this case) and from that moment on it will be left untouched forever.

I really mean that, because I spent ages in optimizing the thing. Optimizing early is essential in this case, because otherwise you end up building a henhouse instead of a Gitmo, and you'll have to recycle the henhouse later anyway. Speed is not just part of the spec, it is the spec.

I mean, it's easy to hack up a state machine - what it's easy is to design one that maintains everything I need and is lightning fast. Wist lightning fast I mean as fast as possible. This needs explanation. "As fast as possible" depends on the following:

- choice of algorithm
- choice of language
- compiler optimization

The devil is in the details, however. Many people simply design an algorithm using what they learnt at comp. sci or from a book on algorithms (or perhaps they conjure up something clever), but I work a little differently. I look at the hardware at one end, and the problem at the other end, and I base my algorithm on the strengths of the hardware alone. Nothing else. I don't care about easy of implementation, I don't care about how much RAM is required, I don't care about anything, I just care about using the hardware as clever as possible to achieve the highest possible speed, when speed is requirement #1. In move generators, speed is the only requirement. All things being equal, more speed is better. Nobody cares that the code looks ugly when you make moves twice as fast, (and get high-level tactical data twice as fast) as the closest competitor.

So what did I do - I read the AMD optimization guide for their 64-bit CPU's and I based my design on the strengths of 64-bit processors and the peculiarities of caches, buses, RAM, pipeline stalls, instruction latencies and whathaveyou. I came up with a pretty bizarre solution, ending up with code that looks outlandish and, after optimization, does not look at all like a state machine for Go positions. It basically is a bunch of complex logical operations on a bunch of 64-bit registers. And what it yields is linked lists of chains and their adjacent chains (also empty chains) and their properties. Unique is that it generates Nth-order liberties with breakneck speed. Having access to the number of 4th-order libs at the same speed as other engines maintain the same state minus order-libs will yield an enormous advantage. Hence spending months on a fast state machine. Hell, even if it would take years I would still do it.

I had to switch to C for the TsumeGo engine - nothing else compiles to native 64-bit EXE and optimizes that code to the max. I turned off comments on this blog, to avoid having to explain why JITters and GC suck :-) The reason Java is so popular is mainly because the current generation of comp. sci profs don't understand pointers. The reason C# is popular is because C/C++ sucks at writing GUI-heavvy apps. But you can not, I repeat, can not, write a viable Go engine in those languages. To be viable, you have to be able to control what happens on the hardware level. Example: aligned_malloc and inlined prefetch instructions or NOPs. Is there such a thing in Java or C#? My definition of "viable" is the same as that of the top Chess-engine hackers.

The crux of this monologue is that sometimes, speed is the only requirement. And, perhaps counter-intuitively, you should not first make "something that works" and "optimize later", because you simply can't turn a llama into a leopard. Instead of performing expensive plastic surgery on the llama, go the extra mile to get a leopard.

Saturday, March 31, 2007

Virus reported on MFOG 11 CD

My Avast virus scanner finds the trojan Win32:Trojan-gen.{VC} in dieorlivesetup.exe, a program published by Mr. Lyu shuzhi, 67 Meihuacun, zhongshan rd.1, Guangzhou, China.

This program comes with the Go software I purchased, Many Faces of Go v. 11.

This is the only virus found on all my 13-odd harddisks. I hope the virus checker is wrong!

Saturday, February 10, 2007

Japanese XP Installation Blues

I am the proud owner of no less than four SE Asian OSes. And I never, ever managed, over the past half decade, to install a single one of them, using a virtual machine (VMWare).

What does this screen say? What should I press? F3 gives a red countdown progress bar with another message, followed by a black screen and the inability to re-install.

The only way to repeat the process is to create a new VM.

I am trying different VM's, but so far, no luck.
Parallel Workstation doesn't work on x64, and Microsoft's Virtual PC does not even download. Instead it tries to save a "DownloadDetails.aspx" to my machine. That's using Mozilla. When using IE, I get the error: "This site may be experiencing problems".

Problems indeed. When I click "Help", this happens:

Friday, February 02, 2007

Brute Force and Nailing Jelly to a Wall

Since I am a weak-at-maths, testosterone-producing choleric, I greatly advocate the use of brute force to solve problems.

Don't get me wrong - I don't neccessarily mean physical force against living beings! Although it often helps too.

Example: When I was nine years old (32 years ago), my father put a lock on the door to prevent me from making firebombs with paint thinner and generally to prevent me from using his soldering torch, circle saw, collection of salvaged, formerly-wet firecrackers and other interesting stuff.

I did not see an easy method of opening that lock, when my parents weren't at home. So I used the "brute force" method: Me and a friend went door-to-door with the story that school had a project about keys. I made it all up. The story was that our teacher wanted to show us the differences between cyllinder lock keys and old-fashioned keys, padlock keys etcetera, yada, yada. An whether they could donate, for our educational project, some old, lying-around-in-a-drawer, unused keys.

They swallowed it hook, line and sinker and some got really excited about the thing, thinking it was an excellent idea of our teacher. After two key-scrounging expeditions, we had about two hundred keys. I kept them in an old cigar box. I was lucky that the lock on our attic door was a very cheap generic one and the key extremely simple, because one of the keys we collected fit.

It took my father a couple of years to find out that I had cracked the security on that door. Perhaps he noticed that the flammable liquids ran out too rapidly, and that the gas tank on his torch was usually near-empty.

I was quite a character. I had my own laboratory since I was six, it was another part of the attic, on the opposing side of my room. I did "harmless" experiments there, or so they thought. Just in case, I had placed sensors* at the bottom of the stairs that warned me when my father would sneak up to see what I was doing before I could hide the concentrated nitrous acid, hydrochloric acid and sulphuric acid. If you have that stuff, a selection of metals, some library books from the adult section (I was allowed to borrow adult books in that tiny village library, a right that funnily got revoked half a decade later, after I had read a few thousand books from the adult section) and a friendly pharmacist, you can make just about anything :-)

My parents didn't know, neither did they suspect, that I was synthesizing Nitroglycerine at home without using proper precautions. With hindsight, maybe my parents weren't so bad after all. They didn't deserve to be blown up, that's for sure. I can confirm that the stuff burns with a blue flame. And that you develop terribly painful black crusts on your nose when you try to smell too carelessly what's in an unlabelled bottle of concentrated sulphuric acid and your nose comes into contact with the bottle's rim.

It's off-topic, but fun nevertheless:
http://graeme.woaf.net/otherbits/jelly.html

Initially, my lab was stocked with bits & bobs my father didn't need, like very large 1.5 V batteries that he had stolen from one of his jobs, lots of wire, bolts and smallfry metal thingies. I did electromagnetic experiments with it. And I set steel wool to flames by shortcutting it. I also played with substantial quantities of mercury that I squeezed out of hearing aid batteries with something we call "bankschroef", in Dutch. And I tinkered with magnets. A lot. Soon, I went every Wednesday afternoon, out of school, with my bicycle through the streets in the industrial area to see what kind of electronic equipment companies had thrown away to be collected by the "bulky waste" truck.

What I could use for desoldering to build electronic devices I kept, and more complex stuff that looked expensive I took as well, because I had a much older friend that I traded some of that stuff with. He also bought acids for me when I needed them. Other stuff (like glycerol or aluminium powder and potassium chlorate) I got myself, with a little bluffing. But later they didn't sell any nitrates or chlorates any more, to nobody.

Those were interesting times. Nothing much to boast of, because a while ago, a kid in the US built a nuclear breeder reactor, demonstrating the old adage that persistence outranks talent and intelligence when it comes to achieving success.

*Copper pipe braces that I had hammered flat, used carpet nails to hammer them into the stairs underneath the carpet, flathead pins as contact and let wires run up underneath the carpet, all the way up the stairs and underneath the carpet of my room. A 4.5 V battery and a bicycle lamp were included in the circuit.

Wednesday, January 31, 2007

Nostalgia

The mess on my desk (picture of three years ago - it's much better since I my girlfriend moved in with me and we got a new place) is inversely exponentially proportional to the mess inside the sourcecode of Moyo Go.

I remember a fight I had with my manager, six years ago. He told me - in front of his manager - that my source "wasn't Pascal". He literally said: "What's that - that's not Pascal!". In a tone of: "What's that - that's a giant, man-eating cockroach you smuggled into here!".

Him being a former tractor repairman and a self-taught code hacker, had never seen properly indented code. Not that his auto-didactness matters - I am like that too. One learns (or doesn't..) coding hygiene from decades of experience, I guess. It's a learning-from-one's-mistakes kind of thing. I wrote about coding standards here. I think that my traumatic exposure to RPG II might have something to do with my penchant for columnizing declarations and assignments.

Anyway - In a fit of Lymerage I told him in no uncertain terms that it would be best for the company if he and everyone else would adopt my coding standards. Our mutual boss thought it was all very entertaining and took me out for dinner. Soon afterwards, my chef got promoted away to a place where he couldn't do any harm.

Saturday, January 27, 2007

Moyo Go: "Googling" Go patterns

Speaking of asses, look what I found :-)


Some Go players still don't understand how Moyo Go's pattern expert system works. (When you read that PDF, note that "pattern" is not a move, but a potential move). This is often due to laziness (not reading the Help file). They think they are presented with an "analized position" or that they are getting "the solution to Joseki/Fuseki problems" or that Moyo Go presents them with the "best move".

And then they get very angry, or envious, or frustrated, and then they try to do as much damage as they can, using any possible way they can. Mark Boon, a strong Go player and Go programmer, when I offended his ego, offered 1000 USD for the first person to reverse-engineer MoyoGo's pattern system and throw it in the public domain. Philip Waldron, an even stronger Go player and a strong opponent of computer-assisted Go, said in the AGA eJournal that Moyo Go was nothing special, and should be avoided. And now, someone calling himself "Big Fan Of North Korea" (at least we have something in common) got creative on my ass and is shouting everywhere that he posted this image on the net. As part of my ass-symmetrical warfare against enemy combatants, I repost it here.

So - about Moyo Go's pattern system. It's not like a "scientific calculator". It is a pattern-recognition device (17 million normalized patterns) and a statistical database, for those patterns. Also, it is a hyperfast pattern-matcher (no time delay).

So, you move the mouse over board points and immediately you see browsable diagrams of the same local positions in other people's games, and how popular that move was in terms of statistical move likelihood in the average global context, winning percentages, average rank and -date, etc.

Moyo Go Studio is the "Google" of Go information. It's not a "calculator", it is a superfast, sophisticated search engine. Up to you to make the right searches, and up to you to do something with its information. All Moyo Go does is showing you the most likely moves, you have to judge those moves in their global context and you have to explore the alternatives, with or without using the program's search engine and pattern expert system.

Anyway - it's attacks like these that keep me going :-) Note how buttbuddy talks about "ease of solving Joseki and Fuseki problems". Totally missing the mark. I guess it's easy to misinterpret this kind of software. The idea is new. "Googling" Go game patterns - a revolution in the Go software world.

When Google started, all through its early years, there was a lot of noise about how "What you find on the Internet is mostly useless crap". And how "You can't manage to find what you are looking for, with Google". And how "It's much better to go to the library and find a reliable book about the subject". And "The ease of using Google to find information on the Internet will rot your brain".

:-D

Tuesday, January 23, 2007

Publishing Help

For those beta-testing the currently available Publishing functionality, I have started to provide Help. So far it's only the first page of the intimidating-looking Publishing dialog box, but it offers in-depth info on the nitty-gritty.

Stuff that doesn't work yet is shown in light-grey at the moment.

Sunday, January 21, 2007

The Morality of Banning

Banning is as popular these days as it was in the days of the Inquisition.

In my opinion, the more influential the banner is, the more unethical it is to the banned, if the banned is banned for no other reason than power-politics.

This is valid in case of Sensei's Library, the BGA, GoBase and AGA banning me and my software, but also in case of perhaps the most evil company in the world today - Google.*

Google deliberately deceives us with pre-destruction images of Fallujah, but has now banned http://uruknet.info/ as well, in an attempt of censoring the truth about what happened there - the wholesale slaughter of many thousands of elderly civillians with nerve gas, napalm and white phosphorus.

Of course Google is just following orders, as they did in China. Liberty and freedom are so precious that we lost it before we even fully gained it. There is no such thing as uncensored news. People never learn. Hitler - an Austrian - banned everything and everybody. Another Austrian is now banning me, and has erased all mention of my software on his public Go Wiki. At the moment, it is banned, in Austria, to discuss the historical details about the persecution and dying of the Jews in Austria.

Banning, banning banning, and people never learn. My point: Banning a voice, an opinion, an outlook, banning information is never ethical.

Banning is fascism, plain and simple. When a community leader bans an individual, by that very act, the rest of the community is subjected to fascism (= the use of force) as well.

Strange that Arno Hollosi is Austria's top ePrivacy advisor. He is the country's "people chipper", so to say. Strange that he never learned from the mistakes of his fellow countryman Hitler. When people like him are the masters of our information and censor at will, we should protest, rebel and work on alternatives instead of slavishly accept that we are banned from reading certain information. It's not just one person who is banned, all are banned from being exposed to that person's views.

If we do not defend our liberties, we do not deserve them at all. We get the leaders we deserve, whether they be our elected representatives or those that run the websites we visit.

Banning is in vogue, and because it's sheepishly accepted by 99.999% of people in the "free" West, I predict that we will live under fascism before my generation (1965) dies.

Every single person who accepts censorship of thoughts, information, opinions is not just subjected to fascism, he/she is consenting to it. And the more influential, the more powerful he who bans, the more unethical the crime of banning is.

Fascists usually meet bad ends. Mussolini was found hanging upside down on a meathook. Hitler shot himself. Saddam was hung on a rope. The Shah of Iran was ousted. Not to mention the French, Russian and Cuban revolutions. Yet, we never learn, neither the banners nor the banned-from-reading-the-works-of-the-banned. Without our efforts, tyranny will prevail. They do not want you to know the truth. They do not want you to know that there is an alternative. "They" are puppets, and their masters are those who stand to gain financially from censoring your right of information. "They" are the "morality knights", "they" are those who have the genetical flaw of wanting to control what you think, by controlling what you read. In that respect, the "banners" of today are no better than the Spanish Inquisition of yesteryear. Only the law prevents them from the wholesale slaughter of those who's opinions or actions they don't like.

*If they have no qualms helping to cover up mass-murders and systematic torture by fascist governments, surely they can't be trusted with your name, address and all the searches you ever made? Not to mention the fact that Google has an utter contempt for the law -like Copyright and Libel law.

Order Flurry

Some say one should never decrease one's price, but new technology is always more expensive for early adopters, and the money is invested into further development so that it becomes suitable for mass-production and -sales.

I lowered Moyo Go's price rather spectacularly, and I got five orders in 48 hours as a result. I rather sell a lot for less, than a little for more. It's market penetration that counts, especially faced with massive cyberwarfare against me in the highly corrupt Go-playing West.

Contrary to rumors, I am far from "going out of business", and feverishly finishing the Publishing module and fixing some bugs here & there.

The free version was a strategic decision - a massive strike against my competitors and simultaneously the very best way to get a foothold in SE Asia. Not coincidentally, I released the freeware version on the same day that the last serious bug in support for CJK languages was fixed. We're talking about a blow to the enemy where it hurts hardest - not a sign of "giving up" :-)

More "terror" strikes on competitors will follow, this was just the aperitif of what's in store for them.

Darwinism in the Go Software World

My predictions were right:

http://informationweek.com/news/showArticle.jhtml?articleID=196901935

Intel is working on an 80-core (eighty) CPU and they already have a working prototype.

Let me bitch about SmartGo for a while. When will SmartGo have multithreading? Moyo Go's "Kombilo" (free pattern search) function is multithreaded. SmartGo's isn't. Moyo Go's game import process also is multithreaded. This means that if SmartGo doesn't shape up, it will, in a handful of years, search patterns twentyfive to twohundred times slower than Moyo Go.

SmartGo is following MoyoGo's footsteps in minor things (like export-to-Wiki but it took them a year), but where are the major innovations and technological feats? After having been in business for two decades, one would expect more from them.

I bitch about SmartGo because they're milking my being banned on SL for all it's worth, instead of protesting. On all the spots where Arno deleted mention of my software, SmartGo has now weaselingly added a blurb of their own. My point is, SmartGo needs to do that, because it's all they got. They don't have what it takes to be a technology leader, so they (ex-Microsoft..) have to use power-politics, dirty tricks, demagoguery and "throwing money at problems" instead.

Where would SmartGo have learned that approach ;-)

From the article:

And it needs to change really soon, says Dan Olds, a principal analyst with the Gabriel Consulting Group, Inc. "Every software maker out there -- and this goes not just for business software but for home software, games, everybody -- has got to learn how to program parallel code. They've got to be able to do that to remain competitive. We've got multiple-core chips at the consumer level They better get their butts in gear and make sure they can at least program for quad."

Friday, January 19, 2007

Rakefisk & Lutefisk

That cord I'm holding there is because my significant half commanded me to do it so she could get an unobstructed view out of the window.

That big thing is a 24" CRT monitor, we watch movies on that one.

The scribbles on the old tower (my gf's machine) are the HDD serial numbers, useful for when the RAID suffers a blown out disk.

I am frying Lutefisk now. Lutefisk is raw fish, cured in caustic soda. I think not many people died, after eating it. Contrary to rakefisk, which I also have, in the fridge. Rakefisk is raw, stinking, rotten fish. At least it often stinks. It doesn't have to, though. People have died after eating it, due to botulin toxin, IIRC.

Norwegians do not like things that taste good. Most like things that have no taste (like their "cheese"), and some like things that taste awful, like their various varieties of rotten fish or insanely putrid cheeses. It is still a criminal offence (three months prison) to import Dutch cheese for example, because there are strict, small import quota to protect the "farmers" (= the richest people in this country, the supermarket monopolists).

Norwegian herring filet is disgusting. They use some crazy chemical or herb to make them all taste the same, a horrid, all-purveying taste of I-don't-know-but-it-seems-like-fermented-battery-acid.

Their pickled cucumbers are similarly inedible. The bread is nice though, very nice. Much better than Dutch "bread", haha. Dutch bread is not bread but dissolvable spunge, hardly suitable to feed the fish.

The food situation here is so precarious (both regarding taste and price), that Norwegians have no other choice than to do their shopping in Sweden. Sweden has high prices and little choice, but compared to Norway it's pure paradise.

I just tried the fried Lutefisk. I tastes like the warm snot from someone who died of drinking a bottle of toilet cleaner.

Thursday, January 18, 2007

Danger!

Just like Skype (the most expensive computer program ever - three point five billion dollar - give or take a few hundred million), Moyo Go Studio is written in Delphi.

I'm pretty well-versed in it, having switched to Delphi from C under Unix 15 years or so ago.

But I think this is only the second time I saw this funny error.

It is the result of me fixing the GDI handle consummation bug in that African - sorry, Indian - library. I should work for that guy - I've fixed just about every single showstopper in that thing.

I fixed that bug so here's Kogo with around 666 pages. (50 MB, the images are compressed to 5 kb each but with around ten thousand of them..). Just to prove it works, not because it's such a beautiful piece. Some problems have been fixed, like the non-uniform stone size. Many like to have their stones the same size :-)

A lot more enhancements are pending, for the publishing module, ASAP. To bring it into the realm of the "Professional Go DTP" world. A small realm indeed.

Speaking of danger, I just fixed my car. And I know nothing of cars. Car engines are like artificial hearts, they have lots of hoses connected to them. Some hoses bring air in, some out, some bring oil in, gasoline and there is even a "vacuum" hose, which pumps the vacuum in. Hehe.

That "vacuum hose" was eaten by a mouse. In fact, there was a mouse nest underneath, with dry leaves and all. No sign of the mouse though. I aquired a hose at the cost of zero NOK due to the generosity of the Saab dealer, ripped out the old one and replaced it.

The only problem was that I ripped out another hose as well. Because it was rotten. Against my will, and with nauseating speed, I was entering a world of pain and anguish. The horror of being forced to become a (very low level) car engine mechanic. I hate smelly hoses, soot and stale oil. And I always cut myself when I fumble around in big contraptions.

That hose turned out to be a "breathing hose" (åndeslange) and there wasn't a living soul in Oslo that carried it. Espacially not the biggest Saab dealer. It had to be oil-resistant, heat-resistant and not fold when bent. And it had to be in stock. I finally found a shop with an over-specced braking hose for trucks, and the price was more than ten times cheaper than the non-fitting hose the Saab dealer sold me. Nowadays they only sell pre-packaged, hyper-costly solutions and they don't have a pile of bits & pieces lying around any more. I hate that, in capitalism. We became our own slaves. Instead of being able to work only 20 hours/week, we have to work double because everything is twice as expensive due to the system we made for ourselves "because what's good for the economy is good for us". Yeah. Trade bans (or call it our "quality standards", LOL ) with developing countries made our food horrendously expensive (and of horrendous quality - blemishless, irradiated, genetically-modified, gigantic fruit & veggies loaded with pesticides and devoid of taste and minerals). Noone is more hopelessly enslaved than he who mistakenly believes he's free.

Boy oh boy. I didn't know that owning a car was so expensive. Last week I ruined the exhaust and had to replace some of it for 4000 NOK. I am now in the minus, because Moyo Go sales are about zero, since Sensei's Library boycotted me and I put up a free version.

But at least I'm slowly becoming able to repair simple things myself.

Anyway. About the stack overflow error. Fixing the GDI handle bug in the Bangladeshi - sorry, Indian - lib caused or surfaced another bug, namely the "disappearance" of handles in random places, like the main menu. When publishing huge documents (more than a few thousand diagrams). But at least it's now possible to publish enormous documents with 10,000 diagrams and a thousand pages. In the paid version on DVD. There is no publishing in the free version. If things go wrong, they go wrong after the fact, and the document has been properly produced. All you'd have to do is restart Moyo Go, but of course I'm on this bug too.

Tuesday, January 16, 2007

Other People's Bugs Are My Bugs Too, Unfortunately

Quite a bit of my time is spent on bugfixing, and in many cases, I am bugfixing other people's code, be it 3rd party libraries, the compiler vendor's core libraries, or even the OS itself.

Lately, I've been fixing bugs in all three, and I'll give two examples.

Delphi comes with a core lib called "graphics.pas", and in it was a nasty memory leak in the bitmap handling code that caused GDI handles to disappear. My machine has 4 GB, 4 CPU cores and runs Windows x64, but Microsoft wouldn't be Microsoft if the limit of GDI handles wouldn't be some ridiculously low number, like two to the power of fifteen, minus many thousands. Yes, you read it correctly, the maximum number of GDI process handles in x64 is 10,000. A GDI handle is a font, a brush, a pen or a bitmap canvas etc.

I do not have the time and energy to hunt Bill Gates down like the rabid dog he is, neither would it help much, so I fixed the leak in Bore-land's Delphi instead. Not that this helped, because the 3rd-world (Indian) publishing package I'm using still evaporates GDI handles until the entire document has been printed. The only difference now is that they are returned, after the document has been produced. But a large document still runs into this ridiculous OS limit.

So I paid 11,000 USD for a 64-bit PC with oodles of RAM and a 64-bit OS, but Mr. Gates thinks that fourteen-and-a-half bits should be enough for everybody. Handing him over to Moqtada al Sadr's Mahdi Army would be much too good for the guy. I'll have to provide a very dirty workaround, as everyone has, who tries to do anything serious with a Windoze computer.

Up to the next Windoze bug that I had to fix in order to get my stuff running properly.. Moyo Go is cutting edge software. Everything is Unicode. So it flawlessly supports CJK languages.

Hah! That's what I THOUGHT!

The entire system breaks down when a Japanese user tells Windoze that he'd like Japanese formatting of numbers, currencies, dates etc. He them sets a Japanese "User Locale". And then all bets are off. Suddenly, when you send a Unicode string to a Windoze GUI widget, Windoze refuses to render it properly and turns it into Klingon instead.

Of course, this is a horrendous bug in Windoze, and it has plagued me for a year. Some Japanese customers claimed my app sucked donkeyschlongs, some said it was perfect and sent me presents. It all depended on whether they told Windoze to format their dates in a Japanese way.
Because that destroys the entire Windows' Unicode handling of the entire Operating System.

Cool. At least we found the cause.
The solution is so perverse and weird that you might not believe it (you might not believe anything in this blog posting, for that matter). I'm not even sure I should post the solution here. The enemy is listening too. I will divulge it anyway:

The solution to the bug: "Impossible to display Japanese on a Japanese computer running Japanese Windows with Japanese locale setting" is..

..

(It really is the solution, it has been tested & confirmed by my Japanese customers)

..
..
..
..
..
..

TO FORCIBLY SET THE THREAD LOCALE TO US ENGLISH!

All those billions that Gates gives to charity ain't gonna help him - he will go straight to hell where he belongs.

Tuesday, January 09, 2007

Slate & Shell bans Moyo Go at New Jersey Open

I'm trying to sponsor Go events, (any one with at least 30 participants and a link to my site is elligible), and I was amazed at the honest dishonesty of Rick Mott, organizer of the New Jersey Open and member of the Princeton Go Club:

"I am good friends with the developers of MasterGo and I don't think they would take it kindly if I announced sponsorship by Moyo Go..."

Hm. Amazing how corrupt the AGA has become, and amazing how unashamedly they announce their corruption.

Last summer, Rick Mott said that the AGA is not a democracy, and now we know that he's Slate & Shell's puppet dictator of the Princeton Go Club:

(In a previous posting, I have demonstrated how AGA is infiltrated by Slate & Shell, sellers of MasterGo.)

But regional AGA tournament organizers now announce "I am friends with Chuck Robbins of the Slate & Shell company so our tournament can't accept your sponsorship".

Have the players been asked for their opinion? Don't they pay their dues? Does Rick Mott, as an enforcer of Slate & Shell, decide for his fellow tournament participants what they should be able to win, based on who he is friends with?

So - because the tournament organizer has been told by MasterGo not to accept sponsorship from Moyo Go, he effectively steals a copy of Moyo Go Studio from one of his club's players!

Who's the boss at AGA tournaments? The paying AGA members and their trustworthy representatives - or the Slate & Shell company?

Shame on the AGA for allowing Slate & Shell (accused of having stolen Ing funds to start their company) run their business and shame on you, Mr. Mott, for secretly stealing software from your own paying club members, club members that trust in you, that trust that you won't deny them what is rightfully theirs.

Update: Several AGA-tournament/workshop organizers welcomed my sponsorship, so it looks that Rick Mott is not speaking for AGA but for Slate & Shell only.

Sunday, January 07, 2007

Kogo's on PDF

I've put the entire Kogo's Joseki Dictionary on PDF's here.

It's very cool. With roughly ten thousand diagrams, it takes little over 600 pages.

That's ten times less than DraGo needs for it, and that's with less figures published (for DraGo) as well. I don't want to diminish Drago! Gilles has generously helped me in the past.

I have no idea how much work went into DraGo and GoWrite, but I've been working on this publishing module non-stop since last summer. And it's not ready yet..

This is perhaps even cooler: HTML

Saturday, January 06, 2007

Evolution, People and Technology

Something's wrong. Homo Sapiens has a huge neocortex but a hundred years ago, in spite of having walked around for hundreds of thousands of years with that huge cortex, we were still riding horses and believing in ghosts.

This does not compute. I have a hunch that the theories about a cyclic nature of civilization might be true. Perhaps the Mayans were right and every 12,000 years, something bad happens that causes agriculture to be impossible for generations, like the Earth passing though the Oort cloud and a subsequently ensuing "planet-busting" meteorite bombardment - making us hunter-gatherers again.

There's lots of supporting evidence for this theory (which doesn't mean it's right though). And a lot of weird stuff too. The pyramids were not built 4000 years ago, but they are much older, at least 12,000 years. Because the erosion at the base of the Sphinx is caused by thousands of years of downpoor, not wind.

Why does a "crop circle" tell us that there is "not much time left"? Is that message (in ASCII encoded English in the shape of a binary string!) really a hoax? It appeared next to the radio telescope that sent a message of our race to the stars. In a guarded US military area. A huge, pixelated image of a smiling "grey" with a message in a spiral on a disk, so that we would know where to start decoding (in the center of the spiral). Why does the Mayan calender end in 2012? Why do mainstream archeologists lie to us and tell us that people never lived with dinosaurs? (overwhelming fossil evidence for this). Are those enormous patterns in South American deserts similar "grafitti" as crop circles? (those patterns are made by the removal of larger, dark stones from the first 30 cm of the top layer).

Which hoaxers can make a "crop circle" that has almost 800 circles, many larger than a soccer field, of such an intricate design that if any of the team would have made an error, the entire pattern would have been off kilter? Oh - after heavy rain, in half a metre of mud? Appearing in a few hours, during the day? Why don't those hoaxers never perform their art for a paying TV crew? Surely, as there sometimes appeared fifteen huge, complex patterns per day, there must be at least one hoaxer prepared to step forward and present proof of authorship? (the only "hoaxers" who ever claimed they made hundreds of crop cirlces, two British pensioners, were shamefully exposed as having utterly hoaxed their claim of being hoaxers - they weren't able to make even a small, simple circle - it looked like utter crap and it took them ages. One already admitted having lied, the other one is dead now). And if those circles are secret US space weapons tests, why do they do so many tests in populated areas? The Russians will be able to track their space weapon easily, that way. Oh - and why are flight licenses revoked of military pilots who fly over them? And why are farmers offered thousands of GBP by strangers that come out of unmarked military helicopters to erase them immediately? And why do those erased circles sometimes re-appear in an adjacent field, a few hours later? When patterns have a "message", farmers are offered money to erase them ASAP. And why are we not informed about this, but we are told every detail about Paris Hilton's lacking underwear (although I agree that this is an interesting topic).

Thursday, January 04, 2007

Publishing: Annotated diagrams

I'm still working on a good way to distinguish variations.

Added is annotation for published diagrams.

Please note that this is a preview, the currently selling version does not yet include publishing (printing, HTML upload etc.) yet but it soon will (and then a freely downloadable update will get you the extra functionality).

I read on godiscussions.com that when using other software to print Kogo's to PDF that the result is a 6,000-page monster. Not when using the publishing feature of Moyo Go - the example here has 19 diagrams on one standard A4 page and it's very readable. Kogo's is below a thousand pages, when printed with Moyo Go. It's possible even to do it in a few hundred pages only.

Tuesday, January 02, 2007

Auto-Cropping Diagrams (Publishing Preview)

Jure Jerkovic asked for this and although it was on my to-do list already, I had forgotten the GUI part. Now it's done.

You can specify how many board edges have to be visible at a minimum, how many empty lines around a position, and the minimum width and height of a position (in board points).

This is one page from Kogo's Joseki Dictionary. A huge (20 MB), 168-page PDF with thousands of diagrams of the entire Kogo's 4-4 Joseki is here, a diagram outputted for every comment.

The diagrams in this example are still crude, but it shows how robust the system is.