and has 0 comments

The complete title of the book is How Life Imitates Chess: Making the Right Moves, from the Board to the Boardroom, which is a mouthful, but very precise. It does explain how principles of chess, economics and politics apply in all three fields and how Garry Kasparov has evolved from chess player to world champion and, nowadays, into a political anti-Putin figure.

If you ask me, abandoning chess to get into business and worse, politics, it's a complete loss. However I do understand the guy, he got bored. Someday I may abandon computer programming.

Back to the book, though, it felt a lot like The Art of Learning, also written by a brilliant chess player (who incidentally also abandoned chess... hmm). It was more precise, most logical, though, looking at things from a more of a clinical perspective. I would have wanted to learn more about Kasparov's relationship with Karpov, for example, since he is always calling him his nemesis, but never says anything about how he felt about the guy.

This book is peppered with good advice, historic comparisons and great quotes from chess players and great men. Also, short descriptions of the relationship between famous "chess pairs" are giving the book an extra chess dimension. All in all I recommend it highly, although it felt more like a useful reference than a soul book like The Art of Learning.

and has 0 comments
I really wanted to wait a little longer before writing this post, but the shere number of series that appeared forced my hand. So here it goes:

  • Doctor Who - As I was saying before, the show is slightly darker now, with the Doctor dying and River Song being somehow involved... It's kind of fun. The new actor, Math Smith, has matured in the show and exudes more confidence on the set.

  • Torchwood - Continuing the format of the third "season", that of a continuous miniseries, season 4 explores dark cabals that manipulate the world and use a device to make everyone immortal. Fascist like camps for people who would normally be dead are created, complete with crematoria. Some interesting ideas there, but the acting and scripting were pretty poor.

  • The Sarah Jane Adventures - I was surprised to see that the new season of Sarah Jane Smith started with Elisabeth Sladen still in the lead role. As you may know, the actress succumbed to cancer, so these are previously filmed episodes. Sarah Jane adopted new alien child, a girl this time, and she has the curious ability to grow spontaneously. Maybe she will become the next Sarah Jane? The show is pretty nice and doesn't seem so childish anymore. It is almost on par with its progenitor show, Doctor Who

  • Eureka - It continues to be brainless fun, a show basically held together by the lead actor, Colin Ferguson. As a funny side note, The Guild's very own (and smoking hot) Felicia Day together with show colleague (and Wesley Crusher from Star Trek) Wil Wheaton. They both act like their Guild characters, too :)

  • House MD - The eight season gets rid of useless Cuddy and gains a small Asian girl prodigy who stands up to House and gains his respect. We know she is going to leave dejected and heartbroken, as all the others did, but at least she's a change from the stuck up bimbo role that usually filled the gap. She is not smoking hot, though, and that is an issue that needs resolving!

  • Criminal Minds - I couldn't get myself to watch any of the episodes in season 7. It is basically the lack of time that is the cause. I will get to it eventually.

  • Dexter - The show is back on track with the usual Dexter, lovable and deadly. As opposed to the fourth book in the series, this season seems to explore religious cultism rather than cannibalism. Works for me. BSG's Edward James Olmos is the bad guy here, joined by Colin Hanks, as his acolyte.

  • Fringe - Peter Bishop has healed the wound between the two universes, but erased himself from existence in the process. Or has he? His father and Olivia keep getting glimpses of him. Same old show, in rest. The weird experimentation at the end of the last season seems to have ended. I don't know if that is good or bad.

  • True Blood - In the end it was still satisfying to watch. Not great, but certainly entertaining. Tara (finally) dies, as well as the annoying werewolf bitch, the pathetic old witch and the ridiculous gay nurse guy. A culling of all obnoxious characters can be good.

  • Men of a Certain Age - I keep nagging the wife to keep watching the show, as we started watching it together, but she keeps delaying. She doesn't want me to watch it alone either. Girls!

  • Weeds - After 7 years, the hot MILF Mary-Louise Parker is still hot! Anything else about the show kind of sucks, though. Same old convoluted plots that somehow revolve around marijuana, but have ceased being about the light drug for quite some time. I am still watching it because of the MILF factor, naturally.

  • The Good Wife - As Aron Nimzowitsch used to say, the threat is stronger than the execution. The fact that Alicia is finally banging Will removes the thrill of the sexual tension between them. The personal issues of the characters also begin to take a larger role than actual court cases. That is not good. The show is still entertaining, but has lost some of its appeal (pun not intended)

  • Haven - still silly, but now has gotten more confrontational, with "troubled" being discriminated against by normal people. Also we learn that Audrey is not really Audrey, nor is she the woman that looked like her and was in the town a few decades ago. Instead, it seems she appears whenever the troubles start and she always has the memories of someone else.

  • Royal Pains - I haven't watched it and I don't miss it. The wife doesn't seem to consider it either. It's personally cancelled.

  • Lost Girl - A new Ash has been chosen, one that is less lenient than the one before and who is quite annoying. There is a sort of cold war between him and our lovely succubus. An old girlfriend of Dyson also appears. Wrraawr! (or is it Growl! ?) The show is fun enough.

  • Nikita - The second season has started with gorgeous Amanda now heading Division. Except the ridiculously good looking actors, the show's got nothing for me anymore. I am discontinuing it from my show list.

  • Falling Skies - Still waiting for season 2.

  • Southpark - I've just watched the third episode from season 15. It is the only one that was funny from the season. I hope this is the beginning of a trend.

  • The Killing - Still on my watch list, didn't get around to it.

  • Mortal Kombat Legacy - The web show stopped at episode 9, just when it was getting interesting. Oh, well...

  • Suits - The very light courtroom male show is still fun to watch, although it has become sort of repetitive. The betrayed friend that turns on the main character is both exaggerated and an obvious season end cliff hanger.

  • Camelot - Claire Forlani and Eva Green, free boobs or not, are not enough to make me watch this series. Sorry, girls!

  • Wilfred - Unwatched episodes are rotting in my view list and I could not force myself to watch them. I guess this is another show I will stop watching.
  • Breaking Bad - A full season is waiting for me to watch. Whenever I had the time, I didn't have the mood to watch it. Maybe it is still fun, but I don't know yet. I fear disappointment.

  • Californication - Waiting for the next season.


And now for new shows:

  • King - Beautiful police woman... bla bla bla. I can google the actress and drool at her pictures instead of watching this average police drama. Not a new show, because I mentioned it in the last post, but it is part of a larger group of "do not want"s

  • The Protector - Blonde police woman protects the city. Yeah, right.

  • Against the Wall - Blonde police woman takes a job in Internal Affairs, much to the dismay of her policeman father and policemen three brothers, who feel she switched sides. Some funny situations and an interesting concept kept me watching this for a few episodes, but that's about it.

  • Prime Suspect - Blonde police woman fights to gain acceptance in a misogynistic crime unit. The cases are brutal, so is her mistreatment from her colleagues. That would make for an interesting premise if it weren't for my lack of time and ... because she is a police woman! And like it or not, this is no misogynism, either. There are just too many shows about that at a time when I've had it up to my ears of police dramas.

  • Unforgettable - Redhead ex police woman (and smoking hot, too), can't forget anything she sees. She teams up with ex boyfriend to... solve police cases. Yes, he is a cop. If not for the lead actress, a completely forgettable show.

  • Ringer - Sarah Michelle Geller is NOT a police woman. I like that. Instead she is a police witness that runs away from testifying and/or getting killed by a drug kingpin. Her solution is to take the role of her twin sister who mysteriously commits suicide. She finds herself married to a gold digging con artist, having a interior decorator best friend, having an affair with the husband of her best friend and so on and so on. I didn't buy it. Sorry.

  • Suburgatory - The short plotline sounded interesting: a single dad moves into the suburbs with urban, mischievous teenage daughter. The execution, though, was ridiculous. One of those obvious shows that spoon feed you anything you need to think or enjoy. Pass!

  • How to be a Gentleman - Drama from Entourage was one of the lead actors. Unfortunately for him, the show got cancelled almost immediately. It was also one of those background "ha ha" things. Awful!

  • Beavis&Butthead - Yes! My childhood show is coming back. I don't know when, but when it will start it will either be disappointing or epic. I am betting on epic.

  • American Horror Story - Interesting TV series remake of The Shining. I didn't really enjoy the film and I don't like how King writes his books. I tried to watch the first episode, but stopped in the middle. Not my type of show. Also, the "horror" is one forced by sound effects and obvious film tricks. I hated it.

  • Homeland - Haven't started to watch it yet, but it sounds promising.

  • Hung - Season 2 started, but I couldn't get myself to watch it. I guess I won't watch it.

  • Lie to Me - A lot of people recommended this show. I finally started to watch it. The insights in human behaviour are very interesting, especially since they are showing pictures or videos of celebrities in similar situations to the fictive situations in the episodes. There is much to learn there. However the structure of the show is a combination of CSI and House. All too fast, trying to seem intelligent and smart, but creating a soulless mechanical feel. I will be watching it occasionally for the science alone.

  • Terra Nova - Finally a sci-fi show! Humanity has botched the future, so they come back into the past, during the age of the dinosaurs. The main character is a cop. WHY?!?! OH, WHY?!?! The show is ok, but full of clichés and the idea of a father of three fending off for his family in a colony of humans in the Cretaceous... brrrr, who the hell thought that up? The science is nil and the family issues override any decent sci-fi in the show. Too bad. I will watch it, still, but only because of lack of alternatives.

  • The Fades - By a long shot, this is the best of the new shows. It is a British horror series involving dead people trying to get back to life by eating living flesh. They are not zombies, they are Fades, and they make a lot more sense than other undead concepts. The main character is a clueless kid who happens to have special powers. Watch this, it is very nice, indeed.

  • The Field of Blood - Well, it appears as a series, but for now it was a two parter film. A heavy Glasgow accent makes this hard to watch with no translation, but a nice film anyways. A sort of journalist drama in the 80's, with crimes and family issues and rampant religious ideology.

  • The Secret Circle - A tv series remake of The Craft, as far as I see, with good looking teens being... witches! At least they are not vampires. The out of control member of the circle doesn't come even close to the beautiful craziness of Fairuza Balk. Baby, I still love you! Btw, the show is not worth watching, better rewatch The Craft a few times.

  • Hidden - Not watching it yet, but it is on my list


Upcoming:

  • Grimm - A fantasy series related to fairy tales. To my chagrin this is what Wikipedia says: The show has been described as "a cop drama—with a twist...a dark and fantastical project about a world in which characters inspired by Grimm's Fairy Tales exist". Cop drama? Really?!

  • Once Upon a Time - Another fairy tale series, with actresses from House and Big Love and whatever shows ended or from which people left.

  • Hell on Wheels - a Western tv series. Could that work? We'll have to see



I have been pruning away from the TV series I have been watching, in order to gain some control over my personal life. But whenever I do that, more TV shows appear. It's like I need a hot redhead police woman to investigate this serial murders of my time and bring the culprits down in a climactic ending. But with my luck, I will probably find myself in cliff hangers at the end of each season!

and has 1 comment
Geek Love is another title that mislead me. Geek, in this book, refers to the original definition of the word "A carnival performer who does wild or disgusting acts" and not a cool lovable geek as myself. The subject is "controversial": the life of an albino hunchbacked dwarf woman as a member of a carnival family.

There is a lot going on in the book. Carnival people poison themselves in order to make their children as freaky as possible. Said children are then raised only if they are strange enough. The failures are either preserved in glass jars if they are too mutated, or given away if they are too normal. The successes range from the main character, to a sociopath hairless cult leader with flippers instead of members, to siamese sisters that have the same lower body to a telekinetic God like child who only wants to be loved and gets manipulated into doing stuff for others. The sisters later give birth to a grotesquely obese child, fathered by a man with half his face blown up who squirts inside their vagina in his death moment. The death and the face blowing are unrelated. There is more, like a rich heiress who pays beautiful women to mutilate themselves in order to have a better life, unencumbered by the sexual desire of her subjects or of the people surrounding them.

The book itself was pretty innovative, but rather boring. If I had an alternative, I wouldn't have finished it, but as I had not, I am a bit proud of having finished it. If nothing else, the book is strange enough to be interesting. Also the writing is pretty good, introverted, taking the reader inside the mind of a person who considers normal people too bland and treasures her deformity and that of her daughter, fathered through telekinesis with the sperm of her brother.

Don't get me wrong, it was not painful reading the book and I do not regret having reading it. However I wish there was something more interesting in the story other than the strangeness of one's thoughts.

I have been reviewing my blog posts for the last few months and I noticed a troubling trend: a lot more social commentary and hobby related stuff than actual tech work. Check out this statistic of posts in the last three months:
  • TV and Movie: 5
  • Books: 6
  • Personal or hobby: 6
  • Social commentary: 1
  • Tech: 8
8 is marginally more than 6, but split them between misc and programming and you get 18 misc for 10 programming (with some overlapping). And consider that two of the tech posts were attempts to fix something that did not work so well.

What does this mean? Do I not learn new stuff at work? Am I not interested in tech work anymore? Am I working too much and not having time to blog? Well, it is a bit of all. I am interested in tech work, but right now I am fighting to adapt to the new job. I am learning new stuff, but that is mostly office related than new frontiers of programming. And I am a bit tired as well.

I have been thinking of cool tech stuff to share with you at least in this post, but I could find none. I am reading a lot of blogs with new information about stuff ranging from Windows 8, .Net 5, the future of C# and Visual Studio to videos of Vesta, things that verge on proving the dark matter model is wrong and amazing BIOS rootkits, but that is not what I am doing.

So let me summarize the technical state of my work so far:
  • Scrum - my workplace uses Scrum as a development practice and invests a lot in maintaining the quality of its implementation. I've learned a lot about the advantages, but also the disadvantages of the practice (there is nothing as annoying as an Outlook alert that you need to do the daily scrum meeting when you are concentrated on a task)
  • Visual Basic - as the original application that was bought by my employing company 5 years ago was written in Visual Basic, large portions of it are still VB. That only proves my point that refactoring code should be a priority, not a nice to have option. I wonder how many developing hours, research hours and hair roots could have been saved if the company would have invested in moving the application to a readable and canonical code form. I also wonder if the guy that invented Visual Basic is now burning in hell, as so many devs with whom I've talked about VB seem to want.
  • Visual Basic - it just deserves two bullet points, for the bullet reason only at least. Also, try converting C# generic and lambda expression code to Visual Basic. Hilarious!
  • Computing power - I am now working on a laptop that has a Quad Core I7 processor, 8Gb of RAM and a Solid State Drive. And I still want it 10 times faster. It seems to me that computing power is only keeping up with the size of the software projects and the complexity of the tools used to develop them, so that the total compile time for a project remains constant. Also, if for some reason the company issues you with a computer powerful enough to break the constant, they also need to enforce drive encryption as to compensate.
  • Continuous Integration and Unit Testing - it gives one a good feeling of comfort to know that after "it works on my machine", the source control server can compile, test and run the software successfully (while you are working at something else, no less).
  • Software Patterns - there are people who can think and visualize software patterns. They can architect any piece of code and make it really neat. However, it now seems to me that an over-architected software is just as hard to read and follow as a non-architected one. Fortunately for me, my colleagues are more the smart "let's make it work" type


That is about it. No magical silver bullet practices, no amazing software, no technological edge code, just plain software shop work.

and has 0 comments

As an avid viewer of TV series and movies alike, I am always discussing the latest shows with my friends and I have been surprised to notice that not many knew about Entourage. I consider it a shame, as this series is exactly what a TV show needs to be and so few actually manage to do what it does.

Entourage is the story of a young talented actor who rises from anonymity with the help of three childhood friends. They are practically brothers and, even if he is the only one of them who "made it", they still live together and share everything, while navigating the weird world of Hollywood. The format of the show is short half an hour episodes that never leave you hanging when they end and that, for me at least, always provide a good feeling. I am not talking about silly ha-ha comedy here, I am talking about a lightweight dramedy that makes you smile. At the end of an episode you don't want more, you feel content, and you only begin to crave more when that contentment wears off. This is what today's media shows have forgotten how to do!

I was a bit sad to see the eighth and last season of the show end with its eighth episode a few days ago. I really wanted more of this and now that Entourage is no more, I know it would be hard to find a show that would bring the same peace of mind after each episode. And you haven't heard or tried Entourage, you should. Good show!

and has 0 comments
The Sparrow is, in my opinion, a good example of politics in literature, as it won several prestigious prizes, but is, in my own view, slightly above average. To quickly summarize the book, it's a Jesuit meets New World story, only the plot is set in the future and the new world is another planet.

Maybe I am just bitter because after tedious chapters about the relationships between the characters, the sci-fi was minimal and outdated. In fact, the author herself admitted that the kind of story she wanted to write could not be set on Earth because there are no new worlds here; this leads me to believe that the sci-fi was incidental and it bloody feels that way, too.

I will give credit where it is due, though. The woman documented herself well and presented interesting characters in great detail. Also the story itself is pretty solid, albeit a bit boring and focused too much on the religious. Other than that, it felt like a 1960's book. I was shocked to see that it was published in 1996. Some of the technical details described in the book were outdated even then.

About the plot, a discreet mission to a nearby planet is organized by the Jesuits, because all the other players in the field like the United Nation are too bureaucratic and talk about it more than actually doing something. The story starts with the return of the only survivor, priest Emilio Sandoz, and then the book continues with back and forth lines of now and then. The ending felt rushed and a bit anticlimactic. Maybe I was just not in an empathetic mood and couldn't care less about the religious and cultural sensitivities of the people involved and from all the characters, only Jimmy, the tall technical guy, felt agreeable. Who would have guessed? :)

Bottom line: I will not read the sequel book and that should say a lot. The book is not bad, though, and I may be berating it too much. A thing is certain, this is at the lower edge of the sci-fi scale, regardless of writing quality.

Update: In lack of a good book to read, I started on Children of God, the sequel to The Sparrow. Russell's talent for tedium, futile philosophy and rape fantasies reaches new heights in this book, so much that I just couldn't finish it. I usually finish watching movies and reading books even if they are bad, just for the experiential value alone, but I couldn't do it with this one. You have the same pointless priest, wallowing in self pity and then pathetically letting himself be used again, all the time asserting that he won't. And just so the reader would have no thoughts that the man could find a way out, a chapter of one of his kidnappers getting old on Rakhat, smack in the middle of the book, erases that possibility. What would be the point of reading on? Just for the ridiculous discussions about different Gods between random people? No. Just avoid this one.

and has 0 comments
Here is another chess game, which is not really remarkable as a chess game, but as my perception of it was. I thought I played on par with the cell phone up until the end where I usually falter and this time the cell did. After ChessMaster's analysis, I've realised that the AI made huge mistakes, as have I. I chose to play black because I usually play white and whenever I play as black I am at a loss at what to do, so the few games I've played lately with my cell or PDA were as black.



Also, in this post I am using a new style of annotation. ChessMaster saves PGN files in two ways: with analysis or with auto annotation, not both. I find the auto annotations very helpful when they explain how the game could have played, but not so helpful when I move a piece and it says I moved a piece or some other obvious thing like that. The analysis is more cryptic, but very helpful in understanding what the computer thought. Therefore I took the annotations I found useful and added them to the analysis file. I hope this is more helpful for the reader.



At the end you will see me play really strange, and that is because I was using my queen as a rook only while checkmating. The uncommented variation is the short end.



Well, I just removed the variation and the pointless mate. Just imagine the cell phone gained consciousness and resigned after I queened the pawn :) Also, if you see the post loading really slow, you should wait for it to end. I will try to optimize the chess board plugin when I have the time.





[Event "30/8/2011 9:10:18 am"]

[Site ""]

[Date "2011.8.30"]

[Round ""]

[White "Nokia Easy5"]

[Black "Siderite"]

[TimeControl "-"]

[Result "0-1"]

[ECO " "]



1.e4

{Book.

B00 King's Pawn Opening. The King's Pawn opening move is both popular and logical. It controls the center, opens lines

for both the Queen and the Bishop, and usually leads to an open game in which tactics, rather than slow maneuvering,

predominates.}

1...e5

{Book.

C20 King's Pawn Game. Black responds symmetrically, making a direct challenge to the central squares.}

2.Bc4

{Score: 0.10 2...Nf6 3.Nc3 Nc6 4.Nf3 Nxe4 5.O-O Be7 6.Nxe4 d5 7.d4 O-O 8.Be3 dxc4 9.dxe5 (Time = 1:04, Depth = 2/12)

C23 Bishop's Opening. The Bishop's opening is an attempt to capitalize on the inherent weakness of f7. But centuries of

analysis have shown that this natural move is no stronger when played earlier than later.}

2...b6

{Score: 0.91 3.d4 Bb7 4.dxe5 Bxe4 5.Nf3 Nc6 6.O-O Bb4 7.Nbd2 Bf5 8.Re1 (Time = 0:42, Depth = 1/11)

Out of Opening Book. c6 would have been in the Bishop's Opening opening line. Slightly better is

Nf6.

}

3.Nf3

{Score: 0.63 3...Nc6 4.O-O Bb7 5.Nc3 Bc5 6.d4 exd4 7.Nd5 Nge7 8.Bf4 d6 (Time = 0:42, Depth = 1/11)}

3...Nc6

{Score: 0.69 4.d4 exd4 5.O-O Bb7 6.c3 Nf6 7.e5 d5 8.Bb5 Ne4 9.cxd4 (Time = 0:38, Depth = 1/11)}

4.Nc3

{Score: 0.57 4...Bc5 5.O-O Bb7 6.d3 Nf6 7.a3 O-O 8.b4 Bd6 9.Be3 a6 (Time = 0:38, Depth = 1/11)}

4...Bb7

{Score: 0.54 5.d3 Bc5 6.Ng5 Nh6 7.Qh5 Qf6 8.Nf3 Qg6 9.Qxg6 hxg6 10.O-O (Time = 0:43, Depth = 1/11)}

5.d4

{Score: 0.52 5...exd4 6.Nxd4 Ne5 7.Bd5 c6 8.Bb3 Bc5 9.Nf5 d5 10.exd5 Kf8 (Time = 0:39, Depth = 1/11)}

5...d6

{Score: 1.07 6.O-O a6 7.dxe5 dxe5 8.Bg5 Nge7 9.Qxd8+ Rxd8 10.Rad1 h6 11.Nd5 Rd7 (Time = 0:46, Depth = 1/11)}

6.Ng5

{Score: 1.03 6...Nh6 7.d5 Nd4 8.Nf3 Nxf3+ 9.Qxf3 a6 10.O-O b5 11.Bd3 Be7 12.Bxh6 gxh6 13.Qf5 (Time = 0:29, Depth = 2/12)

}

6...Nh6

{Score: 0.92 7.d5 Ne7 8.Bb5+ c6 9.dxc6 Nxc6 10.Nf3 Ng8 11.O-O a6 12.Bg5 Nf6 13.Bc4 (Time = 0:59, Depth = 2/12)}

7.dxe5

{Score: 0.65 7...Nxe5 8.Be2 Be7 9.f4 Bxg5 10.fxg5 Ng8 11.O-O Ne7 12.Bf4 N7g6 13.Bb5+ c6 14.Bxe5 Nxe5 (Time = 1:00,

Depth = 2/12)}

7...dxe5

{Score: 0.73 8.Be3 Bb4 9.Qh5 O-O 10.O-O Bxc3 11.bxc3 Qf6 12.Rad1 Rad8 13.Nf3 Rd6 (Time = 0:39, Depth = 1/11)}

8.Qh5

{Score: 0.81 8...g6 9.Qh3 Qc8 10.Qf3 f5 11.Ne6 Nd4 12.Nxd4 exd4 13.Nd5 Nf7 14.O-O Ne5 (Time = 1:02, Depth = 2/12)}

8...g6

{Score: 0.81 9.Qh3 Qc8 10.Qf3 f5 11.Ne6 Nd4 12.Nxd4 exd4 13.Nd5 Nf7 14.O-O Ne5 (Time = 0:49, Depth = 1/11)}

9.Qd1

{Score: -0.15 9...Qxd1+ 10.Nxd1 Nd4 11.Ne3 Be7 12.h4 b5 13.Bd3 O-O-O 14.c3 Nb3 15.axb3 Rxd3 16.Rxa7 (Time = 0:57, Depth

= 2/12)

Slightly better is Qh3.}

9...Bg7

{Score: 0.49 10.O-O O-O 11.Nf3 Ng4 12.Bg5 Bf6 13.Bd2 Bg7 14.Qe2 a6 15.Rad1 Nb4 (Time = 0:58, Depth = 2/12)}

10.Nd5

{Score: 0.20 10...Na5 11.Bd3 O-O 12.O-O Nf5 13.Nf3 Nd6 14.b3 Nc6 15.Bg5 f6 (Time = 1:42, Depth = 1/11)}

10...O-O

{Score: 0.18 11.Nf3 Qd6 12.Bg5 Kh8 13.O-O f5 14.Nc3 Qb4 15.Qd3 Qxb2 (Time = 0:39, Depth = 1/10)}

11.c3

{Score: -0.27 11...Na5 12.Bf1 Nf5 13.b4 h6 14.Nf3 Bxd5 15.exd5 e4 16.Nd4 Nxd4 17.cxd4 Nb7 (Time = 2:17, Depth = 2/13)}

11...Ne7

{Score: 0.24 12.Nxe7+ Qxe7 13.O-O c6 14.Be3 Rad8 15.Qe2 b5 16.Bb3 Kh8 17.Rad1 Rfe8 18.Nf3 (Time = 0:49, Depth = 2/12)

}

12.O-O

{Score: 0.06 12...Nxd5 13.Bxd5 Bxd5 14.exd5 Qd7 15.Qd3 c6 16.d6 f5 17.Qc4+ Nf7 18.Ne6 Rfe8 (Time = 0:58, Depth = 2/12)}



12...Nxd5

{Score: 0.01 13.Bxd5 Bxd5 14.exd5 Qd7 15.c4 Nf5 16.Re1 c6 17.Nf3 Rae8 18.Bg5 e4 (Time = 0:41, Depth = 2/12)}

13.Bxd5

{Score: 0.01 13...Bxd5 14.exd5 Nf5 15.Ne4 Nd6 16.f3 a6 17.Qe2 h6 18.Be3 f5 19.Nxd6 Qxd6 (Time = 0:58, Depth = 2/13)}

13...Bxd5

{Score: 0.01 14.exd5 Nf5 15.Ne4 Nd6 16.f3 a6 17.Qe2 h6 18.Be3 f5 19.Nxd6 Qxd6 (Time = 0:49, Depth = 2/12)}

14.Qxd5

{Score: -0.02 14...Qxd5 15.exd5 Nf5 16.Ne4 Nd6 17.Nxd6 cxd6 18.b3 Rfc8 19.Bd2 b5 20.Rac1 Rab8 21.c4 bxc4 22.Rxc4 Rxc4

23.bxc4 (Time = 0:57, Depth = 2/13)}

14...Qe7

{Score: 0.39 15.h3 Rad8 16.Qb3 c5 17.Be3 Qc7 18.Qa4 Qd7 19.Qxd7 Rxd7 20.Nf3 Rfd8 21.Bxh6 Bxh6 22.Nxe5 (Time = 0:58,

Depth = 2/12)}

15.Re1

{Score: 0.16 15...Rad8 16.Qb5 Rd6 17.Nf3 Rfd8 18.Qb3 Ng4 19.Bg5 Bf6 20.Bxf6 Nxf6 21.Qb5 (Time = 0:56, Depth = 2/12)}

15...Rad8

{Score: 0.15 16.Qb5 Rd6 17.Nf3 Rfd8 18.Be3 c5 19.Qb3 Ng4 20.Bg5 Bf6 21.h4 Qd7 (Time = 1:01, Depth = 2/12)}

16.Qb7

{Score: 0.14 16...a5 17.Nf3 Qd6 18.c4 Ng4 19.Qd5 Qb4 20.Qc6 Rd3 21.a3 Qd6 22.Qa4 (Time = 0:54, Depth = 2/12)}

16...a5

{Score: 0.13 17.Nf3 Qd6 18.Qa6 f6 19.Bxh6 Bxh6 20.Qc4+ Kh8 21.Qb3 Qc6 22.Rad1 Rxd1 23.Qxd1 Re8 (Time = 0:50, Depth =

2/12)}

17.h3

{Score: -0.12 17...f5 18.Qc6 f4 19.Qe6+ Rf7 20.Qxe7 Rxe7 21.b3 Nf7 22.Nf3 c6 23.Bb2 Red7 24.c4 b5 (Time = 1:06, Depth =

2/13)}

17...Rb8

{Score: 0.47 18.Qd5 Rbd8 19.Qb3 Kh8 20.Be3 f5 21.Ne6 f4 22.Nxf8 fxe3 23.Ne6 exf2+ 24.Kxf2 (Time = 0:35, Depth = 2/12)

}

18.Qc6

{Score: 0.34 18...Rfd8 19.Be3 Qd7 20.Qc4 b5 21.Qe2 f5 22.Rad1 Qc6 23.Qc2 a4 24.b3 Ra8 (Time = 1:00, Depth = 2/13)}

18...Rfd8

{Score: 0.34 19.Be3 Qd7 20.Qc4 b5 21.Qe2 f5 22.Rad1 Qc6 23.Qc2 a4 24.b3 b4 (Time = 1:07, Depth = 2/12)

Seizes the open file.}

19.Qb5

{Score: 0.06 19...f6 20.Nf3 Nf7 21.Be3 Qd7 22.Qb3 a4 23.Qc2 Qc6 24.b3 Nd6 25.Bd2 Ra8 26.Rad1 axb3 27.axb3 (Time = 1:31,

Depth = 2/14)}

19...Kh8

{Score: 0.34 20.Nf3 f6 21.Be3 Nf7 22.Rad1 Nd6 23.Qc6 h6 24.b3 Kh7 25.Qa4 c5 (Time = 0:59, Depth = 2/12)}

20.Be3

{Score: 0.17 20...f5 21.exf5 Nxf5 22.Bf4 Rf8 23.Rxe5 Bxe5 24.Bxe5+ Ng7 25.Re1 Rf5 26.Nf3 Rd8 27.Qc4 (Time = 0:58, Depth

= 2/13)}

20...Ng8

{Score: 0.58 21.Qb3 Rf8 22.Nf3 h6 23.Qb5 Rfd8 24.Rad1 Qe6 25.c4 f5 26.exf5 Qxf5 (Time = 0:40, Depth = 2/12)}

21.Qc4

{Score: 0.59 21...Rf8 22.Nf3 c5 23.Rad1 Nf6 24.Bg5 b5 25.Qe2 Rfc8 26.Bxf6 Bxf6 27.Qd3 (Time = 0:46, Depth = 2/12)}

21...Rf8

{Score: 0.57 22.Rad1 Nf6 23.Nf3 c5 24.Bg5 b5 25.Qe2 Rfc8 26.Rd5 Qe6 27.Rxe5 Qxa2 (Time = 1:01, Depth = 2/12)}

22.Rad1

{Score: 0.53 22...Bh6 23.h4 c5 24.Qb5 Nf6 25.c4 Qc7 26.Ne6 fxe6 27.Bxh6 Rfd8 28.f3 (Time = 0:59, Depth = 2/12)

Takes control of the open file.}

22...Nf6

{Score: 0.57 23.f4 Nh5 24.fxe5 Bxe5 25.Rf1 f6 26.Ne6 Rfe8 27.Nd4 Bxd4 28.Bxd4 (Time = 0:58, Depth = 1/11)}

23.Rf1

{Score: 0.28 23...h6 24.Nf3 c5 25.Rfe1 Kg8 26.Qb3 Rfe8 27.c4 Nxe4 28.Bxh6 Nxf2 29.Kxf2 Bxh6 30.Rxe5 (Time = 1:03, Depth

= 2/13)}

23...h6

{Score: 0.28 24.Nf3 c5 25.Rfe1 Kg8 26.Qb3 Rfe8 27.c4 Nxe4 28.Bxh6 Nxf2 29.Kxf2 Bxh6 30.Rxe5 (Time = 0:36, Depth =

2/12)}

24.Nf3

{Score: 0.24 24...c5 25.Rfe1 Rfe8 26.Qb3 Qb7 27.Qc2 Kg8 28.Bc1 Qc7 29.c4 Rbd8 30.Be3 (Time = 0:59, Depth = 2/12)}

24...Kh7

{Score: 0.33 25.b4 Qe6 26.Qxe6 fxe6 27.bxa5 Nxe4 28.axb6 Rf7 29.Rfe1 cxb6 30.Bd2 Nxd2 31.Rxd2 (Time = 0:49, Depth =

1/11)}

25.Qc6

{Score: 0.33 25...Rfd8 26.c4 Rd6 27.Rxd6 Qxd6 28.Qxd6 cxd6 29.Nd2 b5 30.f3 bxc4 31.Nxc4 d5 32.Ba7 Rb7 (Time = 0:36,

Depth = 2/12)}

25...Rbd8

{Score: 0.54 26.c4 Rd6 27.Rxd6 Qxd6 28.Qxd6 cxd6 29.Nd2 Nd7 30.Nb1 f5 31.exf5 gxf5 32.Rd1 f4 (Time = 0:59, Depth =

2/12)}

26.a4

{Score: 0.33 26...Rc8 27.Rd2 Rfe8 28.Rfd1 Qe6 29.Qxe6 Rxe6 30.Rd8 Rxd8 31.Rxd8 Re7 32.Nd2 Re8 (Time = 1:11, Depth =

2/12)}

26...Rd6

{Score: 0.51 27.Rxd6 Qxd6 28.Qxd6 cxd6 29.Nd2 Rb8 30.Rd1 b5 31.axb5 Rxb5 32.b3 d5 33.exd5 Nxd5 34.c4 Nxe3 35.fxe3 Rb7

36.c5 (Time = 1:01, Depth = 3/15)}

27.Qc4

{Score: 0.12 27...Kg8 28.Rfe1 Ra8 29.Rxd6 Qxd6 30.Rb1 Ra7 31.b3 c5 32.b4 axb4 33.cxb4 (Time = 0:37, Depth = 2/12)}

27...Rfd8

{Score: 0.17 28.Rxd6 Qxd6 29.b4 Ra8 30.b5 Kg8 31.Nd2 Nh5 32.Qd5 Qxd5 33.exd5 f5 34.Nf3 Rd8 (Time = 0:48, Depth =

2/13)}

28.Rxd6

{Score: 0.15 28...Qxd6 29.Qxf7 Nxe4 30.Qc4 Nf6 31.Bg5 Rf8 32.Bxf6 Bxf6 33.Re1 Bg7 34.b4 Rf4 (Time = 0:50, Depth =

2/13)}

28...Rxd6

{Score: 0.26 29.Re1 Ne8 30.b4 Qe6 31.Qxe6 Rxe6 32.bxa5 bxa5 33.Rd1 Nd6 34.Nd2 f5 35.f3 Re7 (Time = 0:58, Depth =

2/13)}

29.b3

{Score: 0.10 29...Qe6 30.Qxc7 Nxe4 31.c4 Nc3 32.Re1 e4 33.Bf4 Rd7 34.Qb8 Rd3 35.Bg3 Qc6 (Time = 0:54, Depth = 2/13)}

29...Ne8

{Score: 0.25 30.b4 Qe6 31.Qxe6 Rxe6 32.bxa5 bxa5 33.Rd1 Nd6 34.Nd2 f5 35.f3 Re8 36.Bc5 Rd8 (Time = 0:59, Depth =

2/13)}

30.b4

{Score: 0.25 30...Qd7 31.bxa5 bxa5 32.Qb3 Nf6 33.Nxe5 Qe6 34.Qxe6 Rxe6 35.Nxf7 Rxe4 36.Bd4 Nd5 37.Bxg7 Kxg7 (Time =

1:03, Depth = 2/13)}

30...axb4

{Score: 0.45 31.cxb4 f5 32.a5 fxe4 33.Qxe4 Nf6 34.Qxe5 Qxe5 35.Nxe5 Nd5 36.Nc4 Rc6 37.Rc1 Nc3 38.Nd2 (Time = 0:45,

Depth = 2/12)}

31.cxb4

{Score: 0.62 31...f5 32.a5 fxe4 33.Nd2 Qd7 34.Nxe4 Rc6 35.Qb5 Nf6 36.axb6 cxb6 37.Qxe5 Nxe4 38.Qxe4 (Time = 1:02,

Depth = 2/12)}

31...Bf8

{Score: 1.42 32.a5 bxa5 33.bxa5 Rd8 34.a6 c5 35.Rc1 Qc7 36.Qc3 Ra8 37.Ra1 f6 (Time = 0:38, Depth = 1/11)

Slightly better is f5.}

32.a5

{Score: 1.42 32...bxa5 33.bxa5 Rd8 34.a6 c5 35.Rc1 Qc7 36.Qc3 Ra8 37.Ra1 f6 (Time = 0:37, Depth = 1/10)}

32...c5

{Score: 3.57 33.bxc5 bxc5 34.Bxc5 Qc7 35.Qb5 Bg7 36.Bxd6 Nxd6 37.Qd5 f5 38.exf5 Nxf5 39.Re1 Ne7 (Time = 0:44, Depth =

2/13)

Leads to 33.bxc5 bxc5 34.Bxc5 Qc7 35.Qb5 Bg7 36.Bxd6 Nxd6 37.Qd5 f5 38.exf5 Nxf5 39.Re1 Ne7, which wins a bishop and

two pawns for a rook and three pawns. Better is bxa5, leading to 33.bxa5 Rd8 34.a6 c5 35.Rc1 Qc7 36.Qc3 Ra8 37.Ra1 f6, which

wins a pawn for a pawn. This was black's most serious miscue, but black was able to stay close and eventually

mated.

}

33.bxc5

{Score: 3.92 33...bxc5 34.Bxc5 Qc7 35.Qb5 Nf6 36.a6 Nxe4 37.a7 Rd8 38.Bb6 Qb7 39.Bxd8 Qxb5 40.a8=Q Nc3 (Time = 1:09,

Depth = 3/14)}

33...bxc5

{Score: 4.13 34.Bxc5 Kg7 35.Bxd6 Nxd6 36.Qc6 f5 37.exf5 gxf5 38.a6 e4 39.Nd4 Kh8 40.Qd5 Qf6 (Time = 1:04, Depth =

3/14)}

34.Qxc5

{Score: 1.88 34...Nf6 35.Qb5 Nxe4 36.a6 Nc3 37.Qa5 Ne2+ 38.Kh1 Qd8 39.Qxd8 Rxd8 40.Nxe5 f6 41.Re1 (Time = 1:01, Depth

= 2/12)

Leads to 34...Nf6 35.Qb5 Nxe4 36.a6 Nc3 37.Qa5 Ne2+ 38.Kh1 Qd8 39.Qxd8 Rxd8 40.Nxe5 f6 41.Re1, which wins a queen and

two pawns for a queen and a pawn. Better is Bxc5, leading to 34...Kg7 35.Bxd6 Nxd6 36.Qc6 f5 37.exf5 gxf5 38.a6 e4 39.Nd4 Kh8

40.Qd5 Qf6, which wins a rook and two pawns for a bishop and a pawn.}

34...Ra6

{Score: 2.27 35.Qxe7 Bxe7 36.Nxe5 Nd6 37.Rc1 Bg5 38.f4 Bh4 39.Rc7 Kg8 40.Bc5 Nxe4 41.Nxf7 Rxa5 42.Nxh6+ Kh8 (Time =

1:00, Depth = 3/14)}

35.Qb5

{Score: 2.06 35...Re6 36.Ra1 Nc7 37.Qc4 Na6 38.Rc1 Qb7 39.Qc8 Qxc8 40.Rxc8 Bb4 41.Bb6 Kg7 (Time = 0:41, Depth = 2/12)}

35...Nc7

{Score: 2.79 36.Qc4 Ra8 37.Rc1 Ne6 38.Nxe5 Bg7 39.Nc6 Qb7 40.e5 Qb2 41.Re1 Rc8 (Time = 0:37, Depth = 2/12)}

36.Qc4

{Score: 2.74 36...Ra8 37.Rc1 Ne6 38.Nxe5 Bg7 39.Nc6 Qb7 40.e5 Nd8 41.Nxd8 Rxd8 42.a6 Qd7 43.Bb6 (Time = 1:22, Depth =

2/13)}

36...Ra8

{Score: 2.74 37.Rc1 Ne6 38.Nxe5 Bg7 39.Nc6 Qb7 40.e5 Nd8 41.Nxd8 Rxd8 42.a6 Qd7 43.Bb6 (Time = 0:58, Depth = 2/12)}

37.Ra1

{Score: 2.32 37...Bg7 38.a6 Ne6 39.Qc6 Qe8 40.Qxe8 Rxe8 41.a7 Nc7 42.Bc5 f6 43.Ra3 f5 (Time = 0:39, Depth = 2/11)}

37...Bg7

{Score: 2.44 38.a6 Qd7 39.a7 Ne6 40.Ra5 Qd1+ 41.Kh2 Qd8 42.Rd5 Qh8 43.Rd7 Rc8 (Time = 0:39, Depth = 2/11)}

38.a6

{Score: 2.40 38...Ne6 39.Qc6 Qd8 40.Bb6 Qf8 41.a7 Nd4 42.Nxd4 exd4 43.Ra5 d3 44.e5 (Time = 0:39, Depth = 2/11)}

38...Qd6

{Score: 2.84 39.a7 Ne6 40.Qb5 Qf8 41.Qb7 Nf4 42.Bxf4 exf4 43.e5 Qe8 44.Qe4 f6 45.e6 (Time = 0:55, Depth = 2/12)}

39.Qxf7

{Score: 2.09 39...Rxa6 40.Rc1 Rc6 41.Rxc6 Qxc6 42.Nxe5 Qxe4 43.Nxg6 Qxg6 44.Qxc7 Qd3 45.Kh2 Qe4 46.Bf4 Qg6 (Time =

0:37, Depth = 2/13)

Slightly better is a7.}

39...Rxa6

{Score: 2.08 40.Rc1 Rc6 41.Rxc6 Qxc6 42.Nxe5 Qxe4 43.Nxg6 Qb1+ 44.Kh2 Qxg6 45.Qxc7 Qe4 46.Bf4 Qe6 47.f3 (Time =

0:38, Depth = 2/13)}

40.Rxa6

{Score: 1.30 40...Nxa6 41.Qd5 Qc7 42.Qb5 Qd6 43.Kh2 Nc7 44.Qc4 Kh8 45.g3 Qd7 46.Kg2 Ne6 (Time = 0:51, Depth = 3/13)

Slightly better is Rc1.}

40...Nxa6

{Score: 1.30 41.Qd5 Qc7 42.Qb5 Nb8 43.Qb4 Nc6 44.Qc4 Qb7 45.Nd2 Nd4 46.Bxd4 exd4 47.f4 (Time = 0:58, Depth = 2/12)}

41.Qd5

{Score: 1.39 41...Qc7 42.Qe6 Qb7 43.Qc4 Nb8 44.g3 Nd7 45.Kg2 Nf6 46.Nd2 Qd7 47.Qc3 Ne8 (Time = 1:31, Depth = 3/13)}

41...Qf6

{Score: 1.41 42.Qb7 Qd6 43.Nd2 Nb8 44.Qd5 Qa6 45.Nc4 Nc6 46.Qf7 Qa4 47.f3 Qa1+ 48.Kh2 Qe1 (Time = 0:55, Depth = 3/13)

}

42.Kf1

{Score: 1.26 42...Nb4 43.Qc4 Qd6 44.g3 Nd3 45.Nd2 Qa3 46.Nb1 Qd6 47.Nc3 Nb2 48.Qd5 Qa6+ 49.Nb5 Qc8 (Time = 0:46, Depth

= 3/14)}

42...Nb4

{Score: 1.26 43.Qc4 Qd6 44.g3 Nd3 45.Nd2 Qa3 46.Qb3 Qa6 47.Kg2 Nc1 48.Qc4 Qxc4 49.Nxc4 Nd3 50.f4 (Time = 0:59, Depth

= 3/14)}

43.Qd7

{Score: 1.16 43...Qc6 44.Qxc6 Nxc6 45.Ke2 Kg8 46.Kd3 Kf7 47.Kc4 Ke6 48.Kb5 Nb8 49.Nh4 Kf7 50.Bc5 (Time = 0:37, Depth =

3/13)}

43...Nc2

{Score: 2.47 44.Bxh6 Kxh6 45.Qd2+ Kh7 46.Qxc2 Qa6+ 47.Kg1 Qb6 48.g3 Bf6 49.Qc4 Kh6 50.Qd5 Qc7 51.Kg2 Qc3 52.Qd6 (Time

= 0:37, Depth = 3/14)

Slightly better is Qc6.}

44.Bxh6

{Score: 2.50 44...Kxh6 45.Qd2+ Kh7 46.Qxc2 Qa6+ 47.Kg1 Qb6 48.g3 Bf6 49.Qc4 Kg7 50.Kg2 Qd6 51.Qd5 Qxd5 52.exd5 e4

53.Nd2 (Time = 1:02, Depth = 4/15)}

44...Kxh6

{Score: 2.56 45.Qd2+ Kh7 46.Qxc2 Qa6+ 47.Kg1 Qb6 48.g3 Bf6 49.Qd3 Qc7 50.Qd5 Kh6 51.Kg2 Qc3 52.Qd6 (Time = 0:23,

Depth = 3/13)}

45.Ke2

{Score: -1.41 45...Nd4+ 46.Nxd4 exd4 47.Qb5 Qe6 48.Qd3 g5 49.Qc2 Qa6+ 50.Qd3 Qa2+ 51.Kf3 Qe6 52.Ke2 Qc6 53.f3 Qc3 (Time

= 0:38, Depth = 3/13)

Leads to 45...Nd4+ 46.Nxd4 exd4 47.Qb5 Qe6 48.Qd3 g5 49.Qc2 Qa6+ 50.Qd3 Qa2+ 51.Kf3 Qe6 52.Ke2 Qc6 53.f3 Qc3, which

wins a knight for a knight. Better is Qd2+, leading to 45...Kh7 46.Qxc2 Qa6+ 47.Kg1 Qb6 48.g3 Bf6 49.Qd3 Qc7 50.Qd5 Kh6 51.Kg2

Qc3 52.Qd6, which wins a knight.}

45...Nd4+

{Score: -1.41 46.Nxd4 exd4 47.Qb5 Qe6 48.Qd3 g5 49.Qc2 Qa6+ 50.Qd3 Qb7 51.f3 Be5 52.Qc4 Qb2+ 53.Kf1 Qa1+ 54.Ke2 Qc3

(Time = 0:40, Depth = 3/14)}

46.Nxd4

{Score: -1.38 46...exd4 47.Qb5 Qe6 48.Qd3 g5 49.Qc2 Qa6+ 50.Qd3 Qa2+ 51.Qd2 Qb1 52.f3 Kg6 53.Qd3 Qa2+ 54.Kf1 (Time =

0:22, Depth = 3/13)}

46...exd4

{Score: -1.34 47.Qb5 Qe6 48.Qd3 g5 49.Kf1 Qc8 50.Ke2 Bf6 51.f3 Qc3 52.Qxc3 dxc3 53.Kd3 Kg6 54.Kc2 (Time = 1:26,

Depth = 5/14)}

47.Qb5

{Score: -1.35 47...Qe6 48.Qb1 g5 49.f3 Bf6 50.Qb4 Qa2+ 51.Kf1 Kg6 52.Qb5 Qd2 53.Qf5+ Kg7 54.Qd7+ Kh6 55.Qc6 Kg6 (Time =

1:14, Depth = 5/14)}

47...Qe6

{Score: -1.38 48.Qb1 Be5 49.Qd3 g5 50.Qa3 Qc4+ 51.Qd3 Qc3 52.Qxc3 dxc3 53.Kd3 Kh5 54.f3 Kg6 55.Kc2 (Time = 0:56,

Depth = 4/13)}

48.Qd5

{Score: -2.44 48...Qa6+ 49.Kf3 Qd3+ 50.Kf4 Qd2+ 51.Kg3 d3 52.h4 Qe2 53.Qg5+ Kh7 54.h5 Qxe4 55.hxg6+ Qxg6 56.Qxg6+ Kxg6

57.Kf3 Bh6 58.g4 d2 59.Ke2 (Time = 1:00, Depth = 4/13)

Slightly better is Qb1.}

48...Qc8

{Score: -1.33 49.Qb3 Be5 50.Qd3 g5 51.f3 Qc6 52.Kf2 Qa4 53.Qe2 Qb3 54.Qa6+ Kg7 55.Qc6 Kf7 (Time = 0:58, Depth = 4/13)

Slightly better is Qa6+.}

49.Qa2

{Score: -1.39 49...Be5 50.Qd2+ g5 51.Qd3 Kg7 52.Qb3 Qa6+ 53.Kf3 Bf6 54.g3 Qf1 55.Qe6 d3 56.Qd7+ Kh6 (Time = 0:39, Depth

= 3/12)}

49...Qc6

{Score: -1.36 50.Qd2+ g5 51.f3 Kh5 52.Kf2 Qc5 53.f4 d3+ 54.Kf3 Qc2 55.g4+ Kg6 56.f5+ Kh6 57.Qe3 Qd1+ 58.Kf2 Bf6 (Time

= 0:55, Depth = 4/13)}

50.Qd2+

{Score: -1.40 50...g5 51.Qd3 Bf6 52.g3 Qc1 53.Kf3 Kg7 54.Kg2 Qc3 55.Qb5 Qc2 56.Qd7+ Kh6 57.Qf5 (Time = 0:30, Depth =

4/13)}

50...Kh7

{Score: -1.18 51.Qd3 Qd6 52.g3 Qe6 53.h4 Qa2+ 54.Kf1 Qa1+ 55.Ke2 Qb2+ 56.Ke1 Qc3+ 57.Ke2 Kg8 58.f4 Kf7 59.e5 Bh6

(Time = 1:04, Depth = 5/14)}

51.Kf3

{Score: -2.85 51...Qc4 52.g4 Qf1 53.Kg3 Qg1+ 54.Kf3 Qh1+ 55.Kg3 Qxe4 56.f3 Qc6 57.Qe2 Qc3 58.h4 d3 (Time = 0:42, Depth

= 4/13)

Pins own pawn at e4. Leads to 51...Qc4 52.g4 Qf1 53.Kg3 Qg1+ 54.Kf3 Qh1+ 55.Kg3 Qxe4 56.f3 Qc6 57.Qe2 Qc3 58.h4 d3,

which loses a pawn. Better is Qd3, leading to 51...Qd6 52.g3 Qe6 53.h4 Qa2+ 54.Kf1 Qa1+ 55.Ke2 Qb2+ 56.Ke1 Qc3+ 57.Ke2 Kg8 58.f4

Kf7 59.e5 Bh6, which does not result in any captures.}

51...Qf6+

{Score: -1.34 52.Ke2 Qe5 53.Qd3 Bf6 54.g3 Qh5+ 55.g4 Qe5 56.Kf3 Kg7 57.Qb3 Qh2 58.Ke2 Qh1 59.Qb7+ Kh6 (Time = 0:58,

Depth = 5/14)

Frees White's pawn at e4 from the pin. Leads to 52.Ke2 Qe5 53.Qd3 Bf6 54.g3 Qh5+ 55.g4 Qe5 56.Kf3 Kg7 57.Qb3 Qh2

58.Ke2 Qh1 59.Qb7+ Kh6, which does not result in any captures. Better is Qc4, leading to 52.g4 Qf1 53.Kg3 Qg1+ 54.Kf3 Qh1+

55.Kg3 Qxe4 56.f3 Qc6 57.Qe2 Qc3 58.h4 d3, which wins a pawn.}

52.Ke2

{Score: -1.33 52...Qe5 53.Qd3 Bf6 54.g3 Qh5+ 55.g4 Qe5 56.Qb1 Qf4 57.Qd3 Kg7 58.Qc2 Bh4 59.f3 (Time = 0:56, Depth =

4/13)}

52...Qh4

{Score: -1.36 53.Qd3 Bf6 54.g4 Qg5 55.Qb3 Bg7 56.Qc4 Qf4 57.Qe6 Qc1 58.h4 Qc2+ 59.Kf3 d3 60.e5 (Time = 1:25, Depth =

5/14)}

53.f3

{Score: -1.45 53...Qg3 54.Kf1 Qe5 55.Ke2 Bf6 56.Qc1 Qg3 57.Qf1 Qg5 58.Kd1 Qe3 59.Qe2 Qc3 (Time = 0:38, Depth = 4/13)}

53...Qg3

{Score: -1.55 54.Kf1 Bf6 55.Qa2 Qd6 56.Qd5 Qb6 57.g4 Qb1+ 58.Kg2 Qb2+ 59.Kf1 Qc1+ 60.Kg2 Qd2+ 61.Kg1 Qe3+ 62.Kg2 Qe2+

63.Kg3 d3 (Time = 1:16, Depth = 5/14)}

54.Kd3

{Score: -1.69 54...Bf6 55.Qe2 Qb8 56.Kc2 Qc7+ 57.Kb1 Bg5 58.Qc2 Qb6+ 59.Ka2 Qa6+ 60.Kb2 Bf4 61.Qb3 Qe2+ 62.Qc2 d3

63.Qxe2 dxe2 (Time = 0:58, Depth = 4/13)}

54...Bh6

{Score: -1.35 55.Qa2 Qd6 56.Qb3 Be3 57.Qb7+ Kh6 58.Qa8 Qb6 59.e5 Kg5 60.h4+ Kxh4 61.Qe4+ Kg3 62.Qg4+ Kf2 63.f4 Qb5+

64.Ke4 Qc6+ 65.Kd3 Qxg2 (Time = 1:33, Depth = 5/14)}

55.Qa2

{Score: -1.39 55...Qd6 56.Qd5 Qb4 57.Qxd4 Qd2+ 58.Kc4 Qxg2 59.Qd7+ Bg7 60.Qg4 Qc2+ 61.Kd5 Qd3+ 62.Ke6 Qd8 63.Qg3 Qb6+

64.Kd7 Bf6 (Time = 1:00, Depth = 4/13)}

55...Bg7

{Score: 0.00 56.Qd2 (Time = 0:30, Depth = 7/16)

Leads to 56.Qd2, which does not result in any captures. Better is Qd6, leading to 56.Qd5 Qb4 57.Qxd4 Qd2+ 58.Kc4 Qxg2

59.Qd7+ Bg7 60.Qg4 Qc2+ 61.Kd5 Qd3+ 62.Ke6 Qd8 63.Qg3 Qb6+ 64.Kd7 Bf6, which wins a pawn for a pawn.}

56.Qd2

{Score: -1.64 56...Bf6 57.Qe2 Qg5 58.Kc2 Qc5+ 59.Kd1 d3 60.Qxd3 Qg1+ 61.Ke2 Qxg2+ 62.Ke3 Kh6 63.Qd1 Bg5+ 64.Kd4 Qxh3

(Time = 1:01, Depth = 4/13)}

56...Qd6

{Score: -1.70 57.Ke2 Bh6 58.Qd3 Qb4 59.g3 Qb2+ 60.Kf1 Be3 61.Qe2 Qc1+ 62.Qe1 Qc4+ 63.Kg2 Qd3 64.Kh1 Qc2 (Time = 0:51,

Depth = 4/13)}

57.Qa2

{Score: -1.75 57...Qc5 58.Qc4 Qa3+ 59.Kc2 d3+ 60.Qxd3 Qb2+ 61.Kd1 Qxg2 62.h4 Qg1+ 63.Ke2 Qh2+ 64.Ke3 Qxh4 65.Qd6 Qe1+

66.Kf4 Qc1+ 67.Kg4 Qc8+ 68.Kg5 (Time = 0:55, Depth = 4/13)}

57...Qb4

{Score: -1.86 58.Ke2 Qb5+ 59.Kf2 Qc5 60.Ke2 Qg5 61.Kd1 d3 62.Qd2 Qb5 63.Ke1 Qb1+ 64.Kf2 Qc2 65.Ke1 Be5 (Time = 1:09,

Depth = 5/14)}

58.Ke2

{Score: -1.86 58...Qb5+ 59.Kf2 Qc5 60.Ke2 Qg5 61.Kd1 d3 62.Qd2 Qb5 63.Ke1 Qb1+ 64.Kf2 Qc2 65.Ke1 Be5 (Time = 0:58,

Depth = 4/13)}

58...Qc3

{Score: -1.33 59.Qd2 Qc5 60.f4 Qh5+ 61.Kf1 Qb5+ 62.Kf2 Qc4 63.g4 Bf8 64.f5 Bb4 65.Qb2 Qc3 66.Qxc3 dxc3 (Time = 0:37,

Depth = 4/13)}

59.Qd2

{Score: -1.29 59...Qb3 60.Qd3 Qb2+ 61.Qd2 Qb5+ 62.Kf2 Qc4 63.Qg5 Qc2+ 64.Kf1 d3 65.Qh4+ Kg8 66.Qd8+ Bf8 67.Qf6 Qc1+

68.Kf2 Bc5+ 69.Kg3 Qe1+ 70.Kg4 (Time = 0:57, Depth = 4/13)}

59...g5

{Score: -0.91 60.Qxg5 d3+ 61.Kf1 Bf6 62.Qf5+ Kg7 63.Qg4+ Kf8 64.Qf5 Ke7 65.Qh7+ Kd6 66.Qh6 Ke6 67.Qg6 Qc1+ 68.Kf2 Ke7

69.Qg8 (Time = 0:49, Depth = 4/13)}

60.Qd3

{Score: -1.27 60...Qc5 61.Qb3 Qc1 62.Qd5 Qe3+ 63.Kf1 d3 64.Qf5+ Kg8 65.Qc8+ Bf8 66.Qe6+ Kh8 67.Qc8 Qc5 68.Qxc5 Bxc5

(Time = 0:44, Depth = 3/12)}

60...Bf6

{Score: -1.05 61.Qxc3 dxc3 62.g3 Be5 63.h4 g4 64.fxg4 Bxg3 65.Kd3 Be5 66.Ke2 Kg6 67.Kd3 Bd4 68.Kc2 Bg7 (Time = 0:47,

Depth = 6/15)}

61.Qxc3

{Score: -0.96 61...dxc3 62.g3 Be5 63.h4 g4 64.fxg4 Bxg3 65.Kd3 Be5 66.Kc2 Bg7 67.Kd3 Kg6 68.Kc2 Bf6 69.Kd3 Kg7 (Time =

0:10, Depth = 10/17)}

61...dxc3

{Score: -0.91 62.g3 Be5 63.h4 g4 64.fxg4 Bxg3 65.Kd3 Be5 66.Kc2 Kg6 67.Kd3 Bd4 68.Kc2 Bf6 69.Kd3 Be5 70.Kc2 Kg7

71.Kd3 Bd4 72.Kc2 (Time = 0:54, Depth = 15/21)}

62.Kd3

{Score: -1.10 62...Be5 63.g3 Bxg3 64.Kxc3 Kg6 65.Kd4 Kf6 66.Kd5 Ke7 67.Kd4 Ke6 68.Ke3 Ke5 69.Kd3 Bf2 70.Ke2 Bc5 71.Kf1

Be7 72.Kf2 Kf4 73.Ke2 (Time = 0:47, Depth = 16/22)}

62...Kg6

{Score: -0.81 63.g3 Bd4 64.f4 Kh6 65.Kc2 Kh5 66.e5 Kg6 67.e6 Kf6 68.fxg5+ Kxe6 69.g4 Ke5 70.Kd3 Kf4 71.g6 Bg7 72.Kc2

Ke4 (Time = 0:49, Depth = 13/19)}

63.g3

{Score: -0.72 63...Bd4 64.f4 Kf7 65.e5 Ke6 66.Kc2 Ke7 67.fxg5 Ke6 68.h4 Kxe5 69.h5 Kf5 70.g6 Kg5 71.g4 Bg7 72.Kd3 Kxg4

(Time = 0:36, Depth = 12/18)}

63...Kh5

{Score: -0.73 64.f4 Bd4 65.Kc2 Kg6 66.Kd3 Kh6 67.Kc2 Kh5 68.Kd3 Kg6 69.Kc2 Kf6 70.Kd3 gxf4 71.gxf4 Ke6 72.h4 Kd7

73.h5 Ke6 (Time = 1:09, Depth = 13/19)}

64.f4

{Score: -0.49 64...Bd4 65.e5 Kg6 66.e6 Kf6 67.f5 Be5 68.g4 Ke7 69.Ke2 Bg7 70.Kd1 Bh8 71.Kc2 Bf6 72.Kd1 Bd4 73.Kc2 (Time

= 0:59, Depth = 12/18)}

64...Kg6

{Score: 0.00 65.e5 Bg7 66.Kxc3 gxf4 67.gxf4 Bh6 68.Kc2 Bxf4 69.Kd3 Bxe5 70.Kc2 Kf7 71.Kd2 Bd4 72.Kd3 Bg7 73.Kd2 Ke7

74.Kd3 (Time = 0:36, Depth = 12/18)}

65.e5

{Score: 0.00 65...Bg7 66.Kxc3 gxf4 67.gxf4 Bh6 68.Kd4 Bxf4 69.e6 Kg7 70.e7 Kf7 71.e8=Q+ Kxe8 72.Kd3 Kf7 73.Kd4 Bh6

74.Kd3 Bg5 75.Kc4 Bh6 (Time = 0:36, Depth = 12/18)}

65...gxf4

{Score: 0.00 66.gxf4 Be7 67.Kxc3 Kf5 68.Kd3 Kxf4 69.Ke2 Kxe5 70.Kd3 Kf5 71.Kd2 Kg6 72.h4 Bxh4 (Time = 0:13, Depth =

12/18)}

66.exf6

{Score: -9.21 66...fxg3 67.f7 Kxf7 68.Ke3 g2 69.Kf2 g1=Q+ 70.Kxg1 Kf6 71.Kf2 c2 72.Kf3 c1=Q 73.Ke4 Qh6 74.Kd4 Qxh3

75.Kc4 Qe6+ 76.Kd4 Qe5+ 77.Kd3 Qd5+ 78.Ke3 Ke5 (Time = 0:59, Depth = 9/15)

Yikes! Leads to 66...fxg3 67.f7 Kxf7 68.Ke3 g2 69.Kf2 g1=Q+ 70.Kxg1 Kf6 71.Kf2 c2 72.Kf3 c1=Q 73.Ke4 Qh6 74.Kd4 Qxh3

75.Kc4 Qe6+ 76.Kd4 Qe5+ 77.Kd3 Qd5+ 78.Ke3 Ke5. Much better is gxf4, leading to 66...Be7 67.Kxc3 Kf5 68.Kd3 Kxf4 69.Ke2 Kxe5

70.Kd3 Kf5 71.Kd2 Kg6 72.h4 Bxh4, which gains a queen and loses a bishop by comparison. This was white's key error. White was

not able to regain the lost ground and was eventually

mated.

}

66...fxg3

{Score: -9.34 67.Ke2 g2 68.Kd3 g1=Q 69.Kxc3 Kxf6 70.Kb4 Ke5 71.Kb5 Qf1+ 72.Kc6 Qxh3 73.Kc7 Qc3+ 74.Kb6 Qd3 75.Kc5

Qd5+ 76.Kb4 (Time = 0:35, Depth = 9/15)}

67.Ke2

{Score: -9.34 67...Kxf6 68.Kf3 c2 69.Kxg3 c1=Q 70.Kf2 Qf4+ 71.Ke2 Ke5 72.Kd3 Qf5+ 73.Kd2 Qxh3 74.Ke2 Qg4+ 75.Kd2 Qd4+

76.Ke2 Qe4+ 77.Kd2 (Time = 0:59, Depth = 8/14)}

67...c2

{Score: -9.00 68.f7 Kxf7 69.Kf3 c1=Q 70.Kxg3 Qg1+ 71.Kf4 Qh2+ 72.Kg4 Qg2+ 73.Kf4 Qxh3 74.Ke4 Qe6+ 75.Kd4 Kf6 (Time =

0:49, Depth = 6/12)}

68.Kd2

{Score: -9.29 68...c1=Q+ 69.Kxc1 Kxf6 70.Kd2 g2 71.Kd3 g1=Q 72.Ke4 Qg2+ 73.Kd4 Qxh3 74.Ke4 Qf5+ 75.Kd4 Qe5+ 76.Kd3 Qd5+

77.Ke3 Ke5 78.Kf2 (Time = 0:55, Depth = 5/11)}

68...g2

{Score: -9.05 69.Kxc2 g1=Q 70.Kd3 Qg3+ 71.Kd4 Qxh3 72.f7 Qg4+ 73.Kd5 Qf5+ 74.Kd4 Kxf7 75.Ke3 (Time = 0:26, Depth =

3/9)}

69.Kxc2

{Score: -9.13 69...g1=Q 70.Kb3 Qg3+ 71.Kb4 Qxh3 72.f7 Qg4+ 73.Kc5 Qf5+ 74.Kd4 Qxf7 75.Ke4 Qe6+ 76.Kf4 Qd5 (Time =

1:51, Depth = 4/10)}

69...g1=Q

{Score: -9.10 70.Kd3 Qg3+ 71.Ke4 Qxh3 72.Kd4 Qg4+ 73.Ke5 Qf5+ 74.Kd4 Kxf6 75.Ke3 (Time = 0:44, Depth = 3/8)}

0-1

When I was a child I watched with huge eyes movies like Hackers, enjoying the shenanigans of computer rebels fighting the stupid law enforcement and the "evil" hackers. Of course, there was also Angelina Jolie. Even then I knew that my pleasure was a guilty one: no way could the police be that stupid, no way it would be that easy to penetrate all kinds of systems and produce effects so flashy. A while after that I watched Skeet Ulrich in the movie Operation Takedown, which was a more realistic hacker movie (and one I think Skeet did a great job in). It depicted how Kevin Mitnick has been apprehended by the authorities. I really loved that movie, although it had a lot of eye rolling moments.



Fast forward to now, reading Ghost in the Wires, Kevin Mitnick's book about himself, practically a hacking autobiography, and I loved this book every bit as much as I liked those movies as a kid. Not only I couldn't leave the book out of my hands once I started reading it, but was shocked to see that reality is not that far away from what was depicted in hacking movies. It was also interesting to read how the script of Operation Takedown came to be, which Kevin considers defamatory and mostly untrue.



Long story short, Mitnick is a smart kid with a great memory, an absent father and no real friends. He starts dabbling with radio and telephones and manages to get access to phone systems way before computers where personal or connected to each other. He's a kid, though, and he gets caught a few times. Nobody seems to understand he does it just for the fun of it and he can't seem to understand why nobody gets him. In the end, pushed by the desire to challenge himself, but also by authorities baiting him all the time, he becomes a life long hacker and eventually gets caught.



A shocking part of the book is how easy it is to penetrate any system, not by whatever technical wizardry, but by simply tricking people into giving you information and access. Called "social engineering" it was Mitnick's strongest point and at several times in the book, when the technology would not allow him to enter one system or another, he would just abandon the tech stuff and go with tricking people. Already having knowledge on how to manipulate phone systems made that a lot easier, as well.



Another, less shocking, but utterly disappointing part is about authorities. Just as they are now about file sharing and whatever "crisis" they are in, law enforcement agencies are basing their entire existence on pure power of coercion, ignoring the rules that they themselves are enforcing and being motivated only by keeping that power in their hands. Technical morons, they only seem to be getting into the action when their pride is affected. In this book Kevin Mitnick dances around security personnel, local cops, FBI, NSA several steps ahead of them, but they only seem to really mind when newspapers start publishing articles that makes law enforcement look bad. And once they have him, caught only with the help of other hackers, they are using all the dirty tricks in the book to bring Mitnick to his knees. Nothing has changed from then to now, just look at cases like Gary McKinnon's. Intimidation is a bully's greatest strength. That's sad.



I would have to say that the most unexpected thing was the tone of the book, which is almost exuberant. Mitnick has not become a bitter and paranoid man after countless personal betrayals and authority abuse and he is not angry at all. If anything, the guy is happy to have lived as the lead actor in the "Myth of Kevin Mitnick", which has grown way bigger than the real person. There is a scene when he gets outside of a building and there are hundreds of fans there, shouting, and he looks behind to see if there is a celebrity around.



Bottom line: this is a book you can't miss. It is easy to read to the point of instantly addictive, it is well written with enough juicy technical details to keep one interested and, most of all, makes you feel good, even in the horrible moments of his detention. It makes one wonder, did Mitnick socially engineer himself into remaining an open and cool guy in the face of adversity? Or is it he had this strength all along and that is his most powerful "magic"?

and has 1 comment
I've always felt that a lot of movies and books lack realism, that when the hero survives and gets the girl, while the villains get their rightful punishment the whole story becomes null and void. Therefore I believed that the opposite of this - a character centric plot, a realistic story, unexpected outcomes - would spell a good story and wonderful books/movies. Such is the tale in A Song of Ice and Fire, the seven (until now) book saga that I am currently reading, in which A Dance with Dragons is the fifth book.



Imagine my surprise in discovering that the other extreme is just as bad. In ASOIAF, there is no real main character. A lot of heroes and villains to choose from, but, completely unexpected, heroes suffer and die, while villain prevail. Maybe it's the other way around. Maybe nobody truly prevails. Certainly they all suffer. So what is wrong with this picture? George R. R. Martin went too far. His tale is now more of an alternative history than a true story. Maybe the sixth book will be different, but how can it be and still remain faithful to the first five? How can it continue the way the story went so far without a pointless struggle, where random things happen to random people? I mean, if I like this, I should start reading history books. My father would be pleased, I am sure :)



A Dance with Dragons takes place in a period in time that mostly overlaps the fourth book. The author acknowledged that there were too many characters doing too much in that short amount of time and, rather than split the storyline in the middle and create the "left hanging" effect, he opted for a geographical (more or less) division of the plot.



I liked the book. It started with a lot of setup, and that is what most of the book is about, but it also got deeper into magic and Arya's assassin training and what Jon and Tyrion did. I would say they are my favourite characters so, in that respect, the fifth book is better than the fourth. Can't say more about it without ruining the fun, but I was not disappointed, only slightly annoyed to see that what I really wanted in a book I got and I was still not completely satisfied.



My theory is that the stern characters in the book represent Martin's own father, while Tyrion and Jon are reflections of his own persona. Sansa may be the clueless girl who broke his heart, while Arya would be his daughter or younger sibling. I am just theorizing here, as I have not read any bio information of the author. Perhaps he represented himself as Wun Wun :)



I am waiting for the sixth book to appear, but the second book in the saga appeared two years after the first, the third two years later, then five years, then six! At this rate the sixth book will be published in 2018, with Martin of 70 years of age and waiting for the seventh eight or nine years later.

A colleague of mine asked a question that seemed trivial, but then it revealed interesting layers of complexity: how would you build an algorithm for a random number in any integer interval assuming that you already have a function that returns a random binary bit? The distribution of the bit is perfectly random and so it should be that of your function.



My first attempt was to divide the interval in two, then choose the first or second half based on the random bit function. This worked perfectly for intervals of even length, but there were issues with odd sized intervals. Let's take the most basic version there is: we want a random number between 7 and 9. The interval has a size of 3, which is not divisible by 2.



One solution is to split it in half anyway, ignoring one number, then use the random bit function one more time to determine in which half the remaining number should be added. For example the random bit yields 1, so we add the odd number to the second half: 7,8,9 -> 7 and 8,9 . Now the random bit is 0, thus choosing the first half, which is 7. This sounds good enough, let's see how this works:



Possible random bit results:
  • 0 (7,8|9)
    • 0 (7|8)
      • 0 (=7)
      • 1 (=8)
    • 1 (=9)
  • 1 (7|8,9)
    • 0 (=7)
    • 1 (8|9)
      • 0 (=8)
      • 1 (=9)




The interesting part is coming when deciding (pun not intended) what type of probability we would consider. From the tree above, if we take the terminal leafs and count them, there are exactly 6. Each of the numbers in the interval appear exactly twice. There is a perfectly balanced probability that a number will appear in the leaf nodes. But if we decide that each random bit run divides the total probability by two, then we have a 50% chance for 0 or 1 and thus the probability that 7 would be chosen is 1/4 + 1/8 (3/8), the same for 9, but then 8 would have a 2/8 probability to be chosen, so not so perfect.



What is the correct way to compute it? As I see it, the terminal graph leaf way is the external method, the algorithm can end in just 6 possible states and an external observer would not care about the inner workings of the algorithm; the second is an internal view of the use of the "coin toss" function inside the algorithm. The methods could be reconciled by continuing the algorithm even when the function has terminated, until all the possible paths have the same length, something akin to splitting 7 in two 7 nodes, for example, so that the probability would be computed between all the 2 to the power of the maximum tree height options. If the random bit yielded 0, then 0, we still toss the coin to get 000 and 001; now there are 8 terminal nodes and they are divided in 3,2,3 nodes per numbers in the interval. But if we force this method, then we will never get a result. No power of two can be equally divided by 3.



Then I came with another algorithm. What if we could divide even an odd number in two, by multiplying it with two? So instead of solving for 7,8,9 what if we could solve it for 7,7,8,8,9,9 ? Now things become interesting because even for a small finite interval length like 3, the algorithm does not have a deterministic running length. Let's run it again:



Possible random bit results:
  • 0 (7,7,8)
    • 0 (7,7,7)
    • 1 (7,8,8)
      • 0 (7,7,8)... and so on
      • 1 (8,8,8)
  • 1 (8,9,9)
    • 0 (8,8,9)
      • 0 (8,8,8)
      • 1 (8,9,9)... and so on
    • 1 (9,9,9)




As you can see, the tree looks similar, but the algorithm never truly completes. There are always exactly two possibilities in each step that the algorithm will continue. Now, the algorithm does end most of the time, with a probability to end increasing exponentially with each step, but its maximum theoretical length is infinity. We are getting into Cantoresque sets of infinite numbers and we want to calculate what is the probability that a random infinite number would be part of one set or another. Ugh!



And even so, for the small example above, it does seem that the probability for each number is 25%, while there is another 25% chance to continue the algorithm, but if you look at the previous stage you have a 25% chance for 7 or 9, but no chance for 8 at all. If we arbitrarily stop in the middle of the algorithm, not only does it invalidate the result, but also makes no sense to compute any probability.



You can look at it another way: this new algorithm is splitting probability in three equal integer parts, then it throws the rest into the future. It is a funny way of using time and space equivalence, as we are trading interval space for time. (See the third and last algorithm in the post)



My conclusion is that the internal method of computing the probability of the result was flawed. As a black box operator of the algorithm I don't really care how it spews its output, only that it does so with an as perfect probability as possible (pun, again, not intended). That means that if I use the algorithm two times there is no way it can output equals amounts of three values. The probability can't be computed like that. If we use it a million times we would expect a rough 333333 times of each value, but still one would be off one side or another. So the two algorithms are just as good.



Also, some people might ask: how can you possible use the second algorithm for large intervals. You are not going to work with arrays of millions of items for million size intervals, are you? In fact, you only need five values for the algorithm: the limits of the interval (a and b), the amount of lower edge values (p), the amount for the higher edge (r), then the amount for any number in between (q). Example: 7778888888899999 a=7, b=9, p=3, q=8, r=5 . You split this in two and (for the coin toss of 0) you get 7778888 a=7, b=8, p=3, q=1 (don't care at this point), r=4. The next step of the algorithm you multiply by two p,q and r and you go on until a=b.



You can consider a simpler version though: there are three values in the interval so we need at least a number equal or bigger than three that is also a power of two. That means four, two coin tosses. If the coin toss is 00, the result is 7; if the coin toss is 01, the result is 8; for 10, the result is 9. What happens when you get 11? Well, you run the algorithm again.

and has 0 comments
UAC is the most annoying feature of Windows 7, one that just has to be specifically designed to annoy the user with useless "Do you want to" alerts. Not even regular alerts, but screen dimming modal panic dialogs. I want it off. There are several options to do that, but the automated way to get rid of UAC is to change a value in the registry. Here is the reg file for it:
Windows Registry Editor Version 5.00



[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]

"EnableLUA"=dword:00000000



Warning! If you don't know what a registry entry is, then you'd better not do anything stupid! Now, if I could dim the screen while you read that, I would be Microsoft material.



But I digress. In order to execute the reg file above you need to save it into a file with the .reg extension (let's say nouac.reg) and then load it with regedt32 /s nouac.reg. The /s switch removes any confirmation messages and silently loads the file into the registry effectively disabling UAC.



However, my laptop is in a domain with some ridiculous policies enforcing the UAC setting so that when I next restart the computer I get the annoying popups again. Now if I could only run nouac.reg at logoff, I would be all set. And we can do that, also. Just run gpedit.msc, go to User Configuration -> Windows Settings -> Scripts (logon/logoff) and double click logoff. Create a batch file that contains the line to load the registry file and then add it as a logoff script. All set.



Update: Hold the celebration. After I restarted my computer, the hated UAC was back. Either the script was not executed, or it doesn't work like that because the policy is enforced after logoff scripts or before logon. Drat it!

Ok, I am cheating now. I was feeling bad for not playing chess lately (or playing badly when I had other stuff to do, generating even more guilt) and having nothing to blog about except maybe books and also thinking about all the other directions of the blog that I failed to cover: programming, music, tech news.

So I bring you Brute force or intelligence? The slow rise of computer chess, which is an article about chess, it is from Ars Technica (tech news) and it involves some notions of programming. All I need for this to be complete is music!

Seriously now, I went to a friend's last night and played a bit of chess. We were both a little tired and drunk, so we played chess "for fun" (which translates to incredibly bad), but it really felt fun as opposed to playing a computer at a very low level. Why is that? I believe it is all about prioritization.

When a human plays, he is trying to use the principles of chess, but he doesn't have the time or mental resources to take each one and analyse each piece or position. Humans do use subconscious mechanisms to quickly scan a table, but that only comes with a lot of chess training. So basically, what a beginner human player is left with is finding a strategy that would quickly and (preferably) forcibly win the game. That means that we use something akin with the "Type B" algorithm from the article above. But it's not quite it, because it is a bit of everything, something that is traditionally hard to implement in a computer program (and that has more to do with the psychology of programming engineers than with a specific level of difficulty). Basically we look at the pieces, prioritised by their power and reach as well as their position relative to an area of attack or defence. That is why we don't see the queen or bishop in the corner of the table, because, looking in ever wider circles around the area we are focused on, we suddenly stop and start doing something else. Compare that with a computer which can take the measly 32 pieces on the board and computer in a few fractions of a second all their possible moves and the resulting board position.

Then, when we see a possible good move, we take it forward as many steps as we can. Does a chess beginner do a comprehensive tree of all possible moves in that scenario? Of course not. Not only we do not see all (or most) of the moves, but when we see a possibility for the opponent to play a counter move, we quickly analyse the likelihood that the other guy would see it and sometimes we even gamble that they won't do it, just because we wish they didn't. This is also psychological: the gambler way of thinking has been documented for a while, they are motivated by loss which gives them more of an adrenaline rush than winning or that makes winning ever sweeter; also the guy we play with is probably our friend and we partly root for the guy as well. Program that into a computer! I've had games where I took huge risks on the hope that my friend would a) not see the move, which would make me look good when playing a cool game and b) that he would see the move, making his game look cool, thus making the entire session interesting.

Back to programming, I think that the easiest way of implementing this kind of bad human play in a computer game is to take a normal computer algorithm for playing chess, like mini-max, then program a sort of Alzheimer routine, that would remove bits of its reasoning based on a probability computed from the following factors: proximity of pieces to a region of interest (which would also have to be defined, but let's just assume it would be the average of positions of the pieces involved in the current line of thought), the artistic value of a line of thought (which would be defined either by massive sacrifices for important gains, or by how severely we limit the opponent options - in other words: power), the probability that the opponent would see a move (computed based on current history of play) and also by the artistic value of the entire game, as described in the last paragraph.

In other words, what I am proposing here is that we have a perfect algorithm for playing chess, one that is limited by computing power alone. What we don't have is a good algorithm for bad play, for fun play. Most computer programs I've seen, including ChessMaster, which boasts with its ability to simulate human players of varying abilities, have incredibly stupid ways of limiting performance. For example: a knight wants to attack f7, the black soft spot; it has plans to move a bishop there as well. I move a pawn to prevent the bishop from attacking that spot and the computer takes with the knight, sacrificing a minor piece for a pawn and my king's ability to castle. Or a rook attacks a knight. It then takes the knight, even if defended. In other words, random, pointless moves. Every human move is purposeful, even if the purpose if flawed by bad judgement. Random moves won't do, they have to be moves that follow a plan, no matter how bad that plan is. We need a perfect algorithm for throttling the playing chess level. We need to look at human bad games, make their own chess database, extract rules for bad play and implement this into computers.

and has 0 comments
Kary Mullis is a chemist who, in 1983, invented Polimerase Chain Reaction, something that would revolutionize DNA analysis in terms of increased speed. He won the 1993 Nobel prize for that. He also is a controversial scientist who claims possible alien encounters and telepathy, denies global warming as an effect of human intervention, is skeptic about HIV causing AIDS and generally believes that most scientists are inventing reasons to get funded rather than doing anything scientific. He also admits smoking pot, taking LSD and generally experimenting with any mind altering chemical that he can make. He likes women and some of them like him. That is what this book is all about, a sort of "I am Kary Mullis, hear me roar!".

I started reading the book because I was falsely led to believe that he describes how training his mind with LSD lead him to the idea of PCR. The book is not about that at all, and if the article above is true about Mullis had an advantage over his colleagues: he had trained his brain to think differently by using hallucinogenic drugs, there is no mention of that in this book.

It is simply an autobiography, but written with gusto and sincerity. Some of the things he says are both logical and hard to accept (because so many others are of opposite views), some of them are simply personal beliefs. As many a talented person, he is intelligent, he had early opportunity to practice his passion (chemistry), a close friend to share it with and support from a local chemistry business owner who kind of adopted him for the summers and gave him the tools he needed to grow. The way he writes his book reminds me of the style of another scientist friend of mine: devoid of bullshit and intolerant of stupidity.

Bottom line, it is a nice book, simply written, short, I've read it in a few hours. It is a window in the life of an interesting person, and as such, I liked it. I can't say I've learned much from it, though, and that is somewhat of a disappointment coming from a book written by a man of science.

and has 1 comment
The Art of Learning is a wonderful book, both concise and useful, with tremendous sources for inspiration at every level. It also has more meaning to me, as it started with an investigation in the life of Josh Waitzkin, prompted by my renewed attention to chess.
To start from the beginning, I've first heard of Josh Waitzkin when I've started going through the "academy" section of ChessMaster XI. The first chapter in this section was Josh Waitzkin's academy, which taught with examples of both life and game. I was intrigued, so I looked the guy up. This way I found references to Searching for Bobby Fischer, a Hollywood movie about the early life of chess prodigy Josh Waitzkin, based on a book by his father. I watched the film, with both positive and negative feelings, but at the most I was even more intrigued. I then found out about the two books that Josh wrote: Attacking Chess and The Art of Learning and started reading the latter, since I had to read it on my old Palm in the subway and I am not yet at the level in which I can mentally visualize chess notation.
The Art of Learning is everything I wanted in a book about learning: the personal introspective view, the theory of learning and its mechanics, clear examples and methods of achieving the same results. Frankly told, I doubt many people can learn at the same speed as Josh Waitzkin can - clearly the guy is a genius - but there are insights in this book that blew me away.
The book is structured in three parts:
  • The Foundation - describing the early experience of learning, the downfalls, the insights, the situations in which Josh found himself as a child discovering the game of chess and then becoming National chess champion.
  • My Second Art - the part where he finds less peace in chess and decides to abandon it in favor of the martial art of Tai Chi Chuan, which centers him and presents new opportunities for learning. Here similar principles are found to the ones related to chess.
  • Bringing it All Together - where Waitzkin describes methods for identifying your own method of learning and reaching the state of mind most conducive to high performance

It all ends with a climactic Taiwan International martial arts championships that Josh wins, overcoming adversity and malevolent judges, a story that rivals any of Van Damme's movies, but also shows where the inspiration for those came from.

There are some ideas that I could understand immediately, seem obvious, but I've never thought of before:
One of them is that the unconscious mind acts like a high speed parallel processor, while the conscious mind is a serial decisional engine. An expert in a field does not think faster than a beginner; he only placed many of the underlying principles in the subconscious, running them at high speed, and leaving the conscious mind decide, like a manager, from the granular information that is precomputed and available. That makes sense at the smallest biological level. Think of the frog eye that sends a yes/no signal through the optical nerve when a fly enters the field of view - the frog does not have to decide if what it sees is a fly or not. But it also explains quite clearly the effect of training, something that I, to my shame, had not understood until now. Training is not simply learning, it is also moving the information downwards, "internalizing" it, as Waitzkin calls it. GrandMasters do not think about the possibilities on the chess board from the bottom up, they already see structure and work directly with the aggregated, higher level information. Martial arts experts don't count the steps in a complicated move, they just make them. Normal people do not put a foot in front of the other, they walk, they don't string words up, they speak.
Another idea is that the process of learning, done in small increments, allows the direct internalization of concepts before we use them in combinations. First move a few pieces until you know how they work, don't start with complicated chess games. Reduce the scope of your training and the internalization will come a lot faster. Then, in a complex game, you just use the things you have learned previously. When training to fight, train each small move before you start combining them.
This is an important idea in The Art of Learning: the difference between what Waitzkin calls entity-learning and process-learning. Entity learners will try to find the quick way out, find the small trick that get the problem done; they will care only about the end result, collapsing under the fear of losing. The process learner would enjoy the challenge, see each problem as something that can be solved if attacked metodically and chipped away at bit by bit. They will value the process of learning over the end result. An entity learner will try to learn as much as possible, in the end reaching mediocre levels of understanding in all fields, while a process learner will take each process as far as possible before engaging another. Process learners would say "I didn't learn enough" when losing, while entity learners would say "I wasn't good enough".
I am sorry to say that I apparently fall towards the entity-learner category. It is obvious that must change and I hope it can. What I gathered from this concept is that entity learners identify themselves with the solution of a problem. Losing makes them losers, winning makes them winners. Process learners identify themselves with the process of learning, making them bad or good learners. A very good point Josh makes is that the type of learning is usually caused by the way parents reacted to the early success of their children and also that it can be changed, it is not set in stone like just another cemmented childhood psychological baggage.
An interesting thing about the book is that it also provides some mechanisms to improve, to reach that "zone" of serenity and presence in the moment. Borrowing from Taoist concepts, Josh Waitzkin advocates leaving in the moment, being present, aware, and he provides methods to train to reach that present state at will. I find that very interesting.

In the end I would call this one of the most useful books I've read and I certainly intend to improve on myself using some of the guiding principles in it. Josh is an extremely competitive and intelligent person and, given the opportunity of having good and talented parents, made the best of it. I am not saying that all can reach the same level of success and internal balance, but it is surely refreshing to see one of these great people lowering themselves to the level of the normal guy and giving him a few pointers. That is exactly what The Art of Learning is.

I guess it is finally official: I am now a corporate employee. While the previous company I worked with was nice in terms of the people there and the technology used, I got bored. I blame myself for getting depressed when assigned disconnected UI tasks and when singled out socially. It shouldn't have mattered. Surely I could have worked on overcoming adversity and improving my development methods, no matter how boring the task at hand.

However, bored I did get and when a big corporate company approached me with a job offer, I was intrigued. This is a long story, though, because I passed their phone screening, their 6 hour long technical interview and got the approval of the top brass yet in another interview, all some time at the end of March. This coincided with my birthday so I thought it was like a present to myself: an opportunity to learn new things, work in an environment I was scared of, but which was different and exciting, not the mention better payroll, although that didn't matter that much.

So, why am I writing this blog entry now, at the end of July? Because I only got hired two days ago. Budgetary strategy, corporate decisional speed and pure bad luck (I hope) pushed the employment date for four stressful and uncertain months. And I am not even fully employed, I am a contractor with an intermediary for the time being.

I can't tell you yet how things truly are in the new company. People are certainly more professional and yet relaxed, not at all like the stick-in-the-ass image I had (well, most of them). Frankly, these people are more geek and less social monkey than some of the juniors at my last job, which is great. On the other hand, until I start actual work (which will take another two weeks of gruelling meetings and annoying bureaucracy) I will not know how (and if) this company gets anything done.

Certainly, a quad-core laptop with 8Gb of RAM and SSD harddrive will decrease developing time (I used to watch movies and read books while compiling projects at the old job). They also seem very communicative (to the point of never stopping from talking about a project), which is something I am less used to and I welcome gladly. They encourage and help with personal development and good development techniques, like TDD and a commitment to Scrum. And if you don't know something, people are not sneering, but offering to help. So far, I can't complain (and you know me, I am so good at it).

I will be working on an ASP.Net CRM project, something evolving from an older VB ASP.Net 1.0 thing to a C# ASP.Net MVC monster. Hopefully, this will reignite my passion for development, rather than reassert my disgust with web work. So you will see Javascript and ASP.Net posts again soon and not so much WPF. Too bad, I really liked that particular technology.

So, wish me luck!