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

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

Moderators: hgm, Dann Corbit, Harvey Williamson

Forum rules
This textbox is used to restore diagrams posted with the [d] tag before the upgrade.
Milos
Posts: 4018
Joined: Wed Nov 25, 2009 12:47 am

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

Post by Milos » Wed May 11, 2011 5:08 pm

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: 12012
Joined: Wed Mar 08, 2006 7:57 pm
Location: Redmond, WA USA
Contact:

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

Post by Dann Corbit » Wed May 11, 2011 6:56 pm

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: 20923
Joined: Mon Feb 27, 2006 6:30 pm
Location: Birmingham, AL

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

Post by bob » Wed May 11, 2011 7:05 pm

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: 20923
Joined: Mon Feb 27, 2006 6:30 pm
Location: Birmingham, AL

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

Post by bob » Wed May 11, 2011 7:11 pm

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 6:43 pm

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

Post by sje » Wed May 11, 2011 7:40 pm

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: 20923
Joined: Mon Feb 27, 2006 6:30 pm
Location: Birmingham, AL

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

Post by bob » Wed May 11, 2011 8:35 pm

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". :)

User avatar
kranium
Posts: 1915
Joined: Thu May 29, 2008 8:43 am

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

Post by kranium » Wed May 11, 2011 9:02 pm

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 9:19 pm, edited 1 time in total.

User avatar
kranium
Posts: 1915
Joined: Thu May 29, 2008 8:43 am

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

Post by kranium » Wed May 11, 2011 9:07 pm

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!)

User avatar
kranium
Posts: 1915
Joined: Thu May 29, 2008 8:43 am

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

Post by kranium » Wed May 11, 2011 9:37 pm

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: 20923
Joined: Mon Feb 27, 2006 6:30 pm
Location: Birmingham, AL

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

Post by bob » Wed May 11, 2011 10:00 pm

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. :)

Post Reply