Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

Milos
Posts: 4190
Joined: Wed Nov 25, 2009 1:47 am

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by Milos »

bob wrote:Many have posted the comment here that clearly ip*/robo* was reverse-engineered due to the very bizarre programming style, the inability of the 'copiers" to understand the code and use reasonable variable names, etc...
Seams moderation is removing "nasty" questions, so I'll repeat it.
Original Ippo code is in Russian.
Do you really understand Russian that well to claim that variable names are unreasonable for someone actually programming in Russian???
Or you also take an anglocentric view of the world where any programming in any language different than English is unreasonable???
Dann Corbit
Posts: 12541
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by Dann Corbit »

Milos wrote:
bob wrote:Many have posted the comment here that clearly ip*/robo* was reverse-engineered due to the very bizarre programming style, the inability of the 'copiers" to understand the code and use reasonable variable names, etc...
Seams moderation is removing "nasty" questions, so I'll repeat it.
Original Ippo code is in Russian.
Do you really understand Russian that well to claim that variable names are unreasonable for someone actually programming in Russian???
Or you also take an anglocentric view of the world where any programming in any language different than English is unreasonable???
It was a strange mix of Russian and Italian, as I recall.
It has nothing to do with the variable names (which, for the most part, are fairly obvious anyway) and everything to do with the format of the constructs.

If you do not think that reverse engineering was somehow involved in early IPPO* programs, then I do not know what anyone can possibly say to you. Did you even look at the code?
bob
Posts: 20943
Joined: Mon Feb 27, 2006 7:30 pm
Location: Birmingham, AL

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by bob »

Milos wrote:
bob wrote:Many have posted the comment here that clearly ip*/robo* was reverse-engineered due to the very bizarre programming style, the inability of the 'copiers" to understand the code and use reasonable variable names, etc...
Seams moderation is removing "nasty" questions, so I'll repeat it.
Original Ippo code is in Russian.
Do you really understand Russian that well to claim that variable names are unreasonable for someone actually programming in Russian???
Or you also take an anglocentric view of the world where any programming in any language different than English is unreasonable???
I am not talking about "language". You never seem to be able to get the point, in any discussion, so maybe you need some language help. The point was the _name_ of the variables. In Crafty (or other programs) you might see names like doubled-pawn, isolated-pawn, weak-pawn, etc. Not scores like pawn_score_01, pawn_score_02 and such. It isn't the language, it is the names.

And, of course, there is the programming style, which also has zero to do with the language the author speaks. C is C is C. Nobody writes code as is seen in ip*/robo*. If you have no programming background, you might not understand this since any program would look like gibberish. But to those of us that have been writing programs (and assemblers and compilers) for many years, what those programs are is quite obvious.
bob
Posts: 20943
Joined: Mon Feb 27, 2006 7:30 pm
Location: Birmingham, AL

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by bob »

Dann Corbit wrote:
Milos wrote:
bob wrote:Many have posted the comment here that clearly ip*/robo* was reverse-engineered due to the very bizarre programming style, the inability of the 'copiers" to understand the code and use reasonable variable names, etc...
Seams moderation is removing "nasty" questions, so I'll repeat it.
Original Ippo code is in Russian.
Do you really understand Russian that well to claim that variable names are unreasonable for someone actually programming in Russian???
Or you also take an anglocentric view of the world where any programming in any language different than English is unreasonable???
It was a strange mix of Russian and Italian, as I recall.
It has nothing to do with the variable names (which, for the most part, are fairly obvious anyway) and everything to do with the format of the constructs.

If you do not think that reverse engineering was somehow involved in early IPPO* programs, then I do not know what anyone can possibly say to you. Did you even look at the code?
Obviously not. Structure is one thing. The rather simple names and constants are a dead giveaway. For example, who dimensions arrays using hex subscripts? Who does this:

Code: Select all

UINT32 otsMAT[16] = {
  0, (&#40;0 & 0xff&#41; | &#40;0x1440 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x240 << 8&#41;), 0, (&#40;1 & 0xff&#41; | &#40;0x24 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x48 << 8&#41;), (&#40;3 & 0xff&#41; | &#40;0x04 << 8&#41;), (&#40;6 & 0xff&#41; | &#40;0x1 << 8&#41;),
  0, (&#40;0 & 0xff&#41; | &#40;0xb640 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x6c0 << 8&#41;), 0, (&#40;1 & 0xff&#41; | &#40;0x90 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x120 << 8&#41;), (&#40;3 & 0xff&#41; | &#40;0xc << 8&#41;), (&#40;6 & 0xff&#41; | &#40;0x2 << 8&#41;)
&#125;;
That is one big constant. why 0x1440<<8 and not 0x144000??

:)

The list goes on and on... One only has to look at the code...
User avatar
sje
Posts: 4675
Joined: Mon Mar 13, 2006 7:43 pm

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by sje »

bob wrote:Obviously not. Structure is one thing. The rather simple names and constants are a dead giveaway. For example, who dimensions arrays using hex subscripts? Who does this:

Code: Select all

UINT32 otsMAT&#91;16&#93; = &#123;
  0, (&#40;0 & 0xff&#41; | &#40;0x1440 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x240 << 8&#41;), 0, (&#40;1 & 0xff&#41; | &#40;0x24 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x48 << 8&#41;), (&#40;3 & 0xff&#41; | &#40;0x04 << 8&#41;), (&#40;6 & 0xff&#41; | &#40;0x1 << 8&#41;),
  0, (&#40;0 & 0xff&#41; | &#40;0xb640 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x6c0 << 8&#41;), 0, (&#40;1 & 0xff&#41; | &#40;0x90 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x120 << 8&#41;), (&#40;3 & 0xff&#41; | &#40;0xc << 8&#41;), (&#40;6 & 0xff&#41; | &#40;0x2 << 8&#41;)
&#125;;
That is one big constant. why 0x1440<<8 and not 0x144000??
That looks like someone ran some C/C++ source through the preprocessor and then placed the output into a new source file. There is no reason to do this other than to obfuscate the code. But why?
bob
Posts: 20943
Joined: Mon Feb 27, 2006 7:30 pm
Location: Birmingham, AL

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by bob »

sje wrote:
bob wrote:Obviously not. Structure is one thing. The rather simple names and constants are a dead giveaway. For example, who dimensions arrays using hex subscripts? Who does this:

Code: Select all

UINT32 otsMAT&#91;16&#93; = &#123;
  0, (&#40;0 & 0xff&#41; | &#40;0x1440 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x240 << 8&#41;), 0, (&#40;1 & 0xff&#41; | &#40;0x24 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x48 << 8&#41;), (&#40;3 & 0xff&#41; | &#40;0x04 << 8&#41;), (&#40;6 & 0xff&#41; | &#40;0x1 << 8&#41;),
  0, (&#40;0 & 0xff&#41; | &#40;0xb640 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x6c0 << 8&#41;), 0, (&#40;1 & 0xff&#41; | &#40;0x90 << 8&#41;), (&#40;1 & 0xff&#41; | &#40;0x120 << 8&#41;), (&#40;3 & 0xff&#41; | &#40;0xc << 8&#41;), (&#40;6 & 0xff&#41; | &#40;0x2 << 8&#41;)
&#125;;
That is one big constant. why 0x1440<<8 and not 0x144000??
That looks like someone ran some C/C++ source through the preprocessor and then placed the output into a new source file. There is no reason to do this other than to obfuscate the code. But why?
It also looks like one compiled the preprocessor output, took the resulting assembly code, and decompiled it to produce C again. Most likely many of those "constants" were #defined in the source, but replaced by the resulting values during the preprocessing stage.

Nobody writes source like that, as I said. And that is not the ugliest thing you will find in ip*, that is just near the top...

things like 3 & 0xff? :) could have used "3". :)
kranium
Posts: 2129
Joined: Thu May 29, 2008 10:43 am

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by kranium »

bob wrote:
And, of course, there is the programming style, which also has zero to do with the language the author speaks. C is C is C. Nobody writes code as is seen in ip*/robo*.
Yes of course Bob...

The Ippo &#1100; code is clearly unlike anything you have seen previously (or could have imagined in your limited classroom)
I get your drift...if you are unfamiliar with it, or don't understand it,...it's illegitimate.
(yes this has been happening for centuries, people criticize and reject what they don't understand...)

I propose to you that there exist many ways to do things in this world with which you are unfamiliar...
(PS - accepting that fact is the 1st step to maintaining a healthy sense of humility)

The Ippolit web site does have a detailed description:

http://ippolit.wikispaces.com/%D1%8C+code

* &#1082;&#1086;&#1088;&#1077;&#1085;&#1100;(&#1085;&#1080;&#1078;&#1077;,&#1085;&#1072;&#1076;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;)&&#1076;&#1074;&#1080;&#1075;&#1072;&#1089;&#1087;&#1080;&#1089;&#1086;&#1082;(&#1082;&#1086;&#1088;&#1077;&#1085;&#1100;)^&#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1103;(&#1082;&#1086;&#1088;&#1077;&#1085;&#1100;)
< &&#1088;&#1072;&#1089;&#1087;&#1086;&#1088;&#1103;&#1078;&#1072;&#1090;&#1100;&#1089;&#1103; |
< || &#1086;&#1089;&#1085;&#1086;&#1074;&#1072; |
[ [ %% ] + [ &#1075;&#1083;&#1091;&#1073;&#1080;&#1085; > 2 ] ]
%&#1088;&#1077;&#1079;&#1072;&#1090;&#1100;/&#1085;&#1080;&#1079;&#1082;&#1086;&#1075;&#1086;#(-&#1085;&#1080;&#1078;&#1077;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;-2+&&#1096;&#1072;&#1093;)^{ &#1073;&#1080;&#1090;&#1074;&#1072; + !&#1087;&#1088;&#1086;&#1089;&#1090;&#1086; } ^
%&#1087;&#1074;(-&#1085;&#1080;&#1078;&#1077;-1,-&#1085;&#1080;&#1078;&#1077;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;-2+&&#1096;&#1072;&#1093;,&&#1096;&#1072;&#1093;) ^ %&#1087;&#1074;(-&#1085;&#1072;&#1076;,-&#1085;&#1080;&#1078;&#1077;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;-2+&&#1096;&#1072;&#1093;,&&#1096;&#1072;&#1093;)
\ %&#1087;&#1074;(-&#1085;&#1072;&#1076;,-&#1085;&#1080;&#1078;&#1077;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;-2+&&#1096;&#1072;&#1093;,&&#1096;&#1072;&#1093;) |
[ (&) > %% ]# ![ [ %% ] + [ (&) <= &#1085;&#1080;&#1078;&#1077; ] ] [ &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1103;&#1090;&#1100; | [ (&) >= &#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1080;&#1081;-25 ] &#1075;&#1086;&#1076;&#1085;&#1099;&#1081; \ &#1087;&#1083;&#1086;&#1093;&#1086;&#1081; ] |
[ (&) > &#1085;&#1080;&#1078;&#1077; ]# \ [ !&#1089;&#1095;&#1077;&#1090; ] &#1087;&#1083;&#1086;&#1093;&#1086;&#1081; |
[ (&) >= &#1085;&#1072;&#1076; ] %%! | &#1089;&#1095;&#1077;&#1090; > |
&#1088;&#1072;&#1089;&#1087;&#1086;&#1088;&#1103;&#1078;&#1072;&#1090;&#1100;&#1089;&#1103; |
>
Last edited by kranium on Wed May 11, 2011 11:19 pm, edited 1 time in total.
kranium
Posts: 2129
Joined: Thu May 29, 2008 10:43 am

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by kranium »

Here are the Search functions:
http://ippolit.wikispaces.com/%D1%8C+code+Search

and the Eval functions:
http://ippolit.wikispaces.com/%D1%8C+code+Eval

I guess that after they sinisterly decompiled and illegally 'copied' Rybka...they decided to translate everything into Russian, Italian, English, and &#1100; code as well in a gargantuan effort to hide their tracks...

then amazingly enough, and completely unexplicably, they 'luckily' ended up with an engine substantially stronger than Rybka 3!
and with a excellent proprietary tablebase solution to boot!

and without any of Rybka's features...!
no SMP,
no UCI options,
no multiPV
no Ponder..
etc..
etc..

(if this is actually what happened they deserver a Nobel prize for ingenuity, perseverance, technical ability, and end result!)
kranium
Posts: 2129
Joined: Thu May 29, 2008 10:43 am

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by kranium »

kranium wrote: BTW-
where did the 'sort' routines in Crafty come from?
did you invent them? just curious...
bob wrote: No, I didn't invent the bubble sort. No, I didn't invent bitboards.
Some time ago, (and over and over...ad nauseum):
bob wrote: Again, find _any_ CODE copied into crafty. Alpha/beta is not simple. The idea is there. Code is 100% original.
Jeez...
:shock:

"Born a saint, die a sinner – born a sinner, die a saint."
?
bob
Posts: 20943
Joined: Mon Feb 27, 2006 7:30 pm
Location: Birmingham, AL

Re: Houdini, Fire, IvanHoe, (and Rybka?) are 'clones'...?

Post by bob »

kranium wrote:
bob wrote:
And, of course, there is the programming style, which also has zero to do with the language the author speaks. C is C is C. Nobody writes code as is seen in ip*/robo*.
Yes of course Bob...

The Ippo &#1100; code is clearly unlike anything you have seen previously (or could have imagined in your limited classroom)
I get your drift...if you are unfamiliar with it, or don't understand it,...it's illegitimate.
(yes this has been happening for centuries, people criticize and reject what they don't understand...)
Time to grow up a bit. It is not about "not understanding the code." It is about understanding that it was _not_ written by a human, in that form. You might have trouble understanding C or asm. I don't... Never have, in fact...




I propose to you that there exist many ways to do things in this world with which you are unfamiliar...
(PS - accepting that fact is the 1st step to maintaining a healthy sense of humility)

The Ippolit web site does have a detailed description:

http://ippolit.wikispaces.com/%D1%8C+code

* &#1082;&#1086;&#1088;&#1077;&#1085;&#1100;(&#1085;&#1080;&#1078;&#1077;,&#1085;&#1072;&#1076;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;)&&#1076;&#1074;&#1080;&#1075;&#1072;&#1089;&#1087;&#1080;&#1089;&#1086;&#1082;(&#1082;&#1086;&#1088;&#1077;&#1085;&#1100;)^&#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1103;(&#1082;&#1086;&#1088;&#1077;&#1085;&#1100;)
< &&#1088;&#1072;&#1089;&#1087;&#1086;&#1088;&#1103;&#1078;&#1072;&#1090;&#1100;&#1089;&#1103; |
< || &#1086;&#1089;&#1085;&#1086;&#1074;&#1072; |
[ [ %% ] + [ &#1075;&#1083;&#1091;&#1073;&#1080;&#1085; > 2 ] ]
%&#1088;&#1077;&#1079;&#1072;&#1090;&#1100;/&#1085;&#1080;&#1079;&#1082;&#1086;&#1075;&#1086;#(-&#1085;&#1080;&#1078;&#1077;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;-2+&&#1096;&#1072;&#1093;)^{ &#1073;&#1080;&#1090;&#1074;&#1072; + !&#1087;&#1088;&#1086;&#1089;&#1090;&#1086; } ^
%&#1087;&#1074;(-&#1085;&#1080;&#1078;&#1077;-1,-&#1085;&#1080;&#1078;&#1077;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;-2+&&#1096;&#1072;&#1093;,&&#1096;&#1072;&#1093;) ^ %&#1087;&#1074;(-&#1085;&#1072;&#1076;,-&#1085;&#1080;&#1078;&#1077;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;-2+&&#1096;&#1072;&#1093;,&&#1096;&#1072;&#1093;)
\ %&#1087;&#1074;(-&#1085;&#1072;&#1076;,-&#1085;&#1080;&#1078;&#1077;,&#1075;&#1083;&#1091;&#1073;&#1080;&#1085;-2+&&#1096;&#1072;&#1093;,&&#1096;&#1072;&#1093;) |
[ (&) > %% ]# ![ [ %% ] + [ (&) <= &#1085;&#1080;&#1078;&#1077; ] ] [ &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1103;&#1090;&#1100; | [ (&) >= &#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1080;&#1081;-25 ] &#1075;&#1086;&#1076;&#1085;&#1099;&#1081; \ &#1087;&#1083;&#1086;&#1093;&#1086;&#1081; ] |
[ (&) > &#1085;&#1080;&#1078;&#1077; ]# \ [ !&#1089;&#1095;&#1077;&#1090; ] &#1087;&#1083;&#1086;&#1093;&#1086;&#1081; |
[ (&) >= &#1085;&#1072;&#1076; ] %%! | &#1089;&#1095;&#1077;&#1090; > |
&#1088;&#1072;&#1089;&#1087;&#1086;&#1088;&#1103;&#1078;&#1072;&#1090;&#1100;&#1089;&#1103; |
>
And what a crock that web site is. :)