<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DE4AQnw4fSp7ImA9WhRbFEU.&quot;"><id>tag:blogger.com,1999:blog-8134400</id><updated>2012-02-06T01:09:03.235+01:00</updated><category term="linux" /><category term="dev" /><category term="photo" /><category term="xmpp" /><category term="game" /><category term="chess" /><category term="AI" /><category term="rails" /><category term="openmoko" /><category term="internet" /><category term="life" /><title>MickTaiwan's Blog</title><subtitle type="html">It does not matter how slow you go so long as you do not stop. — Confucius</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://micktaiwan.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>134</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MicktaiwansBlog" /><feedburner:info uri="micktaiwansblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>MicktaiwansBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;A0MHRHc9cSp7ImA9WhRSGUU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-5215533528623369012</id><published>2011-11-22T20:01:00.002+01:00</published><updated>2011-11-22T20:17:15.969+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T20:17:15.969+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AI" /><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><title>Weewar</title><content type="html">&lt;div&gt;If you know me, you know that I am a big fan of programming games.&lt;/div&gt;&lt;div&gt;My first attempt was &lt;a href="https://sites.google.com/site/faivrem/antbattle"&gt;AntBattle&lt;/a&gt;. But it never took off.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well I found a very good  development platform: &lt;a href="http://weewar.com/"&gt;Weewar&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;Here you can play a great game, &lt;i&gt;and&lt;/i&gt; develop your bot (my favorite type of games), thanks to the &lt;a href="http://weewar.wikispaces.com/Eliza"&gt;Weewar API&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My first bot &lt;a href="http://weewar.com/user/ai_ChuckBot"&gt;ai_ChuckBot&lt;/a&gt; is performing very bad, but uses a very simple algorithm.&lt;/div&gt;&lt;div&gt;My second bot &lt;a href="http://weewar.com/user/ai_horus"&gt;ai_horus&lt;/a&gt; will use more advanced techniques.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can follow the development on &lt;a href="https://github.com/micktaiwan/weewar-bot-platform"&gt;GitHub&lt;/a&gt;&lt;/div&gt;&lt;div&gt;See you later, and play Weewar while waiting Horus !&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-5215533528623369012?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/R-DVVUm2B21Gbtx6-5NoV9Mp10g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R-DVVUm2B21Gbtx6-5NoV9Mp10g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/R-DVVUm2B21Gbtx6-5NoV9Mp10g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R-DVVUm2B21Gbtx6-5NoV9Mp10g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/00FBf4MvlEU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/5215533528623369012/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=5215533528623369012" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/5215533528623369012?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/5215533528623369012?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/00FBf4MvlEU/weewar.html" title="Weewar" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/11/weewar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4GRXc8eCp7ImA9WhRSE0s.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-6735695005338617605</id><published>2011-11-15T14:53:00.003+01:00</published><updated>2011-11-15T15:38:44.970+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-15T15:38:44.970+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AI" /><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><title>Developing a programming language</title><content type="html">&lt;div&gt;
&lt;b&gt;Context free grammar compilers&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
A few year back I created a relational calculator, that is, a algebraic calculator working on &lt;a href="http://en.wikipedia.org/wiki/Set_theory"&gt;sets&lt;/a&gt; rather than numbers,  called "Rel". You could do A = {1,2}; B={2,3}; C = AUB (A union B) and it happily answered C={1,2,3}. A*B (intersection of A and B) A in B (inclusion) =&amp;gt; false, transitions, etc... It could even output a tree graph (coded by hand, no  &lt;a href="http://www.graphviz.org/"&gt;Graphviz&lt;/a&gt; at this time)&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I wrote it in C++ with a context-free grammar parser called St-Jean developed by my &lt;a href="http://crim.fr/"&gt;CRIM&lt;/a&gt; teacher Claude Del Vigna.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I never found another so simple to use parser. I mean, look at &lt;a href="http://www.antlr.org/"&gt;ANTLR&lt;/a&gt;. So powerful. But so complicated. And now my main language of choice is Ruby. ANTLR can compile and generate Ruby, but i is painful. Then Ruby has &lt;a href="http://treetop.rubyforge.org/"&gt;Treetop&lt;/a&gt;. But I never got to use it due to its very light documentation. Well, the search is over, meet &lt;a href="http://kschiess.github.com/parslet/"&gt;Parslet&lt;/a&gt; !&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Parslet is so cool&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
OK, I don't want to write another article about it. Just read &lt;a href="http://www.rubyinside.com/parslet-a-simple-peg-parser-framework-for-ruby-4187.html"&gt;that&lt;/a&gt;:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;i&gt;&lt;a href="http://kschiess.github.com/parslet/"&gt;Parslet&lt;/a&gt; is a new "simple parser framework" for Ruby built by Kaspar Schiess. It follows the PEG (parsing expression grammar) style of parsing and its primary goals are to be simple, testable, and to have extensive and powerful error reporting features (something that Kaspar states &lt;a href="http://treetop.rubyforge.org/"&gt;Treetop&lt;/a&gt; sorely lacks).&lt;/i&gt;&lt;br /&gt;
&lt;div style="text-align: -webkit-auto;"&gt;
&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="line-height: 25px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Calculette&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So I wrote &lt;a href="https://github.com/micktaiwan/Calculette"&gt;Calculette&lt;/a&gt;. For now it does almost nothing. With this &lt;a href="https://github.com/micktaiwan/Calculette/blob/master/types/grammar.rb"&gt;grammar&lt;/a&gt;, you can write:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;code&gt;
# Arithmetic&lt;br /&gt;
&lt;br /&gt;
a = 1&lt;br /&gt;
b = a+2&lt;br /&gt;
c = a/b # a is casted to floated first&lt;br /&gt;
&lt;br /&gt;
# Functions&lt;br /&gt;
&lt;br /&gt;
def cube(a)&lt;br /&gt;
a*a*a&lt;br /&gt;
endf&lt;br /&gt;
&lt;br /&gt;
# call the defined function&lt;br /&gt;
a = cube(5) + 2 # =&amp;gt; 127&lt;br /&gt;
&lt;br /&gt;
&lt;/code&gt;
Developing Calculette is so fun ! But now what ?&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Ideas ?&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I don't know what to do from there :)&lt;/div&gt;
&lt;div&gt;
Maybe I will use it to write a programming language that ease the development of artificial intelligences ? Or a Ant game with scripting ? I don't know yet, any idea welcome :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-6735695005338617605?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/87OpsgdYjAJKKHBEyonYz7HsHm4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/87OpsgdYjAJKKHBEyonYz7HsHm4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/87OpsgdYjAJKKHBEyonYz7HsHm4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/87OpsgdYjAJKKHBEyonYz7HsHm4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/VYskYsRbzs0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/6735695005338617605/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=6735695005338617605" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/6735695005338617605?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/6735695005338617605?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/VYskYsRbzs0/developing-programming-language.html" title="Developing a programming language" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/11/developing-programming-language.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MDSHY4eip7ImA9WhRSGUU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-2424644311423616542</id><published>2011-07-02T17:30:00.003+02:00</published><updated>2011-11-22T20:17:59.832+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T20:17:59.832+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="chess" /><title>Move tree</title><content type="html">&lt;div style="text-align: left;"&gt;&lt;b&gt;Move tree&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La recherche par  "iterative deepening" s'est transformée en une class "MoveTree". Et depuis, je n'ai plus blogué car j'ai amélioré cette classe, avec une moyenne d'un commit par jour. Je me suis aussi amusé avec &lt;a href="https://github.com/glejeune/Ruby-Graphviz"&gt;GraphViz&lt;/a&gt;, &lt;a href="https://github.com/rsmik/FicsBot"&gt;FicsBot&lt;/a&gt; et... &lt;a href="https://plus.google.com/"&gt;Google+&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bref je suis toujours dessus !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Voici ce que donne un arbre&lt;a href="https://9099831083452856398-a-1802744773732722657-s-sites.googlegroups.com/site/faivrem/home/myteacher/best_node.svg?attachauth=ANoY7coXzGXkGJ9y7193hiYrMHOlx69vB-vmHzKX2r7DN6_H-2komMNTdKyEWAQQI6-yftChQaIwVkfDR8ehX0FsMvIXG9ICrWpKly1ZIZbO53Wcaj9NG_45ZwzB8uGY7T6fQ5UPk8xYK6SR2z33EsIMKM71gRIBWqNNAcMZTRRUzQCzYqz9sQQ2uZ6_ZtY2wFudTndaWzG-ms6wPdcjvICUuQxAtu52lg%3D%3D&amp;amp;attredirects=0"&gt; de recherche avec GraphViz&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;Performances&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;J'avais oublié de vous dire dans le post précédant qu'en utilisant la nouvelle technique de vérification des mouvements légaux, j'ai divisé par 3 le temps qu'il met à générer les mouvements légaux ! Mais c'est encore lent, puisqu'en générant tous les mouvements sans pruner les mouvements non légaux je divise par 7 le temps qu'il lui faut ! J'ai encore de la marge....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Je fais donc perft 4 en 1m09 au lieu de 3m14 (alors que n'importe quel moteur le fait en moins d'une demi seconde). Et j'ai gagné 20% de temps avec la nouvelle façon de générer les captures.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mais le moteur est encore trèèès lent. Et c'est bien cela occupe mon temps en ce moment.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;La suite&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;- optimize moves generation to go to full depth 2&lt;/div&gt;&lt;div&gt;- know where the time is spent (quiesce?)&lt;/div&gt;&lt;div&gt;- do not prunes tactical moves&lt;/div&gt;&lt;div&gt;- 3 repetition rule with hash table&lt;/div&gt;&lt;div&gt;- Finish LMR&lt;/div&gt;&lt;div&gt;- opening book&lt;/div&gt;&lt;div&gt;- Setup a match routine between different versions of MyTeacher to see ELO improvements ! :)&lt;/div&gt;&lt;div&gt;- use mongodb for persistent Hash table ?&lt;/div&gt;&lt;/div&gt;&lt;div&gt;- FICS interface&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-2424644311423616542?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qnthIKxMFp87Zf-QphGgXf_06YE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qnthIKxMFp87Zf-QphGgXf_06YE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qnthIKxMFp87Zf-QphGgXf_06YE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qnthIKxMFp87Zf-QphGgXf_06YE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/nfK6ynOcNyo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/2424644311423616542/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=2424644311423616542" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/2424644311423616542?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/2424644311423616542?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/nfK6ynOcNyo/move-tree.html" title="Move tree" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/07/move-tree.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MDSHY_eCp7ImA9WhRSGUU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-4715856922221168714</id><published>2011-06-12T18:27:00.010+02:00</published><updated>2011-11-22T20:17:59.840+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T20:17:59.840+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="chess" /><title>Ca avance !</title><content type="html">Beaucoup de changements depuis le dernier post ! En fait, je m'aperçois que j'ai pas envie de tout expliquer ici. Ce blog devient vraiment pour des connaisseurs, désolé...&lt;br /&gt;&lt;br /&gt;Et avant de commencer, je conseille cet IDE:&lt;br /&gt;Geany: &lt;a href="http://www.geany.org/"&gt;http://www.geany.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Magic bitboards&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En plus des rois et cavaliers, j'ai fait les déplacements des tours avec des magic bitboards.&lt;br /&gt;Résultat: 4% de gain de perf. Tout ça pour ça ? (J'y ai passé du temps....)&lt;div&gt;&lt;br /&gt;Je gagne autant avec quelques améliorations de code Ruby (moins d'assignation de variables temporaires par exemple)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Les perfs justement...&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;40% de gagné (7m au lieu de 12) juste en enlevant &lt;b&gt;l'éval de la mobilité,&lt;/b&gt; qui ne sert pas à grand chose finalement car le jeu (les déplacements joués) reste à peu près le même. Enorme !&lt;br /&gt;&lt;br /&gt;45% de gain avec la &lt;b&gt;nouvelle façon de vérifier les mises en échec&lt;/b&gt; pour générer les coups légaux! Enorme!&lt;br /&gt;&lt;br /&gt;Au lieu de générer tous les coups, et voir si un coup prend le roi, je met une piece à la place du roi et je vois si elle ne prend pas la même pièce de couleur opposée. Ca s'appelle &lt;i&gt;"la super méthode que j'ai trouvée sur cette page"&lt;/i&gt;: &lt;a href="http://www.sluijten.com/winglet/11movegen05.htm#isAttacked"&gt;http://www.sluijten.com/winglet/11movegen05.htm#isAttacked&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Faster method: to test if a case is being attacked, we reverse the perspective: for example, in order to see if square b3 is attacked by a black knight, we place a (hypothetical) white knight on square b3 and see if this white knight can capture a black knight. If the answer is yes, then the black knight is also attacking the white knight's field.&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Sinon, j'ai gagné énormément de temps avec les null move reduction et les LMR. Les LMR ne sont pas encore bien finis, mais c'est suffisant pour l'instant.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quiescence finie !&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;J'ai enfin fini... Là par contre ça fait perdre des perfs... 8 minutes pour un coup qui prend 30 secondes d'habitude. Puis avec la fonction SEE (static exchange evaluation) je regagne 82% et je retombe à 54 secondes. Mais ça dépend énormément des positions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;L'avantage par rapport aux 30 secondes qui étaient limitées à 3 plis, c'est que je ne suis plus limité justement. Les captures s’enchaînent jusqu'à ce qu'il y en ai plus ou que la SEE soit négative (j'élague - ou "prune" - seulement les échanges perdants).&lt;div&gt;&lt;br /&gt;Mais au final je perds en performances... beaucoup... Il faudra que je fasse d'autres prunings. Je fais déjà du delta, il faut voir si ya pas autre chose à part l'ID (Iterative Deepening)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;WAC strength suite&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;J'ai rajouté une fonction d'évaluation de la force du moteur (strength evaluation) avec une suite de tests qui s'appelle WAC.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;C'est une liste de positions connues avec la désignation du meilleur coup possible. Si le moteur trouve le meilleur coup en moins de 10 secondes (par exemple), le moteur est bon. Pour l'instant, il met jusqu'à 6h pour 247 problèmes (sur 300 que contient la suite) pour finalement trouver que 19% des problèmes... Un peu nul mon moteur pour l'instant. N'empêche qu'il est dur à battre déjà :) Il s'arrêtte à depth=3 pour l'instant mais avec l'iterative deepening, il ira plus loin.&lt;br /&gt;&lt;br /&gt;Les résultats ressemblent à ça:&lt;br /&gt;&lt;span class="Apple-style-span"&gt;Depth-first, depth: 1, quiescence depth = 3&lt;br /&gt;On 300 problems, 268 (89%) were not found. Total time: 4m31&lt;br /&gt;Depth-first, depth: 2, quiescence depth = 3&lt;br /&gt;On 300 problems, 244 (81%) were not found. Total time: 1h11m47&lt;br /&gt;Useless iterative, depth: 3, quiescence depth = 3&lt;br /&gt;On 247 problems, 200 (81%) were not found. Total time: 6h25m31&lt;br /&gt;Autre test avec depth = 3 mais sans les itérations si je me souviens bien:&lt;br /&gt;On 73 problems, 50 (68%) were not found. Total time: 44m45&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Avec les derniers changements (notamment la supression de la limite de la quiescence qui était juste là pour pas que je m'endorme devant un test) une recherche complète à 3 plis du premier problème prend 52 min... pour finir par ne pas trouver la solution.&lt;br /&gt;Je vais mettre ce premier problème à la dernière place :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Interative deepening&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Et le plus important est à venir: l'iterative deepening avec le classement des coups afin d'arriver au final à faire du LMR (late move reduction). Tout ce jargon pour dire qu'il faut arriver à terme à ne pas calculer tous les coups, mais seulement les meilleurs présentis afin de gagner du temps et aller plus loin dans la profondeur.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Je voulais pas commencer avant de faire les tests de force, afin de voir l'amélioration du moteur. Puis j'ai finalement fini la quiescence. Bref.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Evidemment l'itérative deepening ne sert à rien si on ordonne pas les coups par leur score et si on ne reprend pas l'état de la recherche de l'itération précédente. Il faut tout faire d'un coup. Et c'est compliqué. Enfin... déjà à comprendre... avant de commencer à coder :)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Voilà, j'y bosse tous les jours pratiquement. Et demain c'est férié et je me retrouve coincé avec une entorse et une atèle... donc... devs en vue ! :)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-4715856922221168714?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UTgL3aVAX9_ffumMLh7GXtpwGRI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UTgL3aVAX9_ffumMLh7GXtpwGRI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UTgL3aVAX9_ffumMLh7GXtpwGRI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UTgL3aVAX9_ffumMLh7GXtpwGRI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/UPzrYrRD8_Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/4715856922221168714/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=4715856922221168714" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/4715856922221168714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/4715856922221168714?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/UPzrYrRD8_Y/ca-avance.html" title="Ca avance !" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/06/ca-avance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MDSHY_fCp7ImA9WhRSGUU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-8192397217212180380</id><published>2011-06-04T23:50:00.003+02:00</published><updated>2011-11-22T20:17:59.844+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T20:17:59.844+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="chess" /><title>Bitboards : ça y est, on y va</title><content type="html">&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Petite page&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;J'ai fait cette page en anglais pour présenter MyTeacheR et résumer l'état des développements.&lt;/div&gt;&lt;div&gt;&lt;a href="https://sites.google.com/site/faivrem/home/myteacher"&gt;https://sites.google.com/site/faivrem/home/myteacher&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Bitboards précalculés&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Après pas mal de recherche de bugs (et il en reste)&lt;b&gt; j'ai commencé à générer les déplacements avec des bitboards précalculés&lt;/b&gt; (définition plus loin).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Depuis le début je représente les positions avec des bitboards, mais je ne les utilise pas pour générer les déplacements. Je génère les déplacements à la volé ("sur la mouche" comme disent les anglais) et sans faire appel à la puissance des bitboards.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Définition: un bitboard, c'est juste un nombre.&lt;/div&gt;&lt;div&gt;27, c'est un bitboard. Sous sa forme binaire, il pourrait représenter les positions des pions blancs par exemple. 27 en binaire c'est 11011, ça voudrait dire que sur la première case il y aurait un pion blanc, sur la deuxième aussi, pas sur la troisième, etc.... On peut aussi représenter les déplacements. Et on peut aussi faire des calculs de déplacements génériques avant même que le programme se lance vraiment pour gagner du temps ensuite. D'où le terme bitboards précalculés.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Et ben on dirait pas, mais représenter le plateau ("board") avec des 0 et 1 ("bit") permet de générer les déplacements très rapidement car les calculs se font sur de &lt;b&gt;simples nombres&lt;/b&gt; et non pas sur des structures compliquées de données. Les bitboards sont nos amis. Il existe un nombre important de techniques basées sur les bitboards. Certaines sont mêmes magiques ! Peut-être que je ferai un post quand j'en arriverai à coder avec des "&lt;a href="http://chessprogramming.wikispaces.com/Magic+Bitboards"&gt;magic bitboards&lt;/a&gt;" ! Mais j'en suis pas encore là. Pour l'instant, MyTeacheR reste 10 000 fois plus lent que n'importe quel autre moteur et joue mal, c'est à dire mieux que moi mais avec des bugs :) En vous passant les détails, je m'attends à voir de grosses améliorations de performances en utilisant les bitboards pour la génération des déplacements. On verra quand j'aurai fini :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Performances&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sinon je m'amuse toujours à faire des tests de perfs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;C'est une position connue, utilisée pour les tests de performance justement.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Il aura fallu &lt;b&gt;1h 50m et 21s&lt;/b&gt; à MyTeacher pour aller au niveau 3 (blancs jouent, puis noirs, puis blancs).... Et encore... avec une quiescence elle aussi limitée à 3 plis. (J'expliquerai peut-être la quiescence dans un autre post). &lt;a href="http://www.rocechess.ch/rocee.html"&gt;ROCE&lt;/a&gt; a mis 0.01s à aller au niveau 3... &lt;b&gt;662100&lt;/b&gt; fois plus rapide.... J'ai du boulot :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;La suite&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Il faut d'abord que je trouve les bugs de Perft(4) avant de continuer à recoder le générateur de déplacement. Pour cela je vais coder une fonction "divide", pour ceux qui connaissent (pas envie d'expliquer tout ce que je fais non plus), et me baser sur les résulats de &lt;a href="http://www.rocechess.ch/rocee.html"&gt;ROCE&lt;/a&gt; pour faire des comparaisons et trouver l'origine des bugs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Puis je recoderai les déplacements avec les bitboards précalculés. Puis je referai des tests de performance. Je trouverai que mon moteur n'est plus que 123000 fois plus lent et je continuerai à itérer :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Puis l'iterative deepening pour pouvoir controller le temps de jeu (sans ça on est obligé d'attendre que le moteur finisse d'aller à la fin d'une profondeur donnée sans pouvoir l’arrêter).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Entre temps évidement, je jouerai contre lui :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Quand les performances seront acceptables et le temps de jeu contrôlable, alors là viendra un grand moment. Les hashtables pour enregistrer les positions connues mais surtout... &lt;b&gt;une interface avec &lt;a href="http://www.freechess.org/"&gt;FICS&lt;/a&gt;&lt;/b&gt; !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A bientôt !&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-8192397217212180380?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V7zSYGN_Aws5Tm373IIEdK6zKe0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7zSYGN_Aws5Tm373IIEdK6zKe0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V7zSYGN_Aws5Tm373IIEdK6zKe0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7zSYGN_Aws5Tm373IIEdK6zKe0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/-7ilTepHGBE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/8192397217212180380/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=8192397217212180380" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/8192397217212180380?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/8192397217212180380?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/-7ilTepHGBE/bitboards-ca-y-est-on-y-va.html" title="Bitboards : ça y est, on y va" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/06/bitboards-ca-y-est-on-y-va.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MDSHY4fSp7ImA9WhRSGUU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-3144693407120276423</id><published>2011-06-02T20:51:00.006+02:00</published><updated>2011-11-22T20:17:59.835+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T20:17:59.835+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="chess" /><title>Je joue (avec une interface graphique)</title><content type="html">&lt;div&gt;J'ai fait une interface xboard. C'est à dire que j'utilise &lt;a href="http://www.gnu.org/software/xboard/"&gt;xboard&lt;/a&gt; pour jouer contre mon moteur.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Le problème en codant un jeu c'est qu'on a envie d'y jouer ! Et en ce moment je passe plus de temps à jouer qu'à coder. Ce qui me motive à retourner coder c'est qu'il est encore suuupeeer lent, et quand j'en ai marre d'attendre, j'arrêtte de jouer et je me décide à améliorer les perfs :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;J'ai amélioré quelques fonctions très utilisées et consommatrices de temps. Je faisais Pert(3) en 20 secondes, ça se fait en 10s maintenant. Et j'en suis qu'au début des améliorations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Petit rappel: la fonction Perft retourne le nombre d’enchaînement de déplacements possibles pour un niveau donné. Quand les blancs jouent il y a Pertf(1) = 20 déplacements possibles, puis les noirs répondent: Perft(2) = 400 (20x20 déplacements). Les blancs répondent et Perft(3) = 8902 (20x20x22). Pour générer ces 8902 déplacements j'ai besoin de 10 secondes. Pour 100 000 déplacements, Crafty met 1 seconde ..... Et encore, je simplifie les choses. Pour générer les premiers déplacements, c'est beaucoup plus rapide que pour générer les déplacements en milieu de partie. Bref....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ensuite j'ai amélioré la fonction d'évaluation avec une "recherche tranquille" (quiescence search). C'est à dire que la recherche ne s’arrête pas s'il existe des captures possibles. Enfin... normalement elle ne devrait pas évaluer &lt;i&gt;toutes&lt;/i&gt; les captures pour des raisons de temps de recherche.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Et ben... ça a vachement amélioré son jeu. Je ne fais plus le malin maintenant !&lt;/div&gt;&lt;div&gt;Je ne suis pas encore allé jusqu'à une fin de partie parce que c'est trop long... mais je vois bien que ça va être dur de le battre !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ma "current TODO list":&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;- Iterative deepening and move ordering to be able to limit search time&lt;/div&gt;&lt;div&gt;- Finish Quiescence search (do not evaluate all the moves)&lt;/div&gt;&lt;div&gt;- Improve performance of legal move gen (moves generation really using bitboards, and maybe premove tables)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-3144693407120276423?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zd7t1J9J_qftkyC-a8NE_51CmBs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zd7t1J9J_qftkyC-a8NE_51CmBs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zd7t1J9J_qftkyC-a8NE_51CmBs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zd7t1J9J_qftkyC-a8NE_51CmBs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/wHFO7RPOpKo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/3144693407120276423/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=3144693407120276423" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/3144693407120276423?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/3144693407120276423?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/wHFO7RPOpKo/je-joue-avec-une-interface-graphique.html" title="Je joue (avec une interface graphique)" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/06/je-joue-avec-une-interface-graphique.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGRHs6cCp7ImA9WhZVGE4.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-825751351015735082</id><published>2011-05-31T12:11:00.002+02:00</published><updated>2011-05-31T12:20:25.518+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-31T12:20:25.518+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="chess" /><title>Il est vivant !</title><content type="html">&lt;div&gt;Et voilà le moment tant attendu où &lt;b&gt;le moteur joue contre lui-même&lt;/b&gt; avec des mouvements pas trop cons. Le plus étonnant c'est qu'avec une fonction d'évaluation très simple et une recherche à 3 plis, ça suffit pour mimiquer un jeu pas trop déconnant. Arthur pourrait jouer comme ça (désolé mon fils, tu joueras contre lui quand j'aurai une interface graphique et on verra si tu es plus fort et si ton père raconte des bêtises)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Au niveau temps de recherche là ça pêche toujours. Le beta-cutoff permet de gagner vraiment pas mal de temps, mais je n'en suis qu'au début de la fonction de recherche. Bcp est encore à faire.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Ma TODO liste intermédiaire a augmenté.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- Pour l'instant je n'affiche que des plateaux en texte sur la console. Il est temps que je m'amuse contre lui. Il me faut juste un input texte ou une interface xboard. Et pour qu'Arthur joue, une interface graphique comme xboard c'est mieux.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- Ensuite pour améliorer le jeu et les performances, dans l'ordre:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;remove beta cutoff (to be able to compare the added value)&lt;/li&gt;&lt;li&gt;Performance recording: maybe some branching factor (or nb of nodes visited) average based on a versioning to be able to compare versions.&lt;/li&gt;&lt;li&gt;add again beta cutoff&lt;/li&gt;&lt;li&gt;Quiescence search to improve play (that would increase the nb of nodes)&lt;/li&gt;&lt;li&gt;Iterative deepening (no changes for nb of nodes before ordering)&lt;/li&gt;&lt;li&gt;Move ordering (increase cutoffs, decrease nb of nodes visited)&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Voilà, &lt;b&gt;il est vivant&lt;/b&gt; ! Il marche ! A partir de maintenant, ce n'est que amélioration et expérimentations !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-825751351015735082?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nF1x26Ab2cb1o5DGdvUlz86y6rE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nF1x26Ab2cb1o5DGdvUlz86y6rE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nF1x26Ab2cb1o5DGdvUlz86y6rE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nF1x26Ab2cb1o5DGdvUlz86y6rE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/0AwSsrN42IM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/825751351015735082/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=825751351015735082" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/825751351015735082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/825751351015735082?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/0AwSsrN42IM/il-est-vivant.html" title="Il est vivant !" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/05/il-est-vivant.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8BQXg-fSp7ImA9WhZVE0g.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-9069973283135425541</id><published>2011-05-25T18:00:00.000+02:00</published><updated>2011-05-25T22:04:10.655+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-25T22:04:10.655+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="chess" /><title>Perft et débugage</title><content type="html">Le chargement d'une position à partir d'une chaine FEN est fait !&lt;br /&gt;Ca veut dire que je peux tester des positions comme je veux et j'ai fini de faire les tests (que j'aurais dû faire avant) et corrigé les bugs que j'avais.&lt;br /&gt;&lt;br /&gt;J'ai aussi fait la fonction Perft (générateur et compteur de positions à une profondeur donnée pour voir si ya pas de bugs).&lt;br /&gt;&lt;br /&gt;Là ça fait mal...&lt;div&gt;22 secondes pour aller au niveau 3 de profondeur (ply == 3). 20 secondes en améliorant la fonction elle même, mais c'est pas le but, le but c'est d'améliorer le moteur.  Un moteur moyen met 20ms (milli !) pour 3 plis :)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bah je suis juste 10 000 fois plus lent, rien de grave :)&lt;br /&gt;Et en plus j'ai des bugs.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Normalement les valeurs de Perf sont:&lt;/div&gt;&lt;div&gt;&lt;div&gt;perft(1) =  20&lt;/div&gt;&lt;div&gt;perft(2) =  400&lt;/div&gt;&lt;div&gt;perft(3) =  8902&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;et pour perft(3) je trouve 8906 au lieu de 8902...&lt;/div&gt;&lt;div&gt;Il y a 12 mises en échec possible au niveau 3. Peut-être que ma fonction de générateur de mouvements a un bug au niveau des mouvements légaux, et qu'il autorise une autre pièce à bouger pendant que le roi est en échec ? Hum, ça en ferait trop....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Il faut que ma suite de tests soit plus étoffée !&lt;/div&gt;&lt;div&gt;Et il faut que j'améliore les perfs ! J'ai une petite idée d'où ça vient: la vérification des mouvements légaux. En la virant, je fais le niveau 3 en 0.85 s (au lieu de 20 s) et je fais le niveau 4 en 18 secondes (198 030 déplacements... au lieu de 197 281 si je n'avais pas de bugs). 0.85 s au lieu de 0.002 c'est toujours mieux (425 fois plus lent)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bon, ben... vive la chasse aux bugs d'abord :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight:bold;"&gt;TODO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Voici (en anglais puisque c'est dans un fichier source) l'avancement du moteur.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Fini&lt;/b&gt;:&lt;br /&gt;- Set up TDD (RSpec)&lt;br /&gt;- choose a board representation&lt;br /&gt;- write functions to update chessboard representation&lt;br /&gt;- write utility function to translate FEN position into your chessboard representation (if not, no easy TDD for move generator)&lt;br /&gt;- write moves generator&lt;br /&gt;- write a Perft function&lt;br /&gt;&lt;br /&gt;&lt;b&gt;En cours&lt;/b&gt;:&lt;br /&gt;- write a search function with simple evaluation function&lt;br /&gt;- xboard interface&lt;br /&gt;- play !&lt;br /&gt;- optimisation (Quiescence search, etc...)&lt;br /&gt;- play !&lt;br /&gt;- FICS interface&lt;br /&gt;- play and watch it play !&lt;br /&gt;- DB to store moves evaluations&lt;br /&gt;- ... and play more !&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-9069973283135425541?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jLrShcwG-LsK0ekin2OLBjlENlA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jLrShcwG-LsK0ekin2OLBjlENlA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jLrShcwG-LsK0ekin2OLBjlENlA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jLrShcwG-LsK0ekin2OLBjlENlA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/8T54dxgx8Lw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/9069973283135425541/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=9069973283135425541" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/9069973283135425541?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/9069973283135425541?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/8T54dxgx8Lw/perft-et-debugage.html" title="Perft et débugage" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/05/perft-et-debugage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQFRn08fCp7ImA9WhZUEkw.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-3506066476001450707</id><published>2011-05-22T22:18:00.006+02:00</published><updated>2011-06-04T21:05:17.374+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-04T21:05:17.374+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="chess" /><title>Génération des déplacements fini !</title><content type="html">Ca y est ! Première étape de franchie !&lt;br /&gt;&lt;br /&gt;Les reines, les tours, et tout le reste se déplacent et peuvent prendre ! Les rois peuvent roquer et les pions peuvent avancer de deux cases et se faire prendre "en&lt;br /&gt;passant". De plus, les déplacements sont vérifiés "légaux", c'est à dire qu'avant de bouger une pièce, il est vérifié que le roi n'est pas en échec, que ce soit le roi lui-même qui bouge ou une autre pièce ("pin").&lt;br /&gt;&lt;br /&gt;C'est pas beau ça ?&lt;br /&gt;&lt;br /&gt;J'ai pas encore de fonction de recherche (avec la fonction d'évaluation de la position) mais j'ai codé une simple fonction d'affichage des positions qui s’enchaînent au hasard. Et j'affiche ça en texte. C'est trop beau.&lt;br /&gt;&lt;br /&gt;Bon, sauf que j'ai des bugs :)&lt;br /&gt;Notamment dans la fonction prune_king_revealers ou unmake.&lt;br /&gt;Lire la suite...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sans fonction de chargement de position, pas de TDD possible&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;J'ai retardé de faire une fonction de chargement de position (à partir d'une notation FEN par exemple), mais finalement c'est super important: sans chargement de position initiale facile, pas de tests facilement faisables. Pas de bras, pas de chocolat. Pas de tests, pas de TDD. J'avoue, j'ai développé sans vraiment tester chaque fonction de déplacement en premier lieu, mais avec une simple fonction d'affichage des positions qui s’enchaînent. Donc avant de tomber sur la bonne position à tester... J'aurais pu au moins faire un lecteur de déplacements pour aller à la bonne position sans hasard. Prochain truc à faire donc, la fonction de chargement et les tests correspondants !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-3506066476001450707?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rFa6KLTLZFw8ORJ4At9i__VxUfA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rFa6KLTLZFw8ORJ4At9i__VxUfA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rFa6KLTLZFw8ORJ4At9i__VxUfA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rFa6KLTLZFw8ORJ4At9i__VxUfA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/ftoUhshWrCk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/3506066476001450707/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=3506066476001450707" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/3506066476001450707?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/3506066476001450707?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/ftoUhshWrCk/generation-des-deplacements-fini.html" title="Génération des déplacements fini !" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/05/generation-des-deplacements-fini.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcAQHg8eip7ImA9WhZWGUU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-3543285071064089908</id><published>2011-05-21T00:13:00.007+02:00</published><updated>2011-05-21T14:14:01.672+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-21T14:14:01.672+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="chess" /><title>Motivé !</title><content type="html">Quelle horreur quand au cours de mes lectures je suis tombé sur &lt;a href="https://github.com/cdmoyer/RubyKnight"&gt;RubyKnight&lt;/a&gt; ! Un moteur en Ruby avec bitboards ! Là je me suis posé des questions. Mais que fais-je ? Quel est mon but ? Si mon but est faire un moteur en ruby avec bitboards, j'en ai un devant les yeux.&lt;br /&gt;&lt;br /&gt;Puis quand j'ai vu qu'il ne calculait qu'un seul déplacement, que les déplacements n'étaient pas précalculés avec bitboards, je me suis dit tant mieux. Et en fait, j'ai développé ma motivation. Car le code que j'avais sous les yeux ne me parlait pas. Je suis retourné à mon code et il m'a regardé en retour et m'a dit: "je suis là ! C'est moi!" Mon bon petit code à moi, bien stylé.&lt;br /&gt;&lt;br /&gt;Oh oui j'ai bien regardé le code de RubyKnight, ce qu'il faisait et comment il le faisait, mais je n'aime pas ses data structures et la façon toute simple (et sans aucun tests!) de commander cette armée.&lt;br /&gt;&lt;br /&gt;Mon but est d'avoir du plaisir à coder, avec mon style et TDD, un moteur d'échecs qui sera amélioré au fil du temps et de le voir se battre avec des humains sur FICS tout en fournissant des fonctions qu'aucun autre programme ne le fait sur FICS. Comme son père MyTeacher.&lt;br /&gt;&lt;br /&gt;La représentation du plateau est faite, la classe "Move"  a vu le jour et je continue à faire du TDD sur cette classe, encore un peu, avant de tomber de sommeil.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-3543285071064089908?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wI-nQIJMQwhOqL58B-GEyL6N9rY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wI-nQIJMQwhOqL58B-GEyL6N9rY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wI-nQIJMQwhOqL58B-GEyL6N9rY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wI-nQIJMQwhOqL58B-GEyL6N9rY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/rFKtXJ475LM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/3543285071064089908/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=3543285071064089908" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/3543285071064089908?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/3543285071064089908?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/rFKtXJ475LM/motive.html" title="Motivé !" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/05/motive.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8CRX8zeSp7ImA9WhZWGUs.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-6390700978999756601</id><published>2011-05-19T20:18:00.006+02:00</published><updated>2011-05-21T09:44:24.181+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-21T09:44:24.181+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="chess" /><title>Moteur d’échecs</title><content type="html">C'est décidé, je m'y met. Je vais programmer un &lt;b&gt;moteur d’échecs&lt;/b&gt;. En Ruby. Wow. Robert Hyatt a dit qu'il fallait choisir le langage qu'on aimait le plus. Bob a raison, tiens!&lt;br /&gt;&lt;br /&gt;Et tant qu'à faire je commente mon avancée sur mon blog (en français!) pour me motiver encore plus que ce que je ne le suis déjà. Ça commence aujourd'hui, je ne sais pas quand ça va se terminer. La semaine prochaine ou dans 10 ans.&lt;br /&gt;&lt;br /&gt;Le premier choix difficile a été &lt;b&gt;la représentation du plateau de jeu&lt;/b&gt;. Mailbox, 0x88, finalement je pense que je vais aller au plus intéressant, les &lt;b&gt;bitboards&lt;/b&gt;. Parce que Ruby par rapport à C++, c'est lent et les bitboards, c'est des calculs rapides. Mais surtout parce que les bitboards c'est sexy. Et finalement pas si compliqué que ça (après avoir passé 3 soirées complètes à lire des articles sur la programmation d'un moteur de jeu d’échecs, à commencer quelque chose sans être emballé, recommencer sur autre chose et finalement changer d'avis pour du sexy! Sale geek).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Je sens que ça va être long.&lt;/div&gt;&lt;div&gt;Voici la roadmap (quelques parties &lt;a href="http://www.mizarchessengine.com/columns/writing-a-chess-engine/chess-engines-anatomy/"&gt;pompées sur un site&lt;/a&gt;):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;- décider de la représentation du plateau (fait: bitboards)&lt;/div&gt;&lt;div&gt;- Faire du TDD (rien de  plus important que ça quand on écrit un moteur compliqué)&lt;/div&gt;&lt;div&gt;- interface graphique (Gtk) pour suivre un minimum aisément et débugguer &lt;/div&gt;&lt;div&gt;- écrire un traducteur FEN &amp;lt;=&amp;gt; Position&lt;/div&gt;&lt;div&gt;- écrire le générateur de déplacements&lt;/div&gt;&lt;div&gt;- écrire une fonction pour savoir si une case est attaquée&lt;/div&gt;&lt;div&gt;- écrire une fonction de mise à jour du plateau&lt;/div&gt;&lt;div&gt;- Fonction de test de performance (Perft)&lt;/div&gt;&lt;div&gt;- écrire une fonction d'évaluatiuon simple&lt;/div&gt;&lt;div&gt;- écrire une fonction de recherche&lt;/div&gt;&lt;div&gt;- optimiser (Quiescence search, etc...)&lt;/div&gt;&lt;div&gt;- écrire une interface pour jouer (basée sur XBoard ?)&lt;/div&gt;&lt;div&gt;- écrire une interface pour FICS&lt;/div&gt;&lt;div&gt;- écrire une base de donnée de parties et autres stats et enregistreur de positions pour optimiser la performance (comme je l'avais déjà fait pour MyTeacher basé sur TSCP)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Les sources et le README est sur github:&lt;/div&gt;&lt;div&gt;&lt;a href="https://github.com/micktaiwan/MyTeacheR"&gt;https://github.com/micktaiwan/MyTeacheR&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Son nom de code est donc MyTeacheR, comme l'ancien, mais avec R majuscule, on se demande pourquoi, y aurait-il un rapport avec Ruby ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Son nom de scène est encore à définir.&lt;/div&gt;&lt;div&gt;Longue vie à MyTeacheR !&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-6390700978999756601?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Au16WJp1myrGFz-2NWFjYNQxs14/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Au16WJp1myrGFz-2NWFjYNQxs14/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Au16WJp1myrGFz-2NWFjYNQxs14/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Au16WJp1myrGFz-2NWFjYNQxs14/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/Qc-90NcbK-8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/6390700978999756601/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=6390700978999756601" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/6390700978999756601?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/6390700978999756601?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/Qc-90NcbK-8/moteur-dechecs.html" title="Moteur d’échecs" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2011/05/moteur-dechecs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UMSHw5cSp7ImA9Wx5RGU4.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-1458092111332487697</id><published>2010-08-27T19:40:00.002+02:00</published><updated>2010-08-27T19:48:09.229+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-27T19:48:09.229+02:00</app:edited><title>HTC Desire - Usage des mobiles</title><content type="html">Je me suis acheté un HTC Desire.&lt;br /&gt;&lt;br /&gt;C'est dingue les nouvelles utilisation de portables.&lt;br /&gt;&lt;br /&gt;Scannez un code bar 2D depuis votre portable dans un article sur le net pour aller à la page de doanloaad de l'application: http://www.android-software.fr/air-control (regardez à la fin de l'article)&lt;br /&gt;&lt;br /&gt;Faites écouter un morceau de musique pour qu'l trouve son titre.&lt;br /&gt;http://www.shazam.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-1458092111332487697?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IrfLZ9mtMH5_er4xje4LgjFJPJI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IrfLZ9mtMH5_er4xje4LgjFJPJI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IrfLZ9mtMH5_er4xje4LgjFJPJI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IrfLZ9mtMH5_er4xje4LgjFJPJI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/k10iQpXtS_o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/1458092111332487697/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=1458092111332487697" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/1458092111332487697?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/1458092111332487697?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/k10iQpXtS_o/htc-desire-usage-des-mobiles.html" title="HTC Desire - Usage des mobiles" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2010/08/htc-desire-usage-des-mobiles.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEECQH44eip7ImA9WxBbFEU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-2778636892096525090</id><published>2010-03-13T13:08:00.005+01:00</published><updated>2010-03-13T13:17:41.032+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-13T13:17:41.032+01:00</app:edited><title>GTD tip for GMail: organize your emails by due date</title><content type="html">Seeking zero inbox (archive emails), but still wanting to keep track of actionable emails on a duedate ? You could move your email into the "next" folder, but what to do when it is due on a specific date ?&lt;br /&gt; &lt;br /&gt;In GMail, now that we have tasks, we can attach a duedate to emails by creating a task related to the email. Then we can archive the email and forget about it until the date comes: we see the task in our calendar and a link to the related email.&lt;br /&gt;&lt;br /&gt;Open the email, click on "more actions", and click "add to tasks". Then set the due date. Then you can archive the email.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-2778636892096525090?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uC1lczr2YliPTUp81CZNL85c4e0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uC1lczr2YliPTUp81CZNL85c4e0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uC1lczr2YliPTUp81CZNL85c4e0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uC1lczr2YliPTUp81CZNL85c4e0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/hTvq3EbzaVQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/2778636892096525090/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=2778636892096525090" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/2778636892096525090?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/2778636892096525090?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/hTvq3EbzaVQ/gtd-tip-for-gmail-organize-your-emails.html" title="GTD tip for GMail: organize your emails by due date" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2010/03/gtd-tip-for-gmail-organize-your-emails.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8DRnsyeCp7ImA9WhZVE0g.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-7669729913095696985</id><published>2009-11-23T18:49:00.001+01:00</published><updated>2011-05-25T22:04:37.590+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-25T22:04:37.590+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><title>git sous Windows</title><content type="html">Pour faire un git clone avec mon compte github, j'ai dû faire un ssh-agent cmd; puis un ssh-add id_rsa; puis faire le git clone... C'est pas un peu compliqué sous Windows? Je suis sûr que j'ai raté un truc mais quoi ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-7669729913095696985?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8EHXrPxU0Ii1-PpmFDebL8suEdQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8EHXrPxU0Ii1-PpmFDebL8suEdQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8EHXrPxU0Ii1-PpmFDebL8suEdQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8EHXrPxU0Ii1-PpmFDebL8suEdQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/6UZrTdhTfGA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/7669729913095696985/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=7669729913095696985" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/7669729913095696985?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/7669729913095696985?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/6UZrTdhTfGA/git-sous-windows.html" title="git sous Windows" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/11/git-sous-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ECRH84cSp7ImA9WxNbGE0.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-7571719263452470935</id><published>2009-11-21T13:12:00.002+01:00</published><updated>2009-11-21T13:14:25.139+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-21T13:14:25.139+01:00</app:edited><title>Vaccination</title><content type="html">J'avais pris rendez-vous à la caserne à 11h54. Je me suis dit, wow c'est organisé si on a rendez-vous à la minute près. Je me pointe. 2h d'attente. Je suis pas resté.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-7571719263452470935?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VBlPx9SVtLrz8Wql5C-g8mPz78w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VBlPx9SVtLrz8Wql5C-g8mPz78w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VBlPx9SVtLrz8Wql5C-g8mPz78w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VBlPx9SVtLrz8Wql5C-g8mPz78w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/dTfcrXEP_QU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/7571719263452470935/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=7571719263452470935" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/7571719263452470935?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/7571719263452470935?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/dTfcrXEP_QU/vaccination.html" title="Vaccination" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/11/vaccination.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIFQXc9fip7ImA9Wx5bF0w.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-4006216115915412752</id><published>2009-11-21T11:01:00.004+01:00</published><updated>2010-11-02T16:58:30.966+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-02T16:58:30.966+01:00</app:edited><title>La bêtise humaine (part 47)</title><content type="html">Susu avait 300 euros bloqués à la Poste depuis 15 ans. On est partis à Taiwan, on s'en foutait. Ya 5 ans on est revenus en France et on a demandé ces 300 euros.&lt;br /&gt;&lt;br /&gt;Impossible. Il fallait soit une carte bancaire soit un chéquier. Impossible de fermer le compte.&lt;br /&gt;&lt;br /&gt;On vient de recevoir le chéquier. Tout ça pour 300 euros et un compte qu'on utilisera jamais.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-4006216115915412752?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uMMZe4t6Cd3IQQJf7LhLtabsds8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uMMZe4t6Cd3IQQJf7LhLtabsds8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uMMZe4t6Cd3IQQJf7LhLtabsds8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uMMZe4t6Cd3IQQJf7LhLtabsds8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/L5ml-tdC5qs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/4006216115915412752/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=4006216115915412752" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/4006216115915412752?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/4006216115915412752?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/L5ml-tdC5qs/la-betise-humaine-part-47.html" title="La bêtise humaine (part 47)" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/11/la-betise-humaine-part-47.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcEQX49fCp7ImA9WxNQFUs.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-5279100753609905099</id><published>2009-09-21T21:01:00.008+02:00</published><updated>2009-09-21T21:40:00.064+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-21T21:40:00.064+02:00</app:edited><title>Orange.fr: le vol organisé avec InternetPlus</title><content type="html">Je viens de recevoir la facture d'Orange pour Internet du mois d'Août. Ce mois-ci on doit payer 60 euros de plus. Le détail indique 60 euros payés à InternetPlus. Kézako ? &lt;br /&gt;&lt;br /&gt;Après une enquête assez difficile, (Orange n'a pas les détails) il s'avère que mon fils (9 ans) a joué à des jeux en ligne (www.equideow.com) et a payé 33 "passes" (des points pour jouer) à 1.80€ chacun pendant 2 jours. Heureusement qu'il y avait un plafond de 60€ par mois, sinon il aurait pu payer pendant tout le mois sans qu'on s'en aperçoive. Et là la facture aurait pû être salée. On savait qu'il jouait sur ce site, mais pas qu'il payait des "passes".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Première question&lt;/span&gt;: pourquoi ce service désactivable sur le site d'Orange est activé par défaut ?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Deuxième question&lt;/span&gt;: un plafond, pour quoi faire ?&lt;br /&gt;C'est très simple: imaginez-vous recevoir une facture de 600 euros (simplement au rythme de 10 jours de jeu si j'ai bien compris), croyez-vous que ce service durerait longtemps sans être attaqué ? Alors qu'avec un plafond fixé au mois, Orange et InternetPlus peuvent arnaquer des millions de familles sans se soucier d'être attaqué en justice. A 60€ l'arnarque on s'y fait prendre une fois, mais pas deux, mais sans aller à attaquer cette société en justice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Troisième question&lt;/span&gt;: le paiement n'est fait qu'après avoir validé un code envoyé par mail. Mais à qui est-il envoyé ? A l'enfant qui a cliqué, et non pas à celui qui paye la facture, moi en l'occurence... Mon fils a donc validé 33 codes envoyés sur son mail perso.&lt;br /&gt;&lt;br /&gt;Pourquoi je m'en prend à Orange et pas à InternetPlus (partenaires: Alice, Orange, SFR) ? Parce qu'Orange a activé ce service par défaut sans que j'ai rien demandé et que la limite n'était pas à 2€ par mois mais à 60€ (une journée de salaire) sans même un mail sur mon compte.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-5279100753609905099?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GUCF4mjvg6OQB-XYudcyZKDMin8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GUCF4mjvg6OQB-XYudcyZKDMin8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GUCF4mjvg6OQB-XYudcyZKDMin8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GUCF4mjvg6OQB-XYudcyZKDMin8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/hETQWtj5LEQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/5279100753609905099/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=5279100753609905099" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/5279100753609905099?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/5279100753609905099?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/hETQWtj5LEQ/orangefr-le-vol-organise-avec.html" title="Orange.fr: le vol organisé avec InternetPlus" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/09/orangefr-le-vol-organise-avec.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIDSXc7fip7ImA9WxNQEU8.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-802032741933498427</id><published>2009-09-16T20:44:00.007+02:00</published><updated>2009-09-16T20:59:38.906+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-16T20:59:38.906+02:00</app:edited><title>La peine de mort est rendue légale en Europe par le Traité de Lisbonne</title><content type="html">&lt;a href="http://horizons-et-debats.ch/?id=1772&amp;amp;print=1"&gt;Article: Non à la peine de mort rétablie par l’UE. Le Traité de Lisbonne rend possible la peine de mort et le fait de tuer des personnes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Pouvez-vous imaginer une raison pour laquelle on prend ce genre de décision?&lt;br /&gt;&lt;br /&gt;Les gouvernements s’attendent manifestement à des insurrections. Le scepticisme à l’égard des gouvernements et de l’appareil européen ne cesse d’augmenter. La crise financière et économique accentue la pression sur la population.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Avant de critiquer la Chine, regardons ce qui se passe chez nous.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-802032741933498427?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cagltcTuCzyIDycj0x76gcFulVY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cagltcTuCzyIDycj0x76gcFulVY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cagltcTuCzyIDycj0x76gcFulVY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cagltcTuCzyIDycj0x76gcFulVY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/ocBfuWKQG1I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/802032741933498427/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=802032741933498427" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/802032741933498427?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/802032741933498427?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/ocBfuWKQG1I/la-peine-de-mort-est-rendue-legale-en.html" title="La peine de mort est rendue légale en Europe par le Traité de Lisbonne" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/09/la-peine-de-mort-est-rendue-legale-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMFSHo-fip7ImA9WxJQFkU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-3235119172940038685</id><published>2009-05-30T13:10:00.002+02:00</published><updated>2009-05-30T13:20:19.456+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-30T13:20:19.456+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>vélo volé</title><content type="html">Mon vélo (BTwin 7 - 400€ avec accessoires) vient d'être volé à côté du centre commercial à St-Georges à Toulouse. Je l'avais acheté en avril 2006 à Décathlon et je l'utilisais souvent le week-end. Un conseil: achetez des antivols qui valent le coup. Je suis dégouté.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-3235119172940038685?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v3_V7dTeeXzhPgA2L8tqS9zxq2E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v3_V7dTeeXzhPgA2L8tqS9zxq2E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/v3_V7dTeeXzhPgA2L8tqS9zxq2E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v3_V7dTeeXzhPgA2L8tqS9zxq2E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/jUKYSgFnfR4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/3235119172940038685/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=3235119172940038685" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/3235119172940038685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/3235119172940038685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/jUKYSgFnfR4/velo-vole.html" title="vélo volé" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/05/velo-vole.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcGR306cSp7ImA9WxJQFkU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-7297722946215725301</id><published>2009-05-12T10:57:00.002+02:00</published><updated>2009-05-30T13:13:46.319+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-30T13:13:46.319+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="internet" /><title>Is real time the future of Internet</title><content type="html">Good article, with a (now well known) good video to see on this page.&lt;br /&gt;&lt;a href="http://mashable.com/2009/05/09/future-real-time/"&gt;http://mashable.com/2009/05/09/future-real-time/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-7297722946215725301?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ekrFSLR8kfSyJMHWjI8wreEbm9w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ekrFSLR8kfSyJMHWjI8wreEbm9w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ekrFSLR8kfSyJMHWjI8wreEbm9w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ekrFSLR8kfSyJMHWjI8wreEbm9w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/WCiGu5baI-k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/7297722946215725301/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=7297722946215725301" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/7297722946215725301?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/7297722946215725301?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/WCiGu5baI-k/is-real-time-future-of-internet.html" title="Is real time the future of Internet" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/05/is-real-time-future-of-internet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcBQ3c6eip7ImA9WxJQFkU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-6979201812068848774</id><published>2009-05-05T22:15:00.006+02:00</published><updated>2009-05-30T13:14:12.912+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-30T13:14:12.912+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AI" /><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>L'I.A. et son double, de Scott Westerfeld</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.fantasticfiction.co.uk/images/n4/n22709.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 292px; height: 475px;" src="http://www.fantasticfiction.co.uk/images/n4/n22709.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Très bon roman de SF qui se lit très facilement (David ? Tu me lis?). Si vous aimez les histoires d'Intelligences Artificielles alors comme moi vous allez passer un très bon moment. Pris à la bibliothèque samedi après midi, j'ai dû bien lire 30 pages sur place avant de rentrer à la maison, et je l'ai fini hier soir (lundi)... alors que je suis en plein Neal Stephenson ("L'Age de diamant").&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-6979201812068848774?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NGGMDyEH2YN2-_4y5W6sEhESYN0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NGGMDyEH2YN2-_4y5W6sEhESYN0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NGGMDyEH2YN2-_4y5W6sEhESYN0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NGGMDyEH2YN2-_4y5W6sEhESYN0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/QTXTJYyUO7g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/6979201812068848774/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=6979201812068848774" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/6979201812068848774?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/6979201812068848774?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/QTXTJYyUO7g/lia-et-son-double-de-scott-westerfeld.html" title="L'I.A. et son double, de Scott Westerfeld" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/05/lia-et-son-double-de-scott-westerfeld.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcESH0zeyp7ImA9WxJQFkU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-9167956234194628974</id><published>2009-04-24T23:20:00.004+02:00</published><updated>2009-05-30T13:13:29.383+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-30T13:13:29.383+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>Parking</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imgs.xkcd.com/comics/parking.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 350px; height: 70px;" src="http://imgs.xkcd.com/comics/parking.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How much time I dreamt doing that...&lt;br /&gt;Thanks &lt;a href="http://xkcd.com/562/"&gt;XKCD&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-9167956234194628974?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/98HbCgnPeClitx6VHRmhnRu1HnQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/98HbCgnPeClitx6VHRmhnRu1HnQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/98HbCgnPeClitx6VHRmhnRu1HnQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/98HbCgnPeClitx6VHRmhnRu1HnQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/oeWze8J7UQ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/9167956234194628974/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=9167956234194628974" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/9167956234194628974?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/9167956234194628974?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/oeWze8J7UQ0/parking.html" title="Parking" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/04/parking.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcDRXw4fyp7ImA9WxJQFkU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-1011981583397702121</id><published>2009-03-12T19:44:00.002+01:00</published><updated>2009-05-30T13:14:34.237+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-30T13:14:34.237+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>The Obama Deception</title><content type="html">Very interesting documentary about the first days of Obama presidency, the FED, the banking system, and the new world order. &lt;a href="http://thepiratebay.org/torrent/4765887/The_Obama_Deception"&gt;Torrent Link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-1011981583397702121?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6saIOCcTzPGL9MBkC3lWo3U-ZUI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6saIOCcTzPGL9MBkC3lWo3U-ZUI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6saIOCcTzPGL9MBkC3lWo3U-ZUI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6saIOCcTzPGL9MBkC3lWo3U-ZUI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/6OFQ2pZUA0I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/1011981583397702121/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=1011981583397702121" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/1011981583397702121?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/1011981583397702121?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/6OFQ2pZUA0I/obama-deception.html" title="The Obama Deception" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/03/obama-deception.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcGR306cSp7ImA9WxJQFkU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-2477922905331128471</id><published>2009-03-07T23:30:00.003+01:00</published><updated>2009-05-30T13:13:46.319+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-30T13:13:46.319+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="internet" /><title>The Elegant Universe</title><content type="html">I have just finished to watch this mind blowing program on string theory. It lasts 3 hours and vulgarizes the theory so we can all start to understand it.&lt;br /&gt;http://www.pbs.org/wgbh/nova/elegant/program_d.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-2477922905331128471?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/017xgqED0hxVE6dlhX3YTg9WQLA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/017xgqED0hxVE6dlhX3YTg9WQLA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/017xgqED0hxVE6dlhX3YTg9WQLA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/017xgqED0hxVE6dlhX3YTg9WQLA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/-3TIC_JyxC0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/2477922905331128471/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=2477922905331128471" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/2477922905331128471?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/2477922905331128471?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/-3TIC_JyxC0/elegant-universe.html" title="The Elegant Universe" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/03/elegant-universe.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcESH0zfCp7ImA9WxJQFkU.&quot;"><id>tag:blogger.com,1999:blog-8134400.post-501428733831199323</id><published>2009-03-05T22:40:00.002+01:00</published><updated>2009-05-30T13:13:29.384+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-30T13:13:29.384+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>Agatha Christie</title><content type="html">I've just finish 3 books (in french):&lt;br /&gt;Ten Little Indians,&lt;br /&gt;Five Little Pigs,&lt;br /&gt;Murder on the Orient Express&lt;br /&gt;&lt;br /&gt;I had never read any of A. Chritie book before and I enjoyed them very much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8134400-501428733831199323?l=micktaiwan.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_oOymdAxEjtmxh0qSs00LXuuo3I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_oOymdAxEjtmxh0qSs00LXuuo3I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_oOymdAxEjtmxh0qSs00LXuuo3I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_oOymdAxEjtmxh0qSs00LXuuo3I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MicktaiwansBlog/~4/PWIQm6sgyhc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://micktaiwan.blogspot.com/feeds/501428733831199323/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8134400&amp;postID=501428733831199323" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/501428733831199323?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8134400/posts/default/501428733831199323?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MicktaiwansBlog/~3/PWIQm6sgyhc/agatha-christie.html" title="Agatha Christie" /><author><name>Mickael</name><uri>http://www.blogger.com/profile/13049730440231225420</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/_q-vtrciuAb4/SUgymkdNhzI/AAAAAAAAH1s/We10BNgQ9U4/S220/mick.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://micktaiwan.blogspot.com/2009/03/agatha-christie.html</feedburner:origLink></entry></feed>

