Programmer code of honor (update)

Discussion of chess software programming and technical issues.

Moderator: Ras

lucasart
Posts: 3241
Joined: Mon May 31, 2010 1:29 pm
Full name: lucasart

Re: Programmer code of honor (update)

Post by lucasart »

diep wrote:Lucas don't pla ythe idiot here.

At 1997 a programmer offered me source code of another program that he 'had found'. I declined doing that. But i know he also offered that same program to others.

At university 1 fellow student at the time was so honest to give me back a floppy disk that had my source code - i had forgotten it.

At 2002 world champs i lost track of a cdrom that had diep's source code. At the end of the world champs i found it back...

At the time i found that innocent...

The USCL server guys were known some years ago for hacking other persons computers that played at their server. Basically every chess server has this feature to hack you.

Shredder classic is not the only program to also install some updater. In fact mcafee doesn't detect it. It can transfer files. When i asked Stefan: "can you grab any file with that from anybody's computer?", the answer was: "well it's windows!"

Don't play the fool. This is all guys who are not exactly stupid, there is a billion ways to obtain source codes and some have an entire GUI with that possibility to see and do anything at your computer. Originally usually meant to detect cheaters at for example chess server, or meant as an update proces of your computer, but it can also used for other purposes...

The whole question is: do YOU want to do that?

The fact you play the fool here means obviously that you're a pretender.

Well i'm not, i'm not doing this nor pretending to be a baby who knows from nothing, unlike you.

Grabbing your information and hacking any router at your location is the core business of companies like google and facebook. Most guys who wrote a chess program one day work at such companies you know...

They're not beginners. the whole point is - some are doing it. Those guys i think as being moral lower standards. But yeah, that's how you quickly can build a strong beancounter - let's face it. Having all those little tricks at your availability means you aren't busy losing those 15 years trying to invent them.

If you don't dope in cycling, you won't even make it into the tour the france. Some go further than others. Most are using EPO type drugs.

At a certain time what was the case is that all the cyclists were woken up every 2.5 to 3 hours, every night, by their trainers. then they had to do exercises.

From what i understand is that if you train with epo type substances that your blood gets very thick. So if you fall asleep for a long time, you could die.

they all got awoken every max 3 hours. Every single cyclists. The French at a certain year found it that ugly that they thought they should undertake action against this.

That's what they did do.

If we compare computerchess with such practices, then computerchess has been relative safe.

but doing as if it's entirely clean is a pipe dream and always will be.

It's up to you to decide how you want to build your own engine. Clean, or by means of stealing and debugging. It's obvious what path i chose there.

But yeah there is 1 thing i have to warn you for: something that works genius for the debugging type guys, they not soon publicly talk about.

So if you miss THAT thing, you'll suddenly face years of being behind, until you figure out the truth there.

That's why a few psychopaths and guys with little morals past few years did do so well. They had information, usually used illegal by them, how to improve what most talented chessprogrammers didn't know.

That explains several of todays 'top engines'. We simply have seen that if such things are available illegally in source code that more guys are clandestine trying to build a top engine. It makes sense yet it's bad.

Denying that this happens is like denying that any cyclists has been using EPO.

Oh by the way the new EPO is called AICAR. It gets swallowed with another trainings drug together. In contradiction to EPO there is no way of detecting it yet. It's expensive though, so only for world top interesting.

We'll see new world records this olympics - i'm counting on it.

Would you train with it then?
1/ OK on the hacking stuff, I'm ready to believe you. The point is that I have very little knowledge of network related programming, and I'm sure Windows is a real swiss cheese. Thinking that programmers of commercial GUIs can be dishonest enough to introduce these malicious features to spy on the user and steal his code, seems a bit of a stretch, but after all that's what all big corporations who develop proprietary software do (not just Microsoft and Apple). And generally people who make proprietary software (don't want to give their code) and view all this as a competition, instead of a community are not to be trusted. So yes, I can believe you on that.

2/ For you chess programming is about doing your own stuff, sharing it with no one, and sharing is theft. For me, it's not a competition, and I am an advocate of the free software point of view. All source code should be shared, and proprietary software is the path to all evil. So I am happy for anyone to use all the ideas they can find in my engine, and even code (so long as they respect the GPL and thereby propagate the freedom), just as I was happy to found all the ideas I used in various articles on internet, and in other source codes.

The level of chess programming could not have been anywhere near what it is today, if people were like you and your fellow developpers of proprietary software who think that sharing is bad, and chess is a competition between secret recipies. If it wasn't for Fruit 2.1's source code, you would never have seen such a jump in all commercial and open source engines at the time, and the same can be said about Ippolit or Glaurung/Stockfish.

So let's agree to disagree, as our points of view are essentially irreconciliable.
User avatar
mhull
Posts: 13447
Joined: Wed Mar 08, 2006 9:02 pm
Location: Dallas, Texas
Full name: Matthew Hull

Re: Programmer code of honor (update)

Post by mhull »

Rebel wrote:http://www.top-5000.nl/programmer_code.htm

So far 18 programmers subscribed to the code. Thanks all those who support the initiative.

Still a lot of names are missing and I want to collect the objections in order to investigate if the code needs an update.

So please contact me by email, PM or put your objections here.

Thanks.

Ed
This won't work. Here's why using your (i.e. CW's) current method of attack:

1) If a signatory makes himself number one by violating the agreement, the accusations will never stick because they'll be written off as professional/financial jealousy.

2) You'll never prove it because the cheater can pull a Vasik and lose his code. You'll never see the code, and you won't disassemble it because you think that's RE which is either against the law or unethical.

3) In any event, Chris Whittington won't let you enforce the rules ( because rules are for fools ).
Matthew Hull
tpetzke
Posts: 686
Joined: Thu Mar 03, 2011 4:57 pm
Location: Germany

Re: Programmer code of honor (update)

Post by tpetzke »

All source code should be shared, and proprietary software is the path to all evil.
I don't agree here. If I write a piece of source code, it is mine. I can do whatever I want with it. Print it, read it, burn it or even compile it. I find the idea of people demanding to give it away because in their view it belongs to all people very disturbing.

I was raised in the former eastern part of Germany and heard enough of this "La propriété, c'est le vol!" type of stuff. So I'm done with that.

Sometimes I just like to call things my own.

Thomas...
SuneF
Posts: 127
Joined: Thu Sep 17, 2009 11:19 am

Re: Programmer code of honor (update)

Post by SuneF »

mhull wrote: This won't work. Here's why using your (i.e. CW's) current method of attack:

1) If a signatory makes himself number one by violating the agreement, the accusations will never stick because they'll be written off as professional/financial jealousy.
I consider this more of an ethical debate than an attack against anyone.
I wouldn't be surprised if a large part of the top 10 engines use disassembling as their main "source of inspiration", there are even those who talk about it as though it is the most natural thing in the world.

My impression is that it's probably also one of the fastes ways, if not the only way, to get a top engine without deriving from others. Afterall who can deny that two brains are better than one.
mhull wrote: 2) You'll never prove it because the cheater can pull a Vasik and lose his code. You'll never see the code, and you won't disassemble it because you think that's RE which is either against the law or unethical.

3) In any event, Chris Whittington won't let you enforce the rules ( because rules are for fools ).
Proving is hard with or without disassembling. But there is also quite a bit of difference between using RE selfishly to improve your own engine and using RE as a tool to expose a suspected cheater when he can't or won't let the sources be inspected...
diep
Posts: 1822
Joined: Thu Mar 09, 2006 11:54 pm
Location: The Netherlands

Re: Programmer code of honor (update)

Post by diep »

Rebel wrote:
Uri Blass wrote:
Rebel wrote:Lemme clarify my position instead of answering each one of you.

I consider RE as stealing and since a couple of years I have the EU law on my side. It's really simple, if a programmer wants to reveal his secrets he will offer the source code with the executable. Therefore it's unethical to RE the executable without the consent of the programmer.

The programmer code is about ethical behaviour and RE does not fit into that whether the grey areas of the Law allows it or not as you are doing things against the express wish of the programmer.

Bottom line: invent your own ideas, don't steal them.

Too harsh ?
only to make things clear
Do you agree with the following?

1)Looking at the output of houdini or other programs by giving them to analyze chess positions in order to learn what they do is not what you consider as RE.
I see no problem with that. We use the output of other engines all the time via eng-eng matches.
2)If other people already did the demage and released source code that is free for download and nobody cared to stop them on time (the Ippolit case) then people who look at the relevant source and are not responsible for generating it are not quilty.
Nasty one Uri, but a good one. Assuming Ippolit is derived from Rybka after all it's like you say, the damage is already done and is irreversible. From a practical point of view I suggest everybody should use it (equal chances for everyone) but mention the things you take in the README if they are not in the CPW or are not common knowledge (in the meantime).
So if a consultant steals the Nightwatch from Rembrandt van Rijn, i happen to meet the guy somewhere, then i'm allowed to legally obtain that painting and put it on the wall here?

(note that in this case stealing the Nightwatch would mobilize automatically the entire Dutch Army and an official declaration of war against those stealing it can be expected, but that's another aspect less relevant here now).

Why did you write that of 'code of honor' if you have no moral objections against healing?

I feel HGM overestimates the value of what you wrote down...
diep
Posts: 1822
Joined: Thu Mar 09, 2006 11:54 pm
Location: The Netherlands

Re: Programmer code of honor (update)

Post by diep »

Rebel wrote:
hgm wrote:Then this code of honor is not even fit for toilet paper. Damage is ONLY done by the publication of a stolen piece of RE work IF people use it / the ideas in it. If everyone would ignore it there would be no damage at all.

It is the users of REed information that are causing the damage, not those doing the RE.

I propose we rename it to 'code of hypocricy'...
I am sure you are aware there are problems in this world for which there is no perfect solution. If you want perfect solutions move to Utopia Island. In the meantime those who stay may suggest constructive alternatives.
Signing the code of honor is your Utopia?
diep
Posts: 1822
Joined: Thu Mar 09, 2006 11:54 pm
Location: The Netherlands

Re: Programmer code of honor (update)

Post by diep »

hgm wrote:
Rebel wrote:But of course the real hypocrisy of the (unsolved) Ippolit matter is that are those who suggest practical solutions that are open for debate and those who are standing at the side-line yelling hypocrisy and offering nothing at all.
There is no hypocrisy in that at all. "Offering nothing" can be an incredibly superior offer compared to tainting your integrity by promoting immoral or criminal 'solutions' aimed at turning a blind eye to injustice. If slavery offends your sense of justice, just agree on it that these people have no soul anyway.. To feel happy in the face of genocide, just declare that these are not people... To such 'solutions', no matter how practical, I say 'no, thank you'. Infinitely better to leave the problem unsolved, so that one day perhaps a true solution will emerge.

People who RE and publish code are thiefs.
People that knowingly use such stolen code are fences.

Both are criminals.

It is as simple as that. There is no honor in waving away theft just because it suits your purpose. This thread is a joke...
I fully agree with you - see my response also when Ed did do his first posting. In most first world nations right now there is, as a result of what happened in 2008-2009 and still going, quite some general upset about what many bankers and financials did do.

Basically they have to sign 5 secrecy clauses and swear an oath to be objective and not cheat customers (my own words), yet most of them are the biggest crooks on planet earth and i'm your witness there. Most people are pretty upset about those who on paper are legally allowed to work there are in fact the biggest crooks. The bigger the crook the easier he signs such paper.
lkaufman
Posts: 6255
Joined: Sun Jan 10, 2010 6:15 am
Location: Maryland USA
Full name: Larry Kaufman

Re: Programmer code of honor (update)

Post by lkaufman »

diep wrote:
lkaufman wrote:
diep wrote: Larry, from all people in the world, i'm the last to even have time to reverse engineer anyone. First of all i'm one of those who invented a bunch of algorithms himself and several of my tricks boosted the elo of Rybka, therefore also the rybka clones.

And no i didn't like that.

To give one example of what i invented somewhere start 21th century and which i used in Diep for nullmove:

if( static eval >= beta + S ) then R = R+1;

I'm the one inventing that. I never had the machine power to test whether it worked well at bigger search depths. First of all diep never got those depths.

I just put it in Diep and for example world champs 2004 and onwards i played with it.

How did it end up in Rybka?
I don't know. Someone illegally took it over from me obviously.

In end 90s i invented extension, for some who were around back then, tactics was important mid 90s. It solved lots of tactical positions back then for Diep. Realize back then Diep got just a few plies. So did nearly everyone. Crafty got bigger depths end 90s, but didn't see anything tactical (cheapo quiescencesearch).

One extension i used there to big effect, it's very interesting to mention that 1 year after i put it into effect, that suddenly Rebel also had this extension.

I never posted about it.

Oh rybka rybka. How surprisingly. Ordering in root. Whether it delivers elo i don't know, as i never did do it differently since mid 90s, but how i order moves there, that's also how Rybka 3 is doing it. Not sure whether the clones took it over from rybka3 - didn't check. I never posted this anywhere.

Oh back onto Ivanhoe. It's doing up to a ply or 9-10 futility potentially.
Practical most futility will happen last 3-4 ply or so.

As it's exponential bonus to search depth, it will keep reducing of course and win plies.

It's total trivial that doing this futility to 9 deep loses elo.

It's needless to say that loses massive elo. I never understood all those guys doing futility. In Diep i can't use it at all. If you want to do something,
then just do a cheaper nullmove last 3 - 4 plies. Not deeper than that or you will miss tactics. This is on my todo list to build for Diep as well. A big attempt there failed in 2005 when i tried to replace my entire search last few plies with a fast highspeed simple search. It's easy to see for me that this is where ivanhoe messes up versus houdini.

Now of course you search deeper doing that futility yet it backfires.

As for the extension. Houdini sees tactics faster where it involves giving check.

As the evaluation is 100% similar, very obvious to see for chessplayers, and it solves all kind of the same positions like 4-5 ply sooner than ivanhoe, meanwhile ivanhoe searches 2 ply deeper.

It's obviously tactical better.

If you go play your own engine against another version of your own engine and one of the engines is tactical better, it will win always in selfplay.

That's kind of what happens at most rating lists now, as most 'top engines' are total clones.

This will change when one guy has fixed his evaluation function enough and gets some reasonable depth without messing up too much in search.

Ivanhoe just messes up in search further it's identical to Houdini, as evaluation is the same.

It's total trivial to me that biggest difference of Diep versus the clones is in opening. If i manage to fix that, a few plies more than the turtle gets now is enough for world domination - and i'm not interested in running single core contests nor interested in rapid levels at a quadcore from half a decade ago of course.

Fixing all the old junk knowledge to modern well debugged knowledge is NOT easy.

In a given position positionally the thing is doing great, yet in opening, just simply developing quick is strategically nearly always better. That's where the deep searchers pick up massive elo, including KOmodo of course.

Now you shouldn't lose that advantage - yet it's obvious that if you want besides just deep mainline checking more elostrength you also must pick up tactics.

With simple methods you can do that.

Now i didn't check komodo, but if your material values are DIFFERENT from the rybka/fruit clones, so not nearly exactly the same, and if it also has knowledge that's NOT inside ivanhoe and clones, then you'll already see a DIFFERENT behaviour there than Houdini will have versus the other clones that are so much the same in evaluation.

The easiest way to beat someone who is identically evaluating things, is by being tactical stronger.

As soon as someone has a different evaluation function, that tactical stronger matters less.

What still wins search depth meanwhile not getting tactical too much stronger is a cheapo nullmove last 3-4 plies. Cheapest thing you can possibly do there is razoring.

if( !incheck && eval >= beta + 1 pawn ) then return eval;

making things tactical stronger there- really everything has been invented there already.

A simple trick is to check whether you were in check +2 plies direction root.
Then just do normal nullmove with qsearch, provided that nullmove also detects giving checks.

With diep's small search depths, such things lose it too much elo for now.
So i just use normal nullmove there.

Several points:
1. "if( static eval >= beta + S ) then R = R+1;" My recollection is that this appeared in Ippo but not Rybka, but I could be mistaken.
2. I like your statement about seeing more tactics being decisive when eval functions are the same. I agree; this is perhaps the main problem with self-testing.
3. I also agree that reducing the plies of futility from 9 plies in Ivanhoe to some lesser number in Houdini would be an elo gain. I just didn't think it was a major one, as the margins for high-depth futility were pretty large. You seem to be saying that this is the main reason for Houdini's elo gain over Ivanhoe. Perhaps you are right, I don't know. At least I don't have a better theory.
4. Regarding "if( !incheck && eval >= beta + 1 pawn ) then return eval;" I think this is a subset or a special case of ProbCut, so probably the credit should go to the inventors of that algorithm.
5. Regarding check extension, you indicate elsewhere that this explains Houdini's tactical superiority over Ivanhoe. Here I'm a bit confused. The programs of the 90s generally extended all checks by a full ply. Then someone discovered that extending them only half a ply was slightly better, and that became the norm. Rybka and Ippo are intermediate, extending the check half a ply and the reply by another half ply if the majority of the material remains on the board. So are you saying that Houdini returned to extending checks by a full ply in general, as in the 90s programs? If so that would almost surely be an elo-loser, I think.
diep
Posts: 1822
Joined: Thu Mar 09, 2006 11:54 pm
Location: The Netherlands

Re: Programmer code of honor (update)

Post by diep »

lkaufman wrote:
diep wrote:
lkaufman wrote:
diep wrote: Larry, from all people in the world, i'm the last to even have time to reverse engineer anyone. First of all i'm one of those who invented a bunch of algorithms himself and several of my tricks boosted the elo of Rybka, therefore also the rybka clones.

And no i didn't like that.

To give one example of what i invented somewhere start 21th century and which i used in Diep for nullmove:

if( static eval >= beta + S ) then R = R+1;

I'm the one inventing that. I never had the machine power to test whether it worked well at bigger search depths. First of all diep never got those depths.

I just put it in Diep and for example world champs 2004 and onwards i played with it.

How did it end up in Rybka?
I don't know. Someone illegally took it over from me obviously.

In end 90s i invented extension, for some who were around back then, tactics was important mid 90s. It solved lots of tactical positions back then for Diep. Realize back then Diep got just a few plies. So did nearly everyone. Crafty got bigger depths end 90s, but didn't see anything tactical (cheapo quiescencesearch).

One extension i used there to big effect, it's very interesting to mention that 1 year after i put it into effect, that suddenly Rebel also had this extension.

I never posted about it.

Oh rybka rybka. How surprisingly. Ordering in root. Whether it delivers elo i don't know, as i never did do it differently since mid 90s, but how i order moves there, that's also how Rybka 3 is doing it. Not sure whether the clones took it over from rybka3 - didn't check. I never posted this anywhere.

Oh back onto Ivanhoe. It's doing up to a ply or 9-10 futility potentially.
Practical most futility will happen last 3-4 ply or so.

As it's exponential bonus to search depth, it will keep reducing of course and win plies.

It's total trivial that doing this futility to 9 deep loses elo.

It's needless to say that loses massive elo. I never understood all those guys doing futility. In Diep i can't use it at all. If you want to do something,
then just do a cheaper nullmove last 3 - 4 plies. Not deeper than that or you will miss tactics. This is on my todo list to build for Diep as well. A big attempt there failed in 2005 when i tried to replace my entire search last few plies with a fast highspeed simple search. It's easy to see for me that this is where ivanhoe messes up versus houdini.

Now of course you search deeper doing that futility yet it backfires.

As for the extension. Houdini sees tactics faster where it involves giving check.

As the evaluation is 100% similar, very obvious to see for chessplayers, and it solves all kind of the same positions like 4-5 ply sooner than ivanhoe, meanwhile ivanhoe searches 2 ply deeper.

It's obviously tactical better.

If you go play your own engine against another version of your own engine and one of the engines is tactical better, it will win always in selfplay.

That's kind of what happens at most rating lists now, as most 'top engines' are total clones.

This will change when one guy has fixed his evaluation function enough and gets some reasonable depth without messing up too much in search.

Ivanhoe just messes up in search further it's identical to Houdini, as evaluation is the same.

It's total trivial to me that biggest difference of Diep versus the clones is in opening. If i manage to fix that, a few plies more than the turtle gets now is enough for world domination - and i'm not interested in running single core contests nor interested in rapid levels at a quadcore from half a decade ago of course.

Fixing all the old junk knowledge to modern well debugged knowledge is NOT easy.

In a given position positionally the thing is doing great, yet in opening, just simply developing quick is strategically nearly always better. That's where the deep searchers pick up massive elo, including KOmodo of course.

Now you shouldn't lose that advantage - yet it's obvious that if you want besides just deep mainline checking more elostrength you also must pick up tactics.

With simple methods you can do that.

Now i didn't check komodo, but if your material values are DIFFERENT from the rybka/fruit clones, so not nearly exactly the same, and if it also has knowledge that's NOT inside ivanhoe and clones, then you'll already see a DIFFERENT behaviour there than Houdini will have versus the other clones that are so much the same in evaluation.

The easiest way to beat someone who is identically evaluating things, is by being tactical stronger.

As soon as someone has a different evaluation function, that tactical stronger matters less.

What still wins search depth meanwhile not getting tactical too much stronger is a cheapo nullmove last 3-4 plies. Cheapest thing you can possibly do there is razoring.

if( !incheck && eval >= beta + 1 pawn ) then return eval;

making things tactical stronger there- really everything has been invented there already.

A simple trick is to check whether you were in check +2 plies direction root.
Then just do normal nullmove with qsearch, provided that nullmove also detects giving checks.

With diep's small search depths, such things lose it too much elo for now.
So i just use normal nullmove there.

Several points:
1. "if( static eval >= beta + S ) then R = R+1;" My recollection is that this appeared in Ippo but not Rybka, but I could be mistaken.
2. I like your statement about seeing more tactics being decisive when eval functions are the same. I agree; this is perhaps the main problem with self-testing.
3. I also agree that reducing the plies of futility from 9 plies in Ivanhoe to some lesser number in Houdini would be an elo gain. I just didn't think it was a major one, as the margins for high-depth futility were pretty large. You seem to be saying that this is the main reason for Houdini's elo gain over Ivanhoe. Perhaps you are right, I don't know. At least I don't have a better theory.
4. Regarding "if( !incheck && eval >= beta + 1 pawn ) then return eval;" I think this is a subset or a special case of ProbCut, so probably the credit should go to the inventors of that algorithm.
5. Regarding check extension, you indicate elsewhere that this explains Houdini's tactical superiority over Ivanhoe. Here I'm a bit confused. The programs of the 90s generally extended all checks by a full ply. Then someone discovered that extending them only half a ply was slightly better, and that became the norm. Rybka and Ippo are intermediate, extending the check half a ply and the reply by another half ply if the majority of the material remains on the board. So are you saying that Houdini returned to extending checks by a full ply in general, as in the 90s programs? If so that would almost surely be an elo-loser, I think.
Probcut was an algorithm invented in 90s and proved to be losing elo in the long run.

Razoring was invented decades before that. In fact the earliest book i have is from around 1979 so i don't know exactly when was the first time it was invented. In some start of 80s book it already gets decribed here.

Yet i don't have much literature from days back then. Maybe Bob remembers that. Should be moved to another thread though here i feel.

If you do futility last 9 plies you will miss mate to give 1 example.
You also will miss passers promoting. You miss everything.

Besides missing the big things, also your pruning decision is based upon a guesstimate. Even razoring (which i am not doing in Diep) is more accurate there as it razors based upon a static evaluation.

It's just one example of idiocy in Ivanhoe, easy to improve.

These are trivial changes done so to speak in 5 minutes. Add some testing and you have houdini.

I bet he signed Ed's honor code :)

For extensions, dig up some old ICGA journals - even Chrilly wrote something about it.

If you prune megamuch (like razoring and nullmove) then extensions are easier to do. I didn't say you should do braindead extensions. Adding some chess technical code wouldnt hurt there i guess.