diff options
Diffstat (limited to 'tests/Wallabag')
44 files changed, 6172 insertions, 0 deletions
diff --git a/tests/Wallabag/AnnotationBundle/Controller/AnnotationControllerTest.php b/tests/Wallabag/AnnotationBundle/Controller/AnnotationControllerTest.php new file mode 100644 index 00000000..70849f74 --- /dev/null +++ b/tests/Wallabag/AnnotationBundle/Controller/AnnotationControllerTest.php | |||
@@ -0,0 +1,120 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\AnnotationBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\AnnotationBundle\WallabagAnnotationTestCase; | ||
6 | |||
7 | class AnnotationControllerTest extends WallabagAnnotationTestCase | ||
8 | { | ||
9 | public function testGetAnnotations() | ||
10 | { | ||
11 | $annotation = $this->client->getContainer() | ||
12 | ->get('doctrine.orm.entity_manager') | ||
13 | ->getRepository('WallabagAnnotationBundle:Annotation') | ||
14 | ->findOneByUsername('admin'); | ||
15 | |||
16 | if (!$annotation) { | ||
17 | $this->markTestSkipped('No content found in db.'); | ||
18 | } | ||
19 | |||
20 | $this->logInAs('admin'); | ||
21 | $crawler = $this->client->request('GET', 'annotations/'.$annotation->getEntry()->getId().'.json'); | ||
22 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
23 | |||
24 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
25 | $this->assertEquals(1, $content['total']); | ||
26 | $this->assertEquals($annotation->getText(), $content['rows'][0]['text']); | ||
27 | } | ||
28 | |||
29 | public function testSetAnnotation() | ||
30 | { | ||
31 | $this->logInAs('admin'); | ||
32 | |||
33 | $entry = $this->client->getContainer() | ||
34 | ->get('doctrine.orm.entity_manager') | ||
35 | ->getRepository('WallabagCoreBundle:Entry') | ||
36 | ->findOneByUsernameAndNotArchived('admin'); | ||
37 | |||
38 | $headers = ['CONTENT_TYPE' => 'application/json']; | ||
39 | $content = json_encode([ | ||
40 | 'text' => 'my annotation', | ||
41 | 'quote' => 'my quote', | ||
42 | 'ranges' => ['start' => '', 'startOffset' => 24, 'end' => '', 'endOffset' => 31], | ||
43 | ]); | ||
44 | $crawler = $this->client->request('POST', 'annotations/'.$entry->getId().'.json', [], [], $headers, $content); | ||
45 | |||
46 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
47 | |||
48 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
49 | |||
50 | $this->assertEquals('Big boss', $content['user']); | ||
51 | $this->assertEquals('v1.0', $content['annotator_schema_version']); | ||
52 | $this->assertEquals('my annotation', $content['text']); | ||
53 | $this->assertEquals('my quote', $content['quote']); | ||
54 | |||
55 | $annotation = $this->client->getContainer() | ||
56 | ->get('doctrine.orm.entity_manager') | ||
57 | ->getRepository('WallabagAnnotationBundle:Annotation') | ||
58 | ->findLastAnnotationByPageId($entry->getId(), 1); | ||
59 | |||
60 | $this->assertEquals('my annotation', $annotation->getText()); | ||
61 | } | ||
62 | |||
63 | public function testEditAnnotation() | ||
64 | { | ||
65 | $annotation = $this->client->getContainer() | ||
66 | ->get('doctrine.orm.entity_manager') | ||
67 | ->getRepository('WallabagAnnotationBundle:Annotation') | ||
68 | ->findOneByUsername('admin'); | ||
69 | |||
70 | $this->logInAs('admin'); | ||
71 | |||
72 | $headers = ['CONTENT_TYPE' => 'application/json']; | ||
73 | $content = json_encode([ | ||
74 | 'text' => 'a modified annotation', | ||
75 | ]); | ||
76 | $crawler = $this->client->request('PUT', 'annotations/'.$annotation->getId().'.json', [], [], $headers, $content); | ||
77 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
78 | |||
79 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
80 | |||
81 | $this->assertEquals('Big boss', $content['user']); | ||
82 | $this->assertEquals('v1.0', $content['annotator_schema_version']); | ||
83 | $this->assertEquals('a modified annotation', $content['text']); | ||
84 | $this->assertEquals('my quote', $content['quote']); | ||
85 | |||
86 | $annotationUpdated = $this->client->getContainer() | ||
87 | ->get('doctrine.orm.entity_manager') | ||
88 | ->getRepository('WallabagAnnotationBundle:Annotation') | ||
89 | ->findOneById($annotation->getId()); | ||
90 | $this->assertEquals('a modified annotation', $annotationUpdated->getText()); | ||
91 | } | ||
92 | |||
93 | public function testDeleteAnnotation() | ||
94 | { | ||
95 | $annotation = $this->client->getContainer() | ||
96 | ->get('doctrine.orm.entity_manager') | ||
97 | ->getRepository('WallabagAnnotationBundle:Annotation') | ||
98 | ->findOneByUsername('admin'); | ||
99 | |||
100 | $this->logInAs('admin'); | ||
101 | |||
102 | $headers = ['CONTENT_TYPE' => 'application/json']; | ||
103 | $content = json_encode([ | ||
104 | 'text' => 'a modified annotation', | ||
105 | ]); | ||
106 | $crawler = $this->client->request('DELETE', 'annotations/'.$annotation->getId().'.json', [], [], $headers, $content); | ||
107 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
108 | |||
109 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
110 | |||
111 | $this->assertEquals('a modified annotation', $content['text']); | ||
112 | |||
113 | $annotationDeleted = $this->client->getContainer() | ||
114 | ->get('doctrine.orm.entity_manager') | ||
115 | ->getRepository('WallabagAnnotationBundle:Annotation') | ||
116 | ->findOneById($annotation->getId()); | ||
117 | |||
118 | $this->assertNull($annotationDeleted); | ||
119 | } | ||
120 | } | ||
diff --git a/tests/Wallabag/AnnotationBundle/WallabagAnnotationTestCase.php b/tests/Wallabag/AnnotationBundle/WallabagAnnotationTestCase.php new file mode 100644 index 00000000..82790a5c --- /dev/null +++ b/tests/Wallabag/AnnotationBundle/WallabagAnnotationTestCase.php | |||
@@ -0,0 +1,63 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\AnnotationBundle; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||
6 | use Symfony\Component\BrowserKit\Cookie; | ||
7 | |||
8 | abstract class WallabagAnnotationTestCase extends WebTestCase | ||
9 | { | ||
10 | /** | ||
11 | * @var Client | ||
12 | */ | ||
13 | protected $client = null; | ||
14 | |||
15 | /** | ||
16 | * @var \FOS\UserBundle\Model\UserInterface | ||
17 | */ | ||
18 | protected $user; | ||
19 | |||
20 | public function setUp() | ||
21 | { | ||
22 | $this->client = $this->createAuthorizedClient(); | ||
23 | } | ||
24 | |||
25 | public function logInAs($username) | ||
26 | { | ||
27 | $crawler = $this->client->request('GET', '/login'); | ||
28 | $form = $crawler->filter('button[type=submit]')->form(); | ||
29 | $data = [ | ||
30 | '_username' => $username, | ||
31 | '_password' => 'mypassword', | ||
32 | ]; | ||
33 | |||
34 | $this->client->submit($form, $data); | ||
35 | } | ||
36 | |||
37 | /** | ||
38 | * @return Client | ||
39 | */ | ||
40 | protected function createAuthorizedClient() | ||
41 | { | ||
42 | $client = static::createClient(); | ||
43 | $container = $client->getContainer(); | ||
44 | |||
45 | /** @var $userManager \FOS\UserBundle\Doctrine\UserManager */ | ||
46 | $userManager = $container->get('fos_user.user_manager'); | ||
47 | /** @var $loginManager \FOS\UserBundle\Security\LoginManager */ | ||
48 | $loginManager = $container->get('fos_user.security.login_manager'); | ||
49 | $firewallName = $container->getParameter('fos_user.firewall_name'); | ||
50 | |||
51 | $this->user = $userManager->findUserBy(['username' => 'admin']); | ||
52 | $loginManager->loginUser($firewallName, $this->user); | ||
53 | |||
54 | // save the login token into the session and put it in a cookie | ||
55 | $container->get('session')->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken())); | ||
56 | $container->get('session')->save(); | ||
57 | |||
58 | $session = $container->get('session'); | ||
59 | $client->getCookieJar()->set(new Cookie($session->getName(), $session->getId())); | ||
60 | |||
61 | return $client; | ||
62 | } | ||
63 | } | ||
diff --git a/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php new file mode 100644 index 00000000..c39cc357 --- /dev/null +++ b/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php | |||
@@ -0,0 +1,513 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ApiBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\ApiBundle\WallabagApiTestCase; | ||
6 | |||
7 | class WallabagRestControllerTest extends WallabagApiTestCase | ||
8 | { | ||
9 | protected static $salt; | ||
10 | |||
11 | public function testGetOneEntry() | ||
12 | { | ||
13 | $entry = $this->client->getContainer() | ||
14 | ->get('doctrine.orm.entity_manager') | ||
15 | ->getRepository('WallabagCoreBundle:Entry') | ||
16 | ->findOneBy(['user' => 1, 'isArchived' => false]); | ||
17 | |||
18 | if (!$entry) { | ||
19 | $this->markTestSkipped('No content found in db.'); | ||
20 | } | ||
21 | |||
22 | $this->client->request('GET', '/api/entries/'.$entry->getId().'.json'); | ||
23 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
24 | |||
25 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
26 | |||
27 | $this->assertEquals($entry->getTitle(), $content['title']); | ||
28 | $this->assertEquals($entry->getUrl(), $content['url']); | ||
29 | $this->assertCount(count($entry->getTags()), $content['tags']); | ||
30 | $this->assertEquals($entry->getUserName(), $content['user_name']); | ||
31 | $this->assertEquals($entry->getUserEmail(), $content['user_email']); | ||
32 | $this->assertEquals($entry->getUserId(), $content['user_id']); | ||
33 | |||
34 | $this->assertTrue( | ||
35 | $this->client->getResponse()->headers->contains( | ||
36 | 'Content-Type', | ||
37 | 'application/json' | ||
38 | ) | ||
39 | ); | ||
40 | } | ||
41 | |||
42 | public function testGetOneEntryWrongUser() | ||
43 | { | ||
44 | $entry = $this->client->getContainer() | ||
45 | ->get('doctrine.orm.entity_manager') | ||
46 | ->getRepository('WallabagCoreBundle:Entry') | ||
47 | ->findOneBy(['user' => 2, 'isArchived' => false]); | ||
48 | |||
49 | if (!$entry) { | ||
50 | $this->markTestSkipped('No content found in db.'); | ||
51 | } | ||
52 | |||
53 | $this->client->request('GET', '/api/entries/'.$entry->getId().'.json'); | ||
54 | |||
55 | $this->assertEquals(403, $this->client->getResponse()->getStatusCode()); | ||
56 | } | ||
57 | |||
58 | public function testGetEntries() | ||
59 | { | ||
60 | $this->client->request('GET', '/api/entries'); | ||
61 | |||
62 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
63 | |||
64 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
65 | |||
66 | $this->assertGreaterThanOrEqual(1, count($content)); | ||
67 | $this->assertNotEmpty($content['_embedded']['items']); | ||
68 | $this->assertGreaterThanOrEqual(1, $content['total']); | ||
69 | $this->assertEquals(1, $content['page']); | ||
70 | $this->assertGreaterThanOrEqual(1, $content['pages']); | ||
71 | |||
72 | $this->assertTrue( | ||
73 | $this->client->getResponse()->headers->contains( | ||
74 | 'Content-Type', | ||
75 | 'application/json' | ||
76 | ) | ||
77 | ); | ||
78 | } | ||
79 | |||
80 | public function testGetStarredEntries() | ||
81 | { | ||
82 | $this->client->request('GET', '/api/entries', ['star' => 1, 'sort' => 'updated']); | ||
83 | |||
84 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
85 | |||
86 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
87 | |||
88 | $this->assertGreaterThanOrEqual(1, count($content)); | ||
89 | $this->assertNotEmpty($content['_embedded']['items']); | ||
90 | $this->assertGreaterThanOrEqual(1, $content['total']); | ||
91 | $this->assertEquals(1, $content['page']); | ||
92 | $this->assertGreaterThanOrEqual(1, $content['pages']); | ||
93 | |||
94 | $this->assertTrue( | ||
95 | $this->client->getResponse()->headers->contains( | ||
96 | 'Content-Type', | ||
97 | 'application/json' | ||
98 | ) | ||
99 | ); | ||
100 | } | ||
101 | |||
102 | public function testGetArchiveEntries() | ||
103 | { | ||
104 | $this->client->request('GET', '/api/entries', ['archive' => 1]); | ||
105 | |||
106 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
107 | |||
108 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
109 | |||
110 | $this->assertGreaterThanOrEqual(1, count($content)); | ||
111 | $this->assertNotEmpty($content['_embedded']['items']); | ||
112 | $this->assertGreaterThanOrEqual(1, $content['total']); | ||
113 | $this->assertEquals(1, $content['page']); | ||
114 | $this->assertGreaterThanOrEqual(1, $content['pages']); | ||
115 | |||
116 | $this->assertTrue( | ||
117 | $this->client->getResponse()->headers->contains( | ||
118 | 'Content-Type', | ||
119 | 'application/json' | ||
120 | ) | ||
121 | ); | ||
122 | } | ||
123 | |||
124 | public function testDeleteEntry() | ||
125 | { | ||
126 | $entry = $this->client->getContainer() | ||
127 | ->get('doctrine.orm.entity_manager') | ||
128 | ->getRepository('WallabagCoreBundle:Entry') | ||
129 | ->findOneByUser(1); | ||
130 | |||
131 | if (!$entry) { | ||
132 | $this->markTestSkipped('No content found in db.'); | ||
133 | } | ||
134 | |||
135 | $this->client->request('DELETE', '/api/entries/'.$entry->getId().'.json'); | ||
136 | |||
137 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
138 | |||
139 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
140 | |||
141 | $this->assertEquals($entry->getTitle(), $content['title']); | ||
142 | $this->assertEquals($entry->getUrl(), $content['url']); | ||
143 | |||
144 | // We'll try to delete this entry again | ||
145 | $this->client->request('DELETE', '/api/entries/'.$entry->getId().'.json'); | ||
146 | |||
147 | $this->assertEquals(404, $this->client->getResponse()->getStatusCode()); | ||
148 | } | ||
149 | |||
150 | public function testPostEntry() | ||
151 | { | ||
152 | $this->client->request('POST', '/api/entries.json', [ | ||
153 | 'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', | ||
154 | 'tags' => 'google', | ||
155 | 'title' => 'New title for my article', | ||
156 | ]); | ||
157 | |||
158 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
159 | |||
160 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
161 | |||
162 | $this->assertGreaterThan(0, $content['id']); | ||
163 | $this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']); | ||
164 | $this->assertEquals(false, $content['is_archived']); | ||
165 | $this->assertEquals(false, $content['is_starred']); | ||
166 | $this->assertEquals('New title for my article', $content['title']); | ||
167 | $this->assertEquals(1, $content['user_id']); | ||
168 | $this->assertCount(1, $content['tags']); | ||
169 | } | ||
170 | |||
171 | public function testPostSameEntry() | ||
172 | { | ||
173 | $this->client->request('POST', '/api/entries.json', [ | ||
174 | 'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', | ||
175 | 'archive' => '1', | ||
176 | 'tags' => 'google, apple', | ||
177 | ]); | ||
178 | |||
179 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
180 | |||
181 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
182 | |||
183 | $this->assertGreaterThan(0, $content['id']); | ||
184 | $this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']); | ||
185 | $this->assertEquals(true, $content['is_archived']); | ||
186 | $this->assertEquals(false, $content['is_starred']); | ||
187 | $this->assertCount(2, $content['tags']); | ||
188 | } | ||
189 | |||
190 | public function testPostArchivedAndStarredEntry() | ||
191 | { | ||
192 | $this->client->request('POST', '/api/entries.json', [ | ||
193 | 'url' => 'http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html', | ||
194 | 'archive' => '1', | ||
195 | 'starred' => '1', | ||
196 | ]); | ||
197 | |||
198 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
199 | |||
200 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
201 | |||
202 | $this->assertGreaterThan(0, $content['id']); | ||
203 | $this->assertEquals('http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html', $content['url']); | ||
204 | $this->assertEquals(true, $content['is_archived']); | ||
205 | $this->assertEquals(true, $content['is_starred']); | ||
206 | $this->assertEquals(1, $content['user_id']); | ||
207 | } | ||
208 | |||
209 | public function testPostArchivedAndStarredEntryWithoutQuotes() | ||
210 | { | ||
211 | $this->client->request('POST', '/api/entries.json', [ | ||
212 | 'url' => 'http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html', | ||
213 | 'archive' => 0, | ||
214 | 'starred' => 1, | ||
215 | ]); | ||
216 | |||
217 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
218 | |||
219 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
220 | |||
221 | $this->assertGreaterThan(0, $content['id']); | ||
222 | $this->assertEquals('http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html', $content['url']); | ||
223 | $this->assertEquals(false, $content['is_archived']); | ||
224 | $this->assertEquals(true, $content['is_starred']); | ||
225 | } | ||
226 | |||
227 | public function testPatchEntry() | ||
228 | { | ||
229 | $entry = $this->client->getContainer() | ||
230 | ->get('doctrine.orm.entity_manager') | ||
231 | ->getRepository('WallabagCoreBundle:Entry') | ||
232 | ->findOneByUser(1); | ||
233 | |||
234 | if (!$entry) { | ||
235 | $this->markTestSkipped('No content found in db.'); | ||
236 | } | ||
237 | |||
238 | // hydrate the tags relations | ||
239 | $nbTags = count($entry->getTags()); | ||
240 | |||
241 | $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [ | ||
242 | 'title' => 'New awesome title', | ||
243 | 'tags' => 'new tag '.uniqid(), | ||
244 | 'starred' => '1', | ||
245 | 'archive' => '0', | ||
246 | ]); | ||
247 | |||
248 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
249 | |||
250 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
251 | |||
252 | $this->assertEquals($entry->getId(), $content['id']); | ||
253 | $this->assertEquals($entry->getUrl(), $content['url']); | ||
254 | $this->assertEquals('New awesome title', $content['title']); | ||
255 | $this->assertGreaterThan($nbTags, count($content['tags'])); | ||
256 | $this->assertEquals(1, $content['user_id']); | ||
257 | } | ||
258 | |||
259 | public function testPatchEntryWithoutQuotes() | ||
260 | { | ||
261 | $entry = $this->client->getContainer() | ||
262 | ->get('doctrine.orm.entity_manager') | ||
263 | ->getRepository('WallabagCoreBundle:Entry') | ||
264 | ->findOneByUser(1); | ||
265 | |||
266 | if (!$entry) { | ||
267 | $this->markTestSkipped('No content found in db.'); | ||
268 | } | ||
269 | |||
270 | // hydrate the tags relations | ||
271 | $nbTags = count($entry->getTags()); | ||
272 | |||
273 | $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [ | ||
274 | 'title' => 'New awesome title', | ||
275 | 'tags' => 'new tag '.uniqid(), | ||
276 | 'starred' => 1, | ||
277 | 'archive' => 0, | ||
278 | ]); | ||
279 | |||
280 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
281 | |||
282 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
283 | |||
284 | $this->assertEquals($entry->getId(), $content['id']); | ||
285 | $this->assertEquals($entry->getUrl(), $content['url']); | ||
286 | $this->assertEquals('New awesome title', $content['title']); | ||
287 | $this->assertGreaterThan($nbTags, count($content['tags'])); | ||
288 | } | ||
289 | |||
290 | public function testGetTagsEntry() | ||
291 | { | ||
292 | $entry = $this->client->getContainer() | ||
293 | ->get('doctrine.orm.entity_manager') | ||
294 | ->getRepository('WallabagCoreBundle:Entry') | ||
295 | ->findOneWithTags(1); | ||
296 | |||
297 | $entry = $entry[0]; | ||
298 | |||
299 | if (!$entry) { | ||
300 | $this->markTestSkipped('No content found in db.'); | ||
301 | } | ||
302 | |||
303 | $tags = []; | ||
304 | foreach ($entry->getTags() as $tag) { | ||
305 | $tags[] = ['id' => $tag->getId(), 'label' => $tag->getLabel(), 'slug' => $tag->getSlug()]; | ||
306 | } | ||
307 | |||
308 | $this->client->request('GET', '/api/entries/'.$entry->getId().'/tags'); | ||
309 | |||
310 | $this->assertEquals(json_encode($tags, JSON_HEX_QUOT), $this->client->getResponse()->getContent()); | ||
311 | } | ||
312 | |||
313 | public function testPostTagsOnEntry() | ||
314 | { | ||
315 | $entry = $this->client->getContainer() | ||
316 | ->get('doctrine.orm.entity_manager') | ||
317 | ->getRepository('WallabagCoreBundle:Entry') | ||
318 | ->findOneByUser(1); | ||
319 | |||
320 | if (!$entry) { | ||
321 | $this->markTestSkipped('No content found in db.'); | ||
322 | } | ||
323 | |||
324 | $nbTags = count($entry->getTags()); | ||
325 | |||
326 | $newTags = 'tag1,tag2,tag3'; | ||
327 | |||
328 | $this->client->request('POST', '/api/entries/'.$entry->getId().'/tags', ['tags' => $newTags]); | ||
329 | |||
330 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
331 | |||
332 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
333 | |||
334 | $this->assertArrayHasKey('tags', $content); | ||
335 | $this->assertEquals($nbTags + 3, count($content['tags'])); | ||
336 | |||
337 | $entryDB = $this->client->getContainer() | ||
338 | ->get('doctrine.orm.entity_manager') | ||
339 | ->getRepository('WallabagCoreBundle:Entry') | ||
340 | ->find($entry->getId()); | ||
341 | |||
342 | $tagsInDB = []; | ||
343 | foreach ($entryDB->getTags()->toArray() as $tag) { | ||
344 | $tagsInDB[$tag->getId()] = $tag->getLabel(); | ||
345 | } | ||
346 | |||
347 | foreach (explode(',', $newTags) as $tag) { | ||
348 | $this->assertContains($tag, $tagsInDB); | ||
349 | } | ||
350 | } | ||
351 | |||
352 | public function testDeleteOneTagEntry() | ||
353 | { | ||
354 | $entry = $this->client->getContainer() | ||
355 | ->get('doctrine.orm.entity_manager') | ||
356 | ->getRepository('WallabagCoreBundle:Entry') | ||
357 | ->findOneWithTags(1); | ||
358 | $entry = $entry[0]; | ||
359 | |||
360 | if (!$entry) { | ||
361 | $this->markTestSkipped('No content found in db.'); | ||
362 | } | ||
363 | |||
364 | // hydrate the tags relations | ||
365 | $nbTags = count($entry->getTags()); | ||
366 | $tag = $entry->getTags()[0]; | ||
367 | |||
368 | $this->client->request('DELETE', '/api/entries/'.$entry->getId().'/tags/'.$tag->getId().'.json'); | ||
369 | |||
370 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
371 | |||
372 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
373 | |||
374 | $this->assertArrayHasKey('tags', $content); | ||
375 | $this->assertEquals($nbTags - 1, count($content['tags'])); | ||
376 | } | ||
377 | |||
378 | public function testGetUserTags() | ||
379 | { | ||
380 | $this->client->request('GET', '/api/tags.json'); | ||
381 | |||
382 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
383 | |||
384 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
385 | |||
386 | $this->assertGreaterThan(0, $content); | ||
387 | $this->assertArrayHasKey('id', $content[0]); | ||
388 | $this->assertArrayHasKey('label', $content[0]); | ||
389 | |||
390 | return end($content); | ||
391 | } | ||
392 | |||
393 | /** | ||
394 | * @depends testGetUserTags | ||
395 | */ | ||
396 | public function testDeleteUserTag($tag) | ||
397 | { | ||
398 | $this->client->request('DELETE', '/api/tags/'.$tag['id'].'.json'); | ||
399 | |||
400 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
401 | |||
402 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
403 | |||
404 | $this->assertArrayHasKey('label', $content); | ||
405 | $this->assertEquals($tag['label'], $content['label']); | ||
406 | $this->assertEquals($tag['slug'], $content['slug']); | ||
407 | |||
408 | $entries = $entry = $this->client->getContainer() | ||
409 | ->get('doctrine.orm.entity_manager') | ||
410 | ->getRepository('WallabagCoreBundle:Entry') | ||
411 | ->findAllByTagId($this->user->getId(), $tag['id']); | ||
412 | |||
413 | $this->assertCount(0, $entries); | ||
414 | } | ||
415 | |||
416 | public function testGetVersion() | ||
417 | { | ||
418 | $this->client->request('GET', '/api/version'); | ||
419 | |||
420 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
421 | |||
422 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
423 | |||
424 | $this->assertEquals($this->client->getContainer()->getParameter('wallabag_core.version'), $content); | ||
425 | } | ||
426 | |||
427 | public function testSaveIsArchivedAfterPost() | ||
428 | { | ||
429 | $entry = $this->client->getContainer() | ||
430 | ->get('doctrine.orm.entity_manager') | ||
431 | ->getRepository('WallabagCoreBundle:Entry') | ||
432 | ->findOneBy(['user' => 1, 'isArchived' => true]); | ||
433 | |||
434 | if (!$entry) { | ||
435 | $this->markTestSkipped('No content found in db.'); | ||
436 | } | ||
437 | |||
438 | $this->client->request('POST', '/api/entries.json', [ | ||
439 | 'url' => $entry->getUrl(), | ||
440 | ]); | ||
441 | |||
442 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
443 | |||
444 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
445 | |||
446 | $this->assertEquals(true, $content['is_archived']); | ||
447 | } | ||
448 | |||
449 | public function testSaveIsStarredAfterPost() | ||
450 | { | ||
451 | $entry = $this->client->getContainer() | ||
452 | ->get('doctrine.orm.entity_manager') | ||
453 | ->getRepository('WallabagCoreBundle:Entry') | ||
454 | ->findOneBy(['user' => 1, 'isStarred' => true]); | ||
455 | |||
456 | if (!$entry) { | ||
457 | $this->markTestSkipped('No content found in db.'); | ||
458 | } | ||
459 | |||
460 | $this->client->request('POST', '/api/entries.json', [ | ||
461 | 'url' => $entry->getUrl(), | ||
462 | ]); | ||
463 | |||
464 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
465 | |||
466 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
467 | |||
468 | $this->assertEquals(true, $content['is_starred']); | ||
469 | } | ||
470 | |||
471 | public function testSaveIsArchivedAfterPatch() | ||
472 | { | ||
473 | $entry = $this->client->getContainer() | ||
474 | ->get('doctrine.orm.entity_manager') | ||
475 | ->getRepository('WallabagCoreBundle:Entry') | ||
476 | ->findOneBy(['user' => 1, 'isArchived' => true]); | ||
477 | |||
478 | if (!$entry) { | ||
479 | $this->markTestSkipped('No content found in db.'); | ||
480 | } | ||
481 | |||
482 | $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [ | ||
483 | 'title' => $entry->getTitle().'++', | ||
484 | ]); | ||
485 | |||
486 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
487 | |||
488 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
489 | |||
490 | $this->assertEquals(true, $content['is_archived']); | ||
491 | } | ||
492 | |||
493 | public function testSaveIsStarredAfterPatch() | ||
494 | { | ||
495 | $entry = $this->client->getContainer() | ||
496 | ->get('doctrine.orm.entity_manager') | ||
497 | ->getRepository('WallabagCoreBundle:Entry') | ||
498 | ->findOneBy(['user' => 1, 'isStarred' => true]); | ||
499 | |||
500 | if (!$entry) { | ||
501 | $this->markTestSkipped('No content found in db.'); | ||
502 | } | ||
503 | $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [ | ||
504 | 'title' => $entry->getTitle().'++', | ||
505 | ]); | ||
506 | |||
507 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | ||
508 | |||
509 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
510 | |||
511 | $this->assertEquals(true, $content['is_starred']); | ||
512 | } | ||
513 | } | ||
diff --git a/tests/Wallabag/ApiBundle/WallabagApiTestCase.php b/tests/Wallabag/ApiBundle/WallabagApiTestCase.php new file mode 100644 index 00000000..cf9b3347 --- /dev/null +++ b/tests/Wallabag/ApiBundle/WallabagApiTestCase.php | |||
@@ -0,0 +1,51 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ApiBundle; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||
6 | use Symfony\Component\BrowserKit\Cookie; | ||
7 | |||
8 | abstract class WallabagApiTestCase extends WebTestCase | ||
9 | { | ||
10 | /** | ||
11 | * @var Client | ||
12 | */ | ||
13 | protected $client = null; | ||
14 | |||
15 | /** | ||
16 | * @var \FOS\UserBundle\Model\UserInterface | ||
17 | */ | ||
18 | protected $user; | ||
19 | |||
20 | public function setUp() | ||
21 | { | ||
22 | $this->client = $this->createAuthorizedClient(); | ||
23 | } | ||
24 | |||
25 | /** | ||
26 | * @return Client | ||
27 | */ | ||
28 | protected function createAuthorizedClient() | ||
29 | { | ||
30 | $client = static::createClient(); | ||
31 | $container = $client->getContainer(); | ||
32 | |||
33 | /** @var $userManager \FOS\UserBundle\Doctrine\UserManager */ | ||
34 | $userManager = $container->get('fos_user.user_manager'); | ||
35 | /** @var $loginManager \FOS\UserBundle\Security\LoginManager */ | ||
36 | $loginManager = $container->get('fos_user.security.login_manager'); | ||
37 | $firewallName = $container->getParameter('fos_user.firewall_name'); | ||
38 | |||
39 | $this->user = $userManager->findUserBy(['username' => 'admin']); | ||
40 | $loginManager->loginUser($firewallName, $this->user); | ||
41 | |||
42 | // save the login token into the session and put it in a cookie | ||
43 | $container->get('session')->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken())); | ||
44 | $container->get('session')->save(); | ||
45 | |||
46 | $session = $container->get('session'); | ||
47 | $client->getCookieJar()->set(new Cookie($session->getName(), $session->getId())); | ||
48 | |||
49 | return $client; | ||
50 | } | ||
51 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php b/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php new file mode 100644 index 00000000..6c6ce087 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php | |||
@@ -0,0 +1,279 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Command; | ||
4 | |||
5 | use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand; | ||
6 | use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand; | ||
7 | use Symfony\Bundle\FrameworkBundle\Console\Application; | ||
8 | use Symfony\Component\Console\Input\ArrayInput; | ||
9 | use Symfony\Component\Console\Output\NullOutput; | ||
10 | use Symfony\Component\Console\Tester\CommandTester; | ||
11 | use Wallabag\CoreBundle\Command\InstallCommand; | ||
12 | use Tests\Wallabag\CoreBundle\Mock\InstallCommandMock; | ||
13 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
14 | |||
15 | class InstallCommandTest extends WallabagCoreTestCase | ||
16 | { | ||
17 | public function setUp() | ||
18 | { | ||
19 | parent::setUp(); | ||
20 | |||
21 | if ($this->getClient()->getContainer()->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOPgSql\Driver) { | ||
22 | /* | ||
23 | * LOG: statement: CREATE DATABASE "wallabag" | ||
24 | * ERROR: source database "template1" is being accessed by other users | ||
25 | * DETAIL: There is 1 other session using the database. | ||
26 | * STATEMENT: CREATE DATABASE "wallabag" | ||
27 | * FATAL: database "wallabag" does not exist | ||
28 | * | ||
29 | * http://stackoverflow.com/a/14374832/569101 | ||
30 | */ | ||
31 | $this->markTestSkipped('PostgreSQL spotted: can find a good way to drop current database, skipping.'); | ||
32 | } | ||
33 | } | ||
34 | |||
35 | public static function tearDownAfterClass() | ||
36 | { | ||
37 | $application = new Application(static::$kernel); | ||
38 | $application->setAutoExit(false); | ||
39 | |||
40 | $code = $application->run(new ArrayInput([ | ||
41 | 'command' => 'doctrine:fixtures:load', | ||
42 | '--no-interaction' => true, | ||
43 | '--env' => 'test', | ||
44 | ]), new NullOutput()); | ||
45 | } | ||
46 | |||
47 | public function testRunInstallCommand() | ||
48 | { | ||
49 | $application = new Application($this->getClient()->getKernel()); | ||
50 | $application->add(new InstallCommandMock()); | ||
51 | |||
52 | $command = $application->find('wallabag:install'); | ||
53 | |||
54 | // We mock the QuestionHelper | ||
55 | $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') | ||
56 | ->disableOriginalConstructor() | ||
57 | ->getMock(); | ||
58 | $question->expects($this->any()) | ||
59 | ->method('ask') | ||
60 | ->will($this->returnValue('yes_'.uniqid('', true))); | ||
61 | |||
62 | // We override the standard helper with our mock | ||
63 | $command->getHelperSet()->set($question, 'question'); | ||
64 | |||
65 | $tester = new CommandTester($command); | ||
66 | $tester->execute([ | ||
67 | 'command' => $command->getName(), | ||
68 | ]); | ||
69 | |||
70 | $this->assertContains('Checking system requirements.', $tester->getDisplay()); | ||
71 | $this->assertContains('Setting up database.', $tester->getDisplay()); | ||
72 | $this->assertContains('Administration setup.', $tester->getDisplay()); | ||
73 | $this->assertContains('Config setup.', $tester->getDisplay()); | ||
74 | $this->assertContains('Installing assets.', $tester->getDisplay()); | ||
75 | } | ||
76 | |||
77 | public function testRunInstallCommandWithReset() | ||
78 | { | ||
79 | $application = new Application($this->getClient()->getKernel()); | ||
80 | $application->add(new InstallCommandMock()); | ||
81 | |||
82 | $command = $application->find('wallabag:install'); | ||
83 | |||
84 | // We mock the QuestionHelper | ||
85 | $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') | ||
86 | ->disableOriginalConstructor() | ||
87 | ->getMock(); | ||
88 | $question->expects($this->any()) | ||
89 | ->method('ask') | ||
90 | ->will($this->returnValue('yes_'.uniqid('', true))); | ||
91 | |||
92 | // We override the standard helper with our mock | ||
93 | $command->getHelperSet()->set($question, 'question'); | ||
94 | |||
95 | $tester = new CommandTester($command); | ||
96 | $tester->execute([ | ||
97 | 'command' => $command->getName(), | ||
98 | '--reset' => true, | ||
99 | ]); | ||
100 | |||
101 | $this->assertContains('Checking system requirements.', $tester->getDisplay()); | ||
102 | $this->assertContains('Setting up database.', $tester->getDisplay()); | ||
103 | $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay()); | ||
104 | $this->assertContains('Administration setup.', $tester->getDisplay()); | ||
105 | $this->assertContains('Config setup.', $tester->getDisplay()); | ||
106 | $this->assertContains('Installing assets.', $tester->getDisplay()); | ||
107 | |||
108 | // we force to reset everything | ||
109 | $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay()); | ||
110 | } | ||
111 | |||
112 | public function testRunInstallCommandWithDatabaseRemoved() | ||
113 | { | ||
114 | $application = new Application($this->getClient()->getKernel()); | ||
115 | $application->add(new DropDatabaseDoctrineCommand()); | ||
116 | |||
117 | // drop database first, so the install command won't ask to reset things | ||
118 | $command = $application->find('doctrine:database:drop'); | ||
119 | $command->run(new ArrayInput([ | ||
120 | 'command' => 'doctrine:database:drop', | ||
121 | '--force' => true, | ||
122 | ]), new NullOutput()); | ||
123 | |||
124 | // start a new application to avoid lagging connexion to pgsql | ||
125 | $client = static::createClient(); | ||
126 | $application = new Application($client->getKernel()); | ||
127 | $application->add(new InstallCommand()); | ||
128 | |||
129 | $command = $application->find('wallabag:install'); | ||
130 | |||
131 | // We mock the QuestionHelper | ||
132 | $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') | ||
133 | ->disableOriginalConstructor() | ||
134 | ->getMock(); | ||
135 | $question->expects($this->any()) | ||
136 | ->method('ask') | ||
137 | ->will($this->returnValue('yes_'.uniqid('', true))); | ||
138 | |||
139 | // We override the standard helper with our mock | ||
140 | $command->getHelperSet()->set($question, 'question'); | ||
141 | |||
142 | $tester = new CommandTester($command); | ||
143 | $tester->execute([ | ||
144 | 'command' => $command->getName(), | ||
145 | ]); | ||
146 | |||
147 | $this->assertContains('Checking system requirements.', $tester->getDisplay()); | ||
148 | $this->assertContains('Setting up database.', $tester->getDisplay()); | ||
149 | $this->assertContains('Administration setup.', $tester->getDisplay()); | ||
150 | $this->assertContains('Config setup.', $tester->getDisplay()); | ||
151 | $this->assertContains('Installing assets.', $tester->getDisplay()); | ||
152 | |||
153 | // the current database doesn't already exist | ||
154 | $this->assertContains('Creating database and schema, clearing the cache', $tester->getDisplay()); | ||
155 | } | ||
156 | |||
157 | public function testRunInstallCommandChooseResetSchema() | ||
158 | { | ||
159 | $application = new Application($this->getClient()->getKernel()); | ||
160 | $application->add(new InstallCommandMock()); | ||
161 | |||
162 | $command = $application->find('wallabag:install'); | ||
163 | |||
164 | // We mock the QuestionHelper | ||
165 | $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') | ||
166 | ->disableOriginalConstructor() | ||
167 | ->getMock(); | ||
168 | |||
169 | $question->expects($this->exactly(3)) | ||
170 | ->method('ask') | ||
171 | ->will($this->onConsecutiveCalls( | ||
172 | false, // don't want to reset the entire database | ||
173 | true, // do want to reset the schema | ||
174 | false // don't want to create a new user | ||
175 | )); | ||
176 | |||
177 | // We override the standard helper with our mock | ||
178 | $command->getHelperSet()->set($question, 'question'); | ||
179 | |||
180 | $tester = new CommandTester($command); | ||
181 | $tester->execute([ | ||
182 | 'command' => $command->getName(), | ||
183 | ]); | ||
184 | |||
185 | $this->assertContains('Checking system requirements.', $tester->getDisplay()); | ||
186 | $this->assertContains('Setting up database.', $tester->getDisplay()); | ||
187 | $this->assertContains('Administration setup.', $tester->getDisplay()); | ||
188 | $this->assertContains('Config setup.', $tester->getDisplay()); | ||
189 | $this->assertContains('Installing assets.', $tester->getDisplay()); | ||
190 | |||
191 | $this->assertContains('Droping schema and creating schema', $tester->getDisplay()); | ||
192 | } | ||
193 | |||
194 | public function testRunInstallCommandChooseNothing() | ||
195 | { | ||
196 | $application = new Application($this->getClient()->getKernel()); | ||
197 | $application->add(new InstallCommand()); | ||
198 | $application->add(new DropDatabaseDoctrineCommand()); | ||
199 | $application->add(new CreateDatabaseDoctrineCommand()); | ||
200 | |||
201 | // drop database first, so the install command won't ask to reset things | ||
202 | $command = new DropDatabaseDoctrineCommand(); | ||
203 | $command->setApplication($application); | ||
204 | $command->run(new ArrayInput([ | ||
205 | 'command' => 'doctrine:database:drop', | ||
206 | '--force' => true, | ||
207 | ]), new NullOutput()); | ||
208 | |||
209 | $this->getClient()->getContainer()->get('doctrine')->getConnection()->close(); | ||
210 | |||
211 | $command = new CreateDatabaseDoctrineCommand(); | ||
212 | $command->setApplication($application); | ||
213 | $command->run(new ArrayInput([ | ||
214 | 'command' => 'doctrine:database:create', | ||
215 | '--env' => 'test', | ||
216 | ]), new NullOutput()); | ||
217 | |||
218 | $command = $application->find('wallabag:install'); | ||
219 | |||
220 | // We mock the QuestionHelper | ||
221 | $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') | ||
222 | ->disableOriginalConstructor() | ||
223 | ->getMock(); | ||
224 | |||
225 | $question->expects($this->exactly(2)) | ||
226 | ->method('ask') | ||
227 | ->will($this->onConsecutiveCalls( | ||
228 | false, // don't want to reset the entire database | ||
229 | false // don't want to create a new user | ||
230 | )); | ||
231 | |||
232 | // We override the standard helper with our mock | ||
233 | $command->getHelperSet()->set($question, 'question'); | ||
234 | |||
235 | $tester = new CommandTester($command); | ||
236 | $tester->execute([ | ||
237 | 'command' => $command->getName(), | ||
238 | ]); | ||
239 | |||
240 | $this->assertContains('Checking system requirements.', $tester->getDisplay()); | ||
241 | $this->assertContains('Setting up database.', $tester->getDisplay()); | ||
242 | $this->assertContains('Administration setup.', $tester->getDisplay()); | ||
243 | $this->assertContains('Config setup.', $tester->getDisplay()); | ||
244 | $this->assertContains('Installing assets.', $tester->getDisplay()); | ||
245 | |||
246 | $this->assertContains('Creating schema', $tester->getDisplay()); | ||
247 | } | ||
248 | |||
249 | public function testRunInstallCommandNoInteraction() | ||
250 | { | ||
251 | $application = new Application($this->getClient()->getKernel()); | ||
252 | $application->add(new InstallCommandMock()); | ||
253 | |||
254 | $command = $application->find('wallabag:install'); | ||
255 | |||
256 | // We mock the QuestionHelper | ||
257 | $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') | ||
258 | ->disableOriginalConstructor() | ||
259 | ->getMock(); | ||
260 | $question->expects($this->any()) | ||
261 | ->method('ask') | ||
262 | ->will($this->returnValue('yes_'.uniqid('', true))); | ||
263 | |||
264 | // We override the standard helper with our mock | ||
265 | $command->getHelperSet()->set($question, 'question'); | ||
266 | |||
267 | $tester = new CommandTester($command); | ||
268 | $tester->execute([ | ||
269 | 'command' => $command->getName(), | ||
270 | '--no-interaction' => true, | ||
271 | ]); | ||
272 | |||
273 | $this->assertContains('Checking system requirements.', $tester->getDisplay()); | ||
274 | $this->assertContains('Setting up database.', $tester->getDisplay()); | ||
275 | $this->assertContains('Administration setup.', $tester->getDisplay()); | ||
276 | $this->assertContains('Config setup.', $tester->getDisplay()); | ||
277 | $this->assertContains('Installing assets.', $tester->getDisplay()); | ||
278 | } | ||
279 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Command/TagAllCommandTest.php b/tests/Wallabag/CoreBundle/Command/TagAllCommandTest.php new file mode 100644 index 00000000..ec31708f --- /dev/null +++ b/tests/Wallabag/CoreBundle/Command/TagAllCommandTest.php | |||
@@ -0,0 +1,60 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Command; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Console\Application; | ||
6 | use Symfony\Component\Console\Tester\CommandTester; | ||
7 | use Wallabag\CoreBundle\Command\TagAllCommand; | ||
8 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
9 | |||
10 | class TagAllCommandTest extends WallabagCoreTestCase | ||
11 | { | ||
12 | /** | ||
13 | * @expectedException Symfony\Component\Console\Exception\RuntimeException | ||
14 | * @expectedExceptionMessage Not enough arguments (missing: "username") | ||
15 | */ | ||
16 | public function testRunTagAllCommandWithoutUsername() | ||
17 | { | ||
18 | $application = new Application($this->getClient()->getKernel()); | ||
19 | $application->add(new TagAllCommand()); | ||
20 | |||
21 | $command = $application->find('wallabag:tag:all'); | ||
22 | |||
23 | $tester = new CommandTester($command); | ||
24 | $tester->execute([ | ||
25 | 'command' => $command->getName(), | ||
26 | ]); | ||
27 | } | ||
28 | |||
29 | public function testRunTagAllCommandWithBadUsername() | ||
30 | { | ||
31 | $application = new Application($this->getClient()->getKernel()); | ||
32 | $application->add(new TagAllCommand()); | ||
33 | |||
34 | $command = $application->find('wallabag:tag:all'); | ||
35 | |||
36 | $tester = new CommandTester($command); | ||
37 | $tester->execute([ | ||
38 | 'command' => $command->getName(), | ||
39 | 'username' => 'unknown', | ||
40 | ]); | ||
41 | |||
42 | $this->assertContains('User "unknown" not found', $tester->getDisplay()); | ||
43 | } | ||
44 | |||
45 | public function testRunTagAllCommand() | ||
46 | { | ||
47 | $application = new Application($this->getClient()->getKernel()); | ||
48 | $application->add(new TagAllCommand()); | ||
49 | |||
50 | $command = $application->find('wallabag:tag:all'); | ||
51 | |||
52 | $tester = new CommandTester($command); | ||
53 | $tester->execute([ | ||
54 | 'command' => $command->getName(), | ||
55 | 'username' => 'admin', | ||
56 | ]); | ||
57 | |||
58 | $this->assertContains('Tagging entries for user « admin »... Done', $tester->getDisplay()); | ||
59 | } | ||
60 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php new file mode 100644 index 00000000..7193f9b0 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php | |||
@@ -0,0 +1,652 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class ConfigControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function testLogin() | ||
10 | { | ||
11 | $client = $this->getClient(); | ||
12 | |||
13 | $client->request('GET', '/new'); | ||
14 | |||
15 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
16 | $this->assertContains('login', $client->getResponse()->headers->get('location')); | ||
17 | } | ||
18 | |||
19 | public function testIndex() | ||
20 | { | ||
21 | $this->logInAs('admin'); | ||
22 | $client = $this->getClient(); | ||
23 | |||
24 | $crawler = $client->request('GET', '/config'); | ||
25 | |||
26 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
27 | |||
28 | $this->assertCount(1, $crawler->filter('button[id=config_save]')); | ||
29 | $this->assertCount(1, $crawler->filter('button[id=change_passwd_save]')); | ||
30 | $this->assertCount(1, $crawler->filter('button[id=update_user_save]')); | ||
31 | $this->assertCount(1, $crawler->filter('button[id=new_user_save]')); | ||
32 | $this->assertCount(1, $crawler->filter('button[id=rss_config_save]')); | ||
33 | } | ||
34 | |||
35 | public function testUpdate() | ||
36 | { | ||
37 | $this->logInAs('admin'); | ||
38 | $client = $this->getClient(); | ||
39 | |||
40 | $crawler = $client->request('GET', '/config'); | ||
41 | |||
42 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
43 | |||
44 | $form = $crawler->filter('button[id=config_save]')->form(); | ||
45 | |||
46 | $data = [ | ||
47 | 'config[theme]' => 'baggy', | ||
48 | 'config[items_per_page]' => '30', | ||
49 | 'config[reading_speed]' => '0.5', | ||
50 | 'config[language]' => 'en', | ||
51 | ]; | ||
52 | |||
53 | $client->submit($form, $data); | ||
54 | |||
55 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
56 | |||
57 | $crawler = $client->followRedirect(); | ||
58 | |||
59 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); | ||
60 | $this->assertContains('flashes.config.notice.config_saved', $alert[0]); | ||
61 | } | ||
62 | |||
63 | public function testChangeReadingSpeed() | ||
64 | { | ||
65 | $this->logInAs('admin'); | ||
66 | $client = $this->getClient(); | ||
67 | |||
68 | $crawler = $client->request('GET', '/unread/list'); | ||
69 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
70 | $dataFilters = [ | ||
71 | 'entry_filter[readingTime][right_number]' => 22, | ||
72 | 'entry_filter[readingTime][left_number]' => 22, | ||
73 | ]; | ||
74 | $crawler = $client->submit($form, $dataFilters); | ||
75 | $this->assertCount(1, $crawler->filter('div[class=entry]')); | ||
76 | |||
77 | // Change reading speed | ||
78 | $crawler = $client->request('GET', '/config'); | ||
79 | $form = $crawler->filter('button[id=config_save]')->form(); | ||
80 | $data = [ | ||
81 | 'config[reading_speed]' => '2', | ||
82 | ]; | ||
83 | $client->submit($form, $data); | ||
84 | |||
85 | // Is the entry still available via filters? | ||
86 | $crawler = $client->request('GET', '/unread/list'); | ||
87 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
88 | $crawler = $client->submit($form, $dataFilters); | ||
89 | $this->assertCount(0, $crawler->filter('div[class=entry]')); | ||
90 | |||
91 | // Restore old configuration | ||
92 | $crawler = $client->request('GET', '/config'); | ||
93 | $form = $crawler->filter('button[id=config_save]')->form(); | ||
94 | $data = [ | ||
95 | 'config[reading_speed]' => '0.5', | ||
96 | ]; | ||
97 | $client->submit($form, $data); | ||
98 | } | ||
99 | |||
100 | public function dataForUpdateFailed() | ||
101 | { | ||
102 | return [ | ||
103 | [[ | ||
104 | 'config[theme]' => 'baggy', | ||
105 | 'config[items_per_page]' => '', | ||
106 | 'config[language]' => 'en', | ||
107 | ]], | ||
108 | ]; | ||
109 | } | ||
110 | |||
111 | /** | ||
112 | * @dataProvider dataForUpdateFailed | ||
113 | */ | ||
114 | public function testUpdateFailed($data) | ||
115 | { | ||
116 | $this->logInAs('admin'); | ||
117 | $client = $this->getClient(); | ||
118 | |||
119 | $crawler = $client->request('GET', '/config'); | ||
120 | |||
121 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
122 | |||
123 | $form = $crawler->filter('button[id=config_save]')->form(); | ||
124 | |||
125 | $crawler = $client->submit($form, $data); | ||
126 | |||
127 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
128 | |||
129 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); | ||
130 | $this->assertContains('This value should not be blank', $alert[0]); | ||
131 | } | ||
132 | |||
133 | public function dataForChangePasswordFailed() | ||
134 | { | ||
135 | return [ | ||
136 | [ | ||
137 | [ | ||
138 | 'change_passwd[old_password]' => 'material', | ||
139 | 'change_passwd[new_password][first]' => '', | ||
140 | 'change_passwd[new_password][second]' => '', | ||
141 | ], | ||
142 | 'validator.password_wrong_value', | ||
143 | ], | ||
144 | [ | ||
145 | [ | ||
146 | 'change_passwd[old_password]' => 'mypassword', | ||
147 | 'change_passwd[new_password][first]' => '', | ||
148 | 'change_passwd[new_password][second]' => '', | ||
149 | ], | ||
150 | 'This value should not be blank', | ||
151 | ], | ||
152 | [ | ||
153 | [ | ||
154 | 'change_passwd[old_password]' => 'mypassword', | ||
155 | 'change_passwd[new_password][first]' => 'hop', | ||
156 | 'change_passwd[new_password][second]' => '', | ||
157 | ], | ||
158 | 'validator.password_must_match', | ||
159 | ], | ||
160 | [ | ||
161 | [ | ||
162 | 'change_passwd[old_password]' => 'mypassword', | ||
163 | 'change_passwd[new_password][first]' => 'hop', | ||
164 | 'change_passwd[new_password][second]' => 'hop', | ||
165 | ], | ||
166 | 'validator.password_too_short', | ||
167 | ], | ||
168 | ]; | ||
169 | } | ||
170 | |||
171 | /** | ||
172 | * @dataProvider dataForChangePasswordFailed | ||
173 | */ | ||
174 | public function testChangePasswordFailed($data, $expectedMessage) | ||
175 | { | ||
176 | $this->logInAs('admin'); | ||
177 | $client = $this->getClient(); | ||
178 | |||
179 | $crawler = $client->request('GET', '/config'); | ||
180 | |||
181 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
182 | |||
183 | $form = $crawler->filter('button[id=change_passwd_save]')->form(); | ||
184 | |||
185 | $crawler = $client->submit($form, $data); | ||
186 | |||
187 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
188 | |||
189 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); | ||
190 | $this->assertContains($expectedMessage, $alert[0]); | ||
191 | } | ||
192 | |||
193 | public function testChangePassword() | ||
194 | { | ||
195 | $this->logInAs('admin'); | ||
196 | $client = $this->getClient(); | ||
197 | |||
198 | $crawler = $client->request('GET', '/config'); | ||
199 | |||
200 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
201 | |||
202 | $form = $crawler->filter('button[id=change_passwd_save]')->form(); | ||
203 | |||
204 | $data = [ | ||
205 | 'change_passwd[old_password]' => 'mypassword', | ||
206 | 'change_passwd[new_password][first]' => 'mypassword', | ||
207 | 'change_passwd[new_password][second]' => 'mypassword', | ||
208 | ]; | ||
209 | |||
210 | $client->submit($form, $data); | ||
211 | |||
212 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
213 | |||
214 | $crawler = $client->followRedirect(); | ||
215 | |||
216 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); | ||
217 | $this->assertContains('flashes.config.notice.password_updated', $alert[0]); | ||
218 | } | ||
219 | |||
220 | public function dataForUserFailed() | ||
221 | { | ||
222 | return [ | ||
223 | [ | ||
224 | [ | ||
225 | 'update_user[name]' => '', | ||
226 | 'update_user[email]' => '', | ||
227 | ], | ||
228 | 'fos_user.email.blank', | ||
229 | ], | ||
230 | [ | ||
231 | [ | ||
232 | 'update_user[name]' => '', | ||
233 | 'update_user[email]' => 'test', | ||
234 | ], | ||
235 | 'fos_user.email.invalid', | ||
236 | ], | ||
237 | ]; | ||
238 | } | ||
239 | |||
240 | /** | ||
241 | * @dataProvider dataForUserFailed | ||
242 | */ | ||
243 | public function testUserFailed($data, $expectedMessage) | ||
244 | { | ||
245 | $this->logInAs('admin'); | ||
246 | $client = $this->getClient(); | ||
247 | |||
248 | $crawler = $client->request('GET', '/config'); | ||
249 | |||
250 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
251 | |||
252 | $form = $crawler->filter('button[id=update_user_save]')->form(); | ||
253 | |||
254 | $crawler = $client->submit($form, $data); | ||
255 | |||
256 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
257 | |||
258 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); | ||
259 | $this->assertContains($expectedMessage, $alert[0]); | ||
260 | } | ||
261 | |||
262 | public function testUserUpdate() | ||
263 | { | ||
264 | $this->logInAs('admin'); | ||
265 | $client = $this->getClient(); | ||
266 | |||
267 | $crawler = $client->request('GET', '/config'); | ||
268 | |||
269 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
270 | |||
271 | $form = $crawler->filter('button[id=update_user_save]')->form(); | ||
272 | |||
273 | $data = [ | ||
274 | 'update_user[name]' => 'new name', | ||
275 | 'update_user[email]' => 'admin@wallabag.io', | ||
276 | ]; | ||
277 | |||
278 | $client->submit($form, $data); | ||
279 | |||
280 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
281 | |||
282 | $crawler = $client->followRedirect(); | ||
283 | |||
284 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); | ||
285 | $this->assertContains('flashes.config.notice.user_updated', $alert[0]); | ||
286 | } | ||
287 | |||
288 | public function dataForNewUserFailed() | ||
289 | { | ||
290 | return [ | ||
291 | [ | ||
292 | [ | ||
293 | 'new_user[username]' => '', | ||
294 | 'new_user[plainPassword][first]' => '', | ||
295 | 'new_user[plainPassword][second]' => '', | ||
296 | 'new_user[email]' => '', | ||
297 | ], | ||
298 | 'fos_user.username.blank', | ||
299 | ], | ||
300 | [ | ||
301 | [ | ||
302 | 'new_user[username]' => 'a', | ||
303 | 'new_user[plainPassword][first]' => 'mypassword', | ||
304 | 'new_user[plainPassword][second]' => 'mypassword', | ||
305 | 'new_user[email]' => '', | ||
306 | ], | ||
307 | 'fos_user.username.short', | ||
308 | ], | ||
309 | [ | ||
310 | [ | ||
311 | 'new_user[username]' => 'wallace', | ||
312 | 'new_user[plainPassword][first]' => 'mypassword', | ||
313 | 'new_user[plainPassword][second]' => 'mypassword', | ||
314 | 'new_user[email]' => 'test', | ||
315 | ], | ||
316 | 'fos_user.email.invalid', | ||
317 | ], | ||
318 | [ | ||
319 | [ | ||
320 | 'new_user[username]' => 'admin', | ||
321 | 'new_user[plainPassword][first]' => 'wallacewallace', | ||
322 | 'new_user[plainPassword][second]' => 'wallacewallace', | ||
323 | 'new_user[email]' => 'wallace@wallace.me', | ||
324 | ], | ||
325 | 'fos_user.username.already_used', | ||
326 | ], | ||
327 | [ | ||
328 | [ | ||
329 | 'new_user[username]' => 'wallace', | ||
330 | 'new_user[plainPassword][first]' => 'mypassword1', | ||
331 | 'new_user[plainPassword][second]' => 'mypassword2', | ||
332 | 'new_user[email]' => 'wallace@wallace.me', | ||
333 | ], | ||
334 | 'validator.password_must_match', | ||
335 | ], | ||
336 | ]; | ||
337 | } | ||
338 | |||
339 | /** | ||
340 | * @dataProvider dataForNewUserFailed | ||
341 | */ | ||
342 | public function testNewUserFailed($data, $expectedMessage) | ||
343 | { | ||
344 | $this->logInAs('admin'); | ||
345 | $client = $this->getClient(); | ||
346 | |||
347 | $crawler = $client->request('GET', '/config'); | ||
348 | |||
349 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
350 | |||
351 | $form = $crawler->filter('button[id=new_user_save]')->form(); | ||
352 | |||
353 | $crawler = $client->submit($form, $data); | ||
354 | |||
355 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
356 | |||
357 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); | ||
358 | $this->assertContains($expectedMessage, $alert[0]); | ||
359 | } | ||
360 | |||
361 | public function testNewUserCreated() | ||
362 | { | ||
363 | $this->logInAs('admin'); | ||
364 | $client = $this->getClient(); | ||
365 | |||
366 | $crawler = $client->request('GET', '/config'); | ||
367 | |||
368 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
369 | |||
370 | $form = $crawler->filter('button[id=new_user_save]')->form(); | ||
371 | |||
372 | $data = [ | ||
373 | 'new_user[username]' => 'wallace', | ||
374 | 'new_user[plainPassword][first]' => 'wallace1', | ||
375 | 'new_user[plainPassword][second]' => 'wallace1', | ||
376 | 'new_user[email]' => 'wallace@wallace.me', | ||
377 | ]; | ||
378 | |||
379 | $client->submit($form, $data); | ||
380 | |||
381 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
382 | |||
383 | $crawler = $client->followRedirect(); | ||
384 | |||
385 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); | ||
386 | $this->assertContains('flashes.config.notice.user_added', $alert[0]); | ||
387 | |||
388 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
389 | $user = $em | ||
390 | ->getRepository('WallabagUserBundle:User') | ||
391 | ->findOneByUsername('wallace'); | ||
392 | |||
393 | $this->assertTrue(false !== $user); | ||
394 | $this->assertTrue($user->isEnabled()); | ||
395 | $this->assertEquals('material', $user->getConfig()->getTheme()); | ||
396 | $this->assertEquals(12, $user->getConfig()->getItemsPerPage()); | ||
397 | $this->assertEquals(50, $user->getConfig()->getRssLimit()); | ||
398 | $this->assertEquals('en', $user->getConfig()->getLanguage()); | ||
399 | $this->assertEquals(1, $user->getConfig()->getReadingSpeed()); | ||
400 | } | ||
401 | |||
402 | public function testRssUpdateResetToken() | ||
403 | { | ||
404 | $this->logInAs('admin'); | ||
405 | $client = $this->getClient(); | ||
406 | |||
407 | // reset the token | ||
408 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
409 | $user = $em | ||
410 | ->getRepository('WallabagUserBundle:User') | ||
411 | ->findOneByUsername('admin'); | ||
412 | |||
413 | if (!$user) { | ||
414 | $this->markTestSkipped('No user found in db.'); | ||
415 | } | ||
416 | |||
417 | $config = $user->getConfig(); | ||
418 | $config->setRssToken(null); | ||
419 | $em->persist($config); | ||
420 | $em->flush(); | ||
421 | |||
422 | $crawler = $client->request('GET', '/config'); | ||
423 | |||
424 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
425 | |||
426 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
427 | $this->assertContains('config.form_rss.no_token', $body[0]); | ||
428 | |||
429 | $client->request('GET', '/generate-token'); | ||
430 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
431 | |||
432 | $crawler = $client->followRedirect(); | ||
433 | |||
434 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
435 | $this->assertNotContains('config.form_rss.no_token', $body[0]); | ||
436 | } | ||
437 | |||
438 | public function testGenerateTokenAjax() | ||
439 | { | ||
440 | $this->logInAs('admin'); | ||
441 | $client = $this->getClient(); | ||
442 | |||
443 | $client->request( | ||
444 | 'GET', | ||
445 | '/generate-token', | ||
446 | [], | ||
447 | [], | ||
448 | ['HTTP_X-Requested-With' => 'XMLHttpRequest'] | ||
449 | ); | ||
450 | |||
451 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
452 | $content = json_decode($client->getResponse()->getContent(), true); | ||
453 | $this->assertArrayHasKey('token', $content); | ||
454 | } | ||
455 | |||
456 | public function testRssUpdate() | ||
457 | { | ||
458 | $this->logInAs('admin'); | ||
459 | $client = $this->getClient(); | ||
460 | |||
461 | $crawler = $client->request('GET', '/config'); | ||
462 | |||
463 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
464 | |||
465 | $form = $crawler->filter('button[id=rss_config_save]')->form(); | ||
466 | |||
467 | $data = [ | ||
468 | 'rss_config[rss_limit]' => 12, | ||
469 | ]; | ||
470 | |||
471 | $client->submit($form, $data); | ||
472 | |||
473 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
474 | |||
475 | $crawler = $client->followRedirect(); | ||
476 | |||
477 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); | ||
478 | $this->assertContains('flashes.config.notice.rss_updated', $alert[0]); | ||
479 | } | ||
480 | |||
481 | public function dataForRssFailed() | ||
482 | { | ||
483 | return [ | ||
484 | [ | ||
485 | [ | ||
486 | 'rss_config[rss_limit]' => 0, | ||
487 | ], | ||
488 | 'This value should be 1 or more.', | ||
489 | ], | ||
490 | [ | ||
491 | [ | ||
492 | 'rss_config[rss_limit]' => 1000000000000, | ||
493 | ], | ||
494 | 'validator.rss_limit_too_hight', | ||
495 | ], | ||
496 | ]; | ||
497 | } | ||
498 | |||
499 | /** | ||
500 | * @dataProvider dataForRssFailed | ||
501 | */ | ||
502 | public function testRssFailed($data, $expectedMessage) | ||
503 | { | ||
504 | $this->logInAs('admin'); | ||
505 | $client = $this->getClient(); | ||
506 | |||
507 | $crawler = $client->request('GET', '/config'); | ||
508 | |||
509 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
510 | |||
511 | $form = $crawler->filter('button[id=rss_config_save]')->form(); | ||
512 | |||
513 | $crawler = $client->submit($form, $data); | ||
514 | |||
515 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
516 | |||
517 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); | ||
518 | $this->assertContains($expectedMessage, $alert[0]); | ||
519 | } | ||
520 | |||
521 | public function testTaggingRuleCreation() | ||
522 | { | ||
523 | $this->logInAs('admin'); | ||
524 | $client = $this->getClient(); | ||
525 | |||
526 | $crawler = $client->request('GET', '/config'); | ||
527 | |||
528 | $this->assertTrue($client->getResponse()->isSuccessful()); | ||
529 | |||
530 | $form = $crawler->filter('button[id=tagging_rule_save]')->form(); | ||
531 | |||
532 | $data = [ | ||
533 | 'tagging_rule[rule]' => 'readingTime <= 3', | ||
534 | 'tagging_rule[tags]' => 'short reading', | ||
535 | ]; | ||
536 | |||
537 | $client->submit($form, $data); | ||
538 | |||
539 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
540 | |||
541 | $crawler = $client->followRedirect(); | ||
542 | |||
543 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); | ||
544 | $this->assertContains('flashes.config.notice.tagging_rules_updated', $alert[0]); | ||
545 | |||
546 | $deleteLink = $crawler->filter('.delete')->last()->link(); | ||
547 | |||
548 | $crawler = $client->click($deleteLink); | ||
549 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
550 | |||
551 | $crawler = $client->followRedirect(); | ||
552 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); | ||
553 | $this->assertContains('flashes.config.notice.tagging_rules_deleted', $alert[0]); | ||
554 | } | ||
555 | |||
556 | public function dataForTaggingRuleFailed() | ||
557 | { | ||
558 | return [ | ||
559 | [ | ||
560 | [ | ||
561 | 'tagging_rule[rule]' => 'unknownVar <= 3', | ||
562 | 'tagging_rule[tags]' => 'cool tag', | ||
563 | ], | ||
564 | [ | ||
565 | 'The variable', | ||
566 | 'does not exist.', | ||
567 | ], | ||
568 | ], | ||
569 | [ | ||
570 | [ | ||
571 | 'tagging_rule[rule]' => 'length(domainName) <= 42', | ||
572 | 'tagging_rule[tags]' => 'cool tag', | ||
573 | ], | ||
574 | [ | ||
575 | 'The operator', | ||
576 | 'does not exist.', | ||
577 | ], | ||
578 | ], | ||
579 | ]; | ||
580 | } | ||
581 | |||
582 | /** | ||
583 | * @dataProvider dataForTaggingRuleFailed | ||
584 | */ | ||
585 | public function testTaggingRuleCreationFail($data, $messages) | ||
586 | { | ||
587 | $this->logInAs('admin'); | ||
588 | $client = $this->getClient(); | ||
589 | |||
590 | $crawler = $client->request('GET', '/config'); | ||
591 | |||
592 | $this->assertTrue($client->getResponse()->isSuccessful()); | ||
593 | |||
594 | $form = $crawler->filter('button[id=tagging_rule_save]')->form(); | ||
595 | |||
596 | $crawler = $client->submit($form, $data); | ||
597 | |||
598 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
599 | |||
600 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
601 | |||
602 | foreach ($messages as $message) { | ||
603 | $this->assertContains($message, $body[0]); | ||
604 | } | ||
605 | } | ||
606 | |||
607 | public function testDeletingTaggingRuleFromAnOtherUser() | ||
608 | { | ||
609 | $this->logInAs('bob'); | ||
610 | $client = $this->getClient(); | ||
611 | |||
612 | $rule = $client->getContainer()->get('doctrine.orm.entity_manager') | ||
613 | ->getRepository('WallabagCoreBundle:TaggingRule') | ||
614 | ->findAll()[0]; | ||
615 | |||
616 | $crawler = $client->request('GET', '/tagging-rule/delete/'.$rule->getId()); | ||
617 | |||
618 | $this->assertEquals(403, $client->getResponse()->getStatusCode()); | ||
619 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
620 | $this->assertContains('You can not access this tagging rule', $body[0]); | ||
621 | } | ||
622 | |||
623 | public function testDemoMode() | ||
624 | { | ||
625 | $this->logInAs('admin'); | ||
626 | $client = $this->getClient(); | ||
627 | |||
628 | $config = $client->getContainer()->get('craue_config'); | ||
629 | $config->set('demo_mode_enabled', 1); | ||
630 | $config->set('demo_mode_username', 'admin'); | ||
631 | |||
632 | $crawler = $client->request('GET', '/config'); | ||
633 | |||
634 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
635 | |||
636 | $form = $crawler->filter('button[id=change_passwd_save]')->form(); | ||
637 | |||
638 | $data = [ | ||
639 | 'change_passwd[old_password]' => 'mypassword', | ||
640 | 'change_passwd[new_password][first]' => 'mypassword', | ||
641 | 'change_passwd[new_password][second]' => 'mypassword', | ||
642 | ]; | ||
643 | |||
644 | $client->submit($form, $data); | ||
645 | |||
646 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
647 | $this->assertContains('flashes.config.notice.password_not_updated_demo', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]); | ||
648 | |||
649 | $config->set('demo_mode_enabled', 0); | ||
650 | $config->set('demo_mode_username', 'wallabag'); | ||
651 | } | ||
652 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php b/tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php new file mode 100644 index 00000000..79452ace --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php | |||
@@ -0,0 +1,71 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class DeveloperControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function testCreateClient() | ||
10 | { | ||
11 | $this->logInAs('admin'); | ||
12 | $client = $this->getClient(); | ||
13 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
14 | $nbClients = $em->getRepository('WallabagApiBundle:Client')->findAll(); | ||
15 | |||
16 | $crawler = $client->request('GET', '/developer/client/create'); | ||
17 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
18 | |||
19 | $form = $crawler->filter('button[type=submit]')->form(); | ||
20 | |||
21 | $client->submit($form); | ||
22 | |||
23 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
24 | |||
25 | $newNbClients = $em->getRepository('WallabagApiBundle:Client')->findAll(); | ||
26 | $this->assertGreaterThan(count($nbClients), count($newNbClients)); | ||
27 | } | ||
28 | |||
29 | public function testListingClient() | ||
30 | { | ||
31 | $this->logInAs('admin'); | ||
32 | $client = $this->getClient(); | ||
33 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
34 | $nbClients = $em->getRepository('WallabagApiBundle:Client')->findAll(); | ||
35 | |||
36 | $crawler = $client->request('GET', '/developer'); | ||
37 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
38 | $this->assertEquals(count($nbClients), $crawler->filter('ul[class=collapsible] li')->count()); | ||
39 | } | ||
40 | |||
41 | public function testDeveloperHowto() | ||
42 | { | ||
43 | $this->logInAs('admin'); | ||
44 | $client = $this->getClient(); | ||
45 | |||
46 | $crawler = $client->request('GET', '/developer/howto/first-app'); | ||
47 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
48 | } | ||
49 | |||
50 | public function testRemoveClient() | ||
51 | { | ||
52 | $this->logInAs('admin'); | ||
53 | $client = $this->getClient(); | ||
54 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
55 | $nbClients = $em->getRepository('WallabagApiBundle:Client')->findAll(); | ||
56 | |||
57 | $crawler = $client->request('GET', '/developer'); | ||
58 | |||
59 | $link = $crawler | ||
60 | ->filter('div[class=collapsible-body] p a') | ||
61 | ->eq(0) | ||
62 | ->link() | ||
63 | ; | ||
64 | |||
65 | $client->click($link); | ||
66 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
67 | |||
68 | $newNbClients = $em->getRepository('WallabagApiBundle:Client')->findAll(); | ||
69 | $this->assertGreaterThan(count($newNbClients), count($nbClients)); | ||
70 | } | ||
71 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php new file mode 100644 index 00000000..5c739c78 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php | |||
@@ -0,0 +1,701 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | use Wallabag\CoreBundle\Entity\Entry; | ||
7 | |||
8 | class EntryControllerTest extends WallabagCoreTestCase | ||
9 | { | ||
10 | public $url = 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html'; | ||
11 | |||
12 | public function testLogin() | ||
13 | { | ||
14 | $client = $this->getClient(); | ||
15 | |||
16 | $client->request('GET', '/new'); | ||
17 | |||
18 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
19 | $this->assertContains('login', $client->getResponse()->headers->get('location')); | ||
20 | } | ||
21 | |||
22 | public function testQuickstart() | ||
23 | { | ||
24 | $this->logInAs('empty'); | ||
25 | $client = $this->getClient(); | ||
26 | |||
27 | $client->request('GET', '/unread/list'); | ||
28 | $crawler = $client->followRedirect(); | ||
29 | |||
30 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
31 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
32 | $this->assertContains('quickstart.intro.paragraph_1', $body[0]); | ||
33 | |||
34 | // Test if quickstart is disabled when user has 1 entry | ||
35 | $crawler = $client->request('GET', '/new'); | ||
36 | |||
37 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
38 | |||
39 | $form = $crawler->filter('form[name=entry]')->form(); | ||
40 | |||
41 | $data = [ | ||
42 | 'entry[url]' => $this->url, | ||
43 | ]; | ||
44 | |||
45 | $client->submit($form, $data); | ||
46 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
47 | $client->followRedirect(); | ||
48 | |||
49 | $crawler = $client->request('GET', '/unread/list'); | ||
50 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
51 | $this->assertContains('entry.list.number_on_the_page', $body[0]); | ||
52 | } | ||
53 | |||
54 | public function testGetNew() | ||
55 | { | ||
56 | $this->logInAs('admin'); | ||
57 | $client = $this->getClient(); | ||
58 | |||
59 | $crawler = $client->request('GET', '/new'); | ||
60 | |||
61 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
62 | |||
63 | $this->assertCount(1, $crawler->filter('input[type=url]')); | ||
64 | $this->assertCount(1, $crawler->filter('form[name=entry]')); | ||
65 | } | ||
66 | |||
67 | public function testPostNewViaBookmarklet() | ||
68 | { | ||
69 | $this->logInAs('admin'); | ||
70 | $client = $this->getClient(); | ||
71 | |||
72 | $crawler = $client->request('GET', '/'); | ||
73 | |||
74 | $this->assertCount(4, $crawler->filter('div[class=entry]')); | ||
75 | |||
76 | // Good URL | ||
77 | $client->request('GET', '/bookmarklet', ['url' => $this->url]); | ||
78 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
79 | $client->followRedirect(); | ||
80 | $crawler = $client->request('GET', '/'); | ||
81 | $this->assertCount(5, $crawler->filter('div[class=entry]')); | ||
82 | |||
83 | $em = $client->getContainer() | ||
84 | ->get('doctrine.orm.entity_manager'); | ||
85 | $entry = $em | ||
86 | ->getRepository('WallabagCoreBundle:Entry') | ||
87 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
88 | $em->remove($entry); | ||
89 | $em->flush(); | ||
90 | } | ||
91 | |||
92 | public function testPostNewEmpty() | ||
93 | { | ||
94 | $this->logInAs('admin'); | ||
95 | $client = $this->getClient(); | ||
96 | |||
97 | $crawler = $client->request('GET', '/new'); | ||
98 | |||
99 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
100 | |||
101 | $form = $crawler->filter('form[name=entry]')->form(); | ||
102 | |||
103 | $crawler = $client->submit($form); | ||
104 | |||
105 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
106 | $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(['_text'])); | ||
107 | $this->assertEquals('This value should not be blank.', $alert[0]); | ||
108 | } | ||
109 | |||
110 | /** | ||
111 | * This test will require an internet connection. | ||
112 | */ | ||
113 | public function testPostNewOk() | ||
114 | { | ||
115 | $this->logInAs('admin'); | ||
116 | $client = $this->getClient(); | ||
117 | |||
118 | $crawler = $client->request('GET', '/new'); | ||
119 | |||
120 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
121 | |||
122 | $form = $crawler->filter('form[name=entry]')->form(); | ||
123 | |||
124 | $data = [ | ||
125 | 'entry[url]' => $this->url, | ||
126 | ]; | ||
127 | |||
128 | $client->submit($form, $data); | ||
129 | |||
130 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
131 | |||
132 | $content = $client->getContainer() | ||
133 | ->get('doctrine.orm.entity_manager') | ||
134 | ->getRepository('WallabagCoreBundle:Entry') | ||
135 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
136 | |||
137 | $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content); | ||
138 | $this->assertEquals($this->url, $content->getUrl()); | ||
139 | $this->assertContains('Google', $content->getTitle()); | ||
140 | } | ||
141 | |||
142 | public function testPostNewOkUrlExist() | ||
143 | { | ||
144 | $this->logInAs('admin'); | ||
145 | $client = $this->getClient(); | ||
146 | |||
147 | $crawler = $client->request('GET', '/new'); | ||
148 | |||
149 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
150 | |||
151 | $form = $crawler->filter('form[name=entry]')->form(); | ||
152 | |||
153 | $data = [ | ||
154 | 'entry[url]' => $this->url, | ||
155 | ]; | ||
156 | |||
157 | $client->submit($form, $data); | ||
158 | |||
159 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
160 | $this->assertContains('/view/', $client->getResponse()->getTargetUrl()); | ||
161 | } | ||
162 | |||
163 | /** | ||
164 | * This test will require an internet connection. | ||
165 | */ | ||
166 | public function testPostNewThatWillBeTagged() | ||
167 | { | ||
168 | $this->logInAs('admin'); | ||
169 | $client = $this->getClient(); | ||
170 | |||
171 | $crawler = $client->request('GET', '/new'); | ||
172 | |||
173 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
174 | |||
175 | $form = $crawler->filter('form[name=entry]')->form(); | ||
176 | |||
177 | $data = [ | ||
178 | 'entry[url]' => $url = 'https://github.com/wallabag/wallabag', | ||
179 | ]; | ||
180 | |||
181 | $client->submit($form, $data); | ||
182 | |||
183 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
184 | $this->assertContains('/', $client->getResponse()->getTargetUrl()); | ||
185 | |||
186 | $em = $client->getContainer() | ||
187 | ->get('doctrine.orm.entity_manager'); | ||
188 | $entry = $em | ||
189 | ->getRepository('WallabagCoreBundle:Entry') | ||
190 | ->findOneByUrl($url); | ||
191 | $tags = $entry->getTags(); | ||
192 | |||
193 | $this->assertCount(1, $tags); | ||
194 | $this->assertEquals('wallabag', $tags[0]->getLabel()); | ||
195 | |||
196 | $em->remove($entry); | ||
197 | $em->flush(); | ||
198 | |||
199 | // and now re-submit it to test the cascade persistence for tags after entry removal | ||
200 | // related https://github.com/wallabag/wallabag/issues/2121 | ||
201 | $crawler = $client->request('GET', '/new'); | ||
202 | |||
203 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
204 | |||
205 | $form = $crawler->filter('form[name=entry]')->form(); | ||
206 | |||
207 | $data = [ | ||
208 | 'entry[url]' => $url = 'https://github.com/wallabag/wallabag/tree/master', | ||
209 | ]; | ||
210 | |||
211 | $client->submit($form, $data); | ||
212 | |||
213 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
214 | $this->assertContains('/', $client->getResponse()->getTargetUrl()); | ||
215 | |||
216 | $entry = $em | ||
217 | ->getRepository('WallabagCoreBundle:Entry') | ||
218 | ->findOneByUrl($url); | ||
219 | |||
220 | $tags = $entry->getTags(); | ||
221 | |||
222 | $this->assertCount(1, $tags); | ||
223 | $this->assertEquals('wallabag', $tags[0]->getLabel()); | ||
224 | |||
225 | $em->remove($entry); | ||
226 | $em->flush(); | ||
227 | } | ||
228 | |||
229 | public function testArchive() | ||
230 | { | ||
231 | $this->logInAs('admin'); | ||
232 | $client = $this->getClient(); | ||
233 | |||
234 | $client->request('GET', '/archive/list'); | ||
235 | |||
236 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
237 | } | ||
238 | |||
239 | public function testStarred() | ||
240 | { | ||
241 | $this->logInAs('admin'); | ||
242 | $client = $this->getClient(); | ||
243 | |||
244 | $client->request('GET', '/starred/list'); | ||
245 | |||
246 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
247 | } | ||
248 | |||
249 | public function testRangeException() | ||
250 | { | ||
251 | $this->logInAs('admin'); | ||
252 | $client = $this->getClient(); | ||
253 | |||
254 | $client->request('GET', '/all/list/900'); | ||
255 | |||
256 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
257 | $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl()); | ||
258 | } | ||
259 | |||
260 | /** | ||
261 | * @depends testPostNewOk | ||
262 | */ | ||
263 | public function testView() | ||
264 | { | ||
265 | $this->logInAs('admin'); | ||
266 | $client = $this->getClient(); | ||
267 | |||
268 | $content = $client->getContainer() | ||
269 | ->get('doctrine.orm.entity_manager') | ||
270 | ->getRepository('WallabagCoreBundle:Entry') | ||
271 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
272 | |||
273 | $crawler = $client->request('GET', '/view/'.$content->getId()); | ||
274 | |||
275 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
276 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
277 | $this->assertContains($content->getTitle(), $body[0]); | ||
278 | } | ||
279 | |||
280 | /** | ||
281 | * @depends testPostNewOk | ||
282 | * | ||
283 | * This test will require an internet connection. | ||
284 | */ | ||
285 | public function testReload() | ||
286 | { | ||
287 | $this->logInAs('admin'); | ||
288 | $client = $this->getClient(); | ||
289 | |||
290 | $content = $client->getContainer() | ||
291 | ->get('doctrine.orm.entity_manager') | ||
292 | ->getRepository('WallabagCoreBundle:Entry') | ||
293 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
294 | |||
295 | // empty content | ||
296 | $content->setContent(''); | ||
297 | $client->getContainer()->get('doctrine.orm.entity_manager')->persist($content); | ||
298 | $client->getContainer()->get('doctrine.orm.entity_manager')->flush(); | ||
299 | |||
300 | $client->request('GET', '/reload/'.$content->getId()); | ||
301 | |||
302 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
303 | |||
304 | $content = $client->getContainer() | ||
305 | ->get('doctrine.orm.entity_manager') | ||
306 | ->getRepository('WallabagCoreBundle:Entry') | ||
307 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
308 | |||
309 | $this->assertNotEmpty($content->getContent()); | ||
310 | } | ||
311 | |||
312 | public function testEdit() | ||
313 | { | ||
314 | $this->logInAs('admin'); | ||
315 | $client = $this->getClient(); | ||
316 | |||
317 | $content = $client->getContainer() | ||
318 | ->get('doctrine.orm.entity_manager') | ||
319 | ->getRepository('WallabagCoreBundle:Entry') | ||
320 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
321 | |||
322 | $crawler = $client->request('GET', '/edit/'.$content->getId()); | ||
323 | |||
324 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
325 | |||
326 | $this->assertCount(1, $crawler->filter('input[id=entry_title]')); | ||
327 | $this->assertCount(1, $crawler->filter('button[id=entry_save]')); | ||
328 | } | ||
329 | |||
330 | public function testEditUpdate() | ||
331 | { | ||
332 | $this->logInAs('admin'); | ||
333 | $client = $this->getClient(); | ||
334 | |||
335 | $content = $client->getContainer() | ||
336 | ->get('doctrine.orm.entity_manager') | ||
337 | ->getRepository('WallabagCoreBundle:Entry') | ||
338 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
339 | |||
340 | $crawler = $client->request('GET', '/edit/'.$content->getId()); | ||
341 | |||
342 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
343 | |||
344 | $form = $crawler->filter('button[type=submit]')->form(); | ||
345 | |||
346 | $data = [ | ||
347 | 'entry[title]' => 'My updated title hehe :)', | ||
348 | ]; | ||
349 | |||
350 | $client->submit($form, $data); | ||
351 | |||
352 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
353 | |||
354 | $crawler = $client->followRedirect(); | ||
355 | |||
356 | $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(['_text'])); | ||
357 | $this->assertContains('My updated title hehe :)', $alert[0]); | ||
358 | } | ||
359 | |||
360 | public function testToggleArchive() | ||
361 | { | ||
362 | $this->logInAs('admin'); | ||
363 | $client = $this->getClient(); | ||
364 | |||
365 | $content = $client->getContainer() | ||
366 | ->get('doctrine.orm.entity_manager') | ||
367 | ->getRepository('WallabagCoreBundle:Entry') | ||
368 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
369 | |||
370 | $client->request('GET', '/archive/'.$content->getId()); | ||
371 | |||
372 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
373 | |||
374 | $res = $client->getContainer() | ||
375 | ->get('doctrine.orm.entity_manager') | ||
376 | ->getRepository('WallabagCoreBundle:Entry') | ||
377 | ->find($content->getId()); | ||
378 | |||
379 | $this->assertEquals($res->isArchived(), true); | ||
380 | } | ||
381 | |||
382 | public function testToggleStar() | ||
383 | { | ||
384 | $this->logInAs('admin'); | ||
385 | $client = $this->getClient(); | ||
386 | |||
387 | $content = $client->getContainer() | ||
388 | ->get('doctrine.orm.entity_manager') | ||
389 | ->getRepository('WallabagCoreBundle:Entry') | ||
390 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
391 | |||
392 | $client->request('GET', '/star/'.$content->getId()); | ||
393 | |||
394 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
395 | |||
396 | $res = $client->getContainer() | ||
397 | ->get('doctrine.orm.entity_manager') | ||
398 | ->getRepository('WallabagCoreBundle:Entry') | ||
399 | ->findOneById($content->getId()); | ||
400 | |||
401 | $this->assertEquals($res->isStarred(), true); | ||
402 | } | ||
403 | |||
404 | public function testDelete() | ||
405 | { | ||
406 | $this->logInAs('admin'); | ||
407 | $client = $this->getClient(); | ||
408 | |||
409 | $content = $client->getContainer() | ||
410 | ->get('doctrine.orm.entity_manager') | ||
411 | ->getRepository('WallabagCoreBundle:Entry') | ||
412 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | ||
413 | |||
414 | $client->request('GET', '/delete/'.$content->getId()); | ||
415 | |||
416 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
417 | |||
418 | $client->request('GET', '/delete/'.$content->getId()); | ||
419 | |||
420 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | ||
421 | } | ||
422 | |||
423 | /** | ||
424 | * It will create a new entry. | ||
425 | * Browse to it. | ||
426 | * Then remove it. | ||
427 | * | ||
428 | * And it'll check that user won't be redirected to the view page of the content when it had been removed | ||
429 | */ | ||
430 | public function testViewAndDelete() | ||
431 | { | ||
432 | $this->logInAs('admin'); | ||
433 | $client = $this->getClient(); | ||
434 | |||
435 | // add a new content to be removed later | ||
436 | $user = $client->getContainer() | ||
437 | ->get('doctrine.orm.entity_manager') | ||
438 | ->getRepository('WallabagUserBundle:User') | ||
439 | ->findOneByUserName('admin'); | ||
440 | |||
441 | $content = new Entry($user); | ||
442 | $content->setUrl('http://1.1.1.1/entry'); | ||
443 | $content->setReadingTime(12); | ||
444 | $content->setDomainName('domain.io'); | ||
445 | $content->setMimetype('text/html'); | ||
446 | $content->setTitle('test title entry'); | ||
447 | $content->setContent('This is my content /o/'); | ||
448 | $content->setArchived(true); | ||
449 | $content->setLanguage('fr'); | ||
450 | |||
451 | $client->getContainer() | ||
452 | ->get('doctrine.orm.entity_manager') | ||
453 | ->persist($content); | ||
454 | $client->getContainer() | ||
455 | ->get('doctrine.orm.entity_manager') | ||
456 | ->flush(); | ||
457 | |||
458 | $client->request('GET', '/view/'.$content->getId()); | ||
459 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
460 | |||
461 | $client->request('GET', '/delete/'.$content->getId()); | ||
462 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
463 | |||
464 | $client->followRedirect(); | ||
465 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
466 | } | ||
467 | |||
468 | public function testViewOtherUserEntry() | ||
469 | { | ||
470 | $this->logInAs('admin'); | ||
471 | $client = $this->getClient(); | ||
472 | |||
473 | $content = $client->getContainer() | ||
474 | ->get('doctrine.orm.entity_manager') | ||
475 | ->getRepository('WallabagCoreBundle:Entry') | ||
476 | ->findOneByUsernameAndNotArchived('bob'); | ||
477 | |||
478 | $client->request('GET', '/view/'.$content->getId()); | ||
479 | |||
480 | $this->assertEquals(403, $client->getResponse()->getStatusCode()); | ||
481 | } | ||
482 | |||
483 | public function testFilterOnReadingTime() | ||
484 | { | ||
485 | $this->logInAs('admin'); | ||
486 | $client = $this->getClient(); | ||
487 | |||
488 | $crawler = $client->request('GET', '/unread/list'); | ||
489 | |||
490 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
491 | |||
492 | $data = [ | ||
493 | 'entry_filter[readingTime][right_number]' => 22, | ||
494 | 'entry_filter[readingTime][left_number]' => 22, | ||
495 | ]; | ||
496 | |||
497 | $crawler = $client->submit($form, $data); | ||
498 | |||
499 | $this->assertCount(1, $crawler->filter('div[class=entry]')); | ||
500 | } | ||
501 | |||
502 | public function testFilterOnReadingTimeOnlyUpper() | ||
503 | { | ||
504 | $this->logInAs('admin'); | ||
505 | $client = $this->getClient(); | ||
506 | |||
507 | $crawler = $client->request('GET', '/unread/list'); | ||
508 | |||
509 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
510 | |||
511 | $data = [ | ||
512 | 'entry_filter[readingTime][right_number]' => 22, | ||
513 | ]; | ||
514 | |||
515 | $crawler = $client->submit($form, $data); | ||
516 | |||
517 | $this->assertCount(2, $crawler->filter('div[class=entry]')); | ||
518 | } | ||
519 | |||
520 | public function testFilterOnReadingTimeOnlyLower() | ||
521 | { | ||
522 | $this->logInAs('admin'); | ||
523 | $client = $this->getClient(); | ||
524 | |||
525 | $crawler = $client->request('GET', '/unread/list'); | ||
526 | |||
527 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
528 | |||
529 | $data = [ | ||
530 | 'entry_filter[readingTime][left_number]' => 22, | ||
531 | ]; | ||
532 | |||
533 | $crawler = $client->submit($form, $data); | ||
534 | |||
535 | $this->assertCount(4, $crawler->filter('div[class=entry]')); | ||
536 | } | ||
537 | |||
538 | public function testFilterOnUnreadStatus() | ||
539 | { | ||
540 | $this->logInAs('admin'); | ||
541 | $client = $this->getClient(); | ||
542 | |||
543 | $crawler = $client->request('GET', '/all/list'); | ||
544 | |||
545 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
546 | |||
547 | $data = [ | ||
548 | 'entry_filter[isUnread]' => true, | ||
549 | ]; | ||
550 | |||
551 | $crawler = $client->submit($form, $data); | ||
552 | |||
553 | $this->assertCount(4, $crawler->filter('div[class=entry]')); | ||
554 | } | ||
555 | |||
556 | public function testFilterOnCreationDate() | ||
557 | { | ||
558 | $this->logInAs('admin'); | ||
559 | $client = $this->getClient(); | ||
560 | |||
561 | $crawler = $client->request('GET', '/unread/list'); | ||
562 | |||
563 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
564 | |||
565 | $data = [ | ||
566 | 'entry_filter[createdAt][left_date]' => date('d/m/Y'), | ||
567 | 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')), | ||
568 | ]; | ||
569 | |||
570 | $crawler = $client->submit($form, $data); | ||
571 | |||
572 | $this->assertCount(5, $crawler->filter('div[class=entry]')); | ||
573 | |||
574 | $data = [ | ||
575 | 'entry_filter[createdAt][left_date]' => date('d/m/Y'), | ||
576 | 'entry_filter[createdAt][right_date]' => date('d/m/Y'), | ||
577 | ]; | ||
578 | |||
579 | $crawler = $client->submit($form, $data); | ||
580 | |||
581 | $this->assertCount(5, $crawler->filter('div[class=entry]')); | ||
582 | |||
583 | $data = [ | ||
584 | 'entry_filter[createdAt][left_date]' => '01/01/1970', | ||
585 | 'entry_filter[createdAt][right_date]' => '01/01/1970', | ||
586 | ]; | ||
587 | |||
588 | $crawler = $client->submit($form, $data); | ||
589 | |||
590 | $this->assertCount(0, $crawler->filter('div[class=entry]')); | ||
591 | } | ||
592 | |||
593 | public function testPaginationWithFilter() | ||
594 | { | ||
595 | $this->logInAs('admin'); | ||
596 | $client = $this->getClient(); | ||
597 | $crawler = $client->request('GET', '/config'); | ||
598 | |||
599 | $form = $crawler->filter('button[id=config_save]')->form(); | ||
600 | |||
601 | $data = [ | ||
602 | 'config[items_per_page]' => '1', | ||
603 | ]; | ||
604 | |||
605 | $client->submit($form, $data); | ||
606 | |||
607 | $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D='; | ||
608 | |||
609 | $client->request('GET', 'unread/list'.$parameters); | ||
610 | |||
611 | $this->assertContains($parameters, $client->getResponse()->getContent()); | ||
612 | |||
613 | // reset pagination | ||
614 | $crawler = $client->request('GET', '/config'); | ||
615 | $form = $crawler->filter('button[id=config_save]')->form(); | ||
616 | $data = [ | ||
617 | 'config[items_per_page]' => '12', | ||
618 | ]; | ||
619 | $client->submit($form, $data); | ||
620 | } | ||
621 | |||
622 | public function testFilterOnDomainName() | ||
623 | { | ||
624 | $this->logInAs('admin'); | ||
625 | $client = $this->getClient(); | ||
626 | |||
627 | $crawler = $client->request('GET', '/unread/list'); | ||
628 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
629 | $data = [ | ||
630 | 'entry_filter[domainName]' => 'domain', | ||
631 | ]; | ||
632 | |||
633 | $crawler = $client->submit($form, $data); | ||
634 | $this->assertCount(5, $crawler->filter('div[class=entry]')); | ||
635 | |||
636 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
637 | $data = [ | ||
638 | 'entry_filter[domainName]' => 'wallabag', | ||
639 | ]; | ||
640 | |||
641 | $crawler = $client->submit($form, $data); | ||
642 | $this->assertCount(0, $crawler->filter('div[class=entry]')); | ||
643 | } | ||
644 | |||
645 | public function testFilterOnStatus() | ||
646 | { | ||
647 | $this->logInAs('admin'); | ||
648 | $client = $this->getClient(); | ||
649 | |||
650 | $crawler = $client->request('GET', '/unread/list'); | ||
651 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
652 | $form['entry_filter[isArchived]']->tick(); | ||
653 | $form['entry_filter[isStarred]']->untick(); | ||
654 | |||
655 | $crawler = $client->submit($form); | ||
656 | $this->assertCount(1, $crawler->filter('div[class=entry]')); | ||
657 | |||
658 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
659 | $form['entry_filter[isArchived]']->untick(); | ||
660 | $form['entry_filter[isStarred]']->tick(); | ||
661 | |||
662 | $crawler = $client->submit($form); | ||
663 | $this->assertCount(1, $crawler->filter('div[class=entry]')); | ||
664 | } | ||
665 | |||
666 | public function testPreviewPictureFilter() | ||
667 | { | ||
668 | $this->logInAs('admin'); | ||
669 | $client = $this->getClient(); | ||
670 | |||
671 | $crawler = $client->request('GET', '/unread/list'); | ||
672 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
673 | $form['entry_filter[previewPicture]']->tick(); | ||
674 | |||
675 | $crawler = $client->submit($form); | ||
676 | $this->assertCount(1, $crawler->filter('div[class=entry]')); | ||
677 | } | ||
678 | |||
679 | public function testFilterOnLanguage() | ||
680 | { | ||
681 | $this->logInAs('admin'); | ||
682 | $client = $this->getClient(); | ||
683 | |||
684 | $crawler = $client->request('GET', '/unread/list'); | ||
685 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
686 | $data = [ | ||
687 | 'entry_filter[language]' => 'fr', | ||
688 | ]; | ||
689 | |||
690 | $crawler = $client->submit($form, $data); | ||
691 | $this->assertCount(2, $crawler->filter('div[class=entry]')); | ||
692 | |||
693 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
694 | $data = [ | ||
695 | 'entry_filter[language]' => 'en', | ||
696 | ]; | ||
697 | |||
698 | $crawler = $client->submit($form, $data); | ||
699 | $this->assertCount(2, $crawler->filter('div[class=entry]')); | ||
700 | } | ||
701 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php new file mode 100644 index 00000000..b22156c3 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php | |||
@@ -0,0 +1,251 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class ExportControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function testLogin() | ||
10 | { | ||
11 | $client = $this->getClient(); | ||
12 | |||
13 | $client->request('GET', '/export/unread.csv'); | ||
14 | |||
15 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
16 | $this->assertContains('login', $client->getResponse()->headers->get('location')); | ||
17 | } | ||
18 | |||
19 | public function testUnknownCategoryExport() | ||
20 | { | ||
21 | $this->logInAs('admin'); | ||
22 | $client = $this->getClient(); | ||
23 | |||
24 | $client->request('GET', '/export/awesomeness.epub'); | ||
25 | |||
26 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | ||
27 | } | ||
28 | |||
29 | public function testUnknownFormatExport() | ||
30 | { | ||
31 | $this->logInAs('admin'); | ||
32 | $client = $this->getClient(); | ||
33 | |||
34 | $client->request('GET', '/export/unread.xslx'); | ||
35 | |||
36 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | ||
37 | } | ||
38 | |||
39 | public function testUnsupportedFormatExport() | ||
40 | { | ||
41 | $this->logInAs('admin'); | ||
42 | $client = $this->getClient(); | ||
43 | |||
44 | $client->request('GET', '/export/unread.doc'); | ||
45 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | ||
46 | |||
47 | $content = $client->getContainer() | ||
48 | ->get('doctrine.orm.entity_manager') | ||
49 | ->getRepository('WallabagCoreBundle:Entry') | ||
50 | ->findOneByUsernameAndNotArchived('admin'); | ||
51 | |||
52 | $client->request('GET', '/export/'.$content->getId().'.doc'); | ||
53 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | ||
54 | } | ||
55 | |||
56 | public function testBadEntryId() | ||
57 | { | ||
58 | $this->logInAs('admin'); | ||
59 | $client = $this->getClient(); | ||
60 | |||
61 | $client->request('GET', '/export/0.mobi'); | ||
62 | |||
63 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | ||
64 | } | ||
65 | |||
66 | public function testEpubExport() | ||
67 | { | ||
68 | $this->logInAs('admin'); | ||
69 | $client = $this->getClient(); | ||
70 | |||
71 | ob_start(); | ||
72 | $crawler = $client->request('GET', '/export/archive.epub'); | ||
73 | ob_end_clean(); | ||
74 | |||
75 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
76 | |||
77 | $headers = $client->getResponse()->headers; | ||
78 | $this->assertEquals('application/epub+zip', $headers->get('content-type')); | ||
79 | $this->assertEquals('attachment; filename="Archive articles.epub"', $headers->get('content-disposition')); | ||
80 | $this->assertEquals('binary', $headers->get('content-transfer-encoding')); | ||
81 | } | ||
82 | |||
83 | public function testMobiExport() | ||
84 | { | ||
85 | $this->logInAs('admin'); | ||
86 | $client = $this->getClient(); | ||
87 | |||
88 | $content = $client->getContainer() | ||
89 | ->get('doctrine.orm.entity_manager') | ||
90 | ->getRepository('WallabagCoreBundle:Entry') | ||
91 | ->findOneByUsernameAndNotArchived('admin'); | ||
92 | |||
93 | ob_start(); | ||
94 | $crawler = $client->request('GET', '/export/'.$content->getId().'.mobi'); | ||
95 | ob_end_clean(); | ||
96 | |||
97 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
98 | |||
99 | $headers = $client->getResponse()->headers; | ||
100 | $this->assertEquals('application/x-mobipocket-ebook', $headers->get('content-type')); | ||
101 | $this->assertEquals('attachment; filename="'.preg_replace('/[^A-Za-z0-9\-]/', '', $content->getTitle()).'.mobi"', $headers->get('content-disposition')); | ||
102 | $this->assertEquals('binary', $headers->get('content-transfer-encoding')); | ||
103 | } | ||
104 | |||
105 | public function testPdfExport() | ||
106 | { | ||
107 | $this->logInAs('admin'); | ||
108 | $client = $this->getClient(); | ||
109 | |||
110 | ob_start(); | ||
111 | $crawler = $client->request('GET', '/export/all.pdf'); | ||
112 | ob_end_clean(); | ||
113 | |||
114 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
115 | |||
116 | $headers = $client->getResponse()->headers; | ||
117 | $this->assertEquals('application/pdf', $headers->get('content-type')); | ||
118 | $this->assertEquals('attachment; filename="All articles.pdf"', $headers->get('content-disposition')); | ||
119 | $this->assertEquals('binary', $headers->get('content-transfer-encoding')); | ||
120 | } | ||
121 | |||
122 | public function testTxtExport() | ||
123 | { | ||
124 | $this->logInAs('admin'); | ||
125 | $client = $this->getClient(); | ||
126 | |||
127 | ob_start(); | ||
128 | $crawler = $client->request('GET', '/export/all.txt'); | ||
129 | ob_end_clean(); | ||
130 | |||
131 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
132 | |||
133 | $headers = $client->getResponse()->headers; | ||
134 | $this->assertEquals('text/plain; charset=UTF-8', $headers->get('content-type')); | ||
135 | $this->assertEquals('attachment; filename="All articles.txt"', $headers->get('content-disposition')); | ||
136 | $this->assertEquals('UTF-8', $headers->get('content-transfer-encoding')); | ||
137 | } | ||
138 | |||
139 | public function testCsvExport() | ||
140 | { | ||
141 | $this->logInAs('admin'); | ||
142 | $client = $this->getClient(); | ||
143 | |||
144 | // to be sure results are the same | ||
145 | $contentInDB = $client->getContainer() | ||
146 | ->get('doctrine.orm.entity_manager') | ||
147 | ->getRepository('WallabagCoreBundle:Entry') | ||
148 | ->createQueryBuilder('e') | ||
149 | ->leftJoin('e.user', 'u') | ||
150 | ->where('u.username = :username')->setParameter('username', 'admin') | ||
151 | ->andWhere('e.isArchived = true') | ||
152 | ->getQuery() | ||
153 | ->getArrayResult(); | ||
154 | |||
155 | ob_start(); | ||
156 | $crawler = $client->request('GET', '/export/archive.csv'); | ||
157 | ob_end_clean(); | ||
158 | |||
159 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
160 | |||
161 | $headers = $client->getResponse()->headers; | ||
162 | $this->assertEquals('application/csv', $headers->get('content-type')); | ||
163 | $this->assertEquals('attachment; filename="Archive articles.csv"', $headers->get('content-disposition')); | ||
164 | $this->assertEquals('UTF-8', $headers->get('content-transfer-encoding')); | ||
165 | |||
166 | $csv = str_getcsv($client->getResponse()->getContent(), "\n"); | ||
167 | |||
168 | $this->assertGreaterThan(1, $csv); | ||
169 | // +1 for title line | ||
170 | $this->assertEquals(count($contentInDB) + 1, count($csv)); | ||
171 | $this->assertEquals('Title;URL;Content;Tags;"MIME Type";Language', $csv[0]); | ||
172 | } | ||
173 | |||
174 | public function testJsonExport() | ||
175 | { | ||
176 | $this->logInAs('admin'); | ||
177 | $client = $this->getClient(); | ||
178 | |||
179 | // to be sure results are the same | ||
180 | $contentInDB = $client->getContainer() | ||
181 | ->get('doctrine.orm.entity_manager') | ||
182 | ->getRepository('WallabagCoreBundle:Entry') | ||
183 | ->createQueryBuilder('e') | ||
184 | ->leftJoin('e.user', 'u') | ||
185 | ->where('u.username = :username')->setParameter('username', 'admin') | ||
186 | ->getQuery() | ||
187 | ->getArrayResult(); | ||
188 | |||
189 | ob_start(); | ||
190 | $crawler = $client->request('GET', '/export/all.json'); | ||
191 | ob_end_clean(); | ||
192 | |||
193 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
194 | |||
195 | $headers = $client->getResponse()->headers; | ||
196 | $this->assertEquals('application/json', $headers->get('content-type')); | ||
197 | $this->assertEquals('attachment; filename="All articles.json"', $headers->get('content-disposition')); | ||
198 | $this->assertEquals('UTF-8', $headers->get('content-transfer-encoding')); | ||
199 | |||
200 | $content = json_decode($client->getResponse()->getContent(), true); | ||
201 | $this->assertEquals(count($contentInDB), count($content)); | ||
202 | $this->assertArrayHasKey('id', $content[0]); | ||
203 | $this->assertArrayHasKey('title', $content[0]); | ||
204 | $this->assertArrayHasKey('url', $content[0]); | ||
205 | $this->assertArrayHasKey('is_archived', $content[0]); | ||
206 | $this->assertArrayHasKey('is_starred', $content[0]); | ||
207 | $this->assertArrayHasKey('content', $content[0]); | ||
208 | $this->assertArrayHasKey('mimetype', $content[0]); | ||
209 | $this->assertArrayHasKey('language', $content[0]); | ||
210 | $this->assertArrayHasKey('reading_time', $content[0]); | ||
211 | $this->assertArrayHasKey('domain_name', $content[0]); | ||
212 | $this->assertArrayHasKey('tags', $content[0]); | ||
213 | } | ||
214 | |||
215 | public function testXmlExport() | ||
216 | { | ||
217 | $this->logInAs('admin'); | ||
218 | $client = $this->getClient(); | ||
219 | |||
220 | // to be sure results are the same | ||
221 | $contentInDB = $client->getContainer() | ||
222 | ->get('doctrine.orm.entity_manager') | ||
223 | ->getRepository('WallabagCoreBundle:Entry') | ||
224 | ->createQueryBuilder('e') | ||
225 | ->leftJoin('e.user', 'u') | ||
226 | ->where('u.username = :username')->setParameter('username', 'admin') | ||
227 | ->andWhere('e.isArchived = false') | ||
228 | ->getQuery() | ||
229 | ->getArrayResult(); | ||
230 | |||
231 | ob_start(); | ||
232 | $crawler = $client->request('GET', '/export/unread.xml'); | ||
233 | ob_end_clean(); | ||
234 | |||
235 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
236 | |||
237 | $headers = $client->getResponse()->headers; | ||
238 | $this->assertEquals('application/xml', $headers->get('content-type')); | ||
239 | $this->assertEquals('attachment; filename="Unread articles.xml"', $headers->get('content-disposition')); | ||
240 | $this->assertEquals('UTF-8', $headers->get('content-transfer-encoding')); | ||
241 | |||
242 | $content = new \SimpleXMLElement($client->getResponse()->getContent()); | ||
243 | $this->assertGreaterThan(0, $content->count()); | ||
244 | $this->assertEquals(count($contentInDB), $content->count()); | ||
245 | $this->assertNotEmpty('id', (string) $content->entry[0]->id); | ||
246 | $this->assertNotEmpty('title', (string) $content->entry[0]->title); | ||
247 | $this->assertNotEmpty('url', (string) $content->entry[0]->url); | ||
248 | $this->assertNotEmpty('content', (string) $content->entry[0]->content); | ||
249 | $this->assertNotEmpty('domain_name', (string) $content->entry[0]->domain_name); | ||
250 | } | ||
251 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/RssControllerTest.php b/tests/Wallabag/CoreBundle/Controller/RssControllerTest.php new file mode 100644 index 00000000..fb6fe06a --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/RssControllerTest.php | |||
@@ -0,0 +1,126 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class RssControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function validateDom($xml, $nb = null) | ||
10 | { | ||
11 | $doc = new \DOMDocument(); | ||
12 | $doc->loadXML($xml); | ||
13 | |||
14 | $xpath = new \DOMXpath($doc); | ||
15 | |||
16 | if (null === $nb) { | ||
17 | $this->assertGreaterThan(0, $xpath->query('//item')->length); | ||
18 | } else { | ||
19 | $this->assertEquals($nb, $xpath->query('//item')->length); | ||
20 | } | ||
21 | |||
22 | $this->assertEquals(1, $xpath->query('/rss')->length); | ||
23 | $this->assertEquals(1, $xpath->query('/rss/channel')->length); | ||
24 | |||
25 | foreach ($xpath->query('//item') as $item) { | ||
26 | $this->assertEquals(1, $xpath->query('title', $item)->length); | ||
27 | $this->assertEquals(1, $xpath->query('source', $item)->length); | ||
28 | $this->assertEquals(1, $xpath->query('link', $item)->length); | ||
29 | $this->assertEquals(1, $xpath->query('guid', $item)->length); | ||
30 | $this->assertEquals(1, $xpath->query('pubDate', $item)->length); | ||
31 | $this->assertEquals(1, $xpath->query('description', $item)->length); | ||
32 | } | ||
33 | } | ||
34 | |||
35 | public function dataForBadUrl() | ||
36 | { | ||
37 | return [ | ||
38 | [ | ||
39 | '/admin/YZIOAUZIAO/unread.xml', | ||
40 | ], | ||
41 | [ | ||
42 | '/wallace/YZIOAUZIAO/starred.xml', | ||
43 | ], | ||
44 | [ | ||
45 | '/wallace/YZIOAUZIAO/archives.xml', | ||
46 | ], | ||
47 | ]; | ||
48 | } | ||
49 | |||
50 | /** | ||
51 | * @dataProvider dataForBadUrl | ||
52 | */ | ||
53 | public function testBadUrl($url) | ||
54 | { | ||
55 | $client = $this->getClient(); | ||
56 | |||
57 | $client->request('GET', $url); | ||
58 | |||
59 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | ||
60 | } | ||
61 | |||
62 | public function testUnread() | ||
63 | { | ||
64 | $client = $this->getClient(); | ||
65 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
66 | $user = $em | ||
67 | ->getRepository('WallabagUserBundle:User') | ||
68 | ->findOneByUsername('admin'); | ||
69 | |||
70 | $config = $user->getConfig(); | ||
71 | $config->setRssToken('SUPERTOKEN'); | ||
72 | $config->setRssLimit(2); | ||
73 | $em->persist($config); | ||
74 | $em->flush(); | ||
75 | |||
76 | $client->request('GET', '/admin/SUPERTOKEN/unread.xml'); | ||
77 | |||
78 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
79 | |||
80 | $this->validateDom($client->getResponse()->getContent(), 2); | ||
81 | } | ||
82 | |||
83 | public function testStarred() | ||
84 | { | ||
85 | $client = $this->getClient(); | ||
86 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
87 | $user = $em | ||
88 | ->getRepository('WallabagUserBundle:User') | ||
89 | ->findOneByUsername('admin'); | ||
90 | |||
91 | $config = $user->getConfig(); | ||
92 | $config->setRssToken('SUPERTOKEN'); | ||
93 | $config->setRssLimit(1); | ||
94 | $em->persist($config); | ||
95 | $em->flush(); | ||
96 | |||
97 | $client = $this->getClient(); | ||
98 | $client->request('GET', '/admin/SUPERTOKEN/starred.xml'); | ||
99 | |||
100 | $this->assertEquals(200, $client->getResponse()->getStatusCode(), 1); | ||
101 | |||
102 | $this->validateDom($client->getResponse()->getContent()); | ||
103 | } | ||
104 | |||
105 | public function testArchives() | ||
106 | { | ||
107 | $client = $this->getClient(); | ||
108 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
109 | $user = $em | ||
110 | ->getRepository('WallabagUserBundle:User') | ||
111 | ->findOneByUsername('admin'); | ||
112 | |||
113 | $config = $user->getConfig(); | ||
114 | $config->setRssToken('SUPERTOKEN'); | ||
115 | $config->setRssLimit(null); | ||
116 | $em->persist($config); | ||
117 | $em->flush(); | ||
118 | |||
119 | $client = $this->getClient(); | ||
120 | $client->request('GET', '/admin/SUPERTOKEN/archive.xml'); | ||
121 | |||
122 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
123 | |||
124 | $this->validateDom($client->getResponse()->getContent()); | ||
125 | } | ||
126 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php new file mode 100644 index 00000000..03355f5a --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php | |||
@@ -0,0 +1,72 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class SecurityControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function testLoginWithout2Factor() | ||
10 | { | ||
11 | $this->logInAs('admin'); | ||
12 | $client = $this->getClient(); | ||
13 | $client->followRedirects(); | ||
14 | |||
15 | $crawler = $client->request('GET', '/config'); | ||
16 | $this->assertContains('config.form_rss.description', $crawler->filter('body')->extract(['_text'])[0]); | ||
17 | } | ||
18 | |||
19 | public function testLoginWith2Factor() | ||
20 | { | ||
21 | $client = $this->getClient(); | ||
22 | |||
23 | if (!$client->getContainer()->getParameter('twofactor_auth')) { | ||
24 | $this->markTestSkipped('twofactor_auth is not enabled.'); | ||
25 | |||
26 | return; | ||
27 | } | ||
28 | |||
29 | $client->followRedirects(); | ||
30 | |||
31 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
32 | $user = $em | ||
33 | ->getRepository('WallabagUserBundle:User') | ||
34 | ->findOneByUsername('admin'); | ||
35 | $user->setTwoFactorAuthentication(true); | ||
36 | $em->persist($user); | ||
37 | $em->flush(); | ||
38 | |||
39 | $this->logInAsUsingHttp('admin'); | ||
40 | $crawler = $client->request('GET', '/config'); | ||
41 | $this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(['_text'])[0]); | ||
42 | |||
43 | // restore user | ||
44 | $user = $em | ||
45 | ->getRepository('WallabagUserBundle:User') | ||
46 | ->findOneByUsername('admin'); | ||
47 | $user->setTwoFactorAuthentication(false); | ||
48 | $em->persist($user); | ||
49 | $em->flush(); | ||
50 | } | ||
51 | |||
52 | public function testTrustedComputer() | ||
53 | { | ||
54 | $client = $this->getClient(); | ||
55 | |||
56 | if (!$client->getContainer()->getParameter('twofactor_auth')) { | ||
57 | $this->markTestSkipped('twofactor_auth is not enabled.'); | ||
58 | |||
59 | return; | ||
60 | } | ||
61 | |||
62 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
63 | $user = $em | ||
64 | ->getRepository('WallabagUserBundle:User') | ||
65 | ->findOneByUsername('admin'); | ||
66 | |||
67 | $date = new \DateTime(); | ||
68 | $user->addTrustedComputer('ABCDEF', $date->add(new \DateInterval('P1M'))); | ||
69 | $this->assertTrue($user->isTrustedComputer('ABCDEF')); | ||
70 | $this->assertFalse($user->isTrustedComputer('FEDCBA')); | ||
71 | } | ||
72 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/SettingsControllerTest.php b/tests/Wallabag/CoreBundle/Controller/SettingsControllerTest.php new file mode 100644 index 00000000..9b8b5702 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/SettingsControllerTest.php | |||
@@ -0,0 +1,32 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | /** | ||
8 | * The controller `SettingsController` does not exist. | ||
9 | * This test cover security against the internal settings page managed by CraueConfigBundle. | ||
10 | */ | ||
11 | class SettingsControllerTest extends WallabagCoreTestCase | ||
12 | { | ||
13 | public function testSettingsWithAdmin() | ||
14 | { | ||
15 | $this->logInAs('admin'); | ||
16 | $client = $this->getClient(); | ||
17 | |||
18 | $crawler = $client->request('GET', '/settings'); | ||
19 | |||
20 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
21 | } | ||
22 | |||
23 | public function testSettingsWithNormalUser() | ||
24 | { | ||
25 | $this->logInAs('bob'); | ||
26 | $client = $this->getClient(); | ||
27 | |||
28 | $crawler = $client->request('GET', '/settings'); | ||
29 | |||
30 | $this->assertEquals(403, $client->getResponse()->getStatusCode()); | ||
31 | } | ||
32 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/StaticControllerTest.php b/tests/Wallabag/CoreBundle/Controller/StaticControllerTest.php new file mode 100644 index 00000000..98a37b50 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/StaticControllerTest.php | |||
@@ -0,0 +1,28 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class StaticControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function testAbout() | ||
10 | { | ||
11 | $this->logInAs('admin'); | ||
12 | $client = $this->getClient(); | ||
13 | |||
14 | $client->request('GET', '/about'); | ||
15 | |||
16 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
17 | } | ||
18 | |||
19 | public function testHowto() | ||
20 | { | ||
21 | $this->logInAs('admin'); | ||
22 | $client = $this->getClient(); | ||
23 | |||
24 | $client->request('GET', '/howto'); | ||
25 | |||
26 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
27 | } | ||
28 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php new file mode 100644 index 00000000..58450e5f --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php | |||
@@ -0,0 +1,134 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class TagControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public $tagName = 'opensource'; | ||
10 | |||
11 | public function testList() | ||
12 | { | ||
13 | $this->logInAs('admin'); | ||
14 | $client = $this->getClient(); | ||
15 | |||
16 | $client->request('GET', '/tag/list'); | ||
17 | |||
18 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
19 | } | ||
20 | |||
21 | public function testAddTagToEntry() | ||
22 | { | ||
23 | $this->logInAs('admin'); | ||
24 | $client = $this->getClient(); | ||
25 | |||
26 | $entry = $client->getContainer() | ||
27 | ->get('doctrine.orm.entity_manager') | ||
28 | ->getRepository('WallabagCoreBundle:Entry') | ||
29 | ->findOneByUsernameAndNotArchived('admin'); | ||
30 | |||
31 | $crawler = $client->request('GET', '/view/'.$entry->getId()); | ||
32 | |||
33 | $form = $crawler->filter('form[name=tag]')->form(); | ||
34 | |||
35 | $data = [ | ||
36 | 'tag[label]' => $this->tagName, | ||
37 | ]; | ||
38 | |||
39 | $client->submit($form, $data); | ||
40 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
41 | |||
42 | // be sure to reload the entry | ||
43 | $entry = $client->getContainer() | ||
44 | ->get('doctrine.orm.entity_manager') | ||
45 | ->getRepository('WallabagCoreBundle:Entry') | ||
46 | ->findOneByUsernameAndNotArchived('admin'); | ||
47 | |||
48 | $this->assertEquals(1, count($entry->getTags())); | ||
49 | |||
50 | # tag already exists and already assigned | ||
51 | $client->submit($form, $data); | ||
52 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
53 | |||
54 | $newEntry = $client->getContainer() | ||
55 | ->get('doctrine.orm.entity_manager') | ||
56 | ->getRepository('WallabagCoreBundle:Entry') | ||
57 | ->find($entry->getId()); | ||
58 | |||
59 | $this->assertEquals(1, count($newEntry->getTags())); | ||
60 | |||
61 | # tag already exists but still not assigned to this entry | ||
62 | $data = [ | ||
63 | 'tag[label]' => 'foo', | ||
64 | ]; | ||
65 | |||
66 | $client->submit($form, $data); | ||
67 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
68 | |||
69 | $newEntry = $client->getContainer() | ||
70 | ->get('doctrine.orm.entity_manager') | ||
71 | ->getRepository('WallabagCoreBundle:Entry') | ||
72 | ->find($entry->getId()); | ||
73 | |||
74 | $this->assertEquals(2, count($newEntry->getTags())); | ||
75 | } | ||
76 | |||
77 | public function testAddMultipleTagToEntry() | ||
78 | { | ||
79 | $this->logInAs('admin'); | ||
80 | $client = $this->getClient(); | ||
81 | |||
82 | $entry = $client->getContainer() | ||
83 | ->get('doctrine.orm.entity_manager') | ||
84 | ->getRepository('WallabagCoreBundle:Entry') | ||
85 | ->findOneByUsernameAndNotArchived('admin'); | ||
86 | |||
87 | $crawler = $client->request('GET', '/view/'.$entry->getId()); | ||
88 | |||
89 | $form = $crawler->filter('form[name=tag]')->form(); | ||
90 | |||
91 | $data = [ | ||
92 | 'tag[label]' => 'foo2, bar2', | ||
93 | ]; | ||
94 | |||
95 | $client->submit($form, $data); | ||
96 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
97 | |||
98 | $newEntry = $client->getContainer() | ||
99 | ->get('doctrine.orm.entity_manager') | ||
100 | ->getRepository('WallabagCoreBundle:Entry') | ||
101 | ->find($entry->getId()); | ||
102 | |||
103 | $tags = $newEntry->getTags()->toArray(); | ||
104 | $this->assertGreaterThanOrEqual(2, count($tags)); | ||
105 | $this->assertNotEquals(false, array_search('foo2', $tags), 'Tag foo2 is assigned to the entry'); | ||
106 | $this->assertNotEquals(false, array_search('bar2', $tags), 'Tag bar2 is assigned to the entry'); | ||
107 | } | ||
108 | |||
109 | public function testRemoveTagFromEntry() | ||
110 | { | ||
111 | $this->logInAs('admin'); | ||
112 | $client = $this->getClient(); | ||
113 | |||
114 | $entry = $client->getContainer() | ||
115 | ->get('doctrine.orm.entity_manager') | ||
116 | ->getRepository('WallabagCoreBundle:Entry') | ||
117 | ->findOneByUsernameAndNotArchived('admin'); | ||
118 | |||
119 | $tag = $client->getContainer() | ||
120 | ->get('doctrine.orm.entity_manager') | ||
121 | ->getRepository('WallabagCoreBundle:Tag') | ||
122 | ->findOneByEntryAndTagLabel($entry, $this->tagName); | ||
123 | |||
124 | $client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId()); | ||
125 | |||
126 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
127 | |||
128 | $this->assertNotContains($this->tagName, $entry->getTags()); | ||
129 | |||
130 | $client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId()); | ||
131 | |||
132 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | ||
133 | } | ||
134 | } | ||
diff --git a/tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php b/tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php new file mode 100644 index 00000000..2a7f9390 --- /dev/null +++ b/tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php | |||
@@ -0,0 +1,82 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\EventListener; | ||
4 | |||
5 | use Symfony\Component\EventDispatcher\EventDispatcher; | ||
6 | use Symfony\Component\HttpFoundation\Request; | ||
7 | use Symfony\Component\HttpFoundation\Session\Session; | ||
8 | use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; | ||
9 | use Symfony\Component\HttpKernel\Event\GetResponseEvent; | ||
10 | use Symfony\Component\HttpKernel\HttpKernelInterface; | ||
11 | use Symfony\Component\HttpKernel\KernelEvents; | ||
12 | use Wallabag\CoreBundle\EventListener\LocaleListener; | ||
13 | |||
14 | class LocaleListenerTest extends \PHPUnit_Framework_TestCase | ||
15 | { | ||
16 | private function getEvent(Request $request) | ||
17 | { | ||
18 | return new GetResponseEvent($this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'), $request, HttpKernelInterface::MASTER_REQUEST); | ||
19 | } | ||
20 | |||
21 | public function testWithoutSession() | ||
22 | { | ||
23 | $request = Request::create('/'); | ||
24 | |||
25 | $listener = new LocaleListener('fr'); | ||
26 | $event = $this->getEvent($request); | ||
27 | |||
28 | $listener->onKernelRequest($event); | ||
29 | $this->assertEquals('en', $request->getLocale()); | ||
30 | } | ||
31 | |||
32 | public function testWithPreviousSession() | ||
33 | { | ||
34 | $request = Request::create('/'); | ||
35 | // generate a previous session | ||
36 | $request->cookies->set('MOCKSESSID', 'foo'); | ||
37 | $request->setSession(new Session(new MockArraySessionStorage())); | ||
38 | |||
39 | $listener = new LocaleListener('fr'); | ||
40 | $event = $this->getEvent($request); | ||
41 | |||
42 | $listener->onKernelRequest($event); | ||
43 | $this->assertEquals('fr', $request->getLocale()); | ||
44 | } | ||
45 | |||
46 | public function testLocaleFromRequestAttribute() | ||
47 | { | ||
48 | $request = Request::create('/'); | ||
49 | // generate a previous session | ||
50 | $request->cookies->set('MOCKSESSID', 'foo'); | ||
51 | $request->setSession(new Session(new MockArraySessionStorage())); | ||
52 | $request->attributes->set('_locale', 'es'); | ||
53 | |||
54 | $listener = new LocaleListener('fr'); | ||
55 | $event = $this->getEvent($request); | ||
56 | |||
57 | $listener->onKernelRequest($event); | ||
58 | $this->assertEquals('en', $request->getLocale()); | ||
59 | $this->assertEquals('es', $request->getSession()->get('_locale')); | ||
60 | } | ||
61 | |||
62 | public function testSubscribedEvents() | ||
63 | { | ||
64 | $request = Request::create('/'); | ||
65 | // generate a previous session | ||
66 | $request->cookies->set('MOCKSESSID', 'foo'); | ||
67 | $request->setSession(new Session(new MockArraySessionStorage())); | ||
68 | |||
69 | $listener = new LocaleListener('fr'); | ||
70 | $event = $this->getEvent($request); | ||
71 | |||
72 | $dispatcher = new EventDispatcher(); | ||
73 | $dispatcher->addSubscriber($listener); | ||
74 | |||
75 | $dispatcher->dispatch( | ||
76 | KernelEvents::REQUEST, | ||
77 | $event | ||
78 | ); | ||
79 | |||
80 | $this->assertEquals('fr', $request->getLocale()); | ||
81 | } | ||
82 | } | ||
diff --git a/tests/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListenerTest.php b/tests/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListenerTest.php new file mode 100644 index 00000000..e45722fa --- /dev/null +++ b/tests/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListenerTest.php | |||
@@ -0,0 +1,91 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\EventListener; | ||
4 | |||
5 | use FOS\UserBundle\Event\FilterUserResponseEvent; | ||
6 | use FOS\UserBundle\FOSUserEvents; | ||
7 | use Symfony\Component\EventDispatcher\EventDispatcher; | ||
8 | use Symfony\Component\HttpFoundation\Request; | ||
9 | use Symfony\Component\HttpFoundation\Response; | ||
10 | use Wallabag\CoreBundle\Entity\Config; | ||
11 | use Wallabag\CoreBundle\EventListener\RegistrationConfirmedListener; | ||
12 | use Wallabag\UserBundle\Entity\User; | ||
13 | |||
14 | class RegistrationConfirmedListenerTest extends \PHPUnit_Framework_TestCase | ||
15 | { | ||
16 | private $em; | ||
17 | private $listener; | ||
18 | private $dispatcher; | ||
19 | private $request; | ||
20 | private $response; | ||
21 | |||
22 | protected function setUp() | ||
23 | { | ||
24 | $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | ||
25 | ->disableOriginalConstructor() | ||
26 | ->getMock(); | ||
27 | |||
28 | $this->listener = new RegistrationConfirmedListener( | ||
29 | $this->em, | ||
30 | 'baggy', | ||
31 | 20, | ||
32 | 50, | ||
33 | 'fr' | ||
34 | ); | ||
35 | |||
36 | $this->dispatcher = new EventDispatcher(); | ||
37 | $this->dispatcher->addSubscriber($this->listener); | ||
38 | |||
39 | $this->request = Request::create('/'); | ||
40 | $this->response = Response::create(); | ||
41 | } | ||
42 | |||
43 | public function testWithInvalidUser() | ||
44 | { | ||
45 | $user = new User(); | ||
46 | $user->setEnabled(false); | ||
47 | |||
48 | $event = new FilterUserResponseEvent( | ||
49 | $user, | ||
50 | $this->request, | ||
51 | $this->response | ||
52 | ); | ||
53 | |||
54 | $this->em->expects($this->never())->method('persist'); | ||
55 | $this->em->expects($this->never())->method('flush'); | ||
56 | |||
57 | $this->dispatcher->dispatch( | ||
58 | FOSUserEvents::REGISTRATION_CONFIRMED, | ||
59 | $event | ||
60 | ); | ||
61 | } | ||
62 | |||
63 | public function testWithValidUser() | ||
64 | { | ||
65 | $user = new User(); | ||
66 | $user->setEnabled(true); | ||
67 | |||
68 | $event = new FilterUserResponseEvent( | ||
69 | $user, | ||
70 | $this->request, | ||
71 | $this->response | ||
72 | ); | ||
73 | |||
74 | $config = new Config($user); | ||
75 | $config->setTheme('baggy'); | ||
76 | $config->setItemsPerPage(20); | ||
77 | $config->setRssLimit(50); | ||
78 | $config->setLanguage('fr'); | ||
79 | |||
80 | $this->em->expects($this->once()) | ||
81 | ->method('persist') | ||
82 | ->will($this->returnValue($config)); | ||
83 | $this->em->expects($this->once()) | ||
84 | ->method('flush'); | ||
85 | |||
86 | $this->dispatcher->dispatch( | ||
87 | FOSUserEvents::REGISTRATION_CONFIRMED, | ||
88 | $event | ||
89 | ); | ||
90 | } | ||
91 | } | ||
diff --git a/tests/Wallabag/CoreBundle/EventListener/UserLocaleListenerTest.php b/tests/Wallabag/CoreBundle/EventListener/UserLocaleListenerTest.php new file mode 100644 index 00000000..e9ac7c1d --- /dev/null +++ b/tests/Wallabag/CoreBundle/EventListener/UserLocaleListenerTest.php | |||
@@ -0,0 +1,58 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\EventListener; | ||
4 | |||
5 | use Symfony\Component\HttpFoundation\Request; | ||
6 | use Symfony\Component\HttpFoundation\Session\Session; | ||
7 | use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; | ||
8 | use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; | ||
9 | use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; | ||
10 | use Wallabag\CoreBundle\Entity\Config; | ||
11 | use Wallabag\CoreBundle\EventListener\UserLocaleListener; | ||
12 | use Wallabag\UserBundle\Entity\User; | ||
13 | |||
14 | class UserLocaleListenerTest extends \PHPUnit_Framework_TestCase | ||
15 | { | ||
16 | public function testWithLanguage() | ||
17 | { | ||
18 | $session = new Session(new MockArraySessionStorage()); | ||
19 | $listener = new UserLocaleListener($session); | ||
20 | |||
21 | $user = new User(); | ||
22 | $user->setEnabled(true); | ||
23 | |||
24 | $config = new Config($user); | ||
25 | $config->setLanguage('fr'); | ||
26 | |||
27 | $user->setConfig($config); | ||
28 | |||
29 | $userToken = new UsernamePasswordToken($user, '', 'test'); | ||
30 | $request = Request::create('/'); | ||
31 | $event = new InteractiveLoginEvent($request, $userToken); | ||
32 | |||
33 | $listener->onInteractiveLogin($event); | ||
34 | |||
35 | $this->assertEquals('fr', $session->get('_locale')); | ||
36 | } | ||
37 | |||
38 | public function testWithoutLanguage() | ||
39 | { | ||
40 | $session = new Session(new MockArraySessionStorage()); | ||
41 | $listener = new UserLocaleListener($session); | ||
42 | |||
43 | $user = new User(); | ||
44 | $user->setEnabled(true); | ||
45 | |||
46 | $config = new Config($user); | ||
47 | |||
48 | $user->setConfig($config); | ||
49 | |||
50 | $userToken = new UsernamePasswordToken($user, '', 'test'); | ||
51 | $request = Request::create('/'); | ||
52 | $event = new InteractiveLoginEvent($request, $userToken); | ||
53 | |||
54 | $listener->onInteractiveLogin($event); | ||
55 | |||
56 | $this->assertEquals('', $session->get('_locale')); | ||
57 | } | ||
58 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Form/DataTransformer/StringToListTransformerTest.php b/tests/Wallabag/CoreBundle/Form/DataTransformer/StringToListTransformerTest.php new file mode 100644 index 00000000..0ec98c1f --- /dev/null +++ b/tests/Wallabag/CoreBundle/Form/DataTransformer/StringToListTransformerTest.php | |||
@@ -0,0 +1,50 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Form\DataTransformer; | ||
4 | |||
5 | use Wallabag\CoreBundle\Form\DataTransformer\StringToListTransformer; | ||
6 | |||
7 | class StringToListTransformerTest extends \PHPUnit_Framework_TestCase | ||
8 | { | ||
9 | /** | ||
10 | * @dataProvider transformProvider | ||
11 | */ | ||
12 | public function testTransformWithValidData($inputData, $expectedResult) | ||
13 | { | ||
14 | $transformer = new StringToListTransformer(); | ||
15 | |||
16 | $this->assertSame($expectedResult, $transformer->transform($inputData)); | ||
17 | } | ||
18 | |||
19 | public function transformProvider() | ||
20 | { | ||
21 | return [ | ||
22 | [null, ''], | ||
23 | [[], ''], | ||
24 | [['single value'], 'single value'], | ||
25 | [['first value', 'second value'], 'first value,second value'], | ||
26 | ]; | ||
27 | } | ||
28 | |||
29 | /** | ||
30 | * @dataProvider reverseTransformProvider | ||
31 | */ | ||
32 | public function testReverseTransformWithValidData($inputData, $expectedResult) | ||
33 | { | ||
34 | $transformer = new StringToListTransformer(); | ||
35 | |||
36 | $this->assertSame($expectedResult, $transformer->reverseTransform($inputData)); | ||
37 | } | ||
38 | |||
39 | public function reverseTransformProvider() | ||
40 | { | ||
41 | return [ | ||
42 | [null, null], | ||
43 | ['', []], | ||
44 | ['single value', ['single value']], | ||
45 | ['first value,second value', ['first value', 'second value']], | ||
46 | ['first value, second value', ['first value', 'second value']], | ||
47 | ['first value, , second value', ['first value', 'second value']], | ||
48 | ]; | ||
49 | } | ||
50 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php new file mode 100644 index 00000000..7abb0737 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php | |||
@@ -0,0 +1,318 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Helper; | ||
4 | |||
5 | use Psr\Log\NullLogger; | ||
6 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
7 | use Wallabag\CoreBundle\Entity\Entry; | ||
8 | use Wallabag\CoreBundle\Entity\Tag; | ||
9 | use Wallabag\UserBundle\Entity\User; | ||
10 | |||
11 | class ContentProxyTest extends \PHPUnit_Framework_TestCase | ||
12 | { | ||
13 | public function testWithBadUrl() | ||
14 | { | ||
15 | $tagger = $this->getTaggerMock(); | ||
16 | $tagger->expects($this->once()) | ||
17 | ->method('tag'); | ||
18 | |||
19 | $graby = $this->getMockBuilder('Graby\Graby') | ||
20 | ->setMethods(['fetchContent']) | ||
21 | ->disableOriginalConstructor() | ||
22 | ->getMock(); | ||
23 | |||
24 | $graby->expects($this->any()) | ||
25 | ->method('fetchContent') | ||
26 | ->willReturn([ | ||
27 | 'html' => false, | ||
28 | 'title' => '', | ||
29 | 'url' => '', | ||
30 | 'content_type' => '', | ||
31 | 'language' => '', | ||
32 | ]); | ||
33 | |||
34 | $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger()); | ||
35 | $entry = $proxy->updateEntry(new Entry(new User()), 'http://user@:80'); | ||
36 | |||
37 | $this->assertEquals('http://user@:80', $entry->getUrl()); | ||
38 | $this->assertEmpty($entry->getTitle()); | ||
39 | $this->assertEquals('<p>Unable to retrieve readable content.</p>', $entry->getContent()); | ||
40 | $this->assertEmpty($entry->getPreviewPicture()); | ||
41 | $this->assertEmpty($entry->getMimetype()); | ||
42 | $this->assertEmpty($entry->getLanguage()); | ||
43 | $this->assertEquals(0.0, $entry->getReadingTime()); | ||
44 | $this->assertEquals(false, $entry->getDomainName()); | ||
45 | } | ||
46 | |||
47 | public function testWithEmptyContent() | ||
48 | { | ||
49 | $tagger = $this->getTaggerMock(); | ||
50 | $tagger->expects($this->once()) | ||
51 | ->method('tag'); | ||
52 | |||
53 | $graby = $this->getMockBuilder('Graby\Graby') | ||
54 | ->setMethods(['fetchContent']) | ||
55 | ->disableOriginalConstructor() | ||
56 | ->getMock(); | ||
57 | |||
58 | $graby->expects($this->any()) | ||
59 | ->method('fetchContent') | ||
60 | ->willReturn([ | ||
61 | 'html' => false, | ||
62 | 'title' => '', | ||
63 | 'url' => '', | ||
64 | 'content_type' => '', | ||
65 | 'language' => '', | ||
66 | ]); | ||
67 | |||
68 | $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger()); | ||
69 | $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0'); | ||
70 | |||
71 | $this->assertEquals('http://0.0.0.0', $entry->getUrl()); | ||
72 | $this->assertEmpty($entry->getTitle()); | ||
73 | $this->assertEquals('<p>Unable to retrieve readable content.</p>', $entry->getContent()); | ||
74 | $this->assertEmpty($entry->getPreviewPicture()); | ||
75 | $this->assertEmpty($entry->getMimetype()); | ||
76 | $this->assertEmpty($entry->getLanguage()); | ||
77 | $this->assertEquals(0.0, $entry->getReadingTime()); | ||
78 | $this->assertEquals('0.0.0.0', $entry->getDomainName()); | ||
79 | } | ||
80 | |||
81 | public function testWithEmptyContentButOG() | ||
82 | { | ||
83 | $tagger = $this->getTaggerMock(); | ||
84 | $tagger->expects($this->once()) | ||
85 | ->method('tag'); | ||
86 | |||
87 | $graby = $this->getMockBuilder('Graby\Graby') | ||
88 | ->setMethods(['fetchContent']) | ||
89 | ->disableOriginalConstructor() | ||
90 | ->getMock(); | ||
91 | |||
92 | $graby->expects($this->any()) | ||
93 | ->method('fetchContent') | ||
94 | ->willReturn([ | ||
95 | 'html' => false, | ||
96 | 'title' => '', | ||
97 | 'url' => '', | ||
98 | 'content_type' => '', | ||
99 | 'language' => '', | ||
100 | 'open_graph' => [ | ||
101 | 'og_title' => 'my title', | ||
102 | 'og_description' => 'desc', | ||
103 | ], | ||
104 | ]); | ||
105 | |||
106 | $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger()); | ||
107 | $entry = $proxy->updateEntry(new Entry(new User()), 'http://domain.io'); | ||
108 | |||
109 | $this->assertEquals('http://domain.io', $entry->getUrl()); | ||
110 | $this->assertEquals('my title', $entry->getTitle()); | ||
111 | $this->assertEquals('<p>Unable to retrieve readable content.</p><p><i>But we found a short description: </i></p>desc', $entry->getContent()); | ||
112 | $this->assertEmpty($entry->getPreviewPicture()); | ||
113 | $this->assertEmpty($entry->getLanguage()); | ||
114 | $this->assertEmpty($entry->getMimetype()); | ||
115 | $this->assertEquals(0.0, $entry->getReadingTime()); | ||
116 | $this->assertEquals('domain.io', $entry->getDomainName()); | ||
117 | } | ||
118 | |||
119 | public function testWithContent() | ||
120 | { | ||
121 | $tagger = $this->getTaggerMock(); | ||
122 | $tagger->expects($this->once()) | ||
123 | ->method('tag'); | ||
124 | |||
125 | $graby = $this->getMockBuilder('Graby\Graby') | ||
126 | ->setMethods(['fetchContent']) | ||
127 | ->disableOriginalConstructor() | ||
128 | ->getMock(); | ||
129 | |||
130 | $graby->expects($this->any()) | ||
131 | ->method('fetchContent') | ||
132 | ->willReturn([ | ||
133 | 'html' => str_repeat('this is my content', 325), | ||
134 | 'title' => 'this is my title', | ||
135 | 'url' => 'http://1.1.1.1', | ||
136 | 'content_type' => 'text/html', | ||
137 | 'language' => 'fr', | ||
138 | 'open_graph' => [ | ||
139 | 'og_title' => 'my OG title', | ||
140 | 'og_description' => 'OG desc', | ||
141 | 'og_image' => 'http://3.3.3.3/cover.jpg', | ||
142 | ], | ||
143 | ]); | ||
144 | |||
145 | $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger()); | ||
146 | $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0'); | ||
147 | |||
148 | $this->assertEquals('http://1.1.1.1', $entry->getUrl()); | ||
149 | $this->assertEquals('this is my title', $entry->getTitle()); | ||
150 | $this->assertContains('this is my content', $entry->getContent()); | ||
151 | $this->assertEquals('http://3.3.3.3/cover.jpg', $entry->getPreviewPicture()); | ||
152 | $this->assertEquals('text/html', $entry->getMimetype()); | ||
153 | $this->assertEquals('fr', $entry->getLanguage()); | ||
154 | $this->assertEquals(4.0, $entry->getReadingTime()); | ||
155 | $this->assertEquals('1.1.1.1', $entry->getDomainName()); | ||
156 | } | ||
157 | |||
158 | public function testWithForcedContent() | ||
159 | { | ||
160 | $tagger = $this->getTaggerMock(); | ||
161 | $tagger->expects($this->once()) | ||
162 | ->method('tag'); | ||
163 | |||
164 | $graby = $this->getMockBuilder('Graby\Graby')->getMock(); | ||
165 | |||
166 | $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger()); | ||
167 | $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [ | ||
168 | 'html' => str_repeat('this is my content', 325), | ||
169 | 'title' => 'this is my title', | ||
170 | 'url' => 'http://1.1.1.1', | ||
171 | 'content_type' => 'text/html', | ||
172 | 'language' => 'fr', | ||
173 | ]); | ||
174 | |||
175 | $this->assertEquals('http://1.1.1.1', $entry->getUrl()); | ||
176 | $this->assertEquals('this is my title', $entry->getTitle()); | ||
177 | $this->assertContains('this is my content', $entry->getContent()); | ||
178 | $this->assertEquals('text/html', $entry->getMimetype()); | ||
179 | $this->assertEquals('fr', $entry->getLanguage()); | ||
180 | $this->assertEquals(4.0, $entry->getReadingTime()); | ||
181 | $this->assertEquals('1.1.1.1', $entry->getDomainName()); | ||
182 | } | ||
183 | |||
184 | public function testTaggerThrowException() | ||
185 | { | ||
186 | $graby = $this->getMockBuilder('Graby\Graby') | ||
187 | ->disableOriginalConstructor() | ||
188 | ->getMock(); | ||
189 | |||
190 | $tagger = $this->getTaggerMock(); | ||
191 | $tagger->expects($this->once()) | ||
192 | ->method('tag') | ||
193 | ->will($this->throwException(new \Exception())); | ||
194 | |||
195 | $tagRepo = $this->getTagRepositoryMock(); | ||
196 | $proxy = new ContentProxy($graby, $tagger, $tagRepo, $this->getLogger()); | ||
197 | |||
198 | $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [ | ||
199 | 'html' => str_repeat('this is my content', 325), | ||
200 | 'title' => 'this is my title', | ||
201 | 'url' => 'http://1.1.1.1', | ||
202 | 'content_type' => 'text/html', | ||
203 | 'language' => 'fr', | ||
204 | ]); | ||
205 | |||
206 | $this->assertCount(0, $entry->getTags()); | ||
207 | } | ||
208 | |||
209 | public function testAssignTagsWithArrayAndExtraSpaces() | ||
210 | { | ||
211 | $graby = $this->getMockBuilder('Graby\Graby') | ||
212 | ->disableOriginalConstructor() | ||
213 | ->getMock(); | ||
214 | |||
215 | $tagRepo = $this->getTagRepositoryMock(); | ||
216 | $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger()); | ||
217 | |||
218 | $entry = new Entry(new User()); | ||
219 | |||
220 | $proxy->assignTagsToEntry($entry, [' tag1', 'tag2 ']); | ||
221 | |||
222 | $this->assertCount(2, $entry->getTags()); | ||
223 | $this->assertEquals('tag1', $entry->getTags()[0]->getLabel()); | ||
224 | $this->assertEquals('tag2', $entry->getTags()[1]->getLabel()); | ||
225 | } | ||
226 | |||
227 | public function testAssignTagsWithString() | ||
228 | { | ||
229 | $graby = $this->getMockBuilder('Graby\Graby') | ||
230 | ->disableOriginalConstructor() | ||
231 | ->getMock(); | ||
232 | |||
233 | $tagRepo = $this->getTagRepositoryMock(); | ||
234 | $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger()); | ||
235 | |||
236 | $entry = new Entry(new User()); | ||
237 | |||
238 | $proxy->assignTagsToEntry($entry, 'tag1, tag2'); | ||
239 | |||
240 | $this->assertCount(2, $entry->getTags()); | ||
241 | $this->assertEquals('tag1', $entry->getTags()[0]->getLabel()); | ||
242 | $this->assertEquals('tag2', $entry->getTags()[1]->getLabel()); | ||
243 | } | ||
244 | |||
245 | public function testAssignTagsWithEmptyArray() | ||
246 | { | ||
247 | $graby = $this->getMockBuilder('Graby\Graby') | ||
248 | ->disableOriginalConstructor() | ||
249 | ->getMock(); | ||
250 | |||
251 | $tagRepo = $this->getTagRepositoryMock(); | ||
252 | $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger()); | ||
253 | |||
254 | $entry = new Entry(new User()); | ||
255 | |||
256 | $proxy->assignTagsToEntry($entry, []); | ||
257 | |||
258 | $this->assertCount(0, $entry->getTags()); | ||
259 | } | ||
260 | |||
261 | public function testAssignTagsWithEmptyString() | ||
262 | { | ||
263 | $graby = $this->getMockBuilder('Graby\Graby') | ||
264 | ->disableOriginalConstructor() | ||
265 | ->getMock(); | ||
266 | |||
267 | $tagRepo = $this->getTagRepositoryMock(); | ||
268 | $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger()); | ||
269 | |||
270 | $entry = new Entry(new User()); | ||
271 | |||
272 | $proxy->assignTagsToEntry($entry, ''); | ||
273 | |||
274 | $this->assertCount(0, $entry->getTags()); | ||
275 | } | ||
276 | |||
277 | public function testAssignTagsAlreadyAssigned() | ||
278 | { | ||
279 | $graby = $this->getMockBuilder('Graby\Graby') | ||
280 | ->disableOriginalConstructor() | ||
281 | ->getMock(); | ||
282 | |||
283 | $tagRepo = $this->getTagRepositoryMock(); | ||
284 | $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger()); | ||
285 | |||
286 | $tagEntity = new Tag(); | ||
287 | $tagEntity->setLabel('tag1'); | ||
288 | |||
289 | $entry = new Entry(new User()); | ||
290 | $entry->addTag($tagEntity); | ||
291 | |||
292 | $proxy->assignTagsToEntry($entry, 'tag1, tag2'); | ||
293 | |||
294 | $this->assertCount(2, $entry->getTags()); | ||
295 | $this->assertEquals('tag1', $entry->getTags()[0]->getLabel()); | ||
296 | $this->assertEquals('tag2', $entry->getTags()[1]->getLabel()); | ||
297 | } | ||
298 | |||
299 | private function getTaggerMock() | ||
300 | { | ||
301 | return $this->getMockBuilder('Wallabag\CoreBundle\Helper\RuleBasedTagger') | ||
302 | ->setMethods(['tag']) | ||
303 | ->disableOriginalConstructor() | ||
304 | ->getMock(); | ||
305 | } | ||
306 | |||
307 | private function getTagRepositoryMock() | ||
308 | { | ||
309 | return $this->getMockBuilder('Wallabag\CoreBundle\Repository\TagRepository') | ||
310 | ->disableOriginalConstructor() | ||
311 | ->getMock(); | ||
312 | } | ||
313 | |||
314 | private function getLogger() | ||
315 | { | ||
316 | return new NullLogger(); | ||
317 | } | ||
318 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Helper/RedirectTest.php b/tests/Wallabag/CoreBundle/Helper/RedirectTest.php new file mode 100644 index 00000000..f339f75e --- /dev/null +++ b/tests/Wallabag/CoreBundle/Helper/RedirectTest.php | |||
@@ -0,0 +1,55 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Helper; | ||
4 | |||
5 | use Wallabag\CoreBundle\Helper\Redirect; | ||
6 | |||
7 | class RedirectTest extends \PHPUnit_Framework_TestCase | ||
8 | { | ||
9 | /** @var \PHPUnit_Framework_MockObject_MockObject */ | ||
10 | private $routerMock; | ||
11 | |||
12 | /** @var Redirect */ | ||
13 | private $redirect; | ||
14 | |||
15 | public function setUp() | ||
16 | { | ||
17 | $this->routerMock = $this->getRouterMock(); | ||
18 | $this->redirect = new Redirect($this->routerMock); | ||
19 | } | ||
20 | |||
21 | public function testRedirectToNullWithFallback() | ||
22 | { | ||
23 | $redirectUrl = $this->redirect->to(null, 'fallback'); | ||
24 | |||
25 | $this->assertEquals('fallback', $redirectUrl); | ||
26 | } | ||
27 | |||
28 | public function testRedirectToNullWithoutFallback() | ||
29 | { | ||
30 | $redirectUrl = $this->redirect->to(null); | ||
31 | |||
32 | $this->assertEquals($this->routerMock->generate('homepage'), $redirectUrl); | ||
33 | } | ||
34 | |||
35 | public function testRedirectToValidUrl() | ||
36 | { | ||
37 | $redirectUrl = $this->redirect->to('/unread/list'); | ||
38 | |||
39 | $this->assertEquals('/unread/list', $redirectUrl); | ||
40 | } | ||
41 | |||
42 | private function getRouterMock() | ||
43 | { | ||
44 | $mock = $this->getMockBuilder('Symfony\Component\Routing\Router') | ||
45 | ->disableOriginalConstructor() | ||
46 | ->getMock(); | ||
47 | |||
48 | $mock->expects($this->any()) | ||
49 | ->method('generate') | ||
50 | ->with('homepage') | ||
51 | ->willReturn('homepage'); | ||
52 | |||
53 | return $mock; | ||
54 | } | ||
55 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Helper/RuleBasedTaggerTest.php b/tests/Wallabag/CoreBundle/Helper/RuleBasedTaggerTest.php new file mode 100644 index 00000000..17b08c2a --- /dev/null +++ b/tests/Wallabag/CoreBundle/Helper/RuleBasedTaggerTest.php | |||
@@ -0,0 +1,212 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Helper; | ||
4 | |||
5 | use Wallabag\CoreBundle\Entity\Config; | ||
6 | use Wallabag\CoreBundle\Entity\Entry; | ||
7 | use Wallabag\CoreBundle\Entity\Tag; | ||
8 | use Wallabag\CoreBundle\Entity\TaggingRule; | ||
9 | use Wallabag\CoreBundle\Helper\RuleBasedTagger; | ||
10 | use Wallabag\UserBundle\Entity\User; | ||
11 | |||
12 | class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase | ||
13 | { | ||
14 | private $rulerz; | ||
15 | private $tagRepository; | ||
16 | private $entryRepository; | ||
17 | private $tagger; | ||
18 | |||
19 | public function setUp() | ||
20 | { | ||
21 | $this->rulerz = $this->getRulerZMock(); | ||
22 | $this->tagRepository = $this->getTagRepositoryMock(); | ||
23 | $this->entryRepository = $this->getEntryRepositoryMock(); | ||
24 | |||
25 | $this->tagger = new RuleBasedTagger($this->rulerz, $this->tagRepository, $this->entryRepository); | ||
26 | } | ||
27 | |||
28 | public function testTagWithNoRule() | ||
29 | { | ||
30 | $entry = new Entry($this->getUser()); | ||
31 | |||
32 | $this->tagger->tag($entry); | ||
33 | |||
34 | $this->assertTrue($entry->getTags()->isEmpty()); | ||
35 | } | ||
36 | |||
37 | public function testTagWithNoMatchingRule() | ||
38 | { | ||
39 | $taggingRule = $this->getTaggingRule('rule as string', ['foo', 'bar']); | ||
40 | $user = $this->getUser([$taggingRule]); | ||
41 | $entry = new Entry($user); | ||
42 | |||
43 | $this->rulerz | ||
44 | ->expects($this->once()) | ||
45 | ->method('satisfies') | ||
46 | ->with($entry, 'rule as string') | ||
47 | ->willReturn(false); | ||
48 | |||
49 | $this->tagger->tag($entry); | ||
50 | |||
51 | $this->assertTrue($entry->getTags()->isEmpty()); | ||
52 | } | ||
53 | |||
54 | public function testTagWithAMatchingRule() | ||
55 | { | ||
56 | $taggingRule = $this->getTaggingRule('rule as string', ['foo', 'bar']); | ||
57 | $user = $this->getUser([$taggingRule]); | ||
58 | $entry = new Entry($user); | ||
59 | |||
60 | $this->rulerz | ||
61 | ->expects($this->once()) | ||
62 | ->method('satisfies') | ||
63 | ->with($entry, 'rule as string') | ||
64 | ->willReturn(true); | ||
65 | |||
66 | $this->tagger->tag($entry); | ||
67 | |||
68 | $this->assertFalse($entry->getTags()->isEmpty()); | ||
69 | |||
70 | $tags = $entry->getTags(); | ||
71 | $this->assertSame('foo', $tags[0]->getLabel()); | ||
72 | $this->assertSame('bar', $tags[1]->getLabel()); | ||
73 | } | ||
74 | |||
75 | public function testTagWithAMixOfMatchingRules() | ||
76 | { | ||
77 | $taggingRule = $this->getTaggingRule('bla bla', ['hey']); | ||
78 | $otherTaggingRule = $this->getTaggingRule('rule as string', ['foo']); | ||
79 | |||
80 | $user = $this->getUser([$taggingRule, $otherTaggingRule]); | ||
81 | $entry = new Entry($user); | ||
82 | |||
83 | $this->rulerz | ||
84 | ->method('satisfies') | ||
85 | ->will($this->onConsecutiveCalls(false, true)); | ||
86 | |||
87 | $this->tagger->tag($entry); | ||
88 | |||
89 | $this->assertFalse($entry->getTags()->isEmpty()); | ||
90 | |||
91 | $tags = $entry->getTags(); | ||
92 | $this->assertSame('foo', $tags[0]->getLabel()); | ||
93 | } | ||
94 | |||
95 | public function testWhenTheTagExists() | ||
96 | { | ||
97 | $taggingRule = $this->getTaggingRule('rule as string', ['foo']); | ||
98 | $user = $this->getUser([$taggingRule]); | ||
99 | $entry = new Entry($user); | ||
100 | $tag = new Tag(); | ||
101 | |||
102 | $this->rulerz | ||
103 | ->expects($this->once()) | ||
104 | ->method('satisfies') | ||
105 | ->with($entry, 'rule as string') | ||
106 | ->willReturn(true); | ||
107 | |||
108 | $this->tagRepository | ||
109 | ->expects($this->once()) | ||
110 | // the method `findOneByLabel` doesn't exist, EntityRepository will then call `_call` method | ||
111 | // to magically call the `findOneBy` with ['label' => 'foo'] | ||
112 | ->method('__call') | ||
113 | ->willReturn($tag); | ||
114 | |||
115 | $this->tagger->tag($entry); | ||
116 | |||
117 | $this->assertFalse($entry->getTags()->isEmpty()); | ||
118 | |||
119 | $tags = $entry->getTags(); | ||
120 | $this->assertSame($tag, $tags[0]); | ||
121 | } | ||
122 | |||
123 | public function testSameTagWithDifferentfMatchingRules() | ||
124 | { | ||
125 | $taggingRule = $this->getTaggingRule('bla bla', ['hey']); | ||
126 | $otherTaggingRule = $this->getTaggingRule('rule as string', ['hey']); | ||
127 | |||
128 | $user = $this->getUser([$taggingRule, $otherTaggingRule]); | ||
129 | $entry = new Entry($user); | ||
130 | |||
131 | $this->rulerz | ||
132 | ->method('satisfies') | ||
133 | ->willReturn(true); | ||
134 | |||
135 | $this->tagger->tag($entry); | ||
136 | |||
137 | $this->assertFalse($entry->getTags()->isEmpty()); | ||
138 | |||
139 | $tags = $entry->getTags(); | ||
140 | $this->assertCount(1, $tags); | ||
141 | } | ||
142 | |||
143 | public function testTagAllEntriesForAUser() | ||
144 | { | ||
145 | $taggingRule = $this->getTaggingRule('bla bla', ['hey']); | ||
146 | |||
147 | $user = $this->getUser([$taggingRule]); | ||
148 | |||
149 | $this->rulerz | ||
150 | ->method('satisfies') | ||
151 | ->willReturn(true); | ||
152 | |||
153 | $this->rulerz | ||
154 | ->method('filter') | ||
155 | ->willReturn([new Entry($user), new Entry($user)]); | ||
156 | |||
157 | $entries = $this->tagger->tagAllForUser($user); | ||
158 | |||
159 | $this->assertCount(2, $entries); | ||
160 | |||
161 | foreach ($entries as $entry) { | ||
162 | $tags = $entry->getTags(); | ||
163 | |||
164 | $this->assertCount(1, $tags); | ||
165 | $this->assertEquals('hey', $tags[0]->getLabel()); | ||
166 | } | ||
167 | } | ||
168 | |||
169 | private function getUser(array $taggingRules = []) | ||
170 | { | ||
171 | $user = new User(); | ||
172 | $config = new Config($user); | ||
173 | |||
174 | $user->setConfig($config); | ||
175 | |||
176 | foreach ($taggingRules as $rule) { | ||
177 | $config->addTaggingRule($rule); | ||
178 | } | ||
179 | |||
180 | return $user; | ||
181 | } | ||
182 | |||
183 | private function getTaggingRule($rule, array $tags) | ||
184 | { | ||
185 | $taggingRule = new TaggingRule(); | ||
186 | $taggingRule->setRule($rule); | ||
187 | $taggingRule->setTags($tags); | ||
188 | |||
189 | return $taggingRule; | ||
190 | } | ||
191 | |||
192 | private function getRulerZMock() | ||
193 | { | ||
194 | return $this->getMockBuilder('RulerZ\RulerZ') | ||
195 | ->disableOriginalConstructor() | ||
196 | ->getMock(); | ||
197 | } | ||
198 | |||
199 | private function getTagRepositoryMock() | ||
200 | { | ||
201 | return $this->getMockBuilder('Wallabag\CoreBundle\Repository\TagRepository') | ||
202 | ->disableOriginalConstructor() | ||
203 | ->getMock(); | ||
204 | } | ||
205 | |||
206 | private function getEntryRepositoryMock() | ||
207 | { | ||
208 | return $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
209 | ->disableOriginalConstructor() | ||
210 | ->getMock(); | ||
211 | } | ||
212 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Mock/InstallCommandMock.php b/tests/Wallabag/CoreBundle/Mock/InstallCommandMock.php new file mode 100644 index 00000000..5806bd4d --- /dev/null +++ b/tests/Wallabag/CoreBundle/Mock/InstallCommandMock.php | |||
@@ -0,0 +1,22 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Mock; | ||
4 | |||
5 | use Wallabag\CoreBundle\Command\InstallCommand; | ||
6 | |||
7 | /** | ||
8 | * This mock aims to speed the test of InstallCommand by avoid calling external command | ||
9 | * like all doctrine commands. | ||
10 | * | ||
11 | * This speed the test but as a downside, it doesn't allow to fully test the InstallCommand | ||
12 | * | ||
13 | * Launching tests to avoid doctrine command: | ||
14 | * phpunit --exclude-group command-doctrine | ||
15 | */ | ||
16 | class InstallCommandMock extends InstallCommand | ||
17 | { | ||
18 | protected function runCommand($command, $parameters = []) | ||
19 | { | ||
20 | return $this; | ||
21 | } | ||
22 | } | ||
diff --git a/tests/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverterTest.php b/tests/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverterTest.php new file mode 100644 index 00000000..e29b58b5 --- /dev/null +++ b/tests/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverterTest.php | |||
@@ -0,0 +1,219 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Command; | ||
4 | |||
5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; | ||
6 | use Symfony\Component\HttpFoundation\Request; | ||
7 | use Wallabag\CoreBundle\ParamConverter\UsernameRssTokenConverter; | ||
8 | use Wallabag\UserBundle\Entity\User; | ||
9 | |||
10 | class UsernameRssTokenConverterTest extends \PHPUnit_Framework_TestCase | ||
11 | { | ||
12 | public function testSupportsWithNoRegistry() | ||
13 | { | ||
14 | $params = new ParamConverter([]); | ||
15 | $converter = new UsernameRssTokenConverter(); | ||
16 | |||
17 | $this->assertFalse($converter->supports($params)); | ||
18 | } | ||
19 | |||
20 | public function testSupportsWithNoRegistryManagers() | ||
21 | { | ||
22 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
23 | ->disableOriginalConstructor() | ||
24 | ->getMock(); | ||
25 | |||
26 | $registry->expects($this->once()) | ||
27 | ->method('getManagers') | ||
28 | ->will($this->returnValue([])); | ||
29 | |||
30 | $params = new ParamConverter([]); | ||
31 | $converter = new UsernameRssTokenConverter($registry); | ||
32 | |||
33 | $this->assertFalse($converter->supports($params)); | ||
34 | } | ||
35 | |||
36 | public function testSupportsWithNoConfigurationClass() | ||
37 | { | ||
38 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
39 | ->disableOriginalConstructor() | ||
40 | ->getMock(); | ||
41 | |||
42 | $registry->expects($this->once()) | ||
43 | ->method('getManagers') | ||
44 | ->will($this->returnValue(['default' => null])); | ||
45 | |||
46 | $params = new ParamConverter([]); | ||
47 | $converter = new UsernameRssTokenConverter($registry); | ||
48 | |||
49 | $this->assertFalse($converter->supports($params)); | ||
50 | } | ||
51 | |||
52 | public function testSupportsWithNotTheGoodClass() | ||
53 | { | ||
54 | $meta = $this->getMockBuilder('Doctrine\Common\Persistence\Mapping\ClassMetadata') | ||
55 | ->disableOriginalConstructor() | ||
56 | ->getMock(); | ||
57 | |||
58 | $meta->expects($this->once()) | ||
59 | ->method('getName') | ||
60 | ->will($this->returnValue('nothingrelated')); | ||
61 | |||
62 | $em = $this->getMockBuilder('Doctrine\Common\Persistence\ObjectManager') | ||
63 | ->disableOriginalConstructor() | ||
64 | ->getMock(); | ||
65 | |||
66 | $em->expects($this->once()) | ||
67 | ->method('getClassMetadata') | ||
68 | ->with('superclass') | ||
69 | ->will($this->returnValue($meta)); | ||
70 | |||
71 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
72 | ->disableOriginalConstructor() | ||
73 | ->getMock(); | ||
74 | |||
75 | $registry->expects($this->once()) | ||
76 | ->method('getManagers') | ||
77 | ->will($this->returnValue(['default' => null])); | ||
78 | |||
79 | $registry->expects($this->once()) | ||
80 | ->method('getManagerForClass') | ||
81 | ->with('superclass') | ||
82 | ->will($this->returnValue($em)); | ||
83 | |||
84 | $params = new ParamConverter(['class' => 'superclass']); | ||
85 | $converter = new UsernameRssTokenConverter($registry); | ||
86 | |||
87 | $this->assertFalse($converter->supports($params)); | ||
88 | } | ||
89 | |||
90 | public function testSupportsWithGoodClass() | ||
91 | { | ||
92 | $meta = $this->getMockBuilder('Doctrine\Common\Persistence\Mapping\ClassMetadata') | ||
93 | ->disableOriginalConstructor() | ||
94 | ->getMock(); | ||
95 | |||
96 | $meta->expects($this->once()) | ||
97 | ->method('getName') | ||
98 | ->will($this->returnValue('Wallabag\UserBundle\Entity\User')); | ||
99 | |||
100 | $em = $this->getMockBuilder('Doctrine\Common\Persistence\ObjectManager') | ||
101 | ->disableOriginalConstructor() | ||
102 | ->getMock(); | ||
103 | |||
104 | $em->expects($this->once()) | ||
105 | ->method('getClassMetadata') | ||
106 | ->with('WallabagUserBundle:User') | ||
107 | ->will($this->returnValue($meta)); | ||
108 | |||
109 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
110 | ->disableOriginalConstructor() | ||
111 | ->getMock(); | ||
112 | |||
113 | $registry->expects($this->once()) | ||
114 | ->method('getManagers') | ||
115 | ->will($this->returnValue(['default' => null])); | ||
116 | |||
117 | $registry->expects($this->once()) | ||
118 | ->method('getManagerForClass') | ||
119 | ->with('WallabagUserBundle:User') | ||
120 | ->will($this->returnValue($em)); | ||
121 | |||
122 | $params = new ParamConverter(['class' => 'WallabagUserBundle:User']); | ||
123 | $converter = new UsernameRssTokenConverter($registry); | ||
124 | |||
125 | $this->assertTrue($converter->supports($params)); | ||
126 | } | ||
127 | |||
128 | /** | ||
129 | * @expectedException InvalidArgumentException | ||
130 | * @expectedExceptionMessage Route attribute is missing | ||
131 | */ | ||
132 | public function testApplyEmptyRequest() | ||
133 | { | ||
134 | $params = new ParamConverter([]); | ||
135 | $converter = new UsernameRssTokenConverter(); | ||
136 | |||
137 | $converter->apply(new Request(), $params); | ||
138 | } | ||
139 | |||
140 | /** | ||
141 | * @expectedException Symfony\Component\HttpKernel\Exception\NotFoundHttpException | ||
142 | * @expectedExceptionMessage User not found | ||
143 | */ | ||
144 | public function testApplyUserNotFound() | ||
145 | { | ||
146 | $repo = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository') | ||
147 | ->disableOriginalConstructor() | ||
148 | ->getMock(); | ||
149 | |||
150 | $repo->expects($this->once()) | ||
151 | ->method('findOneByUsernameAndRsstoken') | ||
152 | ->with('test', 'test') | ||
153 | ->will($this->returnValue(null)); | ||
154 | |||
155 | $em = $this->getMockBuilder('Doctrine\Common\Persistence\ObjectManager') | ||
156 | ->disableOriginalConstructor() | ||
157 | ->getMock(); | ||
158 | |||
159 | $em->expects($this->once()) | ||
160 | ->method('getRepository') | ||
161 | ->with('WallabagUserBundle:User') | ||
162 | ->will($this->returnValue($repo)); | ||
163 | |||
164 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
165 | ->disableOriginalConstructor() | ||
166 | ->getMock(); | ||
167 | |||
168 | $registry->expects($this->once()) | ||
169 | ->method('getManagerForClass') | ||
170 | ->with('WallabagUserBundle:User') | ||
171 | ->will($this->returnValue($em)); | ||
172 | |||
173 | $params = new ParamConverter(['class' => 'WallabagUserBundle:User']); | ||
174 | $converter = new UsernameRssTokenConverter($registry); | ||
175 | $request = new Request([], [], ['username' => 'test', 'token' => 'test']); | ||
176 | |||
177 | $converter->apply($request, $params); | ||
178 | } | ||
179 | |||
180 | public function testApplyUserFound() | ||
181 | { | ||
182 | $user = new User(); | ||
183 | |||
184 | $repo = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository') | ||
185 | ->disableOriginalConstructor() | ||
186 | ->getMock(); | ||
187 | |||
188 | $repo->expects($this->once()) | ||
189 | ->method('findOneByUsernameAndRsstoken') | ||
190 | ->with('test', 'test') | ||
191 | ->will($this->returnValue($user)); | ||
192 | |||
193 | $em = $this->getMockBuilder('Doctrine\Common\Persistence\ObjectManager') | ||
194 | ->disableOriginalConstructor() | ||
195 | ->getMock(); | ||
196 | |||
197 | $em->expects($this->once()) | ||
198 | ->method('getRepository') | ||
199 | ->with('WallabagUserBundle:User') | ||
200 | ->will($this->returnValue($repo)); | ||
201 | |||
202 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
203 | ->disableOriginalConstructor() | ||
204 | ->getMock(); | ||
205 | |||
206 | $registry->expects($this->once()) | ||
207 | ->method('getManagerForClass') | ||
208 | ->with('WallabagUserBundle:User') | ||
209 | ->will($this->returnValue($em)); | ||
210 | |||
211 | $params = new ParamConverter(['class' => 'WallabagUserBundle:User', 'name' => 'user']); | ||
212 | $converter = new UsernameRssTokenConverter($registry); | ||
213 | $request = new Request([], [], ['username' => 'test', 'token' => 'test']); | ||
214 | |||
215 | $converter->apply($request, $params); | ||
216 | |||
217 | $this->assertEquals($user, $request->attributes->get('user')); | ||
218 | } | ||
219 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Subscriber/TablePrefixSubscriberTest.php b/tests/Wallabag/CoreBundle/Subscriber/TablePrefixSubscriberTest.php new file mode 100644 index 00000000..4ae76703 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Subscriber/TablePrefixSubscriberTest.php | |||
@@ -0,0 +1,114 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Subscriber; | ||
4 | |||
5 | use Doctrine\Common\EventManager; | ||
6 | use Doctrine\ORM\Event\LoadClassMetadataEventArgs; | ||
7 | use Doctrine\ORM\Mapping\ClassMetadata; | ||
8 | use Wallabag\CoreBundle\Subscriber\TablePrefixSubscriber; | ||
9 | |||
10 | class TablePrefixSubscriberTest extends \PHPUnit_Framework_TestCase | ||
11 | { | ||
12 | public function dataForPrefix() | ||
13 | { | ||
14 | return [ | ||
15 | ['wallabag_', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'wallabag_user', '"wallabag_user"', new \Doctrine\DBAL\Platforms\PostgreSqlPlatform()], | ||
16 | ['wallabag_', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'wallabag_user', '`wallabag_user`', new \Doctrine\DBAL\Platforms\MySqlPlatform()], | ||
17 | ['wallabag_', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'wallabag_user', '"wallabag_user"', new \Doctrine\DBAL\Platforms\SqlitePlatform()], | ||
18 | |||
19 | ['wallabag_', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'wallabag_user', 'wallabag_user', new \Doctrine\DBAL\Platforms\PostgreSqlPlatform()], | ||
20 | ['wallabag_', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'wallabag_user', 'wallabag_user', new \Doctrine\DBAL\Platforms\MySqlPlatform()], | ||
21 | ['wallabag_', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'wallabag_user', 'wallabag_user', new \Doctrine\DBAL\Platforms\SqlitePlatform()], | ||
22 | |||
23 | ['', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'user', '"user"', new \Doctrine\DBAL\Platforms\PostgreSqlPlatform()], | ||
24 | ['', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'user', '`user`', new \Doctrine\DBAL\Platforms\MySqlPlatform()], | ||
25 | ['', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'user', '"user"', new \Doctrine\DBAL\Platforms\SqlitePlatform()], | ||
26 | |||
27 | ['', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'user', 'user', new \Doctrine\DBAL\Platforms\PostgreSqlPlatform()], | ||
28 | ['', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'user', 'user', new \Doctrine\DBAL\Platforms\MySqlPlatform()], | ||
29 | ['', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'user', 'user', new \Doctrine\DBAL\Platforms\SqlitePlatform()], | ||
30 | ]; | ||
31 | } | ||
32 | |||
33 | /** | ||
34 | * @dataProvider dataForPrefix | ||
35 | */ | ||
36 | public function testPrefix($prefix, $entityName, $tableName, $tableNameExpected, $finalTableName, $finalTableNameQuoted, $platform) | ||
37 | { | ||
38 | $em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | ||
39 | ->disableOriginalConstructor() | ||
40 | ->getMock(); | ||
41 | |||
42 | $subscriber = new TablePrefixSubscriber($prefix); | ||
43 | |||
44 | $metaClass = new ClassMetadata($entityName); | ||
45 | $metaClass->setPrimaryTable(['name' => $tableName]); | ||
46 | |||
47 | $metaDataEvent = new LoadClassMetadataEventArgs($metaClass, $em); | ||
48 | |||
49 | $this->assertEquals($tableNameExpected, $metaDataEvent->getClassMetadata()->getTableName()); | ||
50 | |||
51 | $subscriber->loadClassMetadata($metaDataEvent); | ||
52 | |||
53 | $this->assertEquals($finalTableName, $metaDataEvent->getClassMetadata()->getTableName()); | ||
54 | $this->assertEquals($finalTableNameQuoted, $metaDataEvent->getClassMetadata()->getQuotedTableName($platform)); | ||
55 | } | ||
56 | |||
57 | /** | ||
58 | * @dataProvider dataForPrefix | ||
59 | */ | ||
60 | public function testSubscribedEvents($prefix, $entityName, $tableName, $tableNameExpected, $finalTableName, $finalTableNameQuoted, $platform) | ||
61 | { | ||
62 | $em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | ||
63 | ->disableOriginalConstructor() | ||
64 | ->getMock(); | ||
65 | |||
66 | $metaClass = new ClassMetadata($entityName); | ||
67 | $metaClass->setPrimaryTable(['name' => $tableName]); | ||
68 | |||
69 | $metaDataEvent = new LoadClassMetadataEventArgs($metaClass, $em); | ||
70 | |||
71 | $subscriber = new TablePrefixSubscriber($prefix); | ||
72 | |||
73 | $evm = new EventManager(); | ||
74 | $evm->addEventSubscriber($subscriber); | ||
75 | |||
76 | $evm->dispatchEvent('loadClassMetadata', $metaDataEvent); | ||
77 | |||
78 | $this->assertEquals($finalTableName, $metaDataEvent->getClassMetadata()->getTableName()); | ||
79 | $this->assertEquals($finalTableNameQuoted, $metaDataEvent->getClassMetadata()->getQuotedTableName($platform)); | ||
80 | } | ||
81 | |||
82 | public function testPrefixManyToMany() | ||
83 | { | ||
84 | $em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | ||
85 | ->disableOriginalConstructor() | ||
86 | ->getMock(); | ||
87 | |||
88 | $subscriber = new TablePrefixSubscriber('yo_'); | ||
89 | |||
90 | $metaClass = new ClassMetadata('Wallabag\UserBundle\Entity\Entry'); | ||
91 | $metaClass->setPrimaryTable(['name' => 'entry']); | ||
92 | $metaClass->mapManyToMany([ | ||
93 | 'fieldName' => 'tags', | ||
94 | 'joinTable' => ['name' => null, 'schema' => null], | ||
95 | 'targetEntity' => 'Tag', | ||
96 | 'mappedBy' => null, | ||
97 | 'inversedBy' => 'entries', | ||
98 | 'cascade' => ['persist'], | ||
99 | 'indexBy' => null, | ||
100 | 'orphanRemoval' => false, | ||
101 | 'fetch' => 2, | ||
102 | ]); | ||
103 | |||
104 | $metaDataEvent = new LoadClassMetadataEventArgs($metaClass, $em); | ||
105 | |||
106 | $this->assertEquals('entry', $metaDataEvent->getClassMetadata()->getTableName()); | ||
107 | |||
108 | $subscriber->loadClassMetadata($metaDataEvent); | ||
109 | |||
110 | $this->assertEquals('yo_entry', $metaDataEvent->getClassMetadata()->getTableName()); | ||
111 | $this->assertEquals('yo_entry_tag', $metaDataEvent->getClassMetadata()->associationMappings['tags']['joinTable']['name']); | ||
112 | $this->assertEquals('yo_entry', $metaDataEvent->getClassMetadata()->getQuotedTableName(new \Doctrine\DBAL\Platforms\MySqlPlatform())); | ||
113 | } | ||
114 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Twig/WallabagExtensionTest.php b/tests/Wallabag/CoreBundle/Twig/WallabagExtensionTest.php new file mode 100644 index 00000000..8ec2a75a --- /dev/null +++ b/tests/Wallabag/CoreBundle/Twig/WallabagExtensionTest.php | |||
@@ -0,0 +1,17 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle\Twig; | ||
4 | |||
5 | use Wallabag\CoreBundle\Twig\WallabagExtension; | ||
6 | |||
7 | class WallabagExtensionTest extends \PHPUnit_Framework_TestCase | ||
8 | { | ||
9 | public function testRemoveWww() | ||
10 | { | ||
11 | $extension = new WallabagExtension(); | ||
12 | |||
13 | $this->assertEquals('lemonde.fr', $extension->removeWww('www.lemonde.fr')); | ||
14 | $this->assertEquals('lemonde.fr', $extension->removeWww('lemonde.fr')); | ||
15 | $this->assertEquals('gist.github.com', $extension->removeWww('gist.github.com')); | ||
16 | } | ||
17 | } | ||
diff --git a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php new file mode 100644 index 00000000..c0055888 --- /dev/null +++ b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php | |||
@@ -0,0 +1,83 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||
6 | use Symfony\Component\BrowserKit\Cookie; | ||
7 | |||
8 | abstract class WallabagCoreTestCase extends WebTestCase | ||
9 | { | ||
10 | private $client = null; | ||
11 | |||
12 | public function getClient() | ||
13 | { | ||
14 | return $this->client; | ||
15 | } | ||
16 | |||
17 | public function setUp() | ||
18 | { | ||
19 | parent::setUp(); | ||
20 | |||
21 | $this->client = static::createClient(); | ||
22 | } | ||
23 | |||
24 | /** | ||
25 | * Login a user without making a HTTP request. | ||
26 | * If we make a HTTP request we lose ability to mock service in the container. | ||
27 | * | ||
28 | * @param string $username User to log in | ||
29 | */ | ||
30 | public function logInAs($username) | ||
31 | { | ||
32 | $container = $this->client->getContainer(); | ||
33 | $session = $container->get('session'); | ||
34 | |||
35 | $userManager = $container->get('fos_user.user_manager'); | ||
36 | $loginManager = $container->get('fos_user.security.login_manager'); | ||
37 | $firewallName = $container->getParameter('fos_user.firewall_name'); | ||
38 | |||
39 | $user = $userManager->findUserBy(array('username' => $username)); | ||
40 | $loginManager->loginUser($firewallName, $user); | ||
41 | |||
42 | $session->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken())); | ||
43 | $session->save(); | ||
44 | |||
45 | $cookie = new Cookie($session->getName(), $session->getId()); | ||
46 | $this->client->getCookieJar()->set($cookie); | ||
47 | } | ||
48 | |||
49 | /** | ||
50 | * Instead of `logInAs` this method use a HTTP request to log in the user. | ||
51 | * Could be better for some tests. | ||
52 | * | ||
53 | * @param string $username User to log in | ||
54 | */ | ||
55 | public function logInAsUsingHttp($username) | ||
56 | { | ||
57 | $crawler = $this->client->request('GET', '/login'); | ||
58 | $form = $crawler->filter('button[type=submit]')->form(); | ||
59 | $data = [ | ||
60 | '_username' => $username, | ||
61 | '_password' => 'mypassword', | ||
62 | ]; | ||
63 | |||
64 | $this->client->submit($form, $data); | ||
65 | } | ||
66 | |||
67 | /** | ||
68 | * Return the user id of the logged in user. | ||
69 | * You should be sure that you called `logInAs` before. | ||
70 | * | ||
71 | * @return int | ||
72 | */ | ||
73 | public function getLoggedInUserId() | ||
74 | { | ||
75 | $token = static::$kernel->getContainer()->get('security.token_storage')->getToken(); | ||
76 | |||
77 | if (null !== $token) { | ||
78 | return $token->getUser()->getId(); | ||
79 | } | ||
80 | |||
81 | throw new \RuntimeException('No logged in User.'); | ||
82 | } | ||
83 | } | ||
diff --git a/tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php b/tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php new file mode 100644 index 00000000..96b5300b --- /dev/null +++ b/tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php | |||
@@ -0,0 +1,29 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class ImportControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function testLogin() | ||
10 | { | ||
11 | $client = $this->getClient(); | ||
12 | |||
13 | $client->request('GET', '/import/'); | ||
14 | |||
15 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
16 | $this->assertContains('login', $client->getResponse()->headers->get('location')); | ||
17 | } | ||
18 | |||
19 | public function testImportList() | ||
20 | { | ||
21 | $this->logInAs('admin'); | ||
22 | $client = $this->getClient(); | ||
23 | |||
24 | $crawler = $client->request('GET', '/import/'); | ||
25 | |||
26 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
27 | $this->assertEquals(3, $crawler->filter('blockquote')->count()); | ||
28 | } | ||
29 | } | ||
diff --git a/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php b/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php new file mode 100644 index 00000000..e0e61df8 --- /dev/null +++ b/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php | |||
@@ -0,0 +1,108 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class PocketControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function testImportPocket() | ||
10 | { | ||
11 | $this->logInAs('admin'); | ||
12 | $client = $this->getClient(); | ||
13 | |||
14 | $crawler = $client->request('GET', '/import/pocket'); | ||
15 | |||
16 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
17 | $this->assertEquals(1, $crawler->filter('button[type=submit]')->count()); | ||
18 | } | ||
19 | |||
20 | public function testImportPocketAuthBadToken() | ||
21 | { | ||
22 | $this->logInAs('admin'); | ||
23 | $client = $this->getClient(); | ||
24 | |||
25 | $client->request('GET', '/import/pocket/auth'); | ||
26 | |||
27 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
28 | } | ||
29 | |||
30 | public function testImportPocketAuth() | ||
31 | { | ||
32 | $this->logInAs('admin'); | ||
33 | $client = $this->getClient(); | ||
34 | |||
35 | $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') | ||
36 | ->disableOriginalConstructor() | ||
37 | ->getMock(); | ||
38 | |||
39 | $pocketImport | ||
40 | ->expects($this->once()) | ||
41 | ->method('getRequestToken') | ||
42 | ->willReturn('token'); | ||
43 | |||
44 | static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport); | ||
45 | |||
46 | $client->request('GET', '/import/pocket/auth'); | ||
47 | |||
48 | $this->assertEquals(301, $client->getResponse()->getStatusCode()); | ||
49 | $this->assertContains('getpocket.com/auth/authorize', $client->getResponse()->headers->get('location')); | ||
50 | } | ||
51 | |||
52 | public function testImportPocketCallbackWithBadToken() | ||
53 | { | ||
54 | $this->logInAs('admin'); | ||
55 | $client = $this->getClient(); | ||
56 | |||
57 | $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') | ||
58 | ->disableOriginalConstructor() | ||
59 | ->getMock(); | ||
60 | |||
61 | $pocketImport | ||
62 | ->expects($this->once()) | ||
63 | ->method('authorize') | ||
64 | ->willReturn(false); | ||
65 | |||
66 | static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport); | ||
67 | |||
68 | $client->request('GET', '/import/pocket/callback'); | ||
69 | |||
70 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
71 | $this->assertContains('/', $client->getResponse()->headers->get('location'), 'Import is ok, redirect to homepage'); | ||
72 | $this->assertEquals('flashes.import.notice.failed', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); | ||
73 | } | ||
74 | |||
75 | public function testImportPocketCallback() | ||
76 | { | ||
77 | $this->logInAs('admin'); | ||
78 | $client = $this->getClient(); | ||
79 | |||
80 | $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') | ||
81 | ->disableOriginalConstructor() | ||
82 | ->getMock(); | ||
83 | |||
84 | $pocketImport | ||
85 | ->expects($this->once()) | ||
86 | ->method('authorize') | ||
87 | ->willReturn(true); | ||
88 | |||
89 | $pocketImport | ||
90 | ->expects($this->once()) | ||
91 | ->method('setMarkAsRead') | ||
92 | ->with(false) | ||
93 | ->willReturn($pocketImport); | ||
94 | |||
95 | $pocketImport | ||
96 | ->expects($this->once()) | ||
97 | ->method('import') | ||
98 | ->willReturn(true); | ||
99 | |||
100 | static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport); | ||
101 | |||
102 | $client->request('GET', '/import/pocket/callback'); | ||
103 | |||
104 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
105 | $this->assertContains('/', $client->getResponse()->headers->get('location'), 'Import is ok, redirect to homepage'); | ||
106 | $this->assertEquals('flashes.import.notice.summary', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); | ||
107 | } | ||
108 | } | ||
diff --git a/tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php b/tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php new file mode 100644 index 00000000..c1025b41 --- /dev/null +++ b/tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php | |||
@@ -0,0 +1,129 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | use Symfony\Component\HttpFoundation\File\UploadedFile; | ||
7 | |||
8 | class WallabagV1ControllerTest extends WallabagCoreTestCase | ||
9 | { | ||
10 | public function testImportWallabag() | ||
11 | { | ||
12 | $this->logInAs('admin'); | ||
13 | $client = $this->getClient(); | ||
14 | |||
15 | $crawler = $client->request('GET', '/import/wallabag-v1'); | ||
16 | |||
17 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
18 | $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count()); | ||
19 | $this->assertEquals(1, $crawler->filter('input[type=file]')->count()); | ||
20 | } | ||
21 | |||
22 | public function testImportWallabagWithFile() | ||
23 | { | ||
24 | $this->logInAs('admin'); | ||
25 | $client = $this->getClient(); | ||
26 | |||
27 | $crawler = $client->request('GET', '/import/wallabag-v1'); | ||
28 | $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); | ||
29 | |||
30 | $file = new UploadedFile(__DIR__.'/../fixtures/wallabag-v1.json', 'wallabag-v1.json'); | ||
31 | |||
32 | $data = [ | ||
33 | 'upload_import_file[file]' => $file, | ||
34 | ]; | ||
35 | |||
36 | $client->submit($form, $data); | ||
37 | |||
38 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
39 | |||
40 | $crawler = $client->followRedirect(); | ||
41 | |||
42 | $content = $client->getContainer() | ||
43 | ->get('doctrine.orm.entity_manager') | ||
44 | ->getRepository('WallabagCoreBundle:Entry') | ||
45 | ->findByUrlAndUserId( | ||
46 | 'http://www.framablog.org/index.php/post/2014/02/05/Framabag-service-libre-gratuit-interview-developpeur', | ||
47 | $this->getLoggedInUserId() | ||
48 | ); | ||
49 | |||
50 | $tag = $client->getContainer() | ||
51 | ->get('doctrine.orm.entity_manager') | ||
52 | ->getRepository('WallabagCoreBundle:Tag') | ||
53 | ->findOneByLabel('Framabag'); | ||
54 | |||
55 | $this->assertTrue($content->getTags()->contains($tag)); | ||
56 | |||
57 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
58 | $this->assertContains('flashes.import.notice.summary', $body[0]); | ||
59 | } | ||
60 | |||
61 | public function testImportWallabagWithFileAndMarkAllAsRead() | ||
62 | { | ||
63 | $this->logInAs('admin'); | ||
64 | $client = $this->getClient(); | ||
65 | |||
66 | $crawler = $client->request('GET', '/import/wallabag-v1'); | ||
67 | $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); | ||
68 | |||
69 | $file = new UploadedFile(__DIR__.'/../fixtures/wallabag-v1-read.json', 'wallabag-v1-read.json'); | ||
70 | |||
71 | $data = [ | ||
72 | 'upload_import_file[file]' => $file, | ||
73 | 'upload_import_file[mark_as_read]' => 1, | ||
74 | ]; | ||
75 | |||
76 | $client->submit($form, $data); | ||
77 | |||
78 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
79 | |||
80 | $crawler = $client->followRedirect(); | ||
81 | |||
82 | $content1 = $client->getContainer() | ||
83 | ->get('doctrine.orm.entity_manager') | ||
84 | ->getRepository('WallabagCoreBundle:Entry') | ||
85 | ->findByUrlAndUserId( | ||
86 | 'http://gilbert.pellegrom.me/recreating-the-square-slider', | ||
87 | $this->getLoggedInUserId() | ||
88 | ); | ||
89 | |||
90 | $this->assertTrue($content1->isArchived()); | ||
91 | |||
92 | $content2 = $client->getContainer() | ||
93 | ->get('doctrine.orm.entity_manager') | ||
94 | ->getRepository('WallabagCoreBundle:Entry') | ||
95 | ->findByUrlAndUserId( | ||
96 | 'https://www.wallabag.org/features/', | ||
97 | $this->getLoggedInUserId() | ||
98 | ); | ||
99 | |||
100 | $this->assertTrue($content2->isArchived()); | ||
101 | |||
102 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
103 | $this->assertContains('flashes.import.notice.summary', $body[0]); | ||
104 | } | ||
105 | |||
106 | public function testImportWallabagWithEmptyFile() | ||
107 | { | ||
108 | $this->logInAs('admin'); | ||
109 | $client = $this->getClient(); | ||
110 | |||
111 | $crawler = $client->request('GET', '/import/wallabag-v1'); | ||
112 | $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); | ||
113 | |||
114 | $file = new UploadedFile(__DIR__.'/../fixtures/test.txt', 'test.txt'); | ||
115 | |||
116 | $data = [ | ||
117 | 'upload_import_file[file]' => $file, | ||
118 | ]; | ||
119 | |||
120 | $client->submit($form, $data); | ||
121 | |||
122 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
123 | |||
124 | $crawler = $client->followRedirect(); | ||
125 | |||
126 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
127 | $this->assertContains('flashes.import.notice.failed', $body[0]); | ||
128 | } | ||
129 | } | ||
diff --git a/tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php b/tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php new file mode 100644 index 00000000..d8d2c8bf --- /dev/null +++ b/tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php | |||
@@ -0,0 +1,95 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | use Symfony\Component\HttpFoundation\File\UploadedFile; | ||
7 | |||
8 | class WallabagV2ControllerTest extends WallabagCoreTestCase | ||
9 | { | ||
10 | public function testImportWallabag() | ||
11 | { | ||
12 | $this->logInAs('admin'); | ||
13 | $client = $this->getClient(); | ||
14 | |||
15 | $crawler = $client->request('GET', '/import/wallabag-v2'); | ||
16 | |||
17 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
18 | $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count()); | ||
19 | $this->assertEquals(1, $crawler->filter('input[type=file]')->count()); | ||
20 | } | ||
21 | |||
22 | public function testImportWallabagWithFile() | ||
23 | { | ||
24 | $this->logInAs('admin'); | ||
25 | $client = $this->getClient(); | ||
26 | |||
27 | $crawler = $client->request('GET', '/import/wallabag-v2'); | ||
28 | $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); | ||
29 | |||
30 | $file = new UploadedFile(__DIR__.'/../fixtures/wallabag-v2.json', 'wallabag-v2.json'); | ||
31 | |||
32 | $data = [ | ||
33 | 'upload_import_file[file]' => $file, | ||
34 | ]; | ||
35 | |||
36 | $client->submit($form, $data); | ||
37 | |||
38 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
39 | |||
40 | $crawler = $client->followRedirect(); | ||
41 | |||
42 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
43 | $this->assertContains('flashes.import.notice.summary', $body[0]); | ||
44 | |||
45 | $content = $client->getContainer() | ||
46 | ->get('doctrine.orm.entity_manager') | ||
47 | ->getRepository('WallabagCoreBundle:Entry') | ||
48 | ->findByUrlAndUserId( | ||
49 | 'http://www.liberation.fr/planete/2015/10/26/refugies-l-ue-va-creer-100-000-places-d-accueil-dans-les-balkans_1408867', | ||
50 | $this->getLoggedInUserId() | ||
51 | ); | ||
52 | |||
53 | $this->assertEmpty($content->getMimetype()); | ||
54 | $this->assertEmpty($content->getPreviewPicture()); | ||
55 | $this->assertEmpty($content->getLanguage()); | ||
56 | $this->assertEquals(0, count($content->getTags())); | ||
57 | |||
58 | $content = $client->getContainer() | ||
59 | ->get('doctrine.orm.entity_manager') | ||
60 | ->getRepository('WallabagCoreBundle:Entry') | ||
61 | ->findByUrlAndUserId( | ||
62 | 'https://www.mediapart.fr/', | ||
63 | $this->getLoggedInUserId() | ||
64 | ); | ||
65 | |||
66 | $this->assertNotEmpty($content->getMimetype()); | ||
67 | $this->assertNotEmpty($content->getPreviewPicture()); | ||
68 | $this->assertNotEmpty($content->getLanguage()); | ||
69 | $this->assertEquals(2, count($content->getTags())); | ||
70 | } | ||
71 | |||
72 | public function testImportWallabagWithEmptyFile() | ||
73 | { | ||
74 | $this->logInAs('admin'); | ||
75 | $client = $this->getClient(); | ||
76 | |||
77 | $crawler = $client->request('GET', '/import/wallabag-v2'); | ||
78 | $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); | ||
79 | |||
80 | $file = new UploadedFile(__DIR__.'/../fixtures/test.txt', 'test.txt'); | ||
81 | |||
82 | $data = [ | ||
83 | 'upload_import_file[file]' => $file, | ||
84 | ]; | ||
85 | |||
86 | $client->submit($form, $data); | ||
87 | |||
88 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
89 | |||
90 | $crawler = $client->followRedirect(); | ||
91 | |||
92 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); | ||
93 | $this->assertContains('flashes.import.notice.failed', $body[0]); | ||
94 | } | ||
95 | } | ||
diff --git a/tests/Wallabag/ImportBundle/Import/ImportChainTest.php b/tests/Wallabag/ImportBundle/Import/ImportChainTest.php new file mode 100644 index 00000000..32568ce5 --- /dev/null +++ b/tests/Wallabag/ImportBundle/Import/ImportChainTest.php | |||
@@ -0,0 +1,21 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Import; | ||
4 | |||
5 | use Wallabag\ImportBundle\Import\ImportChain; | ||
6 | |||
7 | class ImportChainTest extends \PHPUnit_Framework_TestCase | ||
8 | { | ||
9 | public function testGetAll() | ||
10 | { | ||
11 | $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\ImportInterface') | ||
12 | ->disableOriginalConstructor() | ||
13 | ->getMock(); | ||
14 | |||
15 | $importChain = new ImportChain(); | ||
16 | $importChain->addImport($import, 'alias'); | ||
17 | |||
18 | $this->assertCount(1, $importChain->getAll()); | ||
19 | $this->assertEquals($import, $importChain->getAll()['alias']); | ||
20 | } | ||
21 | } | ||
diff --git a/tests/Wallabag/ImportBundle/Import/ImportCompilerPassTest.php b/tests/Wallabag/ImportBundle/Import/ImportCompilerPassTest.php new file mode 100644 index 00000000..71a007a9 --- /dev/null +++ b/tests/Wallabag/ImportBundle/Import/ImportCompilerPassTest.php | |||
@@ -0,0 +1,47 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Import; | ||
4 | |||
5 | use Symfony\Component\DependencyInjection\ContainerBuilder; | ||
6 | use Wallabag\ImportBundle\Import\ImportCompilerPass; | ||
7 | |||
8 | class ImportCompilerPassTest extends \PHPUnit_Framework_TestCase | ||
9 | { | ||
10 | public function testProcessNoDefinition() | ||
11 | { | ||
12 | $container = new ContainerBuilder(); | ||
13 | $res = $this->process($container); | ||
14 | |||
15 | $this->assertNull($res); | ||
16 | } | ||
17 | |||
18 | public function testProcess() | ||
19 | { | ||
20 | $container = new ContainerBuilder(); | ||
21 | $container | ||
22 | ->register('wallabag_import.chain') | ||
23 | ->setPublic(false) | ||
24 | ; | ||
25 | |||
26 | $container | ||
27 | ->register('foo') | ||
28 | ->addTag('wallabag_import.import', ['alias' => 'pocket']) | ||
29 | ; | ||
30 | |||
31 | $this->process($container); | ||
32 | |||
33 | $this->assertTrue($container->hasDefinition('wallabag_import.chain')); | ||
34 | |||
35 | $definition = $container->getDefinition('wallabag_import.chain'); | ||
36 | $this->assertTrue($definition->hasMethodCall('addImport')); | ||
37 | |||
38 | $calls = $definition->getMethodCalls(); | ||
39 | $this->assertEquals('pocket', $calls[0][1][1]); | ||
40 | } | ||
41 | |||
42 | protected function process(ContainerBuilder $container) | ||
43 | { | ||
44 | $repeatedPass = new ImportCompilerPass(); | ||
45 | $repeatedPass->process($container); | ||
46 | } | ||
47 | } | ||
diff --git a/tests/Wallabag/ImportBundle/Import/PocketImportTest.php b/tests/Wallabag/ImportBundle/Import/PocketImportTest.php new file mode 100644 index 00000000..41f9b51f --- /dev/null +++ b/tests/Wallabag/ImportBundle/Import/PocketImportTest.php | |||
@@ -0,0 +1,393 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Import; | ||
4 | |||
5 | use Wallabag\UserBundle\Entity\User; | ||
6 | use Wallabag\CoreBundle\Entity\Entry; | ||
7 | use Wallabag\ImportBundle\Import\PocketImport; | ||
8 | use GuzzleHttp\Client; | ||
9 | use GuzzleHttp\Subscriber\Mock; | ||
10 | use GuzzleHttp\Message\Response; | ||
11 | use GuzzleHttp\Stream\Stream; | ||
12 | use Monolog\Logger; | ||
13 | use Monolog\Handler\TestHandler; | ||
14 | |||
15 | class PocketImportMock extends PocketImport | ||
16 | { | ||
17 | public function getAccessToken() | ||
18 | { | ||
19 | return $this->accessToken; | ||
20 | } | ||
21 | } | ||
22 | |||
23 | class PocketImportTest extends \PHPUnit_Framework_TestCase | ||
24 | { | ||
25 | protected $token; | ||
26 | protected $user; | ||
27 | protected $em; | ||
28 | protected $contentProxy; | ||
29 | protected $logHandler; | ||
30 | |||
31 | private function getPocketImport($consumerKey = 'ConsumerKey') | ||
32 | { | ||
33 | $this->user = new User(); | ||
34 | |||
35 | $this->tokenStorage = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface') | ||
36 | ->disableOriginalConstructor() | ||
37 | ->getMock(); | ||
38 | |||
39 | $token = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\TokenInterface') | ||
40 | ->disableOriginalConstructor() | ||
41 | ->getMock(); | ||
42 | |||
43 | $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy') | ||
44 | ->disableOriginalConstructor() | ||
45 | ->getMock(); | ||
46 | |||
47 | $token->expects($this->once()) | ||
48 | ->method('getUser') | ||
49 | ->willReturn($this->user); | ||
50 | |||
51 | $this->tokenStorage->expects($this->once()) | ||
52 | ->method('getToken') | ||
53 | ->willReturn($token); | ||
54 | |||
55 | $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | ||
56 | ->disableOriginalConstructor() | ||
57 | ->getMock(); | ||
58 | |||
59 | $config = $this->getMockBuilder('Craue\ConfigBundle\Util\Config') | ||
60 | ->disableOriginalConstructor() | ||
61 | ->getMock(); | ||
62 | |||
63 | $config->expects($this->any()) | ||
64 | ->method('get') | ||
65 | ->with('pocket_consumer_key') | ||
66 | ->willReturn($consumerKey); | ||
67 | |||
68 | $pocket = new PocketImportMock( | ||
69 | $this->tokenStorage, | ||
70 | $this->em, | ||
71 | $this->contentProxy, | ||
72 | $config | ||
73 | ); | ||
74 | |||
75 | $this->logHandler = new TestHandler(); | ||
76 | $logger = new Logger('test', [$this->logHandler]); | ||
77 | $pocket->setLogger($logger); | ||
78 | |||
79 | return $pocket; | ||
80 | } | ||
81 | |||
82 | public function testInit() | ||
83 | { | ||
84 | $pocketImport = $this->getPocketImport(); | ||
85 | |||
86 | $this->assertEquals('Pocket', $pocketImport->getName()); | ||
87 | $this->assertNotEmpty($pocketImport->getUrl()); | ||
88 | $this->assertEquals('import.pocket.description', $pocketImport->getDescription()); | ||
89 | } | ||
90 | |||
91 | public function testOAuthRequest() | ||
92 | { | ||
93 | $client = new Client(); | ||
94 | |||
95 | $mock = new Mock([ | ||
96 | new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['code' => 'wunderbar_code']))), | ||
97 | ]); | ||
98 | |||
99 | $client->getEmitter()->attach($mock); | ||
100 | |||
101 | $pocketImport = $this->getPocketImport(); | ||
102 | $pocketImport->setClient($client); | ||
103 | |||
104 | $code = $pocketImport->getRequestToken('http://0.0.0.0/redirect'); | ||
105 | |||
106 | $this->assertEquals('wunderbar_code', $code); | ||
107 | } | ||
108 | |||
109 | public function testOAuthRequestBadResponse() | ||
110 | { | ||
111 | $client = new Client(); | ||
112 | |||
113 | $mock = new Mock([ | ||
114 | new Response(403), | ||
115 | ]); | ||
116 | |||
117 | $client->getEmitter()->attach($mock); | ||
118 | |||
119 | $pocketImport = $this->getPocketImport(); | ||
120 | $pocketImport->setClient($client); | ||
121 | |||
122 | $code = $pocketImport->getRequestToken('http://0.0.0.0/redirect'); | ||
123 | |||
124 | $this->assertFalse($code); | ||
125 | |||
126 | $records = $this->logHandler->getRecords(); | ||
127 | $this->assertContains('PocketImport: Failed to request token', $records[0]['message']); | ||
128 | $this->assertEquals('ERROR', $records[0]['level_name']); | ||
129 | } | ||
130 | |||
131 | public function testOAuthAuthorize() | ||
132 | { | ||
133 | $client = new Client(); | ||
134 | |||
135 | $mock = new Mock([ | ||
136 | new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar_token']))), | ||
137 | ]); | ||
138 | |||
139 | $client->getEmitter()->attach($mock); | ||
140 | |||
141 | $pocketImport = $this->getPocketImport(); | ||
142 | $pocketImport->setClient($client); | ||
143 | |||
144 | $res = $pocketImport->authorize('wunderbar_code'); | ||
145 | |||
146 | $this->assertTrue($res); | ||
147 | $this->assertEquals('wunderbar_token', $pocketImport->getAccessToken()); | ||
148 | } | ||
149 | |||
150 | public function testOAuthAuthorizeBadResponse() | ||
151 | { | ||
152 | $client = new Client(); | ||
153 | |||
154 | $mock = new Mock([ | ||
155 | new Response(403), | ||
156 | ]); | ||
157 | |||
158 | $client->getEmitter()->attach($mock); | ||
159 | |||
160 | $pocketImport = $this->getPocketImport(); | ||
161 | $pocketImport->setClient($client); | ||
162 | |||
163 | $res = $pocketImport->authorize('wunderbar_code'); | ||
164 | |||
165 | $this->assertFalse($res); | ||
166 | |||
167 | $records = $this->logHandler->getRecords(); | ||
168 | $this->assertContains('PocketImport: Failed to authorize client', $records[0]['message']); | ||
169 | $this->assertEquals('ERROR', $records[0]['level_name']); | ||
170 | } | ||
171 | |||
172 | /** | ||
173 | * Will sample results from https://getpocket.com/developer/docs/v3/retrieve. | ||
174 | */ | ||
175 | public function testImport() | ||
176 | { | ||
177 | $client = new Client(); | ||
178 | |||
179 | $mock = new Mock([ | ||
180 | new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar_token']))), | ||
181 | new Response(200, ['Content-Type' => 'application/json'], Stream::factory(' | ||
182 | { | ||
183 | "status": 1, | ||
184 | "list": { | ||
185 | "229279689": { | ||
186 | "item_id": "229279689", | ||
187 | "resolved_id": "229279689", | ||
188 | "given_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview", | ||
189 | "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", | ||
190 | "favorite": "1", | ||
191 | "status": "1", | ||
192 | "resolved_title": "The Massive Ryder Cup Preview", | ||
193 | "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview", | ||
194 | "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", | ||
195 | "is_article": "1", | ||
196 | "has_video": "1", | ||
197 | "has_image": "1", | ||
198 | "word_count": "3197", | ||
199 | "images": { | ||
200 | "1": { | ||
201 | "item_id": "229279689", | ||
202 | "image_id": "1", | ||
203 | "src": "http://a.espncdn.com/combiner/i?img=/photo/2012/0927/grant_g_ryder_cr_640.jpg&w=640&h=360", | ||
204 | "width": "0", | ||
205 | "height": "0", | ||
206 | "credit": "Jamie Squire/Getty Images", | ||
207 | "caption": "" | ||
208 | } | ||
209 | }, | ||
210 | "videos": { | ||
211 | "1": { | ||
212 | "item_id": "229279689", | ||
213 | "video_id": "1", | ||
214 | "src": "http://www.youtube.com/v/Er34PbFkVGk?version=3&hl=en_US&rel=0", | ||
215 | "width": "420", | ||
216 | "height": "315", | ||
217 | "type": "1", | ||
218 | "vid": "Er34PbFkVGk" | ||
219 | } | ||
220 | }, | ||
221 | "tags": { | ||
222 | "grantland": { | ||
223 | "item_id": "1147652870", | ||
224 | "tag": "grantland" | ||
225 | }, | ||
226 | "Ryder Cup": { | ||
227 | "item_id": "1147652870", | ||
228 | "tag": "Ryder Cup" | ||
229 | } | ||
230 | } | ||
231 | }, | ||
232 | "229279690": { | ||
233 | "item_id": "229279689", | ||
234 | "resolved_id": "229279689", | ||
235 | "given_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview", | ||
236 | "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", | ||
237 | "favorite": "1", | ||
238 | "status": "1", | ||
239 | "resolved_title": "The Massive Ryder Cup Preview", | ||
240 | "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview", | ||
241 | "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", | ||
242 | "is_article": "1", | ||
243 | "has_video": "0", | ||
244 | "has_image": "0", | ||
245 | "word_count": "3197" | ||
246 | } | ||
247 | } | ||
248 | } | ||
249 | ')), | ||
250 | ]); | ||
251 | |||
252 | $client->getEmitter()->attach($mock); | ||
253 | |||
254 | $pocketImport = $this->getPocketImport(); | ||
255 | |||
256 | $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
257 | ->disableOriginalConstructor() | ||
258 | ->getMock(); | ||
259 | |||
260 | $entryRepo->expects($this->exactly(2)) | ||
261 | ->method('findByUrlAndUserId') | ||
262 | ->will($this->onConsecutiveCalls(false, true)); | ||
263 | |||
264 | $this->em | ||
265 | ->expects($this->exactly(2)) | ||
266 | ->method('getRepository') | ||
267 | ->willReturn($entryRepo); | ||
268 | |||
269 | $entry = new Entry($this->user); | ||
270 | |||
271 | $this->contentProxy | ||
272 | ->expects($this->once()) | ||
273 | ->method('updateEntry') | ||
274 | ->willReturn($entry); | ||
275 | |||
276 | $pocketImport->setClient($client); | ||
277 | $pocketImport->authorize('wunderbar_code'); | ||
278 | |||
279 | $res = $pocketImport->import(); | ||
280 | |||
281 | $this->assertTrue($res); | ||
282 | $this->assertEquals(['skipped' => 1, 'imported' => 1], $pocketImport->getSummary()); | ||
283 | } | ||
284 | |||
285 | /** | ||
286 | * Will sample results from https://getpocket.com/developer/docs/v3/retrieve. | ||
287 | */ | ||
288 | public function testImportAndMarkAllAsRead() | ||
289 | { | ||
290 | $client = new Client(); | ||
291 | |||
292 | $mock = new Mock([ | ||
293 | new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar_token']))), | ||
294 | new Response(200, ['Content-Type' => 'application/json'], Stream::factory(' | ||
295 | { | ||
296 | "status": 1, | ||
297 | "list": { | ||
298 | "229279689": { | ||
299 | "item_id": "229279689", | ||
300 | "resolved_id": "229279689", | ||
301 | "given_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview", | ||
302 | "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", | ||
303 | "favorite": "1", | ||
304 | "status": "1", | ||
305 | "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", | ||
306 | "is_article": "1", | ||
307 | "has_video": "1", | ||
308 | "has_image": "1", | ||
309 | "word_count": "3197" | ||
310 | }, | ||
311 | "229279690": { | ||
312 | "item_id": "229279689", | ||
313 | "resolved_id": "229279689", | ||
314 | "given_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview/2", | ||
315 | "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", | ||
316 | "favorite": "1", | ||
317 | "status": "0", | ||
318 | "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", | ||
319 | "is_article": "1", | ||
320 | "has_video": "0", | ||
321 | "has_image": "0", | ||
322 | "word_count": "3197" | ||
323 | } | ||
324 | } | ||
325 | } | ||
326 | ')), | ||
327 | ]); | ||
328 | |||
329 | $client->getEmitter()->attach($mock); | ||
330 | |||
331 | $pocketImport = $this->getPocketImport(); | ||
332 | |||
333 | $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
334 | ->disableOriginalConstructor() | ||
335 | ->getMock(); | ||
336 | |||
337 | $entryRepo->expects($this->exactly(2)) | ||
338 | ->method('findByUrlAndUserId') | ||
339 | ->will($this->onConsecutiveCalls(false, false)); | ||
340 | |||
341 | $this->em | ||
342 | ->expects($this->exactly(2)) | ||
343 | ->method('getRepository') | ||
344 | ->willReturn($entryRepo); | ||
345 | |||
346 | // check that every entry persisted are archived | ||
347 | $this->em | ||
348 | ->expects($this->any()) | ||
349 | ->method('persist') | ||
350 | ->with($this->callback(function ($persistedEntry) { | ||
351 | return $persistedEntry->isArchived(); | ||
352 | })); | ||
353 | |||
354 | $entry = new Entry($this->user); | ||
355 | |||
356 | $this->contentProxy | ||
357 | ->expects($this->exactly(2)) | ||
358 | ->method('updateEntry') | ||
359 | ->willReturn($entry); | ||
360 | |||
361 | $pocketImport->setClient($client); | ||
362 | $pocketImport->authorize('wunderbar_code'); | ||
363 | |||
364 | $res = $pocketImport->setMarkAsRead(true)->import(); | ||
365 | |||
366 | $this->assertTrue($res); | ||
367 | $this->assertEquals(['skipped' => 0, 'imported' => 2], $pocketImport->getSummary()); | ||
368 | } | ||
369 | |||
370 | public function testImportBadResponse() | ||
371 | { | ||
372 | $client = new Client(); | ||
373 | |||
374 | $mock = new Mock([ | ||
375 | new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar_token']))), | ||
376 | new Response(403), | ||
377 | ]); | ||
378 | |||
379 | $client->getEmitter()->attach($mock); | ||
380 | |||
381 | $pocketImport = $this->getPocketImport(); | ||
382 | $pocketImport->setClient($client); | ||
383 | $pocketImport->authorize('wunderbar_code'); | ||
384 | |||
385 | $res = $pocketImport->import(); | ||
386 | |||
387 | $this->assertFalse($res); | ||
388 | |||
389 | $records = $this->logHandler->getRecords(); | ||
390 | $this->assertContains('PocketImport: Failed to import', $records[0]['message']); | ||
391 | $this->assertEquals('ERROR', $records[0]['level_name']); | ||
392 | } | ||
393 | } | ||
diff --git a/tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php b/tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php new file mode 100644 index 00000000..bdc47dac --- /dev/null +++ b/tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php | |||
@@ -0,0 +1,150 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Import; | ||
4 | |||
5 | use Wallabag\ImportBundle\Import\WallabagV1Import; | ||
6 | use Wallabag\UserBundle\Entity\User; | ||
7 | use Wallabag\CoreBundle\Entity\Entry; | ||
8 | use Monolog\Logger; | ||
9 | use Monolog\Handler\TestHandler; | ||
10 | |||
11 | class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase | ||
12 | { | ||
13 | protected $user; | ||
14 | protected $em; | ||
15 | protected $logHandler; | ||
16 | protected $contentProxy; | ||
17 | |||
18 | private function getWallabagV1Import($unsetUser = false) | ||
19 | { | ||
20 | $this->user = new User(); | ||
21 | |||
22 | $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | ||
23 | ->disableOriginalConstructor() | ||
24 | ->getMock(); | ||
25 | |||
26 | $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy') | ||
27 | ->disableOriginalConstructor() | ||
28 | ->getMock(); | ||
29 | |||
30 | $wallabag = new WallabagV1Import($this->em, $this->contentProxy); | ||
31 | |||
32 | $this->logHandler = new TestHandler(); | ||
33 | $logger = new Logger('test', [$this->logHandler]); | ||
34 | $wallabag->setLogger($logger); | ||
35 | |||
36 | if (false === $unsetUser) { | ||
37 | $wallabag->setUser($this->user); | ||
38 | } | ||
39 | |||
40 | return $wallabag; | ||
41 | } | ||
42 | |||
43 | public function testInit() | ||
44 | { | ||
45 | $wallabagV1Import = $this->getWallabagV1Import(); | ||
46 | |||
47 | $this->assertEquals('wallabag v1', $wallabagV1Import->getName()); | ||
48 | $this->assertNotEmpty($wallabagV1Import->getUrl()); | ||
49 | $this->assertEquals('import.wallabag_v1.description', $wallabagV1Import->getDescription()); | ||
50 | } | ||
51 | |||
52 | public function testImport() | ||
53 | { | ||
54 | $wallabagV1Import = $this->getWallabagV1Import(); | ||
55 | $wallabagV1Import->setFilepath(__DIR__.'/../fixtures/wallabag-v1.json'); | ||
56 | |||
57 | $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
58 | ->disableOriginalConstructor() | ||
59 | ->getMock(); | ||
60 | |||
61 | $entryRepo->expects($this->exactly(4)) | ||
62 | ->method('findByUrlAndUserId') | ||
63 | ->will($this->onConsecutiveCalls(false, true, false, false)); | ||
64 | |||
65 | $this->em | ||
66 | ->expects($this->any()) | ||
67 | ->method('getRepository') | ||
68 | ->willReturn($entryRepo); | ||
69 | |||
70 | $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry') | ||
71 | ->disableOriginalConstructor() | ||
72 | ->getMock(); | ||
73 | |||
74 | $this->contentProxy | ||
75 | ->expects($this->exactly(3)) | ||
76 | ->method('updateEntry') | ||
77 | ->willReturn($entry); | ||
78 | |||
79 | $res = $wallabagV1Import->import(); | ||
80 | |||
81 | $this->assertTrue($res); | ||
82 | $this->assertEquals(['skipped' => 1, 'imported' => 3], $wallabagV1Import->getSummary()); | ||
83 | } | ||
84 | |||
85 | public function testImportAndMarkAllAsRead() | ||
86 | { | ||
87 | $wallabagV1Import = $this->getWallabagV1Import(); | ||
88 | $wallabagV1Import->setFilepath(__DIR__.'/../fixtures/wallabag-v1-read.json'); | ||
89 | |||
90 | $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
91 | ->disableOriginalConstructor() | ||
92 | ->getMock(); | ||
93 | |||
94 | $entryRepo->expects($this->exactly(3)) | ||
95 | ->method('findByUrlAndUserId') | ||
96 | ->will($this->onConsecutiveCalls(false, false, false)); | ||
97 | |||
98 | $this->em | ||
99 | ->expects($this->any()) | ||
100 | ->method('getRepository') | ||
101 | ->willReturn($entryRepo); | ||
102 | |||
103 | $this->contentProxy | ||
104 | ->expects($this->exactly(3)) | ||
105 | ->method('updateEntry') | ||
106 | ->willReturn(new Entry($this->user)); | ||
107 | |||
108 | // check that every entry persisted are archived | ||
109 | $this->em | ||
110 | ->expects($this->any()) | ||
111 | ->method('persist') | ||
112 | ->with($this->callback(function ($persistedEntry) { | ||
113 | return $persistedEntry->isArchived(); | ||
114 | })); | ||
115 | |||
116 | $res = $wallabagV1Import->setMarkAsRead(true)->import(); | ||
117 | |||
118 | $this->assertTrue($res); | ||
119 | |||
120 | $this->assertEquals(['skipped' => 0, 'imported' => 3], $wallabagV1Import->getSummary()); | ||
121 | } | ||
122 | |||
123 | public function testImportBadFile() | ||
124 | { | ||
125 | $wallabagV1Import = $this->getWallabagV1Import(); | ||
126 | $wallabagV1Import->setFilepath(__DIR__.'/../fixtures/wallabag-v1.jsonx'); | ||
127 | |||
128 | $res = $wallabagV1Import->import(); | ||
129 | |||
130 | $this->assertFalse($res); | ||
131 | |||
132 | $records = $this->logHandler->getRecords(); | ||
133 | $this->assertContains('WallabagImport: unable to read file', $records[0]['message']); | ||
134 | $this->assertEquals('ERROR', $records[0]['level_name']); | ||
135 | } | ||
136 | |||
137 | public function testImportUserNotDefined() | ||
138 | { | ||
139 | $wallabagV1Import = $this->getWallabagV1Import(true); | ||
140 | $wallabagV1Import->setFilepath(__DIR__.'/../fixtures/wallabag-v1.json'); | ||
141 | |||
142 | $res = $wallabagV1Import->import(); | ||
143 | |||
144 | $this->assertFalse($res); | ||
145 | |||
146 | $records = $this->logHandler->getRecords(); | ||
147 | $this->assertContains('WallabagImport: user is not defined', $records[0]['message']); | ||
148 | $this->assertEquals('ERROR', $records[0]['level_name']); | ||
149 | } | ||
150 | } | ||
diff --git a/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php b/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php new file mode 100644 index 00000000..8ec66b12 --- /dev/null +++ b/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php | |||
@@ -0,0 +1,146 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Import; | ||
4 | |||
5 | use Wallabag\ImportBundle\Import\WallabagV2Import; | ||
6 | use Wallabag\UserBundle\Entity\User; | ||
7 | use Wallabag\CoreBundle\Entity\Entry; | ||
8 | use Monolog\Logger; | ||
9 | use Monolog\Handler\TestHandler; | ||
10 | |||
11 | class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase | ||
12 | { | ||
13 | protected $user; | ||
14 | protected $em; | ||
15 | protected $logHandler; | ||
16 | protected $contentProxy; | ||
17 | |||
18 | private function getWallabagV2Import($unsetUser = false) | ||
19 | { | ||
20 | $this->user = new User(); | ||
21 | |||
22 | $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | ||
23 | ->disableOriginalConstructor() | ||
24 | ->getMock(); | ||
25 | |||
26 | $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy') | ||
27 | ->disableOriginalConstructor() | ||
28 | ->getMock(); | ||
29 | |||
30 | $wallabag = new WallabagV2Import($this->em, $this->contentProxy); | ||
31 | |||
32 | $this->logHandler = new TestHandler(); | ||
33 | $logger = new Logger('test', [$this->logHandler]); | ||
34 | $wallabag->setLogger($logger); | ||
35 | |||
36 | if (false === $unsetUser) { | ||
37 | $wallabag->setUser($this->user); | ||
38 | } | ||
39 | |||
40 | return $wallabag; | ||
41 | } | ||
42 | |||
43 | public function testInit() | ||
44 | { | ||
45 | $wallabagV2Import = $this->getWallabagV2Import(); | ||
46 | |||
47 | $this->assertEquals('wallabag v2', $wallabagV2Import->getName()); | ||
48 | $this->assertNotEmpty($wallabagV2Import->getUrl()); | ||
49 | $this->assertEquals('import.wallabag_v2.description', $wallabagV2Import->getDescription()); | ||
50 | } | ||
51 | |||
52 | public function testImport() | ||
53 | { | ||
54 | $wallabagV2Import = $this->getWallabagV2Import(); | ||
55 | $wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2.json'); | ||
56 | |||
57 | $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
58 | ->disableOriginalConstructor() | ||
59 | ->getMock(); | ||
60 | |||
61 | $entryRepo->expects($this->exactly(24)) | ||
62 | ->method('findByUrlAndUserId') | ||
63 | ->will($this->onConsecutiveCalls(false, true, false)); | ||
64 | |||
65 | $this->em | ||
66 | ->expects($this->any()) | ||
67 | ->method('getRepository') | ||
68 | ->willReturn($entryRepo); | ||
69 | |||
70 | $this->contentProxy | ||
71 | ->expects($this->exactly(2)) | ||
72 | ->method('updateEntry') | ||
73 | ->willReturn(new Entry($this->user)); | ||
74 | |||
75 | $res = $wallabagV2Import->import(); | ||
76 | |||
77 | $this->assertTrue($res); | ||
78 | $this->assertEquals(['skipped' => 22, 'imported' => 2], $wallabagV2Import->getSummary()); | ||
79 | } | ||
80 | |||
81 | public function testImportAndMarkAllAsRead() | ||
82 | { | ||
83 | $wallabagV2Import = $this->getWallabagV2Import(); | ||
84 | $wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2-read.json'); | ||
85 | |||
86 | $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
87 | ->disableOriginalConstructor() | ||
88 | ->getMock(); | ||
89 | |||
90 | $entryRepo->expects($this->exactly(2)) | ||
91 | ->method('findByUrlAndUserId') | ||
92 | ->will($this->onConsecutiveCalls(false, false)); | ||
93 | |||
94 | $this->em | ||
95 | ->expects($this->any()) | ||
96 | ->method('getRepository') | ||
97 | ->willReturn($entryRepo); | ||
98 | |||
99 | $this->contentProxy | ||
100 | ->expects($this->exactly(2)) | ||
101 | ->method('updateEntry') | ||
102 | ->willReturn(new Entry($this->user)); | ||
103 | |||
104 | // check that every entry persisted are archived | ||
105 | $this->em | ||
106 | ->expects($this->any()) | ||
107 | ->method('persist') | ||
108 | ->with($this->callback(function ($persistedEntry) { | ||
109 | return $persistedEntry->isArchived(); | ||
110 | })); | ||
111 | |||
112 | $res = $wallabagV2Import->setMarkAsRead(true)->import(); | ||
113 | |||
114 | $this->assertTrue($res); | ||
115 | |||
116 | $this->assertEquals(['skipped' => 0, 'imported' => 2], $wallabagV2Import->getSummary()); | ||
117 | } | ||
118 | |||
119 | public function testImportBadFile() | ||
120 | { | ||
121 | $wallabagV1Import = $this->getWallabagV2Import(); | ||
122 | $wallabagV1Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2.jsonx'); | ||
123 | |||
124 | $res = $wallabagV1Import->import(); | ||
125 | |||
126 | $this->assertFalse($res); | ||
127 | |||
128 | $records = $this->logHandler->getRecords(); | ||
129 | $this->assertContains('WallabagImport: unable to read file', $records[0]['message']); | ||
130 | $this->assertEquals('ERROR', $records[0]['level_name']); | ||
131 | } | ||
132 | |||
133 | public function testImportUserNotDefined() | ||
134 | { | ||
135 | $wallabagV1Import = $this->getWallabagV2Import(true); | ||
136 | $wallabagV1Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2.json'); | ||
137 | |||
138 | $res = $wallabagV1Import->import(); | ||
139 | |||
140 | $this->assertFalse($res); | ||
141 | |||
142 | $records = $this->logHandler->getRecords(); | ||
143 | $this->assertContains('WallabagImport: user is not defined', $records[0]['message']); | ||
144 | $this->assertEquals('ERROR', $records[0]['level_name']); | ||
145 | } | ||
146 | } | ||
diff --git a/tests/Wallabag/ImportBundle/fixtures/test.html b/tests/Wallabag/ImportBundle/fixtures/test.html new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/Wallabag/ImportBundle/fixtures/test.html | |||
diff --git a/tests/Wallabag/ImportBundle/fixtures/test.txt b/tests/Wallabag/ImportBundle/fixtures/test.txt new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/Wallabag/ImportBundle/fixtures/test.txt | |||
diff --git a/tests/Wallabag/ImportBundle/fixtures/unnamed.png b/tests/Wallabag/ImportBundle/fixtures/unnamed.png new file mode 100644 index 00000000..e6dd9caa --- /dev/null +++ b/tests/Wallabag/ImportBundle/fixtures/unnamed.png | |||
Binary files differ | |||
diff --git a/tests/Wallabag/ImportBundle/fixtures/wallabag-v1-read.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v1-read.json new file mode 100644 index 00000000..c4d1cf58 --- /dev/null +++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v1-read.json | |||
@@ -0,0 +1,53 @@ | |||
1 | [ | ||
2 | { | ||
3 | "0": "3", | ||
4 | "1": "Features - wallabag", | ||
5 | "2": "https://www.wallabag.org/features/", | ||
6 | "3": "0", | ||
7 | "4": "1", | ||
8 | "5": "\n\t\t<p>Here are some features. If one is missing, you can <a href=\"https://github.com/wallabag/wallabag\">open a new issue</a>.</p>\n<ul class=\"list-group\"><li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> wallabag is free and open source. Forever.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> No time to read? Save a link in your wallabag to read it later</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Read the saved articles in a comfortable view: the content, only the content</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You save all the content: text and pictures</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You can easily migrate from others private services.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You like an article? Share it by email, on twitter or in your <a href=\"https://github.com/sebsauvage/Shaarli\">shaarli</a></li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Because we are increasingly mobile, wallabag fits all your devices</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Saving a link is so easy because we provide you many tools: extensions for Chrome and Firefox, iOS, Android and Windows Phone application, a bookmarklet, a simple field in your config webpage. <a title=\"Download wallabag\" href=\"https://www.wallabag.org/downloads/\">You can download third-party applications here</a>.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> RSS feeds allows you to read your saved links in your RSS agregator</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You can set tags to your entries.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> wallabag is multilingual: french, english, spanish, german, italian, russian, persian, czech, polish, ukrainian and slovienian.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You’re not the only one at home to use wallabag? it’s good, wallabag is multi users</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You prefer a dark template? Perfect, many templates are available in the configuration screen</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Many storage allowed: sqlite, mysql and postgresql</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Scroll position is saved: when you return on an article, you come back where you was. So convenient!</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You can flattr flattrable articles directly from your wallabag</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You want to retrieve your wallabag datas? hey, remember, wallabag is open source, you can export it</li>\n</ul>", | ||
9 | "6": "1", | ||
10 | "id": "3", | ||
11 | "title": "Features - wallabag", | ||
12 | "url": "https://www.wallabag.org/features/", | ||
13 | "is_read": "0", | ||
14 | "is_fav": "1", | ||
15 | "content": "\n\t\t<p>Here are some features. If one is missing, you can <a href=\"https://github.com/wallabag/wallabag\">open a new issue</a>.</p>\n<ul class=\"list-group\"><li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> wallabag is free and open source. Forever.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> No time to read? Save a link in your wallabag to read it later</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Read the saved articles in a comfortable view: the content, only the content</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You save all the content: text and pictures</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You can easily migrate from others private services.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You like an article? Share it by email, on twitter or in your <a href=\"https://github.com/sebsauvage/Shaarli\">shaarli</a></li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Because we are increasingly mobile, wallabag fits all your devices</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Saving a link is so easy because we provide you many tools: extensions for Chrome and Firefox, iOS, Android and Windows Phone application, a bookmarklet, a simple field in your config webpage. <a title=\"Download wallabag\" href=\"https://www.wallabag.org/downloads/\">You can download third-party applications here</a>.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> RSS feeds allows you to read your saved links in your RSS agregator</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You can set tags to your entries.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> wallabag is multilingual: french, english, spanish, german, italian, russian, persian, czech, polish, ukrainian and slovienian.</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You’re not the only one at home to use wallabag? it’s good, wallabag is multi users</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You prefer a dark template? Perfect, many templates are available in the configuration screen</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Many storage allowed: sqlite, mysql and postgresql</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> Scroll position is saved: when you return on an article, you come back where you was. So convenient!</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You can flattr flattrable articles directly from your wallabag</li>\n<li class=\"list-group-item\"><span class=\"glyphicon glyphicon-ok\"></span> You want to retrieve your wallabag datas? hey, remember, wallabag is open source, you can export it</li>\n</ul>", | ||
16 | "user_id": "1", | ||
17 | "tags": "" | ||
18 | }, | ||
19 | { | ||
20 | "0": "10", | ||
21 | "1": "Recreating The Square Slider", | ||
22 | "2": "http://gilbert.pellegrom.me/recreating-the-square-slider", | ||
23 | "3": "0", | ||
24 | "4": "0", | ||
25 | "5": "<p>The new <a href=\"https://squareup.com\">Square</a> site is lovely and I really like the slider they have on the homepage. So I decided to try and recreate it in a simple and reusable way.</p>\n\n<p> \n <a href=\"http://gilbert.pellegrom.me/demo/square-slider\">Demo</a> | <a href=\"http://dev7studios.com/downloads/50\">Download</a>\n</p>\n\n\n\n<h3>The HTML</h3>\n\n<pre class=\"language-markup\"><code><div class=\"square-slider\"> \n <div class=\"slide slide1\">\n <div class=\"content light\">\n <h3>Recreating The Square Slider</h3>\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac eros et augue vulputate \n aliquet pellentesque vitae tortor. Pellentesque mi velit, euismod nec semper</p>\n </div>\n <img src=\"images/asset1.png\" alt=\"\" class=\"asset\" />\n </div>\n <div class=\"slide slide2\">\n <div class=\"content dark\">\n <h3>Looks Amazing Right?</h3>\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac eros et augue vulputate \n aliquet pellentesque vitae tortor. Pellentesque mi velit, euismod nec semper</p>\n </div>\n <img src=\"images/asset2.png\" alt=\"\" class=\"asset\" />\n </div>\n <div class=\"slide slide3 inverted\">\n <div class=\"content light\">\n <h3>And Simple To Use</h3>\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac eros et augue vulputate \n aliquet pellentesque vitae tortor. Pellentesque mi velit, euismod nec semper</p>\n </div>\n <img src=\"images/asset3.png\" alt=\"\" class=\"asset\" />\n </div>\n <a href=\"#\" class=\"prev\">Prev</a>\n <a href=\"#\" class=\"next\">Next</a>\n <div class=\"overlay\"></div>\n</div></code></pre>\n\n<h3>The CSS</h3>\n\n<pre class=\"language-css\"><code>.square-slider { \n overflow: hidden;\n position: relative;\n background: #fff;\n}\n.square-slider .slide {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: none;\n opacity: 0;\n -moz-opacity: 0;\n -moz-transition: opacity 800ms cubic-bezier(0.51, 0.01, 0.37, 0.98) 100ms;\n -webkit-transition: opacity 800ms cubic-bezier(0.51, 0.01, 0.37, 0.98) 100ms;\n -o-transition: opacity 800ms cubic-bezier(0.51, 0.01, 0.37, 0.98) 100ms;\n transition: opacity 800ms cubic-bezier(0.51, 0.01, 0.37, 0.98) 100ms;\n -moz-transform: translate3d(0, 0, 0);\n -webkit-transform: translate3d(0, 0, 0);\n -o-transform: translate3d(0, 0, 0);\n -ms-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n}\n.square-slider .slide:first-child { display: block; }\n.square-slider .slide:first-child,\n.square-slider .slide.active {\n opacity: 1;\n -moz-opacity: 1;\n}\n.square-slider .slide .content {\n position: absolute;\n top: 40%;\n left: 50%;\n margin-left: -450px;\n width: 360px;\n text-shadow: 0 1px 1px rgba(0,0,0,0.3);\n z-index: 7;\n -webkit-transition-property: -webkit-transform,opacity;\n -moz-transition-property: -moz-transform,opacity;\n -webkit-transition-duration: 800ms,700ms;\n -moz-transition-duration: 800ms,700ms;\n -webkit-transition-timing-function: cubic-bezier(0.51, 0.01, 0.37, 0.98);\n -moz-transition-timing-function: cubic-bezier(0.51, 0.01, 0.37, 0.98);\n -webkit-transform: translate3d(-30px, 0, 0);\n -moz-transform: translate(-30px, 0);\n}\n.square-slider .slide.inverted .content {\n left: auto;\n right: 50%;\n margin-left: 0;\n margin-right: -450px;\n -webkit-transform: translate3d(30px, 0, 0);\n -moz-transform: translate(30px, 0);\n}\n.square-slider .slide.active .content {\n -webkit-transform: translate3d(0, 0, 0);\n -moz-transform: translate(0, 0);\n}\n.square-slider .slide .asset {\n position: absolute;\n bottom: 0;\n left: 50%;\n -webkit-transition-property: -webkit-transform,opacity;\n -moz-transition-property: -moz-transform,opacity;\n -webkit-transition-duration: 800ms,700ms;\n -moz-transition-duration: 800ms,700ms;\n -webkit-transition-timing-function: cubic-bezier(0.51, 0.01, 0.37, 0.98);\n -moz-transition-timing-function: cubic-bezier(0.51, 0.01, 0.37, 0.98);\n -webkit-transform: translate3d(0, 0, 0);\n -moz-transform: translate(0, 0);\n}\n.square-slider .slide.inverted .asset {\n left: auto;\n right: 50%;\n}\n.square-slider .slide.active .asset {\n -webkit-transform: translate3d(-7px, 3px, 0);\n -moz-transform: translate(-7px, 3px);\n}\n.square-slider .slide.inverted.active .asset {\n -webkit-transform: translate3d(7px, 3px, 0);\n -moz-transform: translate(7px, 3px);\n}\n.square-slider .prev,\n.square-slider .next {\n background: url(images/nav.png) no-repeat;\n display: block;\n width: 67px;\n height: 67px;\n position: absolute;\n top: 50%;\n margin-top: -30px;\n z-index: 10;\n border: 0;\n text-indent: -9999px;\n display: none;\n opacity: 0.6;\n -moz-opacity: 0.6;\n -webkit-transition: opacity 0.5s ease-in;\n -moz-transition: opacity 0.5s ease-in;\n -ms-transition: opacity 0.5s ease-in;\n -o-transition: opacity 0.5s ease-in;\n transition: opacity 0.5s ease-in;\n}\n.square-slider .prev { \n left: 40px; \n background-position: 0 100%;\n}\n.square-slider .next { right: 40px; }\n.square-slider .prev:hover,\n.square-slider .next:hover {\n opacity: 1;\n -moz-opacity: 1;\n}\n.square-slider .overlay {\n position: absolute;\n top: 0;\n left: -100%;\n width: 300%;\n height: 100%;\n z-index: 5;\n -moz-box-shadow: inset 0px 0px 10px rgba(0,0,0,0.3);\n -webkit-box-shadow: inset 0px 0px 10px rgba(0,0,0,0.3);\n box-shadow: inset 0px 0px 10px rgba(0,0,0,0.3);\n}\n\n\n.square-slider {\n width: 100%;\n height: 550px;\n margin: 40px auto;\n}\n.square-slider .slide .content.light { color: #fff; }\n.square-slider .slide .content.dark { \n color: #333; \n text-shadow: 0 1px 1px rgba(255,255,255,0.3);\n}\n.square-slider .slide1 { background: url(images/bg1.jpg) no-repeat 50% 50%; }\n.square-slider .slide2 { background: url(images/bg2.jpg) no-repeat 50% 50%; }\n.square-slider .slide3 { background: url(images/bg3.jpg) no-repeat 50% 50%; }</code></pre>\n\n<h3>The Javascript (jQuery)</h3>\n\n<pre class=\"language-javascript\"><code>(function($){\n\n $('.square-slider').each(function(){\n var slider = $(this),\n slides = slider.find('.slide'),\n currentSlide = 0;\n\n slides.show();\n $(slides[currentSlide]).addClass('active');\n $('.next,.prev', slider).show();\n\n $('.prev', slider).on('click', function(){\n slides.removeClass('active');\n currentSlide--;\n if(currentSlide < 0) currentSlide = slides.length - 1;\n $(slides[currentSlide]).addClass('active');\n return false;\n });\n\n $('.next', slider).on('click', function(){\n slides.removeClass('active');\n currentSlide++;\n if(currentSlide > slides.length - 1) currentSlide = 0;\n $(slides[currentSlide]).addClass('active');\n return false;\n });\n });\n\n})(window.jQuery);</code></pre>\n\n<h3>A Few Notes</h3>\n\n<ul><li>Feel free to <a href=\"http://dev7studios.com/downloads/50\">download the source</a> and customise and use it in your own sites. <strong>Don’t</strong> use the images as they belong to <a href=\"https://squareup.com\">Square Inc</a>.</li>\n<li>Add the <code>.inverted</code> class to a <code>.slide</code> div to swap the position of the asset and content.</li>\n<li>Depending on the background you’ll want to use the <code>.light</code> or <code>.dark</code> class on the <code>.content</code> divs.</li>\n<li>This is pretty much cross browser (as in the slider itself will still work in most browsers, just not with the fancy transitions).</li>\n<li>If javascript is off (really?) it displays the first slide.</li>\n<li>Source code is Public domain.</li>\n</ul><p>Enjoy.</p>\n ", | ||
26 | "6": "1", | ||
27 | "id": "10", | ||
28 | "title": "Recreating The Square Slider", | ||
29 | "url": "http://gilbert.pellegrom.me/recreating-the-square-slider", | ||
30 | "is_read": "0", | ||
31 | "is_fav": "0", | ||
32 | "content": "<p>The new <a href=\"https://squareup.com\">Square</a> site is lovely and I really like the slider they have on the homepage. So I decided to try and recreate it in a simple and reusable way.</p>\n\n<p> \n <a href=\"http://gilbert.pellegrom.me/demo/square-slider\">Demo</a> | <a href=\"http://dev7studios.com/downloads/50\">Download</a>\n</p>\n\n\n\n<h3>The HTML</h3>\n\n<pre class=\"language-markup\"><code><div class=\"square-slider\"> \n <div class=\"slide slide1\">\n <div class=\"content light\">\n <h3>Recreating The Square Slider</h3>\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac eros et augue vulputate \n aliquet pellentesque vitae tortor. Pellentesque mi velit, euismod nec semper</p>\n </div>\n <img src=\"images/asset1.png\" alt=\"\" class=\"asset\" />\n </div>\n <div class=\"slide slide2\">\n <div class=\"content dark\">\n <h3>Looks Amazing Right?</h3>\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac eros et augue vulputate \n aliquet pellentesque vitae tortor. Pellentesque mi velit, euismod nec semper</p>\n </div>\n <img src=\"images/asset2.png\" alt=\"\" class=\"asset\" />\n </div>\n <div class=\"slide slide3 inverted\">\n <div class=\"content light\">\n <h3>And Simple To Use</h3>\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac eros et augue vulputate \n aliquet pellentesque vitae tortor. Pellentesque mi velit, euismod nec semper</p>\n </div>\n <img src=\"images/asset3.png\" alt=\"\" class=\"asset\" />\n </div>\n <a href=\"#\" class=\"prev\">Prev</a>\n <a href=\"#\" class=\"next\">Next</a>\n <div class=\"overlay\"></div>\n</div></code></pre>\n\n<h3>The CSS</h3>\n\n<pre class=\"language-css\"><code>.square-slider { \n overflow: hidden;\n position: relative;\n background: #fff;\n}\n.square-slider .slide {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: none;\n opacity: 0;\n -moz-opacity: 0;\n -moz-transition: opacity 800ms cubic-bezier(0.51, 0.01, 0.37, 0.98) 100ms;\n -webkit-transition: opacity 800ms cubic-bezier(0.51, 0.01, 0.37, 0.98) 100ms;\n -o-transition: opacity 800ms cubic-bezier(0.51, 0.01, 0.37, 0.98) 100ms;\n transition: opacity 800ms cubic-bezier(0.51, 0.01, 0.37, 0.98) 100ms;\n -moz-transform: translate3d(0, 0, 0);\n -webkit-transform: translate3d(0, 0, 0);\n -o-transform: translate3d(0, 0, 0);\n -ms-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n}\n.square-slider .slide:first-child { display: block; }\n.square-slider .slide:first-child,\n.square-slider .slide.active {\n opacity: 1;\n -moz-opacity: 1;\n}\n.square-slider .slide .content {\n position: absolute;\n top: 40%;\n left: 50%;\n margin-left: -450px;\n width: 360px;\n text-shadow: 0 1px 1px rgba(0,0,0,0.3);\n z-index: 7;\n -webkit-transition-property: -webkit-transform,opacity;\n -moz-transition-property: -moz-transform,opacity;\n -webkit-transition-duration: 800ms,700ms;\n -moz-transition-duration: 800ms,700ms;\n -webkit-transition-timing-function: cubic-bezier(0.51, 0.01, 0.37, 0.98);\n -moz-transition-timing-function: cubic-bezier(0.51, 0.01, 0.37, 0.98);\n -webkit-transform: translate3d(-30px, 0, 0);\n -moz-transform: translate(-30px, 0);\n}\n.square-slider .slide.inverted .content {\n left: auto;\n right: 50%;\n margin-left: 0;\n margin-right: -450px;\n -webkit-transform: translate3d(30px, 0, 0);\n -moz-transform: translate(30px, 0);\n}\n.square-slider .slide.active .content {\n -webkit-transform: translate3d(0, 0, 0);\n -moz-transform: translate(0, 0);\n}\n.square-slider .slide .asset {\n position: absolute;\n bottom: 0;\n left: 50%;\n -webkit-transition-property: -webkit-transform,opacity;\n -moz-transition-property: -moz-transform,opacity;\n -webkit-transition-duration: 800ms,700ms;\n -moz-transition-duration: 800ms,700ms;\n -webkit-transition-timing-function: cubic-bezier(0.51, 0.01, 0.37, 0.98);\n -moz-transition-timing-function: cubic-bezier(0.51, 0.01, 0.37, 0.98);\n -webkit-transform: translate3d(0, 0, 0);\n -moz-transform: translate(0, 0);\n}\n.square-slider .slide.inverted .asset {\n left: auto;\n right: 50%;\n}\n.square-slider .slide.active .asset {\n -webkit-transform: translate3d(-7px, 3px, 0);\n -moz-transform: translate(-7px, 3px);\n}\n.square-slider .slide.inverted.active .asset {\n -webkit-transform: translate3d(7px, 3px, 0);\n -moz-transform: translate(7px, 3px);\n}\n.square-slider .prev,\n.square-slider .next {\n background: url(images/nav.png) no-repeat;\n display: block;\n width: 67px;\n height: 67px;\n position: absolute;\n top: 50%;\n margin-top: -30px;\n z-index: 10;\n border: 0;\n text-indent: -9999px;\n display: none;\n opacity: 0.6;\n -moz-opacity: 0.6;\n -webkit-transition: opacity 0.5s ease-in;\n -moz-transition: opacity 0.5s ease-in;\n -ms-transition: opacity 0.5s ease-in;\n -o-transition: opacity 0.5s ease-in;\n transition: opacity 0.5s ease-in;\n}\n.square-slider .prev { \n left: 40px; \n background-position: 0 100%;\n}\n.square-slider .next { right: 40px; }\n.square-slider .prev:hover,\n.square-slider .next:hover {\n opacity: 1;\n -moz-opacity: 1;\n}\n.square-slider .overlay {\n position: absolute;\n top: 0;\n left: -100%;\n width: 300%;\n height: 100%;\n z-index: 5;\n -moz-box-shadow: inset 0px 0px 10px rgba(0,0,0,0.3);\n -webkit-box-shadow: inset 0px 0px 10px rgba(0,0,0,0.3);\n box-shadow: inset 0px 0px 10px rgba(0,0,0,0.3);\n}\n\n\n.square-slider {\n width: 100%;\n height: 550px;\n margin: 40px auto;\n}\n.square-slider .slide .content.light { color: #fff; }\n.square-slider .slide .content.dark { \n color: #333; \n text-shadow: 0 1px 1px rgba(255,255,255,0.3);\n}\n.square-slider .slide1 { background: url(images/bg1.jpg) no-repeat 50% 50%; }\n.square-slider .slide2 { background: url(images/bg2.jpg) no-repeat 50% 50%; }\n.square-slider .slide3 { background: url(images/bg3.jpg) no-repeat 50% 50%; }</code></pre>\n\n<h3>The Javascript (jQuery)</h3>\n\n<pre class=\"language-javascript\"><code>(function($){\n\n $('.square-slider').each(function(){\n var slider = $(this),\n slides = slider.find('.slide'),\n currentSlide = 0;\n\n slides.show();\n $(slides[currentSlide]).addClass('active');\n $('.next,.prev', slider).show();\n\n $('.prev', slider).on('click', function(){\n slides.removeClass('active');\n currentSlide--;\n if(currentSlide < 0) currentSlide = slides.length - 1;\n $(slides[currentSlide]).addClass('active');\n return false;\n });\n\n $('.next', slider).on('click', function(){\n slides.removeClass('active');\n currentSlide++;\n if(currentSlide > slides.length - 1) currentSlide = 0;\n $(slides[currentSlide]).addClass('active');\n return false;\n });\n });\n\n})(window.jQuery);</code></pre>\n\n<h3>A Few Notes</h3>\n\n<ul><li>Feel free to <a href=\"http://dev7studios.com/downloads/50\">download the source</a> and customise and use it in your own sites. <strong>Don’t</strong> use the images as they belong to <a href=\"https://squareup.com\">Square Inc</a>.</li>\n<li>Add the <code>.inverted</code> class to a <code>.slide</code> div to swap the position of the asset and content.</li>\n<li>Depending on the background you’ll want to use the <code>.light</code> or <code>.dark</code> class on the <code>.content</code> divs.</li>\n<li>This is pretty much cross browser (as in the slider itself will still work in most browsers, just not with the fancy transitions).</li>\n<li>If javascript is off (really?) it displays the first slide.</li>\n<li>Source code is Public domain.</li>\n</ul><p>Enjoy.</p>\n ", | ||
33 | "user_id": "1", | ||
34 | "tags": "" | ||
35 | }, | ||
36 | { | ||
37 | "0": "11", | ||
38 | "1": "J’aime le logiciel libre", | ||
39 | "2": "http://framablog.org/2015/02/14/jaime-le-logiciel-libre/", | ||
40 | "3": "0", | ||
41 | "4": "0", | ||
42 | "5": "\n <p>Aujourd’hui, c’est la <em>Saint Valentin</em>, et l’occasion de déclarer son amour des logiciels libres !</p>\n<p><a href=\"https://fsfe.org/campaigns/ilovefs/ilovefs.fr.html\"><img src=\"http://framablog.org/wp-content/uploads/2015/02/ilovefs-banner-extralarge.png\" alt=\"ilovefs-banner-extralarge\" width=\"627\" height=\"105\" class=\"aligncenter size-full wp-image-3239\" /></a></p>\n<p>Framasoft vous a déjà proposé <a href=\"http://framablog.org/2015/02/14/on-love-logiciel-libre/\">son adaptation délirante de poèmes</a> pour l’occasion, et voici une petite bande-dessinée qui synthétise l’événement :</p>\n<p><a href=\"http://framablog.org/wp-content/uploads/2015/02/dm_001_jaime_le_logiciel_libre.jpg\"><img src=\"http://framablog.org/wp-content/uploads/2015/02/dm_001_jaime_le_logiciel_libre.jpg\" alt=\"dm_001_jaime_le_logiciel_libre\" width=\"800\" height=\"1200\" class=\"aligncenter size-full wp-image-3265\" /></a></p>\n<p>Cette bande-dessinée est extraite du nouveau blog <a href=\"http://grisebouille.net/\">Grise Bouille</a> hébergé par Framasoft.</p>\n<p><em>Crédit : <a href=\"http://grisebouille.net/\">Simon Gee Giraudot</a> (Creative Commons By-Sa)</em></p>\n<div title=\"Diaspora*\"><a><span><img src=\"http://www.framablog.org/wp-content/uploads/2015/01/diaspora.jpg\" alt=\"\" /></span></a></div><div class=\"twoclick-js\"></div><div><h3><a href=\"http://framablog.org/author/gee/\" title=\"All posts by Gee\">Gee</a></h3><div class=\"bio-gravatar\"><img alt=\"\" src=\"http://0.gravatar.com/avatar/4f71e4ffe5d4d9d89b16949563cd41f3?s=90&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D90&r=G\" class=\"avatar pull-left media-object avatar-90 photo\" height=\"90\" width=\"90\" /></div><a href=\"http://ptilouk.net/\" class=\"bio-icon bio-icon-website\"></a><a href=\"https://framasphere.org/u/gee\" class=\"bio-icon bio-icon-facebook\"></a><a href=\"https://twitter.com/ptilouk\" class=\"bio-icon bio-icon-twitter\"></a><p class=\"bio-description\">Auteur/dessinateur de bandes dessinées (Le Geektionnerd, Superflu, Bastards Inc, etc.) et doctorant en informatique sur son temps salarié.</p></div> ", | ||
43 | "6": "1", | ||
44 | "id": "11", | ||
45 | "title": "J’aime le logiciel libre", | ||
46 | "url": "http://framablog.org/2015/02/14/jaime-le-logiciel-libre/", | ||
47 | "is_read": "0", | ||
48 | "is_fav": "0", | ||
49 | "content": "\n <p>Aujourd’hui, c’est la <em>Saint Valentin</em>, et l’occasion de déclarer son amour des logiciels libres !</p>\n<p><a href=\"https://fsfe.org/campaigns/ilovefs/ilovefs.fr.html\"><img src=\"http://framablog.org/wp-content/uploads/2015/02/ilovefs-banner-extralarge.png\" alt=\"ilovefs-banner-extralarge\" width=\"627\" height=\"105\" class=\"aligncenter size-full wp-image-3239\" /></a></p>\n<p>Framasoft vous a déjà proposé <a href=\"http://framablog.org/2015/02/14/on-love-logiciel-libre/\">son adaptation délirante de poèmes</a> pour l’occasion, et voici une petite bande-dessinée qui synthétise l’événement :</p>\n<p><a href=\"http://framablog.org/wp-content/uploads/2015/02/dm_001_jaime_le_logiciel_libre.jpg\"><img src=\"http://framablog.org/wp-content/uploads/2015/02/dm_001_jaime_le_logiciel_libre.jpg\" alt=\"dm_001_jaime_le_logiciel_libre\" width=\"800\" height=\"1200\" class=\"aligncenter size-full wp-image-3265\" /></a></p>\n<p>Cette bande-dessinée est extraite du nouveau blog <a href=\"http://grisebouille.net/\">Grise Bouille</a> hébergé par Framasoft.</p>\n<p><em>Crédit : <a href=\"http://grisebouille.net/\">Simon Gee Giraudot</a> (Creative Commons By-Sa)</em></p>\n<div title=\"Diaspora*\"><a><span><img src=\"http://www.framablog.org/wp-content/uploads/2015/01/diaspora.jpg\" alt=\"\" /></span></a></div><div class=\"twoclick-js\"></div><div><h3><a href=\"http://framablog.org/author/gee/\" title=\"All posts by Gee\">Gee</a></h3><div class=\"bio-gravatar\"><img alt=\"\" src=\"http://0.gravatar.com/avatar/4f71e4ffe5d4d9d89b16949563cd41f3?s=90&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D90&r=G\" class=\"avatar pull-left media-object avatar-90 photo\" height=\"90\" width=\"90\" /></div><a href=\"http://ptilouk.net/\" class=\"bio-icon bio-icon-website\"></a><a href=\"https://framasphere.org/u/gee\" class=\"bio-icon bio-icon-facebook\"></a><a href=\"https://twitter.com/ptilouk\" class=\"bio-icon bio-icon-twitter\"></a><p class=\"bio-description\">Auteur/dessinateur de bandes dessinées (Le Geektionnerd, Superflu, Bastards Inc, etc.) et doctorant en informatique sur son temps salarié.</p></div> ", | ||
50 | "user_id": "1", | ||
51 | "tags": "framasoft,tag" | ||
52 | } | ||
53 | ] | ||
diff --git a/tests/Wallabag/ImportBundle/fixtures/wallabag-v1.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v1.json new file mode 100644 index 00000000..f298469f --- /dev/null +++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v1.json | |||
@@ -0,0 +1,69 @@ | |||
1 | [ | ||
2 | { | ||
3 | "0": "1", | ||
4 | "1": "Framabag, un nouveau service libre et gratuit", | ||
5 | "2": "http://www.framablog.org/index.php/post/2014/02/05/Framabag-service-libre-gratuit-interview-developpeur", | ||
6 | "3": "0", | ||
7 | "4": "0", | ||
8 | "5": "\n<h2>Une interview de Nicolas, son développeur.</h2>\n<p><em>Il ne vous a sûrement pas échappé que notre consommation de contenus du Web est terriblement chronophage et particulièrement frustrante tout à la fois : non seulement nous passons beaucoup (trop ?) de temps en ligne à explorer les mines aurifères de la toile, y détectant pépites et filons, mais nous sommes surtout constamment en manque. Même si nous ne sommes pas dans le zapping frénétique si facilement dénoncé par les doctes psychologues qui pontifient sur les dangers du numérique pour les jeunes cervelles, il nous vient souvent le goût amer de l’inachevé : pas le temps de tout lire (<a href=\"http://fr.wiktionary.org/wiki/TLDR\">TL;DR</a> est devenu le clin d’œil mi-figue mi-raisin d’une génération de lecteurs pressés), pas trop le temps de réfléchir non plus hélas, pas le temps de suivre la ribambelle de liens associés à un article…<br /></em></p>\n<p><em>Pour nous donner bonne conscience, nous rangeons scrupuleusement un marque-page de plus dans un sous-dossier qui en comporte déjà 256, nous notons un élément de plus dans la toujours ridiculement longue toudouliste, bref nous remettons à plus tard, c’est-à-dire le plus souvent aux introuvables calendes grecques, le soin de lire vraiment un article jugé intéressant, de regarder une vidéo signalée par les rézossocios, de lire un chapitre entier d’un ouvrage disponible en ligne…<br /></em></p>\n<p><em>Alors bien sûr, à défaut de nous donner tout le temps qui serait nécessaire, des solutions existent pour nous permettre de « lire plus tard » en sauvegardant le précieux pollen de nos butinages de site en site, et d’en faire ultérieurement votre miel ; c’est bel et bon mais les ruches sont un peu distantes, ça s’appelle le cloud (nos amis techies m’ont bien expliqué mais j’ai seulement compris que des trucs à moi sont sur des machines lointaines, ça ne me rassure pas trop) et elles sont souvent propriétaires, ne laissant entrer que les <s>utilisateurs</s> consommateurs payants et qui consentent à leurs conditions. Sans compter que de gros bourdons viennent profiter plus ou moins discrètement de toutes ces traces de nous-mêmes qui permettent de monétiser notre profil : si je collecte sur ces services (ne les nommons pas, justement) une série d’articles sur l’idée de Nature chez Diderot, je recevrai diverses sollicitations pour devenir client de la boutique Nature & Découverte du boulevard Diderot. Et si d’aventure les programmes de la NSA moulinent sur le service, je serai peut-être un jour dans une liste des militants naturistes indésirables sur les vols de la PanAm (je ne sais plus trop si je plaisante là, finalement…)<br /></em></p>\n<p><em>La bonne idée : « se constituer un réservoir de documents sélectionnés à parcourir plus tard » appelait donc une autre bonne idée, celle d’avoir le contrôle de ce réservoir, de notre collection personnelle. C’est Nicolas Lœuillet, ci-dessous interviewé, qui s’y est collé avec une belle application appelée euh… oui, appelée Wallabag.<br /></em></p>\n<p><em>Framasoft soutient d’autant plus son initiative qu’<a href=\"http://www.framablog.org/index.php/post/2014/01/31/Geektionnerd-Wallabag\">on lui a cherché des misères pour une histoire de nom</a> et qu’il est possible d’installer soi-même une copie de Wallabag sur son propre site.<br /></em></p>\n<p><em>Le petit plus de Framasoft, réseau toujours désireux de vous proposer des alternatives libératrices, c’est de vous proposer (sur inscription préalable) un accès au Framabag, autrement dit votre Wallabag sur un serveur Frama* avec notre garantie de confidentialité. Comme pour le Framanews, nous vous accueillons volontiers dans la limite de nos capacités, en vous invitant à vous lancer dans votre auto-hébergement de Wallabag.<br />Cet article est trop long ? Mettez-le dans <a href=\"http://www.framabag.org/index.php\">votre Framabag</a> et hop.<br /></em></p>\n<p><em>Framablog : Salut Nicolas… Tu peux te présenter brièvement ?<br /></em></p>\n<p>Salut ! Développeur PHP depuis quelques années maintenant (10 ans), j’ai voulu me remettre à niveau techniquement parlant (depuis 3 ans, j’ai pas mal lâché le clavier). Pour mes besoins persos, j’ai donc créé un petit projet pour remplacer une solution propriétaire existante. Sans aucune prétention, j’ai hébergé ce projet sur Github et comme c’est la seule solution <em>open source</em> de ce type, le nombre de personnes intéressées a augmenté …</p>\n<p><em>Les utilisateurs de services Framasoft ne le savent pas forcément, mais tu as déjà pas mal participé à la FramaGalaxie, non ?<br /></em></p>\n<p>En effet. J’ai commencé un plugin pour Framanews, <a href=\"https://github.com/nicosomb/ttrss-purge-accounts\">ttrss-purge-accounts</a>, qui permet de nettoyer la base de données de comptes plus utilisés. Mais ce <em>plugin</em> a besoin d’être terminé à 100% pour être intégré au sein de Framanews (et donc de Tiny Tiny RSS), si quelqu’un souhaite m’aider, il n’y a aucun souci.<br />J’ai aussi fait 1 ou 2 apparitions dans des traductions pour Framablog. Rien d’extraordinaire, je ne suis pas bilingue, ça me permet de m’entraîner.</p>\n<p><em>Parlons de suite de ce qui fâche : ton application Wallabag, elle s’appellait pas “Poche”, avant ? Tu nous racontes l’histoire ?<br /></em></p>\n<p>Euh en effet … Déjà, pourquoi <em>poche</em> ? Parce que l’un des trois « ténors » sur le marché s’appelle <em>Pocket</em>. Comme mon appli n’était destinée qu’à mon usage personnel au départ, je ne me suis pas torturé bien longtemps.</p>\n<p>Cet été, on a failli changer de nom, quand il y a eu de plus en plus d’utilisateurs. Et puis on s’est dit que poche, c’était pas mal, ça sonnait bien français et puis avec les quelques dizaines d’utilisateurs, on ne gênerait personne.</p>\n<p>C’est sans compter avec les sociétés américaines et leur fâcheuse manie de vouloir envoyer leurs avocats à tout bout de champ. Le 23 janvier, j’ai reçu un email de la part du cabinet d’avocats de Pocket me demandant de changer le nom, le logo, de ne plus utiliser le terme “read-it-later” (« lisez le plus tard ») et de ne plus dire que Pocket n’est pas gratuit (tout est parti d’<a href=\"https://twitter.com/wallabagapp/status/423786365944225792\">un tweet</a> où je qualifie Pocket de « non free » à savoir non libre). Bref, même si je semblais dans mon droit, j’ai quand même pris la décision de changer de nom et Wallabag est né, suite aux <a href=\"http://framadate.org/studs.php?sondage=llcp6ojpyc9pklha\">dizaines de propositions de nom reçues</a>. C’est un mélange entre le wallaby (de la famille des kangourous, qui stockent dans leur poche ce qui leur est cher) et <em>bag</em> (les termes sac / sacoche / besace sont énormément revenus). Mais maintenant, on va de l’avant, plus de temps à perdre avec ça, on a du pain sur la planche.<br /><img src=\"http://www.framablog.org/public/_img/framablog/wallaby_baby.jpg\" alt=\"wallaby avec bébé dans sa poche\" class=\"c1\" title=\"wallaby avec bébé dans sa poche\" /> crédit photo <a href=\"http://www.flickr.com/photos/26782864@N00/5027202234/in/photolist-8EeJ5A-h1TL6v-NEL81-cnNkSo-9YM1tv-7Kcg6b-8zpAoa-a1ZLMN-9YM39r-7h5SAD-8EeHfL-8EeFwu-dtVwnM-8uoME1-JEzXe-Gq4qy-92VJPR-Cxe1v-8H3D2J-a1ZFNs-9Y72K6-8EeGxL-5L53Fx-5NkENs-5U8CTY-5Nkssh-nkavF-9CrgwP-7sdCAa-duf2Kh-hZepzy-hZdU1e-hZeofF-hZekDg-hZegAY-hZeMZn-jaHgAf-8P87D2-5NgqRv-aT48QB-hZdV4Y-hZeC64-ERgps-5VYGGd-5VYJB1-5NkrFk-6Jxh7h-7h9PuQ-ERfMx-h1U1ih-h1USBx\">William Warby</a> qui autorise explicitement toute réutilisation.</p>\n<p><em>Bon, alors explique-moi ce que je vais pouvoir faire avec Framabag…<br /></em></p>\n<p>Alors Framabag, ça te permet de te créer un compte gratuitement et librement pour pouvoir utiliser Wallabag. Seule ton adresse email est nécessaire, on se charge d’installer et de mettre à jour Wallabag pour toi. Tu peux d’ailleurs profiter <a href=\"http://www.framasoft.net/#topPgCloud\">d’autres services proposés par Framasoft ici</a>.</p>\n<p>À ce jour, il y a 834 comptes créés sur Framabag.</p>\n<p><em>Vous avez vraiment conçu ce service afin qu’on puisse l’utiliser avec un maximum d’outils, non ?<br /></em></p>\n<p>Autour de l’application web, il existe déjà des applications pour smartphones (Android et Windows Phone), des extensions Firefox et Google Chrome.</p>\n<p>Comme Wallabag possède des flux RSS, c’est facile de lire les articles sauvegardés sur sa liseuse (si celle-ci permet de lire des flux RSS). Calibre (« logiciel de lecture, de gestion de bibliothèques et de conversion de fichiers numériques de type ebook ou livre électronique »,nous dit ubuntu-fr.org) intègre depuis quelques semaines maintenant la possibilité de récupérer les articles non lus, pratique pour faire un fichier ePub !</p>\n<p>D’autres applications web permettent l’intégration avec Wallabag (FreshRSS, Leed et Tiny Tiny RSS pour les agrégateurs de flux). L’API qui sera disponible dans la prochaine version de Wallabag permettra encore plus d’interactivité.</p>\n<p><em>Y a-t-il un mode de lecture hors ligne ou est-ce que c’est prévu pour les prochaines versions ?<br /></em></p>\n<p>Il y a un pseudo mode hors ligne, disponible avec l’application Android. On peut récupérer (via un flux RSS) les articles non lus que l’on a sauvegardés. Une fois déconnecté, on peut continuer à lire sur son smartphone ou sa tablette les articles. Par contre, il manque des fonctionnalités : quand tu marques un article comme lu, ce n’est pas synchronisé avec la version web de Wallabag. J’espère que je suis presque clair dans mes explications.</p>\n<p>Pour la v2, qui est déjà en cours de développement, où je suis bien aidé par Vincent Jousse, on aura la possibilité d’avoir un vrai mode hors ligne.</p>\n<p><em>Alors si on veut aider / participer / trifouiller le code / vous envoyer des retours, on fait comment ?<br /></em></p>\n<p>On peut aider de plusieurs façons :</p>\n<ul><li>utiliser wallabag et nous remonter les problèmes rencontrés ;</li>\n<li>participer au développement de l’application https://github.com/wallabag/wallabag Si Silex / Symfony2 / HTML5 / etc. te parlent, n’hésite pas !</li>\n<li>comme tout projet, le gros point noir est le manque de documentation. <a href=\"http://doc.wallabag.org\">Elle est dispo ici</a> mais il manque plein de choses et tout n’est pas à jour ;</li>\n<li>parler de Wallabag autour de vous ;</li>\n<li>il existe <a href=\"https://flattr.com/thing/1265480/poche-a-read-it-later-open-source-system\">un compte Flattr</a>.</li>\n</ul><p><em>Le mot de la fin…?<br /></em></p>\n<p>Merci à Framasoft d’accueillir et de soutenir Wallabag !</p>\n<p>La route est encore bien longue pour ne plus utiliser de solutions propriétaires, mais on devrait y arriver, non ?</p>\n<p><img src=\"http://www.framablog.org/public/_img/framablog/pleinLesPoches.png\" alt=\"framasoft plein les poches\" class=\"c1\" title=\"framasoft plein les poches\" /><br /><a href=\"http://framalab.org/gknd-creator/\">hackez Gégé !</a></p>\n", | ||
9 | "6": "1", | ||
10 | "id": "1", | ||
11 | "title": "Framabag, un nouveau service libre et gratuit", | ||
12 | "url": "http://www.framablog.org/index.php/post/2014/02/05/Framabag-service-libre-gratuit-interview-developpeur", | ||
13 | "is_read": "0", | ||
14 | "is_fav": "0", | ||
15 | "content": "\n<h2>Une interview de Nicolas, son développeur.</h2>\n<p><em>Il ne vous a sûrement pas échappé que notre consommation de contenus du Web est terriblement chronophage et particulièrement frustrante tout à la fois : non seulement nous passons beaucoup (trop ?) de temps en ligne à explorer les mines aurifères de la toile, y détectant pépites et filons, mais nous sommes surtout constamment en manque. Même si nous ne sommes pas dans le zapping frénétique si facilement dénoncé par les doctes psychologues qui pontifient sur les dangers du numérique pour les jeunes cervelles, il nous vient souvent le goût amer de l’inachevé : pas le temps de tout lire (<a href=\"http://fr.wiktionary.org/wiki/TLDR\">TL;DR</a> est devenu le clin d’œil mi-figue mi-raisin d’une génération de lecteurs pressés), pas trop le temps de réfléchir non plus hélas, pas le temps de suivre la ribambelle de liens associés à un article…<br /></em></p>\n<p><em>Pour nous donner bonne conscience, nous rangeons scrupuleusement un marque-page de plus dans un sous-dossier qui en comporte déjà 256, nous notons un élément de plus dans la toujours ridiculement longue toudouliste, bref nous remettons à plus tard, c’est-à-dire le plus souvent aux introuvables calendes grecques, le soin de lire vraiment un article jugé intéressant, de regarder une vidéo signalée par les rézossocios, de lire un chapitre entier d’un ouvrage disponible en ligne…<br /></em></p>\n<p><em>Alors bien sûr, à défaut de nous donner tout le temps qui serait nécessaire, des solutions existent pour nous permettre de « lire plus tard » en sauvegardant le précieux pollen de nos butinages de site en site, et d’en faire ultérieurement votre miel ; c’est bel et bon mais les ruches sont un peu distantes, ça s’appelle le cloud (nos amis techies m’ont bien expliqué mais j’ai seulement compris que des trucs à moi sont sur des machines lointaines, ça ne me rassure pas trop) et elles sont souvent propriétaires, ne laissant entrer que les <s>utilisateurs</s> consommateurs payants et qui consentent à leurs conditions. Sans compter que de gros bourdons viennent profiter plus ou moins discrètement de toutes ces traces de nous-mêmes qui permettent de monétiser notre profil : si je collecte sur ces services (ne les nommons pas, justement) une série d’articles sur l’idée de Nature chez Diderot, je recevrai diverses sollicitations pour devenir client de la boutique Nature & Découverte du boulevard Diderot. Et si d’aventure les programmes de la NSA moulinent sur le service, je serai peut-être un jour dans une liste des militants naturistes indésirables sur les vols de la PanAm (je ne sais plus trop si je plaisante là, finalement…)<br /></em></p>\n<p><em>La bonne idée : « se constituer un réservoir de documents sélectionnés à parcourir plus tard » appelait donc une autre bonne idée, celle d’avoir le contrôle de ce réservoir, de notre collection personnelle. C’est Nicolas Lœuillet, ci-dessous interviewé, qui s’y est collé avec une belle application appelée euh… oui, appelée Wallabag.<br /></em></p>\n<p><em>Framasoft soutient d’autant plus son initiative qu’<a href=\"http://www.framablog.org/index.php/post/2014/01/31/Geektionnerd-Wallabag\">on lui a cherché des misères pour une histoire de nom</a> et qu’il est possible d’installer soi-même une copie de Wallabag sur son propre site.<br /></em></p>\n<p><em>Le petit plus de Framasoft, réseau toujours désireux de vous proposer des alternatives libératrices, c’est de vous proposer (sur inscription préalable) un accès au Framabag, autrement dit votre Wallabag sur un serveur Frama* avec notre garantie de confidentialité. Comme pour le Framanews, nous vous accueillons volontiers dans la limite de nos capacités, en vous invitant à vous lancer dans votre auto-hébergement de Wallabag.<br />Cet article est trop long ? Mettez-le dans <a href=\"http://www.framabag.org/index.php\">votre Framabag</a> et hop.<br /></em></p>\n<p><em>Framablog : Salut Nicolas… Tu peux te présenter brièvement ?<br /></em></p>\n<p>Salut ! Développeur PHP depuis quelques années maintenant (10 ans), j’ai voulu me remettre à niveau techniquement parlant (depuis 3 ans, j’ai pas mal lâché le clavier). Pour mes besoins persos, j’ai donc créé un petit projet pour remplacer une solution propriétaire existante. Sans aucune prétention, j’ai hébergé ce projet sur Github et comme c’est la seule solution <em>open source</em> de ce type, le nombre de personnes intéressées a augmenté …</p>\n<p><em>Les utilisateurs de services Framasoft ne le savent pas forcément, mais tu as déjà pas mal participé à la FramaGalaxie, non ?<br /></em></p>\n<p>En effet. J’ai commencé un plugin pour Framanews, <a href=\"https://github.com/nicosomb/ttrss-purge-accounts\">ttrss-purge-accounts</a>, qui permet de nettoyer la base de données de comptes plus utilisés. Mais ce <em>plugin</em> a besoin d’être terminé à 100% pour être intégré au sein de Framanews (et donc de Tiny Tiny RSS), si quelqu’un souhaite m’aider, il n’y a aucun souci.<br />J’ai aussi fait 1 ou 2 apparitions dans des traductions pour Framablog. Rien d’extraordinaire, je ne suis pas bilingue, ça me permet de m’entraîner.</p>\n<p><em>Parlons de suite de ce qui fâche : ton application Wallabag, elle s’appellait pas “Poche”, avant ? Tu nous racontes l’histoire ?<br /></em></p>\n<p>Euh en effet … Déjà, pourquoi <em>poche</em> ? Parce que l’un des trois « ténors » sur le marché s’appelle <em>Pocket</em>. Comme mon appli n’était destinée qu’à mon usage personnel au départ, je ne me suis pas torturé bien longtemps.</p>\n<p>Cet été, on a failli changer de nom, quand il y a eu de plus en plus d’utilisateurs. Et puis on s’est dit que poche, c’était pas mal, ça sonnait bien français et puis avec les quelques dizaines d’utilisateurs, on ne gênerait personne.</p>\n<p>C’est sans compter avec les sociétés américaines et leur fâcheuse manie de vouloir envoyer leurs avocats à tout bout de champ. Le 23 janvier, j’ai reçu un email de la part du cabinet d’avocats de Pocket me demandant de changer le nom, le logo, de ne plus utiliser le terme “read-it-later” (« lisez le plus tard ») et de ne plus dire que Pocket n’est pas gratuit (tout est parti d’<a href=\"https://twitter.com/wallabagapp/status/423786365944225792\">un tweet</a> où je qualifie Pocket de « non free » à savoir non libre). Bref, même si je semblais dans mon droit, j’ai quand même pris la décision de changer de nom et Wallabag est né, suite aux <a href=\"http://framadate.org/studs.php?sondage=llcp6ojpyc9pklha\">dizaines de propositions de nom reçues</a>. C’est un mélange entre le wallaby (de la famille des kangourous, qui stockent dans leur poche ce qui leur est cher) et <em>bag</em> (les termes sac / sacoche / besace sont énormément revenus). Mais maintenant, on va de l’avant, plus de temps à perdre avec ça, on a du pain sur la planche.<br /><img src=\"http://www.framablog.org/public/_img/framablog/wallaby_baby.jpg\" alt=\"wallaby avec bébé dans sa poche\" class=\"c1\" title=\"wallaby avec bébé dans sa poche\" /> crédit photo <a href=\"http://www.flickr.com/photos/26782864@N00/5027202234/in/photolist-8EeJ5A-h1TL6v-NEL81-cnNkSo-9YM1tv-7Kcg6b-8zpAoa-a1ZLMN-9YM39r-7h5SAD-8EeHfL-8EeFwu-dtVwnM-8uoME1-JEzXe-Gq4qy-92VJPR-Cxe1v-8H3D2J-a1ZFNs-9Y72K6-8EeGxL-5L53Fx-5NkENs-5U8CTY-5Nkssh-nkavF-9CrgwP-7sdCAa-duf2Kh-hZepzy-hZdU1e-hZeofF-hZekDg-hZegAY-hZeMZn-jaHgAf-8P87D2-5NgqRv-aT48QB-hZdV4Y-hZeC64-ERgps-5VYGGd-5VYJB1-5NkrFk-6Jxh7h-7h9PuQ-ERfMx-h1U1ih-h1USBx\">William Warby</a> qui autorise explicitement toute réutilisation.</p>\n<p><em>Bon, alors explique-moi ce que je vais pouvoir faire avec Framabag…<br /></em></p>\n<p>Alors Framabag, ça te permet de te créer un compte gratuitement et librement pour pouvoir utiliser Wallabag. Seule ton adresse email est nécessaire, on se charge d’installer et de mettre à jour Wallabag pour toi. Tu peux d’ailleurs profiter <a href=\"http://www.framasoft.net/#topPgCloud\">d’autres services proposés par Framasoft ici</a>.</p>\n<p>À ce jour, il y a 834 comptes créés sur Framabag.</p>\n<p><em>Vous avez vraiment conçu ce service afin qu’on puisse l’utiliser avec un maximum d’outils, non ?<br /></em></p>\n<p>Autour de l’application web, il existe déjà des applications pour smartphones (Android et Windows Phone), des extensions Firefox et Google Chrome.</p>\n<p>Comme Wallabag possède des flux RSS, c’est facile de lire les articles sauvegardés sur sa liseuse (si celle-ci permet de lire des flux RSS). Calibre (« logiciel de lecture, de gestion de bibliothèques et de conversion de fichiers numériques de type ebook ou livre électronique »,nous dit ubuntu-fr.org) intègre depuis quelques semaines maintenant la possibilité de récupérer les articles non lus, pratique pour faire un fichier ePub !</p>\n<p>D’autres applications web permettent l’intégration avec Wallabag (FreshRSS, Leed et Tiny Tiny RSS pour les agrégateurs de flux). L’API qui sera disponible dans la prochaine version de Wallabag permettra encore plus d’interactivité.</p>\n<p><em>Y a-t-il un mode de lecture hors ligne ou est-ce que c’est prévu pour les prochaines versions ?<br /></em></p>\n<p>Il y a un pseudo mode hors ligne, disponible avec l’application Android. On peut récupérer (via un flux RSS) les articles non lus que l’on a sauvegardés. Une fois déconnecté, on peut continuer à lire sur son smartphone ou sa tablette les articles. Par contre, il manque des fonctionnalités : quand tu marques un article comme lu, ce n’est pas synchronisé avec la version web de Wallabag. J’espère que je suis presque clair dans mes explications.</p>\n<p>Pour la v2, qui est déjà en cours de développement, où je suis bien aidé par Vincent Jousse, on aura la possibilité d’avoir un vrai mode hors ligne.</p>\n<p><em>Alors si on veut aider / participer / trifouiller le code / vous envoyer des retours, on fait comment ?<br /></em></p>\n<p>On peut aider de plusieurs façons :</p>\n<ul><li>utiliser wallabag et nous remonter les problèmes rencontrés ;</li>\n<li>participer au développement de l’application https://github.com/wallabag/wallabag Si Silex / Symfony2 / HTML5 / etc. te parlent, n’hésite pas !</li>\n<li>comme tout projet, le gros point noir est le manque de documentation. <a href=\"http://doc.wallabag.org\">Elle est dispo ici</a> mais il manque plein de choses et tout n’est pas à jour ;</li>\n<li>parler de Wallabag autour de vous ;</li>\n<li>il existe <a href=\"https://flattr.com/thing/1265480/poche-a-read-it-later-open-source-system\">un compte Flattr</a>.</li>\n</ul><p><em>Le mot de la fin…?<br /></em></p>\n<p>Merci à Framasoft d’accueillir et de soutenir Wallabag !</p>\n<p>La route est encore bien longue pour ne plus utiliser de solutions propriétaires, mais on devrait y arriver, non ?</p>\n<p><img src=\"http://www.framablog.org/public/_img/framablog/pleinLesPoches.png\" alt=\"framasoft plein les poches\" class=\"c1\" title=\"framasoft plein les poches\" /><br /><a href=\"http://framalab.org/gknd-creator/\">hackez Gégé !</a></p>\n", | ||
16 | "user_id": "1", | ||
17 | "tags":"Framabag" | ||
18 | }, | ||
19 | { | ||
20 | "0": "2", | ||
21 | "1": "wallabag/wallabag", | ||
22 | "2": "https://github.com/wallabag/wallabag", | ||
23 | "3": "1", | ||
24 | "4": "0", | ||
25 | "5": "<span class=\"name\">README.md</span><p>wallabag is a self hostable application allowing you to not miss any content anymore. Click, save, read it when you can. It extracts content so that you can read it when you have time.</p>\n<p>More informations on our website: <a href=\"http://wallabag.org\">wallabag.org</a></p>\n<h2><a class=\"anchor\" href=\"https://github.com/wallabag/wallabag#license\"></a>License</h2>\n<p>Copyright © 2010-2014 Nicolas Lœuillet <a href=\"mailto:nicolas@loeuillet.org\">nicolas@loeuillet.org</a> This work is free. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2, as published by Sam Hocevar. See the COPYING file for more details.</p>\n", | ||
26 | "6": "1", | ||
27 | "id": "2", | ||
28 | "title": "wallabag/wallabag", | ||
29 | "url": "https://github.com/wallabag/wallabag", | ||
30 | "is_read": "1", | ||
31 | "is_fav": "0", | ||
32 | "content": "<span class=\"name\">README.md</span><p>wallabag is a self hostable application allowing you to not miss any content anymore. Click, save, read it when you can. It extracts content so that you can read it when you have time.</p>\n<p>More informations on our website: <a href=\"http://wallabag.org\">wallabag.org</a></p>\n<h2><a class=\"anchor\" href=\"https://github.com/wallabag/wallabag#license\"></a>License</h2>\n<p>Copyright © 2010-2014 Nicolas Lœuillet <a href=\"mailto:nicolas@loeuillet.org\">nicolas@loeuillet.org</a> This work is free. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2, as published by Sam Hocevar. See the COPYING file for more details.</p>\n", | ||
33 | "user_id": "1", | ||
34 | "tags":"" | ||
35 | }, | ||
36 | { | ||
37 | "0": "3", | ||
38 | "1": "a self hostable application for saving web pages | wallabag", | ||
39 | "2": "https://www.wallabag.org/", | ||
40 | "3": "1", | ||
41 | "4": "0", | ||
42 | "5": "\n<div class=\"row\">\n<div class=\"col-lg-8 col-md-12 col-xs-12 col-sm-12\">\n<p>wallabag (formerly poche) is a <strong>self hostable application for saving web pages</strong>. Unlike other services, wallabag is free (as in freedom) and open source.</p>\n</div>\n\n</div>\n<div class=\"row\">\n<div class=\"col-lg-8 col-md-12 col-xs-12 col-sm-12\">\n<p>With this application you will not miss content anymore. <strong>Click, save, read it when you want</strong>. It saves the content you select so that you can read it when you have time.</p>\n</div>\n\n</div>\n<div class=\"row\">\n<div class=\"col-lg-6 col-md-12 col-xs-12 col-sm-12\">\n<h2>How it works</h2>\n<p>Thanks to the bookmarklet or <a title=\"Downloads\" href=\"http://www.wallabag.org/downloads/\">third-party applications</a>, you save an article in your wallabag to read it later. Then, when you open your wallabag, <strong>you can comfortably read your articles</strong>.</p>\n<h2>How to use wallabag</h2>\n<p>There are two ways to use wallabag: you can <a href=\"http://www.wallabag.org/frequently-asked-questions/#How_can_I_install_wallabag_and_what_are_the_requirements\">install it</a> on your web server or you can <a href=\"http://app.inthepoche.com\">create an account</a> at Framabag (we install and upgrade wallabag for you).</p>\n</div>\n\n</div>\n", | ||
43 | "6": "1", | ||
44 | "id": "3", | ||
45 | "title": "a self hostable application for saving web pages | wallabag", | ||
46 | "url": "https://www.wallabag.org/", | ||
47 | "is_read": "1", | ||
48 | "is_fav": "0", | ||
49 | "content": "\n<div class=\"row\">\n<div class=\"col-lg-8 col-md-12 col-xs-12 col-sm-12\">\n<p>wallabag (formerly poche) is a <strong>self hostable application for saving web pages</strong>. Unlike other services, wallabag is free (as in freedom) and open source.</p>\n</div>\n\n</div>\n<div class=\"row\">\n<div class=\"col-lg-8 col-md-12 col-xs-12 col-sm-12\">\n<p>With this application you will not miss content anymore. <strong>Click, save, read it when you want</strong>. It saves the content you select so that you can read it when you have time.</p>\n</div>\n\n</div>\n<div class=\"row\">\n<div class=\"col-lg-6 col-md-12 col-xs-12 col-sm-12\">\n<h2>How it works</h2>\n<p>Thanks to the bookmarklet or <a title=\"Downloads\" href=\"http://www.wallabag.org/downloads/\">third-party applications</a>, you save an article in your wallabag to read it later. Then, when you open your wallabag, <strong>you can comfortably read your articles</strong>.</p>\n<h2>How to use wallabag</h2>\n<p>There are two ways to use wallabag: you can <a href=\"http://www.wallabag.org/frequently-asked-questions/#How_can_I_install_wallabag_and_what_are_the_requirements\">install it</a> on your web server or you can <a href=\"http://app.inthepoche.com\">create an account</a> at Framabag (we install and upgrade wallabag for you).</p>\n</div>\n\n</div>\n", | ||
50 | "user_id": "1" | ||
51 | }, | ||
52 | { | ||
53 | "0": "4", | ||
54 | "1": "Sans titre", | ||
55 | "2": "http:\/\/www.konradlischka.info\/2016\/01\/blog\/wie-ein-deutsches-start-up-mit-wagniskapital-die-marktluecke-fuer-lokalen-digitaljournalismus-schliessen-will\/", | ||
56 | "3": "0", | ||
57 | "4": "0", | ||
58 | "5": "[unable to retrieve full-text content]", | ||
59 | "6": "1", | ||
60 | "id": "4", | ||
61 | "title": "Sans titre", | ||
62 | "url": "http:\/\/www.konradlischka.info\/2016\/01\/blog\/wie-ein-deutsches-start-up-mit-wagniskapital-die-marktluecke-fuer-lokalen-digitaljournalismus-schliessen-will\/", | ||
63 | "is_read": "0", | ||
64 | "is_fav": "0", | ||
65 | "content": "[unable to retrieve full-text content]", | ||
66 | "user_id": "1", | ||
67 | "tags": "" | ||
68 | } | ||
69 | ] | ||
diff --git a/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json new file mode 100644 index 00000000..3fa0bddf --- /dev/null +++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json | |||
@@ -0,0 +1,28 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": 4668, | ||
4 | "title": "Wikimedia Foundation removes The Diary of Anne Frank due to copyright law requirements « Wikimedia blog", | ||
5 | "url": "https://blog.wikimedia.org/2016/02/10/anne-frank-diary-removal/", | ||
6 | "is_archived": true, | ||
7 | "is_starred": false, | ||
8 | "content": "<p><a href=\"https://commons.wikimedia.org/wiki/File:AnneFrankSchoolPhoto.jpg\" rel=\"attachment wp-att-45105\"><img class=\"alignnone size-full wp-image-45105\" src=\"https://wikimediablog.files.wordpress.com/2016/02/annefrankschoolphoto.jpg?w=316&h=520\" alt=\"AnneFrankSchoolPhoto\" width=\"316\" height=\"520\"/></a><br/><small><i>Anne Frank in 1940. <a href=\"https://commons.wikimedia.org/wiki/File:AnneFrankSchoolPhoto.jpg\">Photo</a> by Collectie Anne Frank Stichting Amsterdam, public domain.</i></small></p>\n<p>Today, in an unfortunate example of the overreach of the United States’ current copyright law, the Wikimedia Foundation removed the Dutch-language text of <a href=\"https://en.wikipedia.org/wiki/The_Diary_of_a_Young_Girl\"><em>The Diary of a Young Girl</em></a>—more commonly known in English as the <em>Diary of Anne Frank—</em>from Wikisource.<sup id=\"one\"><a href=\"https://blog.wikimedia.org/2016/02/10/anne-frank-diary-removal/#cite1\">[1]</a></sup></p>\n<p>We took this action to comply with the United States’ <a href=\"https://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\">Digital Millennium Copyright Act</a> (DMCA), as we believe the diary is still under US copyright protection under the law as it is currently written. Nevertheless, our removal serves as an excellent example of why the law should be changed to prevent repeated extensions of copyright terms, an issue that has plagued our communities <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Wikipedia_Signpost/2014-02-26/News_and_notes\">for years</a>.</p>\n<h3>What prompted us to remove the diary?</h3>\n<p>The deletion was required because the Foundation is under the jurisdiction of US law and is therefore subject to the DMCA, specifically <a href=\"https://www.law.cornell.edu/uscode/text/17/512\" target=\"_blank\">title 17, chapter 5, section 512 of the United States Code</a>. As we <a href=\"https://meta.wikimedia.org/wiki/Legal/URAA_Statement\" target=\"_blank\">noted</a> in 2013, “The location of the servers, incorporation, and headquarters are just three of many factors that establish US jurisdiction … if infringing content is linked to or embedded in Wikimedia projects, then the Foundation may still be subject to liability for such use—either as a direct or contributory infringer.</p>\n<p>Based on email discussions sent to the Wikimedia Foundation at legal[at]wikimedia.org, we determined that the Wikimedia Foundation had either “actual knowledge” (i in the statute quoted below) or what is commonly called “red flag knowledge” (ii in the statute quoted below) that the Anne Frank text was hosted on Wikisource and was under copyright. The statute section states that a service provider is only protected by the DMCA when it:</p>\n<p><strong>(i) </strong>does not have actual knowledge that the material or an activity using the material on the system or network is infringing;</p>\n<p><strong>(ii) </strong>in the absence of such actual knowledge, is not aware of facts or circumstances from which infringing activity is apparent; or</p>\n<p>(The rest applies when we get a proper DMCA takedown notice.)</p>\n<p>Of particular concern, the US’ <a href=\"https://en.wikipedia.org/wiki/United_States_Court_of_Appeals_for_the_Ninth_Circuit\">9th Circuit Court of Appeals</a> stated in their ruling for <a href=\"http://law.justia.com/cases/federal/appellate-courts/ca9/09-55902/09-55902-2013-03-14.html\"><em>UMG Recordings, Inc. v. Shelter Capital Partners LLC</em></a> that in circumstances where a hosting provider (like the Wikimedia Foundation) is informed by a third party (like an unrelated user) about infringing copyrighted content, that would likely constitute either actual or red flag knowledge under the DMCA.</p>\n<p>We believe, based on the detail and specificity contained in the emails, that we received that we had actual knowledge sufficient for the DMCA to require us to perform a takedown even in the absence of a demand letter.</p>\n<h3>How is the diary still copyrighted?</h3>\n<p>You may wonder why or how the Anne Frank text is copyrighted at all, as <a href=\"https://en.wikipedia.org/wiki/Anne_Frank\">Anne Frank</a> died in February 1945. With 70 years having passed since her death, the text may have passed into public domain in the Netherlands on January 1, 2016, where it was first published, although <a href=\"http://www.npr.org/sections/thetwo-way/2015/12/31/461606275/mein-kampf-enters-public-domain-arguably-anne-franks-diary-may-too\">there is still some dispute about this</a>.</p>\n<p>However, in the United States, the Anne Frank original text will be under copyright until 2042. This is the result of several factors coming together, and the English-language Wikipedia has actually covered this issue with a multi-part test on its <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Non-U.S._copyrights\">non-US copyrights content guideline.</a></p>\n<p>In short, there are three major laws that together make the diary still copyrighted:</p>\n<ol><li>In general, the U.S. copyright for works published before 1978 is 95 years from date of publication. This came about because copyrights in the U.S. were originally for 28 years, with the ability to then extend that for a second 28 years (making a total of 56). Starting with the <a href=\"https://en.wikipedia.org/wiki/Copyright_Act_of_1976\">1976 Copyright Act</a> and extending to several more acts, the renewal became automatic and was extended. Today, the total term of works published before 1978 is 95 years from date of publication.</li>\n<li>Foreign works of countries that are treaty partners to the United States are covered as if they were US works.</li>\n<li>Even if a country was not a treaty partner under copyright law at the time of a publication, the <a href=\"https://en.wikipedia.org/wiki/Uruguay_Round_Agreements_Act\">1994 Uruguay Round Agreements Act</a> (URAA) restored copyright to works that:\n<ul><li>had been published in a foreign country</li>\n<li>were still under copyright in that country in 1996</li>\n<li>and would have had U.S. copyright but for the fact they were published abroad.</li>\n</ul></li>\n</ol>\n<p>Court challenges to the URAA have all failed, with the most notable (<a href=\"https://en.wikipedia.org/wiki/Golan_v._Holder\"><em>Golan v. Holder</em></a>) resulting in a Supreme Court ruling that upheld the URAA.</p>\n<p>What that means for Anne Frank’s diary is unfortunately simple: no matter how it wound up in the United States and regardless of what formal copyright notices they used, the US grants it copyright until the year 2042, or 95 years after its original publication in 1947.</p>\n<p>Under current copyright law, this remains true regardless of its copyright status anywhere else in the world and regardless of whether it may have been in the public domain in the United States in the past.</p>\n<p><a href=\"https://wikimediafoundation.org/wiki/User:Jrogers_(WMF)\"><em>Jacob Rogers</em></a><em>, Legal Counsel*<br/>Wikimedia Foundation</em></p>\n<p><em>*Special thanks to </em><a href=\"https://wikimediafoundation.org/wiki/User:AMangalick_(WMF)\"><em>Anisha Mangalick</em></a><em>, Legal Fellow, for her assistance in this matter.</em></p>\n<p><a href=\"https://blog.wikimedia.org/2016/02/10/anne-frank-diary-removal/#one\">[1]</a> The diary text was originally located at <a href=\"https://nl.wikisource.org/wiki/Het_Achterhuis_(Anne_Frank)\" rel=\"nofollow\">https://nl.wikisource.org/wiki/Het_Achterhuis_(Anne_Frank)</a>.</p>\n<p><em>This article was edited to clarify that it is not just the location of the Wikimedia Foundation’s servers that determine whether we fall in US jurisdiction.</em></p>\n\t\t\t\t\t\t\t\t\t\t\t", | ||
9 | "mimetype": "text/html", | ||
10 | "language": "en", | ||
11 | "reading_time": 4, | ||
12 | "domain_name": "blog.wikimedia.org", | ||
13 | "tags": [] | ||
14 | }, | ||
15 | { | ||
16 | "id": 4667, | ||
17 | "title": "Tails - Tails 2.0.1 is out", | ||
18 | "url": "https://tails.boum.org/news/version_2.0.1/index.en.html", | ||
19 | "is_archived": false, | ||
20 | "is_starred": false, | ||
21 | "content": "<div id=\"pagebody\" readability=\"39\">\n<p>This release fixes <a href=\"https://tails.boum.org/security/Numerous_security_holes_in_2.0/index.en.html\">numerous security issues</a>. All users must upgrade as soon as possible.</p>\n<div class=\"toc\">\n<ol><li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index1h1\">Changes</a></li>\n<li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index2h1\">Known issues</a></li>\n<li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index3h1\">Download or upgrade</a></li>\n<li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index4h1\">What's coming up?</a></li>\n</ol></div>\n<h2>New features</h2>\n<ul><li readability=\"11\">\n<p>Tails now uses the GNOME Shell desktop environment, in its Classic mode. GNOME Shell provides a modern, simple, and actively developed desktop environment. The Classic mode keeps the traditional Applications, Places menu, and windows list. Accessibility and non-Latin input sources are also better integrated.</p>\n<p>To find your way around, <a href=\"https://tails.boum.org/doc/first_steps/introduction_to_gnome_and_the_tails_desktop/index.en.html\">read our introduction to GNOME and the Tails desktop.</a></p>\n<table class=\"img\"><caption>The desktop and Applications menu</caption>\n<tr><td><img alt=\"Tails 2.0 desktop with applications menu unfolded\" class=\"img\" height=\"384\" src=\"https://tails.boum.org/inc/release_notes/2.0/applications_menu.png\" width=\"512\"/></td>\n</tr></table><table class=\"img\"><caption>The activities overview</caption>\n<tr><td><img alt=\"Tails 2.0 activities overview\" class=\"img\" height=\"384\" src=\"https://tails.boum.org/inc/release_notes/2.0/activities_overview.png\" width=\"512\"/></td>\n</tr></table></li>\n</ul><h2>Upgrades and changes</h2>\n<ul><li readability=\"2\">\n<p>Debian 8 upgrades most included software, for example:</p>\n<ul><li>Many core GNOME utilities from 3.4 to 3.14: Files, Disks, Videos, etc.</li>\n<li>LibreOffice from 3.5 to 4.3</li>\n<li>PiTiVi from 0.15 to 0.93</li>\n<li>Git from 1.7.10 to 2.1.4</li>\n<li>Poedit from 1.5.4 to 1.6.10</li>\n<li>Liferea from 1.8.6 to 1.10</li>\n</ul></li>\n<li readability=\"1\">\n<p>Update Tor Browser to 5.5 (based on Firefox 38.6.0 ESR):</p>\n<ul><li>Add Japanese support.</li>\n</ul></li>\n<li readability=\"2\">\n<p>Remove the Windows camouflage which is currently broken in GNOME Shell. We started working on <a href=\"https://labs.riseup.net/code/issues/10830\">adding it back</a> but <a href=\"https://tails.boum.org/news/windows_camouflage_jessie/index.en.html\">your help is needed</a>!</p>\n</li>\n<li readability=\"1\">\n<p>Change to <code>systemd</code> as init system and use it to:</p>\n<ul><li>Sandbox many services using Linux namespaces and make them harder to exploit.</li>\n<li>Make the launching of Tor and the memory wipe on shutdown more robust.</li>\n<li>Sanitize our code base by replacing many custom scripts.</li>\n</ul></li>\n<li readability=\"1\">\n<p>Update most firmware packages which might improve hardware compatibility.</p>\n</li>\n<li readability=\"1\">\n<p>Notify the user if Tails is running from a non-free virtualization software.</p>\n</li>\n<li readability=\"3\">\n<p>Remove Claws Mail, replaced by <a href=\"https://tails.boum.org/doc/anonymous_internet/icedove/index.en.html\">Icedove</a>, a rebranded version of Mozilla Thunderbird.</p>\n</li>\n</ul><h2>Fixed problems</h2>\n<ul><li readability=\"1\">\n<p>HiDPI displays are better supported. (<a href=\"https://labs.riseup.net/code/issues/8659\">#8659</a>)</p>\n</li>\n<li readability=\"3\">\n<p>Remove the option to open a download with an external application in Tor Browser as this is usually impossible due to the AppArmor confinement. (<a href=\"https://labs.riseup.net/code/issues/9285\">#9285</a>)</p>\n</li>\n<li readability=\"1\">\n<p>Close Vidalia before restarting Tor.</p>\n</li>\n<li readability=\"2\">\n<p>Allow Videos to access the DVD drive. (<a href=\"https://labs.riseup.net/code/issues/10455\">#10455</a>, <a href=\"https://labs.riseup.net/code/issues/9990\">#9990</a>)</p>\n</li>\n<li readability=\"1\">\n<p>Allow configuring printers without administration password. (<a href=\"https://labs.riseup.net/code/issues/8443\">#8443</a>)</p>\n</li>\n</ul>\n<p>See the current list of <a href=\"https://tails.boum.org/support/known_issues/index.en.html\">known issues</a>.</p>\n<p>Go to the <a href=\"https://tails.boum.org/download/index.en.html\">download</a> or <a href=\"https://tails.boum.org/doc/first_steps/upgrade/index.en.html\">upgrade</a> page.</p>\n<p>If your Tails does not boot after an automatic upgrade, please <a href=\"https://tails.boum.org/doc/first_steps/upgrade/index.en.html#manual\">upgrade your Tails manually</a>.</p>\n<p>The next Tails release is <a href=\"https://tails.boum.org/contribute/calendar/\">scheduled</a> for March 08.</p>\n<p>Have a look at our <a href=\"https://labs.riseup.net/code/projects/tails/roadmap\">roadmap</a> to see where we are heading to.</p>\n<p>We need your help and there are many ways to <a href=\"https://tails.boum.org/contribute/index.en.html\">contribute to Tails</a> (<a href=\"https://tails.boum.org/contribute/how/donate/index.en.html\">donating</a> is only one of them). Come <a href=\"https://tails.boum.org/contribute/talk/\">talk to us</a>!</p>\n</div><div id=\"footer\" class=\"pagefooter\" role=\"contentinfo\" readability=\"15\">\n<p>Tags: <a href=\"https://tails.boum.org/tags/announce/\" rel=\"tag\">announce</a></p>\n<p>Pages linking to this one: <a href=\"https://tails.boum.org/inc/stable_i386_release_notes/index.en.html\">inc/stable i386 release notes</a> <a href=\"https://tails.boum.org/security/Numerous_security_holes_in_2.0/index.en.html\">security/Numerous security holes in 2.0</a></p>\n<p>Last edited Sat 13 Feb 2016 02:23:58 PM CET </p>\n</div>", | ||
22 | "mimetype": "text/html", | ||
23 | "language": "en", | ||
24 | "reading_time": 1, | ||
25 | "domain_name": "tails.boum.org", | ||
26 | "tags": [] | ||
27 | } | ||
28 | ] | ||
diff --git a/tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json new file mode 100644 index 00000000..37c59668 --- /dev/null +++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json | |||
@@ -0,0 +1,346 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "23", | ||
4 | "title": "Site d'information français d'actualités indépendant et participatif en ligne | Mediapart", | ||
5 | "url": "https://www.mediapart.fr/", | ||
6 | "is_archived": false, | ||
7 | "is_starred": false, | ||
8 | "content": "<div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/camedia-0\">CAMédia</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/camedia/article/180116/deux-nouvelles-editions-pour-debattre-dans-le-club-sur-la-laicite-et-sur-la-democratie\">Deux nouvelles éditions pour débattre dans le club sur la laïcité et sur la démocratie</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>CAMédia après un échange sur « l'éthique du débat » a lancé deux discussions , l'une sur le thème de la laïcité, l'autre ( encore en cours) sur celui de la démocratie. Nous sommes heureux de pouvoir signaler la création de deux nouvelles éditions participatives sur ces thèmes. Nous vous invitons à les lire et à participer à leurs débats.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/lucile-longre/blog/170116/de-limportance-de-rever-eloge-du-merveilleux\">De l'importance de rêver, éloge du merveilleux</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>Je parlerai ici des rêves comme moteur de vie, de ces rêves qui vous rattachent et vous font espérer à ce qu’il y a de plus humain dans l’homme, même au milieu de la plus noire des détresses.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/barbara-romagnan/blog/180116/fins-dune-toute-puissance\">Fin(s) d'une toute-puissance</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>En ce début d’année, je recommande la lecture du dernier ouvrage de Guillaume Duval, La France ne sera jamais plus une grande puissance ? Tant mieux !</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-thibaudat/blog/170116/l-allier-departement-de-destruction-massive-du-tissu-culturel\">L’Allier, département de destruction massive du tissu culturel</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les temps sont durs pour les petites structures, les associations culturelles qui, de bourgades en villages, travaillent au cœur des régions. Leurs subventions sont souvent revues à la baisse. Le département de l’Allier les a carrément supprimées. Pour favoriser « l’événementiel ».</p>\n</div><div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart\">Les invités de Mediapart</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart/article/180116/la-democratie-deja-attaquee-par-la-cooperation-reglementaire-transatlantiqu\">La démocratie déjà attaquée par la coopération réglementaire transatlantique</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Lora Verheecke et David Lundy travaillent pour Corporate Europe Observatory, une ONG basée à Bruxelles qui enquête sur le pouvoir des lobbies des grandes entreprises sur la politique de l’Union européenne. Ils révèlent que depuis 25 ans le projet de « coopération réglementaire » mené par l’Union européenne et les États-Unis a été dominé par les grandes entreprises. ET que le TTIP cherche à entériner ce projet.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jacqueline-derens/blog/180116/2016-une-annee-test-pour-jacob-zuma-et-son-gouvernement\">2016, une année test pour Jacob Zuma et son gouvernement</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les turbulences de l’an passé ont toutes les chances de continuer à troubler le climat politique et social de l’Afrique du Sud en 2016. La situation exige des changements profonds dans la conduite des affaires du pays. Jacob Zuma tout en admettant la nécessité de ces changements, est-il l’homme de la situation ? Son gouvernement répondra-t-il aux attentes des citoyens sud-africains ?</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/marie-cosnay/blog/140116/un-mal-fou-janvier-2016\">Un mal fou (janvier 2016)</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>J’ai une fringale d’aventure, d’aventures à venir. J’ai la fringale de la fringale des aventures et soudain, rupture. Je n’y arrive plus, tout est bloqué, tout empêché. Faut dire que depuis un an environ, tout est devenu plus compliqué. Ecrire va de moins en moins de soi.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-veran/blog/170116/redoublement-le-changement-bas-bruit\">Redoublement : le changement à bas bruit ?</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>S’il est une caractéristique de la forme scolaire française bien établie dans la culture des personnels, des élèves et des parents, c’est bien le redoublement, censé sanctionner des résultats insuffisants pour envisager le passage dans la classe supérieure. Or, en ce domaine, l’évolution est nette.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/michel-de-pracontal/blog/160116/samedi-sciences-196-des-chasseurs-de-mammouths-en-arctique-il-y-45-000-ans\">Samedi-sciences (196): des chasseurs de mammouths en Arctique il y a 45 000 ans</a></h3>\n<p>16 janv. 2016 | Par <a href=\"https://blogs.mediapart.fr/michel-de-pracontal\" class=\"journalist\">Michel de Pracontal</a></p>\n<p>Les restes d’un mammouth retrouvés en Arctique sibérien, datés de 45 000 ans, portent les traces de blessures infligées par des chasseurs humains. Les scientifiques pensaient jusqu’ici que notre espèce ne s’était pas aventurée dans cette région glaciale il y a plus de 30 000 ou 35 0000 ans. En réalité, des hommes ont réussi à survivre en Arctique au moins 10 000 ans plus tôt que l’on croyait.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/alain-zolty/blog/140116/de-la-democratie-du-citoyen-et-de-lethique\">De la démocratie, du citoyen et de l'éthique</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>Trois ouvrages sont parus au Seuil, qui font état de la nécessité d’intégrer le citoyen dans la gouvernance de la nation. Non pas à titre consultatif mais doté d’un pouvoir délibératif pour constituer une contre-force face aux clans politico-financiers qui dominent la vie publique.</p>\n</div>", | ||
9 | "mimetype": "text/html", | ||
10 | "language": "fr", | ||
11 | "reading_time": 3, | ||
12 | "domain_name": "www.mediapart.fr", | ||
13 | "preview_picture": "https://www.mediapart.fr/images/social/800/mediapart.png", | ||
14 | "tags": [ | ||
15 | "mediapart", | ||
16 | "blog" | ||
17 | ] | ||
18 | }, | ||
19 | { | ||
20 | "id": 22, | ||
21 | "title": "Réfugiés: l'UE va créer 100 000 places d'accueil dans les Balkans", | ||
22 | "url": "http://www.liberation.fr/planete/2015/10/26/refugies-l-ue-va-creer-100-000-places-d-accueil-dans-les-balkans_1408867", | ||
23 | "is_archived": false, | ||
24 | "is_starred": false, | ||
25 | "content": "<p>Pour un sommet sur les réfugiés qui devait se concentrer sur des <em>«mesures opérationnelles immédiates»</em> dans les Balkans, la réunion, dimanche à Bruxelles, de 11 chefs d’Etat et de gouvernement, dont 8 Européens, a été agitée. Dès leur arrivée, Viktor Orbán (Hongrie) et Aléxis Tsípras (Grèce) se sont jeté des anathèmes. Le Premier ministre grec a dénoncé l’attitude <em>«not in my backyard»</em> (pas de ça chez moi) de certains Etats européens, alors que son pays est montré du doigt par d’autres dirigeants, dont Orbán : ils reprochent à la Grèce de ne pas suffisamment contrôler ses frontières avec la Turquie et ne pas montrer assez de zèle dans l’enregistrement des demandeurs d’asile.</p>\n<p>Le sommet, convoqué par la Commission européenne, sur suggestion de l’Allemagne, aura au moins permis à ces 11 Etats – Autriche, Bulgarie, Croatie, Allemagne, Grèce, Hongrie, Roumanie, Slovénie côté européen, et 3 pays «non UE», Albanie, Macédoine et Serbie – de discuter ensemble.</p>\n<h3>400 policiers européens en Slovénie</h3>\n<p>L’objectif, rappelé par Angela Merkel, était de trouver une <em>«réponse coordonnée»</em> à la crise des réfugiés. Quelques mesures ont été annoncées : 100 000 places d’accueil seront créées, dont 50 000 en Grèce, et le reste le long de la route des Balkans. 400 officiers de police de pays européens partiront en Slovénie, actuellement submergée, pour aider au contrôle des frontières. Frontex, l’agence européenne de surveillance des frontières, s’impliquera aux frontières gréco-macédonienne et gréco-albanaise pour des contrôles et identifications.</p>\n<p>Ce sommet est intervenu dans un contexte de fortes tensions, marqué par des fermetures de frontières bloquant les réfugiés dans des zones tampon. Ces obstacles ont été partiellement levés ces derniers jours, les autorités tentant d’organiser un «corridor» informel vers l’Allemagne, qui pourtant durcit sa politique d’accueil et souhaite désormais ralentir le flux. Mais la situation des réfugiés est catastrophique. L’ONG Human Rights Watch craint que des réfugiés ne meurent dans les Balkans. Des groupes de centaines, voire de milliers de personnes, bloqués près des postes-frontières, se retrouvent dans des conditions humanitaires intenables.</p>\n<p>Depuis mi-septembre, 250 000 personnes ont traversé les Balkans. En une semaine, la Slovénie a vu 60 000 réfugiés fouler le sol de son territoire. Dimanche, 15 000 personnes ont transité en Slovénie.</p>\n<h3>Des zones tampon</h3>\n<p>L’enjeu principal du sommet, aux yeux de nombreux Etats de l’Union européenne, était aussi que les pays des Balkans <em>«prennent leur part»</em> face à la crise : qu’ils accueillent et enregistrent davantage de réfugiés. Ces Etats craignent que l’Autriche ou l’Allemagne ne ferment leurs frontières et fassent de leurs pays des <em>«zones tampon»</em>, comme s’en inquiétait Boyko Borissov, Premier ministre bulgare.</p>\n<p><em>« Aujourd’hui, plusieurs Etats du nord de l’Europe veulent que l’on enregistre les migrants puis que l’on détermine leur éligibilité au statut de réfugié,</em> explique Marc Pierini, du think tank Carnegie Europe. <em>La difficulté, c’est que les gens sont en mouvement. Pour le faire, il faut se poser quelque part. La crainte des pays intermédiaires, donc ceux des Balkans, est qu’on enregistre ces personnes sur leur territoire et qu’ils soient contraints de rester sur leur sol. Donc les pays des Balkans ne sont pas désireux d’accueillir ces réfugiés et ces derniers veulent avancer.»</em></p>\n<p>Le sommet a élaboré quelques principes. L’idée générale est de rendre effective la «logique de hotspot» : un enregistrement des demandeurs d’asile à leur point d’entrée dans l’Union européenne, suivi de l’expulsion de ceux qui ne correspondraient pas aux critères de la Convention de Genève, et la répartition des autres, via le mécanisme de relocalisation.</p>\n<p>Dans ce cadre, l’enregistrement des demandeurs d’asile est un élément clé. <em>«Pas d’enregistrement, pas de droit»</em>, a prévenu le président de la Commission européenne, Jean-Claude Juncker, dimanche soir. Les Etats ont tenu à rappeler que les migrants qui refusent de demander l’asile à la frontière peuvent se voir refuser l’entrée dans un pays.</p>\n<p>Et les Etats <em>«décourageront les mouvements de réfugiés»</em> de frontière en frontière. La politique consistant à laisser passer les migrants vers un autre pays est officiellement jugée <em>«inacceptable»</em>.</p>\n<h3>Se jeter dans la gueule du loup</h3>\n<p>Voilà pour la théorie. En pratique, la relocalisation ne devrait concerner que 160 000 réfugiés en deux ans, alors que près de 700 000 personnes sont arrivées en Europe depuis le début de l’année. De plus, les Etats ne jouent pas le jeu. La semaine passée, seules 854 places de relocalisation avaient été proposées.</p>\n<p>Dans ce contexte, il est probable que les Etats des Balkans ne s’impliqueront pas outre mesure dans les solutions proposées, craignant de devoir «garder» les réfugiés alors que l’Union européenne tarde à mettre en œuvre leur répartition.</p>\n<p>Quant aux réfugiés, ils préfèrent traverser les frontières par eux-mêmes, plutôt que de se jeter dans ces «hotspots», considérés comme la gueule du loup.</p>\n<a itemprop=\"name\" href=\"http://www.liberation.fr/auteur/15743-cedric-vallet\">Cédric Vallet</a>", | ||
26 | "mimetype": "", | ||
27 | "language": "", | ||
28 | "reading_time": 4, | ||
29 | "domain_name": "www.liberation.fr", | ||
30 | "tags": [] | ||
31 | }, | ||
32 | { | ||
33 | "id": "21", | ||
34 | "title": "No title found", | ||
35 | "url": "http://news.nationalgeographic.com/2016/02/160211-albatrosses-mothers-babies-animals-science/&sf20739758=1", | ||
36 | "is_archived": false, | ||
37 | "is_starred": true, | ||
38 | "content": "Oh, what a shame, no content", | ||
39 | "mimetype": "", | ||
40 | "language": "", | ||
41 | "reading_time": 4, | ||
42 | "domain_name": "news.nationalgeographic.com", | ||
43 | "tags": [] | ||
44 | }, | ||
45 | { | ||
46 | "is_archived": 0, | ||
47 | "is_starred": 0, | ||
48 | "id": 612, | ||
49 | "title": "Échecs", | ||
50 | "url": "https://fr.wikipedia.org/wiki/Échecs", | ||
51 | "content": "<div id=\"siteSub\">Un article de Wikipédia, l'encyclopédie libre.</div>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t<div id=\"mw-content-text\" lang=\"fr\" dir=\"ltr\" class=\"mw-content-ltr\"><div class=\"homonymie bandeau-entete-label\"><a href=\"https://fr.wikipedia.org/wiki/Wikipédia:Articles_de_qualité\" title=\"Wikipédia:Articles de qualité\"><img alt=\"Fairytale bookmark gold.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/6/66/Fairytale_bookmark_gold.svg/15px-Fairytale_bookmark_gold.svg.png\" width=\"15\" height=\"15\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/6/66/Fairytale_bookmark_gold.svg/23px-Fairytale_bookmark_gold.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/66/Fairytale_bookmark_gold.svg/30px-Fairytale_bookmark_gold.svg.png 2x\" data-file-width=\"100\" data-file-height=\"100\"/></a> <i>Vous lisez un « <a href=\"https://fr.wikipedia.org/wiki/Wikipédia:Articles_de_qualité\" title=\"Wikipédia:Articles de qualité\">article de qualité</a> ».</i></div>\n<div class=\"homonymie\"><a href=\"https://fr.wikipedia.org/wiki/Aide:Redirection\" title=\"Aide:Redirection\"><img alt=\"Page d'aide sur les redirections\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Disambig_colour.svg/20px-Disambig_colour.svg.png\" width=\"20\" height=\"15\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Disambig_colour.svg/30px-Disambig_colour.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Disambig_colour.svg/40px-Disambig_colour.svg.png 2x\" data-file-width=\"272\" data-file-height=\"200\"/></a> Cet article concerne le jeu appelé « les échecs ». Pour d'autres emplois du mot, voir <a href=\"https://fr.wikipedia.org/wiki/Échec\" title=\"Échec\" class=\"mw-disambig\">échec</a>.</div>\n<div class=\"infobox_v3\">\n<div class=\"entete icon jeu\" style=\"background-color: #F0E0F0;\">\n<div>Jeu d’échecs<br/><a href=\"https://fr.wikipedia.org/wiki/Catégorie:Jeu_de_société\" title=\"Catégorie:Jeu de société\"><span>jeu de société</span></a></div>\n</div>\n<div class=\"images\" style=\"background:#000000; padding:5px 0;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:ChessSet.jpg\" class=\"image\"><img alt=\"Description de l'image ChessSet.jpg.\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/ChessSet.jpg/220px-ChessSet.jpg\" width=\"220\" height=\"204\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/ChessSet.jpg/330px-ChessSet.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6f/ChessSet.jpg/440px-ChessSet.jpg 2x\" data-file-width=\"820\" data-file-height=\"760\"/></a></div>\n<table><tr><th scope=\"row\">Format</th>\n<td>plateau</td>\n</tr><tr><th scope=\"row\">Mécanisme</th>\n<td><a href=\"https://fr.wikipedia.org/wiki/Jeu_de_stratégie_combinatoire_abstrait\" title=\"Jeu de stratégie combinatoire abstrait\">stratégie combinatoire abstrait</a></td>\n</tr><tr><th scope=\"row\">Joueur(s)</th>\n<td>2</td>\n</tr></table><table><caption class=\"hidden\">Données clés</caption>\n<tr class=\"\"><td class=\"data\"><small><a href=\"https://fr.wikipedia.org/wiki/Classification_des_jeux#Habilet.C3.A9_physique\" title=\"Classification des jeux\">habileté<br/>\nphysique</a></small><br/><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/15px-Red_x.svg.png\" width=\"15\" height=\"15\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/23px-Red_x.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/30px-Red_x.svg.png 2x\" data-file-width=\"600\" data-file-height=\"600\"/> Non</td>\n<td class=\"data\"><small><a href=\"https://fr.wikipedia.org/wiki/Classification_des_jeux#Aspect_combinatoire_.28r.C3.A9flexion.2Fraison.29\" title=\"Classification des jeux\"> réflexion<br/>\ndécision</a></small><br/><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/15px-Yes_check.svg.png\" width=\"15\" height=\"15\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/23px-Yes_check.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/30px-Yes_check.svg.png 2x\" data-file-width=\"600\" data-file-height=\"600\"/> Oui</td>\n<td class=\"data\"><small><a href=\"https://fr.wikipedia.org/wiki/Classification_des_jeux#Hasard\" title=\"Classification des jeux\">générateur<br/>\nde hasard</a></small><br/><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/15px-Red_x.svg.png\" width=\"15\" height=\"15\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/23px-Red_x.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/30px-Red_x.svg.png 2x\" data-file-width=\"600\" data-file-height=\"600\"/> Non</td>\n<td class=\"data\"><small><a href=\"https://fr.wikipedia.org/wiki/Classification_des_jeux#Information\" title=\"Classification des jeux\">info. compl.<br/>\net parfaite</a></small><br/><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/15px-Yes_check.svg.png\" width=\"15\" height=\"15\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/23px-Yes_check.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/30px-Yes_check.svg.png 2x\" data-file-width=\"600\" data-file-height=\"600\"/> Oui</td>\n</tr></table>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:SchachWM2008.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/SchachWM2008.jpg/220px-SchachWM2008.jpg\" width=\"220\" height=\"152\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/44/SchachWM2008.jpg/330px-SchachWM2008.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/44/SchachWM2008.jpg/440px-SchachWM2008.jpg 2x\" data-file-width=\"2314\" data-file-height=\"1597\"/></a>\n<div class=\"thumbcaption\">\n\n<a href=\"https://fr.wikipedia.org/wiki/Viswanathan_Anand\" title=\"Viswanathan Anand\">Anand</a> - <a href=\"https://fr.wikipedia.org/wiki/Vladimir_Kramnik\" title=\"Vladimir Kramnik\">Kramnik</a>, <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs\" title=\"Championnat du monde d'échecs\">championnat du monde</a> en <a href=\"https://fr.wikipedia.org/wiki/2008\" title=\"2008\">2008</a>.</div>\n</div>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Maksimenko_in_simultaneous_exhibition.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Maksimenko_in_simultaneous_exhibition.jpg/220px-Maksimenko_in_simultaneous_exhibition.jpg\" width=\"220\" height=\"165\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Maksimenko_in_simultaneous_exhibition.jpg/330px-Maksimenko_in_simultaneous_exhibition.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Maksimenko_in_simultaneous_exhibition.jpg/440px-Maksimenko_in_simultaneous_exhibition.jpg 2x\" data-file-width=\"1024\" data-file-height=\"768\"/></a>\n<div class=\"thumbcaption\">\n\nUne <a href=\"https://fr.wikipedia.org/wiki/Partie_simultanée\" title=\"Partie simultanée\">partie simultanée</a>.</div>\n</div>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:O_Rei-enxadrista.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/ef/O_Rei-enxadrista.jpg/220px-O_Rei-enxadrista.jpg\" width=\"220\" height=\"165\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/ef/O_Rei-enxadrista.jpg/330px-O_Rei-enxadrista.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ef/O_Rei-enxadrista.jpg/440px-O_Rei-enxadrista.jpg 2x\" data-file-width=\"800\" data-file-height=\"600\"/></a>\n<div class=\"thumbcaption\">\n\nEnluminure, Liber de Moribus, vers <a href=\"https://fr.wikipedia.org/wiki/1300\" title=\"1300\">1300</a>.</div>\n</div>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Joueurs_d%27échecs_à_Lugano.JPG\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Joueurs_d%27échecs_à_Lugano.JPG/220px-Joueurs_d%27échecs_à_Lugano.JPG\" width=\"220\" height=\"181\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/89/Joueurs_d%27%C3%A9checs_%C3%A0_Lugano.JPG/330px-Joueurs_d%27%C3%A9checs_%C3%A0_Lugano.JPG 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/89/Joueurs_d%27%C3%A9checs_%C3%A0_Lugano.JPG/440px-Joueurs_d%27%C3%A9checs_%C3%A0_Lugano.JPG 2x\" data-file-width=\"2435\" data-file-height=\"2000\"/></a>\n<div class=\"thumbcaption\">\n\nJoueurs sur un échiquier géant</div>\n</div>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Table_échiquier_-_134.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Table_échiquier_-_134.jpg/220px-Table_échiquier_-_134.jpg\" width=\"220\" height=\"147\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Table_%C3%A9chiquier_-_134.jpg/330px-Table_%C3%A9chiquier_-_134.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Table_%C3%A9chiquier_-_134.jpg/440px-Table_%C3%A9chiquier_-_134.jpg 2x\" data-file-width=\"4387\" data-file-height=\"2925\"/></a>\n<div class=\"thumbcaption\">\n\nTable échiquier au parc de la Tête d'Or à Lyon, France.</div>\n</div>\n</div>\n<p>Le <b>jeu d’échecs</b> (prononcer [<a href=\"https://fr.wikipedia.org/wiki/API_e\" title=\"API e\" class=\"mw-redirect\">e</a><a href=\"https://fr.wikipedia.org/wiki/API_ʃ\" title=\"API ʃ\" class=\"mw-redirect\">ʃ</a><a href=\"https://fr.wikipedia.org/wiki/API_ɛ\" title=\"API ɛ\" class=\"mw-redirect\">ɛ</a><a href=\"https://fr.wikipedia.org/wiki/API_k\" title=\"API k\" class=\"mw-redirect\">k</a>]) oppose deux joueurs de part et d’autre d’un plateau ou <a href=\"https://fr.wikipedia.org/wiki/Tablier_(jeu)\" title=\"Tablier (jeu)\">tablier</a> appelé <i><a href=\"https://fr.wikipedia.org/wiki/Échiquier\" title=\"Échiquier\">échiquier</a></i> composé de soixante-quatre cases claires et sombres nommées les cases blanches et les cases noires. Les joueurs jouent à tour de rôle en déplaçant l'une de leurs seize pièces (ou deux pièces en cas de <a href=\"https://fr.wikipedia.org/wiki/Roque_(échecs)\" title=\"Roque (échecs)\">roque</a>), claires pour le camp des blancs, sombres pour le camp des noirs. Chaque joueur possède au départ un <a href=\"https://fr.wikipedia.org/wiki/Roi_(échecs)\" title=\"Roi (échecs)\">roi</a>, une <a href=\"https://fr.wikipedia.org/wiki/Dame_(échecs)\" title=\"Dame (échecs)\">dame</a>, deux <a href=\"https://fr.wikipedia.org/wiki/Tour_(échecs)\" title=\"Tour (échecs)\">tours</a>, deux <a href=\"https://fr.wikipedia.org/wiki/Fou_(échecs)\" title=\"Fou (échecs)\">fous</a>, deux <a href=\"https://fr.wikipedia.org/wiki/Cavalier_(échecs)\" title=\"Cavalier (échecs)\">cavaliers</a> et huit <a href=\"https://fr.wikipedia.org/wiki/Pion_(échecs)\" title=\"Pion (échecs)\">pions</a>. Le but du jeu est d'infliger à son adversaire un <a href=\"https://fr.wikipedia.org/wiki/Échec_et_mat\" title=\"Échec et mat\">échec et mat</a>, une situation dans laquelle le roi d'un joueur est en prise sans qu'il soit possible d'y remédier.</p>\n<p>Le jeu a été introduit dans le Sud de l'<a href=\"https://fr.wikipedia.org/wiki/Europe\" title=\"Europe\">Europe</a> à partir du X<sup>e</sup> siècle par les <a href=\"https://fr.wikipedia.org/wiki/Arabes\" title=\"Arabes\">Arabes</a>, mais on ignore où il fut inventé exactement. Il dérive du shatranj ou <a href=\"https://fr.wikipedia.org/wiki/Chatrang\" title=\"Chatrang\">chatrang</a> qui lui-même est la version <a href=\"https://fr.wikipedia.org/wiki/Perse\" title=\"Perse\">perse</a> du <a href=\"https://fr.wikipedia.org/wiki/Chaturanga\" title=\"Chaturanga\">chaturanga</a> de l'Inde classique. Les <a href=\"https://fr.wikipedia.org/wiki/Règles_du_jeu_d%27échecs\" title=\"Règles du jeu d'échecs\">règles</a> actuelles se fixent à partir de la fin du XV<sup>e</sup> siècle. Le jeu d’échecs est l'un des jeux de réflexion les plus populaires au monde. Il est pratiqué par des millions de gens sous de multiples formes : en famille, entre amis, dans des lieux publics, en club, en tournoi, par correspondance, contre des machines spécialisées, entre ordinateurs, entre programmes, sur Internet, aux niveaux amateur et professionnel. Depuis son introduction en Europe, le jeu d'échecs jouit d'un prestige et d'une aura particulière qui du « jeu des rois » l’a fait devenir peu à peu « le roi des jeux » ou encore « le noble jeu », en référence à sa dimension tactique et à sa notoriété mondiale. Il a très largement inspiré la culture, en particulier la <a href=\"https://fr.wikipedia.org/wiki/Peinture\" title=\"Peinture\">peinture</a>, la <a href=\"https://fr.wikipedia.org/wiki/Littérature\" title=\"Littérature\">littérature</a> et le <a href=\"https://fr.wikipedia.org/wiki/Cinéma\" title=\"Cinéma\">cinéma</a>.</p>\n<p>La compétition aux échecs existe depuis les origines. On en trouve trace à la cour d'<a href=\"https://fr.wikipedia.org/wiki/Haroun_ar-Rachid\" title=\"Haroun ar-Rachid\" class=\"mw-redirect\">Haroun ar-Rachid</a> au VIII<sup>e</sup> siècle. Le <a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Londres_1851\" title=\"Tournoi d'échecs de Londres 1851\">premier tournoi de l'ère moderne</a> a lieu à <a href=\"https://fr.wikipedia.org/wiki/Londres\" title=\"Londres\">Londres</a> en marge de l'<a href=\"https://fr.wikipedia.org/wiki/Exposition_universelle_de_1851\" title=\"Exposition universelle de 1851\">Exposition universelle de 1851</a>. La compétition est régie par la <a href=\"https://fr.wikipedia.org/wiki/Fédération_internationale_des_échecs\" title=\"Fédération internationale des échecs\">Fédération internationale des échecs</a> (FIDE). Parallèlement, l'<a href=\"https://fr.wikipedia.org/wiki/Association_of_Chess_Professionals\" title=\"Association of Chess Professionals\">Association of Chess Professionals</a> défend les intérêts des joueurs professionnels. Le premier <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs\" title=\"Championnat du monde d'échecs\">champion du monde d'échecs</a> est <a href=\"https://fr.wikipedia.org/wiki/Wilhelm_Steinitz\" title=\"Wilhelm Steinitz\">Wilhelm Steinitz</a> en <a href=\"https://fr.wikipedia.org/wiki/1886\" title=\"1886\">1886</a> ; le champion en titre est le Norvégien <a href=\"https://fr.wikipedia.org/wiki/Magnus_Carlsen\" title=\"Magnus Carlsen\">Magnus Carlsen</a> depuis 2013.</p>\n<p>Une théorie du jeu, développée depuis son invention et de façon intensive par les joueurs de premier plan de l'époque moderne, est transmise au travers d'une littérature échiquéenne abondante. La <a href=\"https://fr.wikipedia.org/wiki/Théorie_des_jeux\" title=\"Théorie des jeux\">théorie des jeux</a> (<a href=\"https://fr.wikipedia.org/wiki/Mathématiques\" title=\"Mathématiques\">mathématique</a>) décrit quant à elle les échecs comme un <a href=\"https://fr.wikipedia.org/wiki/Jeu_de_stratégie_combinatoire_abstrait\" title=\"Jeu de stratégie combinatoire abstrait\">jeu de stratégie combinatoire abstrait</a> de <a href=\"https://fr.wikipedia.org/wiki/Classification_des_jeux#Aspect_combinatoire_.28r.C3.A9flexion.2Fraison.29\" title=\"Classification des jeux\">réflexion pure</a>, fini, sans cycle et à <a href=\"https://fr.wikipedia.org/wiki/Classification_des_jeux#Information\" title=\"Classification des jeux\">information complète et parfaite</a>. L'absence de cycle est garantie par les règles de <a href=\"https://fr.wikipedia.org/wiki/Nulle_(échecs)\" title=\"Nulle (échecs)\" class=\"mw-redirect\">nulle</a> : répétition de position, <a href=\"https://fr.wikipedia.org/wiki/Règle_des_cinquante_coups\" title=\"Règle des cinquante coups\" class=\"mw-redirect\">règle des cinquante coups</a> et impossibilité de mater.</p>\n<p>Un des objectifs des premiers informaticiens a été de mettre au point des machines capables de jouer aux échecs. De nos jours, le jeu est profondément influencé par les capacités des programmes joueurs d'échecs, ainsi que par la possibilité de jouer sur Internet. En <a href=\"https://fr.wikipedia.org/wiki/1997\" title=\"1997\">1997</a>, <a href=\"https://fr.wikipedia.org/wiki/Deep_Blue\" title=\"Deep Blue\">Deep Blue</a> devient le premier ordinateur à battre un champion du monde en titre dans un match qui l'oppose à <a href=\"https://fr.wikipedia.org/wiki/Garry_Kasparov\" title=\"Garry Kasparov\">Garry Kasparov</a>.</p>\n<p>La <a href=\"https://fr.wikipedia.org/wiki/Problème_d%27échecs\" title=\"Problème d'échecs\">composition échiquéenne</a>, la forme artistique du jeu, a produit des centaines de milliers de problèmes dans de multiples genres. Cette discipline est également sous l'égide de la FIDE, qui organise des concours spécifiques pour les <a href=\"https://fr.wikipedia.org/wiki/Problémiste\" title=\"Problémiste\">compositeurs de problème</a> et les <i>solutionnistes</i>. Elle édite l'<a href=\"https://fr.wikipedia.org/wiki/Album_FIDE\" title=\"Album FIDE\">Album FIDE</a>, un recueil trisannuel des meilleures compositions.</p>\n<p/>\n\n<p/>\n<h2>Règles du jeu[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=1\" title=\"Modifier la section : Règles du jeu\">modifier le code</a>]</h2>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Règles_du_jeu_d%27échecs\" title=\"Règles du jeu d'échecs\">Règles du jeu d'échecs</a>.</div>\n<h3>Présentation[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=2\" title=\"Modifier la section : Présentation\">modifier le code</a>]</h3>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:ChessStartingPosition.jpg\" class=\"image\"><img alt=\"ChessStartingPosition.jpg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/ChessStartingPosition.jpg/220px-ChessStartingPosition.jpg\" width=\"220\" height=\"146\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/3/30/ChessStartingPosition.jpg/330px-ChessStartingPosition.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/30/ChessStartingPosition.jpg/440px-ChessStartingPosition.jpg 2x\" data-file-width=\"3008\" data-file-height=\"2000\"/></a>\n<div class=\"thumbcaption\">\n\n</div>\n</div>\n</div>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\">\n<div class=\"thumbinner\" style=\"width:246px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:26px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/208px-Chessboard480.svg.png\" width=\"208\" height=\"208\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/312px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/416px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div style=\"position:absolute;z-index:3;top:0px;left:0px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdl45.svg\" class=\"image\" title=\"Tour noire sur case blanche a8\"><img alt=\"Tour noire sur case blanche a8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/26px-Chess_rdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/39px-Chess_rdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/52px-Chess_rdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:26px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndd45.svg\" class=\"image\" title=\"Cavalier noir sur case noire b8\"><img alt=\"Cavalier noir sur case noire b8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/26px-Chess_ndd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/39px-Chess_ndd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/52px-Chess_ndd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdl45.svg\" class=\"image\" title=\"Fou noir sur case blanche c8\"><img alt=\"Fou noir sur case blanche c8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/26px-Chess_bdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/39px-Chess_bdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/52px-Chess_bdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qdd45.svg\" class=\"image\" title=\"Reine noire sur case noire d8\"><img alt=\"Reine noire sur case noire d8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/26px-Chess_qdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/39px-Chess_qdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/52px-Chess_qdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche e8\"><img alt=\"Roi noir sur case blanche e8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/26px-Chess_kdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/39px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/52px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdd45.svg\" class=\"image\" title=\"Fou noir sur case noire f8\"><img alt=\"Fou noir sur case noire f8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/26px-Chess_bdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/39px-Chess_bdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/52px-Chess_bdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndl45.svg\" class=\"image\" title=\"Cavalier noir sur case blanche g8\"><img alt=\"Cavalier noir sur case blanche g8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/26px-Chess_ndl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/39px-Chess_ndl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/52px-Chess_ndl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdd45.svg\" class=\"image\" title=\"Tour noire sur case noire h8\"><img alt=\"Tour noire sur case noire h8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/26px-Chess_rdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/39px-Chess_rdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/52px-Chess_rdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:26px;left:0px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire a7\"><img alt=\"Pion noir sur case noire a7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/26px-Chess_pdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/39px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/52px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:26px;left:26px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche b7\"><img alt=\"Pion noir sur case blanche b7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:26px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire c7\"><img alt=\"Pion noir sur case noire c7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/26px-Chess_pdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/39px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/52px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:26px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche d7\"><img alt=\"Pion noir sur case blanche d7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:26px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire e7\"><img alt=\"Pion noir sur case noire e7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/26px-Chess_pdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/39px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/52px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:26px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche f7\"><img alt=\"Pion noir sur case blanche f7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:26px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire g7\"><img alt=\"Pion noir sur case noire g7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/26px-Chess_pdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/39px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/52px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:26px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche h7\"><img alt=\"Pion noir sur case blanche h7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:52px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:52px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:52px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:52px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:52px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:52px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:52px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:52px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:78px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:78px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:78px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:78px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:78px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:78px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:78px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:78px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:104px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:104px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:104px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:104px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:104px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:104px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:104px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:104px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:130px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:130px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:130px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:130px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:130px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:130px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:130px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:130px;left:182px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:156px;left:0px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche a2\"><img alt=\"Pion blanc sur case blanche a2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/26px-Chess_pll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/39px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/52px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:26px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire b2\"><img alt=\"Pion blanc sur case noire b2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/26px-Chess_pld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/39px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/52px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche c2\"><img alt=\"Pion blanc sur case blanche c2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/26px-Chess_pll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/39px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/52px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire d2\"><img alt=\"Pion blanc sur case noire d2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/26px-Chess_pld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/39px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/52px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche e2\"><img alt=\"Pion blanc sur case blanche e2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/26px-Chess_pll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/39px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/52px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire f2\"><img alt=\"Pion blanc sur case noire f2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/26px-Chess_pld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/39px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/52px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche g2\"><img alt=\"Pion blanc sur case blanche g2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/26px-Chess_pll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/39px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/52px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire h2\"><img alt=\"Pion blanc sur case noire h2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/26px-Chess_pld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/39px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/52px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:0px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rld45.svg\" class=\"image\" title=\"Tour blanche sur case noire a1\"><img alt=\"Tour blanche sur case noire a1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/26px-Chess_rld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/39px-Chess_rld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/52px-Chess_rld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:26px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche b1\"><img alt=\"Cavalier blanc sur case blanche b1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/26px-Chess_nll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/39px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/52px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bld45.svg\" class=\"image\" title=\"Fou blanc sur case noire c1\"><img alt=\"Fou blanc sur case noire c1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/26px-Chess_bld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/39px-Chess_bld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/52px-Chess_bld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qll45.svg\" class=\"image\" title=\"Reine blanche sur case blanche d1\"><img alt=\"Reine blanche sur case blanche d1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/26px-Chess_qll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/39px-Chess_qll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/52px-Chess_qll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kld45.svg\" class=\"image\" title=\"Roi blanc sur case noire e1\"><img alt=\"Roi blanc sur case noire e1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/26px-Chess_kld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/39px-Chess_kld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/52px-Chess_kld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bll45.svg\" class=\"image\" title=\"Fou blanc sur case blanche f1\"><img alt=\"Fou blanc sur case blanche f1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/26px-Chess_bll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/39px-Chess_bll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/52px-Chess_bll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nld45.svg\" class=\"image\" title=\"Cavalier blanc sur case noire g1\"><img alt=\"Cavalier blanc sur case noire g1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/26px-Chess_nld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/39px-Chess_nld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/52px-Chess_nld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rll45.svg\" class=\"image\" title=\"Tour blanche sur case blanche h1\"><img alt=\"Tour blanche sur case blanche h1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/26px-Chess_rll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/39px-Chess_rll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/52px-Chess_rll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:26px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">Position initiale d'une partie d'échecs.</div>\n</div>\n</div>\n<p>Une partie d'échecs commence dans la position initiale ci-contre, les blancs jouent le premier coup puis les joueurs jouent à tour de rôle en déplaçant à chaque fois une de leurs pièces (deux dans le cas d'un roque)<sup id=\"cite_ref-1\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-1\">[G 1]</a></sup>. Chaque pièce se déplace de façon <a href=\"https://fr.wikipedia.org/wiki/Échecs#D.C3.A9placements_des_pi.C3.A8ces\" title=\"Échecs\">spécifique</a>, il n'est pas possible de jouer sur une case occupée par une pièce de son propre camp. Lorsqu'une pièce adverse se trouve sur la case d'arrivée de la pièce jouée, elle est capturée et retirée de l'échiquier. Gagner du <i>matériel</i> (des pièces) est un moyen pour gagner la partie, mais ne suffit pas toujours pour y parvenir.</p>\n<p>Il existe des règles spéciales lors du déplacement de certaines pièces : le <a href=\"https://fr.wikipedia.org/wiki/Roque_(échecs)\" title=\"Roque (échecs)\">roque</a>, qui permet le déplacement simultané du roi et de l'une des tours ; la <a href=\"https://fr.wikipedia.org/wiki/En_passant_(échecs)\" title=\"En passant (échecs)\">prise en passant</a>, qui permet une capture particulière des pions ; et la <a href=\"https://fr.wikipedia.org/wiki/Promotion_(échecs)\" title=\"Promotion (échecs)\">promotion</a> des pions, qui permet de les transformer en une pièce maîtresse de son choix (sauf le roi) lorsqu'ils atteignent la dernière rangée de l'échiquier<sup id=\"cite_ref-2\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-2\">[G 2]</a></sup>.</p>\n<p>Lorsqu'un roi est menacé de capture, on dit qu'il est en <a href=\"https://fr.wikipedia.org/wiki/Échec_(jeu_d%27échecs)\" title=\"Échec (jeu d'échecs)\" class=\"mw-redirect\">échec</a>. Si cette menace est imparable (on peut tenter de parer la menace en déplaçant le roi, en interposant une pièce ou en capturant la pièce attaquante) on dit qu'il y a <a href=\"https://fr.wikipedia.org/wiki/Échec_et_mat\" title=\"Échec et mat\">échec et mat</a> et la partie se termine sur la victoire du joueur qui <i>mate</i>. Il est interdit de mettre son propre roi en échec ou de le faire passer sur une ligne d'échec pendant le roque. Il est également interdit de roquer quand le roi est en échec sur sa case de départ. Si cela arrive (par inadvertance entre débutants) on doit reprendre le coup<sup id=\"cite_ref-3\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-3\">[G 3]</a></sup>.</p>\n<p>Si un camp ne peut plus jouer aucun <a href=\"https://fr.wikipedia.org/wiki/Coup_légal\" title=\"Coup légal\">coup légal</a> (cela arrive par exemple avec un roi seul et l'ensemble de ses pions bloqués) et si son roi n'est pas en échec, on dit alors qu'il s'agit d'une position de <a href=\"https://fr.wikipedia.org/wiki/Pat_(échecs)\" title=\"Pat (échecs)\">pat</a>. Quel que soit le matériel dont le camp adverse dispose, la partie est déclarée nulle, c'est-à-dire sans vainqueur<sup id=\"cite_ref-4\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-4\">[G 4]</a></sup>.</p>\n<p>Le but du jeu est donc d'infliger un <a href=\"https://fr.wikipedia.org/wiki/Échec_et_mat\" title=\"Échec et mat\">échec et mat</a> à son adversaire. Le terme <i>échec et mat</i> vient de <i>sāh māta</i> (en <a href=\"https://fr.wikipedia.org/wiki/Persan\" title=\"Persan\">persan</a>, soit <i>as-sāh māt(a)</i> الشّاهُ ماتَ en <a href=\"https://fr.wikipedia.org/wiki/Arabe\" title=\"Arabe\">arabe</a>), « le roi est mort », pour indiquer la défaite du roi. Le mot <i><a href=\"https://fr.wikipedia.org/wiki/Chah\" title=\"Chah\">sāh</a></i> (« roi » en persan) est à l'origine du mot échec et du nom des échecs dans un grand nombre de langues<sup id=\"cite_ref-5\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-5\">[1]</a></sup>.</p>\n<div style=\"clear:both;\"/>\n<h3>Déplacements des pièces[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=3\" title=\"Modifier la section : Déplacements des pièces\">modifier le code</a>]</h3>\n<p>Chaque pièce peut se déplacer au choix du joueur sur l'une des cases marquées d'une croix. Hormis le pion, elles capturent une pièce adverse qui se trouve sur leur trajectoire, sans pouvoir aller au-delà. À l'exception de la prise en passant, la pièce qui capture prend la place de la pièce capturée, cette dernière étant définitivement retirée de l'échiquier.</p>\n<ul><li>Le fou, la tour et la dame sont des pièces à longue portée (ou pièces de lignes) : elles peuvent se déplacer le long de lignes. Chaque camp possède deux fous : ils se déplacent toujours sur les cases d'une même couleur, en diagonales; chaque camp possède donc un fou de cases blanches, et un fou de cases noires.</li>\n</ul><div class=\"thumb tleft\" style=\"clear:none;text-align:center\">Déplacements du <a href=\"https://fr.wikipedia.org/wiki/Fou_(échecs)\" title=\"Fou (échecs)\">fou</a> de cases blanches\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche a8 vide\"><img alt=\"Case blanche a8 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche g8 vide\"><img alt=\"Case blanche g8 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche b7 vide\"><img alt=\"Case blanche b7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche f7 vide\"><img alt=\"Case blanche f7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche c6 vide\"><img alt=\"Case blanche c6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche e6 vide\"><img alt=\"Case blanche e6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bll45.svg\" class=\"image\" title=\"Fou blanc sur case blanche d5\"><img alt=\"Fou blanc sur case blanche d5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/22px-Chess_bll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/33px-Chess_bll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/44px-Chess_bll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche c4 vide\"><img alt=\"Case blanche c4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche e4 vide\"><img alt=\"Case blanche e4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche b3 vide\"><img alt=\"Case blanche b3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche f3 vide\"><img alt=\"Case blanche f3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche a2 vide\"><img alt=\"Case blanche a2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche g2 vide\"><img alt=\"Case blanche g2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche h1 vide\"><img alt=\"Case blanche h1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\"/>\n</div>\n</div>\n<div class=\"thumb tleft\" style=\"clear:none;text-align:center\">Déplacements de la <a href=\"https://fr.wikipedia.org/wiki/Tour_(échecs)\" title=\"Tour (échecs)\">tour</a>\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d8 vide\"><img alt=\"Case noire d8 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d7 vide\"><img alt=\"Case blanche d7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d6 vide\"><img alt=\"Case noire d6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire a5 vide\"><img alt=\"Case noire a5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche b5 vide\"><img alt=\"Case blanche b5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire c5 vide\"><img alt=\"Case noire c5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rll45.svg\" class=\"image\" title=\"Tour blanche sur case blanche d5\"><img alt=\"Tour blanche sur case blanche d5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/22px-Chess_rll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/33px-Chess_rll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/44px-Chess_rll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire e5 vide\"><img alt=\"Case noire e5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche f5 vide\"><img alt=\"Case blanche f5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire g5 vide\"><img alt=\"Case noire g5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche h5 vide\"><img alt=\"Case blanche h5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d4 vide\"><img alt=\"Case noire d4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d3 vide\"><img alt=\"Case blanche d3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d2 vide\"><img alt=\"Case noire d2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d1 vide\"><img alt=\"Case blanche d1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\"/>\n</div>\n</div>\n<div class=\"thumb tleft\" style=\"clear:none;text-align:center\">Déplacements de la <a href=\"https://fr.wikipedia.org/wiki/Dame_(échecs)\" title=\"Dame (échecs)\">dame</a>\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d8 vide\"><img alt=\"Case noire d8 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire h8 vide\"><img alt=\"Case noire h8 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire a7 vide\"><img alt=\"Case noire a7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d7 vide\"><img alt=\"Case blanche d7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire g7 vide\"><img alt=\"Case noire g7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire b6 vide\"><img alt=\"Case noire b6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d6 vide\"><img alt=\"Case noire d6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire f6 vide\"><img alt=\"Case noire f6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire c5 vide\"><img alt=\"Case noire c5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d5 vide\"><img alt=\"Case blanche d5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire e5 vide\"><img alt=\"Case noire e5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche a4 vide\"><img alt=\"Case blanche a4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire b4 vide\"><img alt=\"Case noire b4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche c4 vide\"><img alt=\"Case blanche c4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qld45.svg\" class=\"image\" title=\"Reine blanche sur case noire d4\"><img alt=\"Reine blanche sur case noire d4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Chess_qld45.svg/22px-Chess_qld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Chess_qld45.svg/33px-Chess_qld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Chess_qld45.svg/44px-Chess_qld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche e4 vide\"><img alt=\"Case blanche e4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire f4 vide\"><img alt=\"Case noire f4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche g4 vide\"><img alt=\"Case blanche g4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire h4 vide\"><img alt=\"Case noire h4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire c3 vide\"><img alt=\"Case noire c3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d3 vide\"><img alt=\"Case blanche d3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire e3 vide\"><img alt=\"Case noire e3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire b2 vide\"><img alt=\"Case noire b2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d2 vide\"><img alt=\"Case noire d2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire f2 vide\"><img alt=\"Case noire f2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire a1 vide\"><img alt=\"Case noire a1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d1 vide\"><img alt=\"Case blanche d1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire g1 vide\"><img alt=\"Case noire g1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\"/>\n</div>\n</div>\n<div style=\"clear:both;\"/>\n<ul><li>Le roi se déplace d'une seule case à la fois, il dispose d'une règle de déplacement spéciale : le <a href=\"https://fr.wikipedia.org/wiki/Échecs#Roque\" title=\"Échecs\">roque</a>.</li>\n<li>Le cavalier ne peut être intercepté par aucune des pièces autour de lui, il <i>saute</i> jusqu'à sa case d'arrivée.</li>\n</ul><div class=\"thumb tleft\" style=\"clear:none;text-align:center\">Déplacements du <a href=\"https://fr.wikipedia.org/wiki/Roi_(échecs)\" title=\"Roi (échecs)\">roi</a>\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d8 vide\"><img alt=\"Case noire d8 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche e8\"><img alt=\"Roi noir sur case blanche e8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/22px-Chess_kdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/33px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/44px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire f8 vide\"><img alt=\"Case noire f8 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d7 vide\"><img alt=\"Case blanche d7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire e7 vide\"><img alt=\"Case noire e7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche f7 vide\"><img alt=\"Case blanche f7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche e4 vide\"><img alt=\"Case blanche e4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire f4 vide\"><img alt=\"Case noire f4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche g4 vide\"><img alt=\"Case blanche g4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire e3 vide\"><img alt=\"Case noire e3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kll45.svg\" class=\"image\" title=\"Roi blanc sur case blanche f3\"><img alt=\"Roi blanc sur case blanche f3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/22px-Chess_kll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/33px-Chess_kll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/44px-Chess_kll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire g3 vide\"><img alt=\"Case noire g3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche e2 vide\"><img alt=\"Case blanche e2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire f2 vide\"><img alt=\"Case noire f2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche g2 vide\"><img alt=\"Case blanche g2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\"/>\n</div>\n</div>\n<div class=\"thumb tleft\" style=\"clear:none;text-align:center\">Déplacements du <a href=\"https://fr.wikipedia.org/wiki/Cavalier_(échecs)\" title=\"Cavalier (échecs)\">cavalier</a>\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndd45.svg\" class=\"image\" title=\"Cavalier noir sur case noire h8\"><img alt=\"Cavalier noir sur case noire h8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/22px-Chess_ndd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/33px-Chess_ndd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/44px-Chess_ndd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche f7 vide\"><img alt=\"Case blanche f7 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche g6 vide\"><img alt=\"Case blanche g6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche b5 vide\"><img alt=\"Case blanche b5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d5 vide\"><img alt=\"Case blanche d5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche a4 vide\"><img alt=\"Case blanche a4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche e4 vide\"><img alt=\"Case blanche e4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nld45.svg\" class=\"image\" title=\"Cavalier blanc sur case noire c3\"><img alt=\"Cavalier blanc sur case noire c3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/22px-Chess_nld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/33px-Chess_nld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/44px-Chess_nld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche a2 vide\"><img alt=\"Case blanche a2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche e2 vide\"><img alt=\"Case blanche e2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche b1 vide\"><img alt=\"Case blanche b1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d1 vide\"><img alt=\"Case blanche d1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\"/>\n</div>\n</div>\n<div class=\"thumb tleft\" style=\"clear:none;text-align:center\">La tour peut capturer la dame\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qdd45.svg\" class=\"image\" title=\"Reine noire sur case noire d6\"><img alt=\"Reine noire sur case noire d6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/22px-Chess_qdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/33px-Chess_qdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/44px-Chess_qdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d5 vide\"><img alt=\"Case blanche d5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d4 vide\"><img alt=\"Case noire d4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche d3 vide\"><img alt=\"Case blanche d3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d2 vide\"><img alt=\"Case noire d2 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire a1 vide\"><img alt=\"Case noire a1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche b1 vide\"><img alt=\"Case blanche b1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire c1 vide\"><img alt=\"Case noire c1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rll45.svg\" class=\"image\" title=\"Tour blanche sur case blanche d1\"><img alt=\"Tour blanche sur case blanche d1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/22px-Chess_rll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/33px-Chess_rll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/44px-Chess_rll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire e1 vide\"><img alt=\"Case noire e1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche f1 vide\"><img alt=\"Case blanche f1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire g1 vide\"><img alt=\"Case noire g1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche h1 vide\"><img alt=\"Case blanche h1 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\"/>\n</div>\n</div>\n<div style=\"clear:both;\"/>\n<ul><li>Le pion peut se déplacer sur les cases marquées d'une croix (sans pouvoir y capturer une pièce adverse), et peut capturer sur les cases marquées d'un rond (sans pouvoir s'y déplacer si elles sont vides).</li>\n</ul><dl><dd>Chacun des pions peut se déplacer de deux cases à la fois lors de son tout premier déplacement (ex. les pions f2 et g7 dans les diagrammes ci-dessous). Par contre, déplacer deux pions d'une case en un seul coup (une légende due à une mauvaise traduction d'un livre allemand<sup id=\"cite_ref-6\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-6\">[2]</a></sup>) est interdit dans la règle officielle du jeu d'échecs. Les pions disposent d'une règle de capture spéciale : la <a href=\"https://fr.wikipedia.org/wiki/Échecs#Prise_en_passant\" title=\"Échecs\">prise en passant</a>.</dd>\n</dl><dl><dd>Les pions ne peuvent jamais reculer, les pions blancs se dirigent vers la huitième rangée, les pions noirs se dirigent vers la première rangée, et sont obligatoirement <a href=\"https://fr.wikipedia.org/wiki/Promotion_(échecs)\" title=\"Promotion (échecs)\">promus</a> dès qu'ils l'atteignent.</dd>\n</dl><div class=\"thumb tleft\" style=\"clear:none;text-align:center\">Déplacements d'un <a href=\"https://fr.wikipedia.org/wiki/Pion_(échecs)\" title=\"Pion (échecs)\">pion</a> blanc\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ood45.svg\" class=\"image\" title=\"Case noire a5 vide\"><img alt=\"Case noire a5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/22px-Chess_ood45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/33px-Chess_ood45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/44px-Chess_ood45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche b5 vide\"><img alt=\"Case blanche b5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ood45.svg\" class=\"image\" title=\"Case noire c5 vide\"><img alt=\"Case noire c5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/22px-Chess_ood45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/33px-Chess_ood45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/44px-Chess_ood45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire b4\"><img alt=\"Pion blanc sur case noire b4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire f4 vide\"><img alt=\"Case noire f4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ood45.svg\" class=\"image\" title=\"Case noire e3 vide\"><img alt=\"Case noire e3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/22px-Chess_ood45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/33px-Chess_ood45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/44px-Chess_ood45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche f3 vide\"><img alt=\"Case blanche f3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ood45.svg\" class=\"image\" title=\"Case noire g3 vide\"><img alt=\"Case noire g3 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/22px-Chess_ood45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/33px-Chess_ood45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/18/Chess_ood45.svg/44px-Chess_ood45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire f2\"><img alt=\"Pion blanc sur case noire f2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\"/>\n</div>\n</div>\n<div class=\"thumb tleft\" style=\"clear:none;text-align:center\">Déplacements d'un pion noir\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire g7\"><img alt=\"Pion noir sur case noire g7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire b6\"><img alt=\"Pion noir sur case noire b6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xod45.svg\" class=\"image\" title=\"Case noire f6 vide\"><img alt=\"Case noire f6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/22px-Chess_xod45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/33px-Chess_xod45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/44px-Chess_xod45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche g6 vide\"><img alt=\"Case blanche g6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xod45.svg\" class=\"image\" title=\"Case noire h6 vide\"><img alt=\"Case noire h6 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/22px-Chess_xod45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/33px-Chess_xod45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/44px-Chess_xod45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xod45.svg\" class=\"image\" title=\"Case noire a5 vide\"><img alt=\"Case noire a5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/22px-Chess_xod45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/33px-Chess_xod45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/44px-Chess_xod45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxl45.svg\" class=\"image\" title=\"Case blanche b5 vide\"><img alt=\"Case blanche b5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/22px-Chess_xxl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/33px-Chess_xxl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Chess_xxl45.svg/44px-Chess_xxl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xod45.svg\" class=\"image\" title=\"Case noire c5 vide\"><img alt=\"Case noire c5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/22px-Chess_xod45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/33px-Chess_xod45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/74/Chess_xod45.svg/44px-Chess_xod45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire g5 vide\"><img alt=\"Case noire g5 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\"/>\n</div>\n</div>\n<div class=\"thumb tleft\" style=\"clear:none;text-align:center\">Le pion peut capturer le cavalier\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche d5\"><img alt=\"Pion noir sur case blanche d5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche c4\"><img alt=\"Cavalier blanc sur case blanche c4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/22px-Chess_nll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/33px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/44px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xxd45.svg\" class=\"image\" title=\"Case noire d4 vide\"><img alt=\"Case noire d4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/22px-Chess_xxd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/33px-Chess_xxd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Chess_xxd45.svg/44px-Chess_xxd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_xol45.svg\" class=\"image\" title=\"Case blanche e4 vide\"><img alt=\"Case blanche e4 vide\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Chess_xol45.svg/22px-Chess_xol45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Chess_xol45.svg/33px-Chess_xol45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Chess_xol45.svg/44px-Chess_xol45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\"/>\n</div>\n</div>\n<div style=\"clear:both;\"/>\n<h3>Règles spéciales[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=4\" title=\"Modifier la section : Règles spéciales\">modifier le code</a>]</h3>\n<h4>Roque[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=5\" title=\"Modifier la section : Roque\">modifier le code</a>]</h4>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Roque_(échecs)\" title=\"Roque (échecs)\">Roque (échecs)</a>.</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:SCD_castle_kingside.png\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/SCD_castle_kingside.png/220px-SCD_castle_kingside.png\" width=\"220\" height=\"141\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/0/04/SCD_castle_kingside.png 1.5x, //upload.wikimedia.org/wikipedia/commons/0/04/SCD_castle_kingside.png 2x\" data-file-width=\"242\" data-file-height=\"155\"/></a>\n<div class=\"thumbcaption\">\n\n<center>Le petit roque, noté 0-0</center>\n</div>\n</div>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:SCD_castle_queenside.png\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/03/SCD_castle_queenside.png/220px-SCD_castle_queenside.png\" width=\"220\" height=\"141\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/0/03/SCD_castle_queenside.png 1.5x, //upload.wikimedia.org/wikipedia/commons/0/03/SCD_castle_queenside.png 2x\" data-file-width=\"242\" data-file-height=\"155\"/></a>\n<div class=\"thumbcaption\">\n\n<center>Le grand roque, noté 0-0-0</center>\n</div>\n</div>\n</div>\n<p>Le roque consiste à déplacer en un seul coup le roi et l'une des tours. Il y a deux façons de roquer :</p>\n<ul><li>avec le roi et la tour de la colonne h, ce déplacement s'appelle le « petit roque » ;</li>\n<li>avec le roi et la tour de la colonne a, ce déplacement s'appelle le « grand roque » car la tour effectue un déplacement plus grand (une case de plus).</li>\n</ul><p>Dans les deux cas, on procède ainsi : on déplace d'abord le roi de deux cases vers la tour puis, avec la même main, on fait passer la tour de l'autre côté, juste à côté du roi (voir le diagramme ci-contre).</p>\n<p>Les conditions suivantes sont nécessaires pour pouvoir roquer :</p>\n<ol><li>aucune pièce ne se trouve entre le roi et la tour concernée ;</li>\n<li>le roi et la tour concernée n'ont encore jamais joué ;</li>\n<li>le roi n'est pas en échec ;</li>\n<li>la case traversée par le roi n'est contrôlée par aucune pièce adverse.</li>\n</ol><p>Remarques :</p>\n<ul><li>La dernière règle s'explique ainsi : le roi joue deux coups en un ; par exemple, dans le petit roque, le Roi va en f1, puis en g1. Donc, conformément aux règles, il ne peut se mettre en échec sur la case intermédiaire f1, ni sur la case g1 (le roi n'a pas le droit de se mettre en échec de lui-même).</li>\n<li>Le roi et la tour ne devant jamais avoir joué, chaque camp ne peut faire qu'un seul roque dans une partie, que ce soit un petit ou un grand roque.</li>\n<li>La tour, par contre, peut être attaquée par une pièce adverse : la case a1 (a8 pour les noirs) lors du grand roque, et h1 (h8 pour les noirs) lors du petit roque peut être contrôlée par une pièce adverse. Lors du grand roque, la case b1 (b8 pour les noirs) peut, elle aussi, être contrôlée par une pièce adverse, puisque le roi n'y va pas.</li>\n</ul><div style=\"clear:both;\"/>\n<h4>Prise en passant[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=6\" title=\"Modifier la section : Prise en passant\">modifier le code</a>]</h4>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Prise_en_passant\" title=\"Prise en passant\" class=\"mw-redirect\">Prise en passant</a>.</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Ajedrez_captura_al_paso_del_peon.png\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Ajedrez_captura_al_paso_del_peon.png/220px-Ajedrez_captura_al_paso_del_peon.png\" width=\"220\" height=\"180\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/a/ae/Ajedrez_captura_al_paso_del_peon.png 1.5x, //upload.wikimedia.org/wikipedia/commons/a/ae/Ajedrez_captura_al_paso_del_peon.png 2x\" data-file-width=\"300\" data-file-height=\"245\"/></a>\n<div class=\"thumbcaption\">\n\n<center>La prise en passant, notée e.p.</center>\n</div>\n</div>\n</div>\n<p>La prise en passant peut intervenir lorsqu'un camp vient de jouer un pion de deux cases (c'est possible lors d'un tout premier déplacement du pion) et, ce faisant, évite la confrontation avec un pion adverse. Dans l'exemple ci-contre, les blancs jouant a2-a4 évitent la rencontre entre le pion blanc a2 et le pion noir b4.</p>\n<p>Toutefois, la règle du déplacement d'un pion de deux cases s'interprète ainsi : le pion joue deux coups en un, tout d'abord un coup d'une case (a2-a3 dans notre exemple), puis un second coup du même pion d'une case (a3-a4). Dans ces conditions le camp adverse peut considérer qu'après le premier coup il est en droit lui-même de capturer le pion déplacé : c'est ce qu'il fait effectivement grâce à la prise en passant, bxa3 dans l'exemple.</p>\n<p>De façon cohérente, le pion capture sur la première case, c'est-à-dire a3 dans notre exemple, et le pion capturé est bien retiré de l'échiquier.</p>\n<p>Remarques :</p>\n<ul><li>La prise en passant n'est pas obligatoire.</li>\n<li>Le camp qui prend en passant doit le faire immédiatement, au coup suivant cette possibilité disparait.</li>\n<li>La prise en passant est notée (de façon optionnelle) en ajoutant <i>e.p.</i> après le coup, exemple : bxa3 e.p.</li>\n</ul><div style=\"clear:both;\"/>\n<h4>Pat[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=7\" title=\"Modifier la section : Pat\">modifier le code</a>]</h4>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Pat_(échecs)\" title=\"Pat (échecs)\">Pat (échecs)</a>.</div>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\">\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche a8\"><img alt=\"Roi noir sur case blanche a8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/22px-Chess_kdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/33px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/44px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdd45.svg\" class=\"image\" title=\"Tour noire sur case noire b8\"><img alt=\"Tour noire sur case noire b8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/22px-Chess_rdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/33px-Chess_rdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/44px-Chess_rdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kll45.svg\" class=\"image\" title=\"Roi blanc sur case blanche a6\"><img alt=\"Roi blanc sur case blanche a6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/22px-Chess_kll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/33px-Chess_kll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/44px-Chess_kll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire a5\"><img alt=\"Pion blanc sur case noire a5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">\n<center>Les blancs au trait sont pat</center>\n</div>\n</div>\n</div>\n<p>Le pat est une situation particulière dans laquelle un camp au <a href=\"https://fr.wikipedia.org/wiki/Trait_(échecs)\" title=\"Trait (échecs)\">trait</a> ne peut jouer aucun coup légal, sans pour autant que son roi soit en échec. La partie se termine immédiatement et elle est déclarée <a href=\"https://fr.wikipedia.org/wiki/Nulle_(échecs)\" title=\"Nulle (échecs)\" class=\"mw-redirect\">nulle</a>, c'est-à-dire sans vainqueur.</p>\n<p>Dans le diagramme ci-contre, les blancs au trait n'ont aucun coup légal car on n'a pas le droit de se mettre en échec volontairement, et le pion blanc est bloqué. Puisqu'il n'y a pas échec, c'est un pat et la partie est déclarée nulle.</p>\n<h4>Promotion[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=8\" title=\"Modifier la section : Promotion\">modifier le code</a>]</h4>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Promotion_(échecs)\" title=\"Promotion (échecs)\">Promotion (échecs)</a>.</div>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\">\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche f7\"><img alt=\"Pion blanc sur case blanche f7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche h7\"><img alt=\"Roi noir sur case blanche h7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/22px-Chess_kdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/33px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/44px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kll45.svg\" class=\"image\" title=\"Roi blanc sur case blanche h5\"><img alt=\"Roi blanc sur case blanche h5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/22px-Chess_kll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/33px-Chess_kll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/44px-Chess_kll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">\n<center>Promotion et sous-promotion</center>\n</div>\n</div>\n</div>\n<p>La promotion du pion<sup id=\"cite_ref-7\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-7\">[G 5]</a></sup> consiste à le transformer, au choix du joueur et indépendamment des pièces antérieurement perdues, en dame, en tour, en fou ou en cavalier de même couleur lorsqu'il atteint la dernière rangée de l'échiquier (la huitième pour les blancs et la première pour les noirs). Dans le diagramme ci-contre, les blancs peuvent jouer leur pion en f8 et le transformer en dame, en tour, en fou ou en cavalier. Lorsqu'un pion atteint la dernière rangée, il est obligatoire de le promouvoir immédiatement, on ne peut ni le laisser inchangé ni reporter la promotion à plus tard.</p>\n<p>La sous-promotion consiste, lors de la promotion, à choisir une pièce autre que la dame, qui est normalement privilégiée car c'est la pièce la plus puissante du jeu. C'est parfois utile comme dans le diagramme ci-contre, en effet on se rend compte qu'après avoir joué f8=D, le roi noir ne dispose d'aucun coup légal. Les noirs, n'ayant pas d'autre pièce à jouer, sont <a href=\"https://fr.wikipedia.org/wiki/Pat_(échecs)\" title=\"Pat (échecs)\">pat</a> et la partie est nulle, bien que les blancs aient une dame en plus.</p>\n<p>En conséquence, les blancs choisissent de faire une sous-promotion en tour : <b>f8=T</b>, les noirs ne sont pas pat car ils peuvent jouer <b>Rg7</b> et les blancs gagnent cette finale théorique facile. Si les blancs choisissaient de sous-promouvoir leur pion en fou ou en cavalier la partie serait nulle car il n'est pas possible de mater avec R + F contre R seul, ou R + C contre R seul.</p>\n<div style=\"clear:both;\"/>\n<h3>Fin de la partie[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=9\" title=\"Modifier la section : Fin de la partie\">modifier le code</a>]</h3>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Checkmate.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Checkmate.jpg/220px-Checkmate.jpg\" width=\"220\" height=\"157\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Checkmate.jpg/330px-Checkmate.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Checkmate.jpg/440px-Checkmate.jpg 2x\" data-file-width=\"1416\" data-file-height=\"1011\"/></a>\n<div class=\"thumbcaption\">\n\nFin de partie dans un style théâtral.</div>\n</div>\n</div>\n<p>Toutes les parties ne se terminent pas nécessairement par un <a href=\"https://fr.wikipedia.org/wiki/Échec_et_mat\" title=\"Échec et mat\">échec et mat</a>.</p>\n<p>Les parties peuvent se terminer par une victoire pour un camp associé à une défaite pour l'autre camp. Plusieurs cas de figure peuvent se présenter :</p>\n<ul><li>échec et mat,</li>\n<li>abandon d'un joueur,</li>\n<li>perte au temps : dans une partie à la pendule, un des deux joueurs peut être à court de temps de réflexion et finir par perdre pour dépassement de son quota, cela même si sa position est nettement supérieure,</li>\n<li>par décision de l'arbitre, pour non-respect du règlement (retard ou absence à une partie, tricherie, sonnerie de téléphone pendant la partie).</li>\n</ul><p>Les parties peuvent se terminer par une <a href=\"https://fr.wikipedia.org/wiki/Nulle\" title=\"Nulle\">partie nulle</a>, c'est-à-dire sans vainqueur. Plusieurs cas de figure peuvent se présenter :</p>\n<ul><li>Par accord mutuel entre les deux joueurs pendant la partie.</li>\n<li>À partir de la troisième répétition d'une même position avec le même joueur ayant le trait. Cette nulle est obtenue uniquement si un joueur l'exige, l'autre joueur ne peut pas s'y opposer.</li>\n<li>En vertu de la <a href=\"https://fr.wikipedia.org/wiki/Règle_des_50_coups\" title=\"Règle des 50 coups\">règle des 50 coups</a>.</li>\n<li>Par l'impossibilité de mater : s'il n'existe aucune suite de coups (légaux) qui peut mener au mat de l'un ou de l'autre joueur. Cette impossibilité de mater met fin à la partie immédiatement, aucun joueur ne peut s'y opposer.</li>\n<li>Lorsque survient un <a href=\"https://fr.wikipedia.org/wiki/Pat_(échecs)\" title=\"Pat (échecs)\">pat</a>.</li>\n<li>Lorsqu'un joueur perd au temps et que l'autre joueur n'a pas suffisamment de matériel pour gagner. Cette nulle est obtenue automatiquement : aucun joueur ne peut s'y opposer.</li>\n</ul><h2>Notation des parties[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=10\" title=\"Modifier la section : Notation des parties\">modifier le code</a>]</h2>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Notation_algébrique\" title=\"Notation algébrique\">Notation algébrique</a>.</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:244px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:SCD_algebraic_notation.png\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/1/11/SCD_algebraic_notation.png\" width=\"242\" height=\"246\" class=\"thumbimage\" data-file-width=\"242\" data-file-height=\"246\"/></a>\n<div class=\"thumbcaption\">Notation algébrique des coups. À l'intersection de la colonne g et de la rangée numéro 5 se trouve la case g5.</div>\n</div>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Planilha_Réti_e_Capablanca.gif\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Planilha_Réti_e_Capablanca.gif/220px-Planilha_Réti_e_Capablanca.gif\" width=\"220\" height=\"315\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Planilha_R%C3%A9ti_e_Capablanca.gif/330px-Planilha_R%C3%A9ti_e_Capablanca.gif 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Planilha_R%C3%A9ti_e_Capablanca.gif/440px-Planilha_R%C3%A9ti_e_Capablanca.gif 2x\" data-file-width=\"493\" data-file-height=\"707\"/></a>\n<div class=\"thumbcaption\">\n\nUne feuille de partie <a href=\"https://fr.wikipedia.org/wiki/Richard_Réti\" title=\"Richard Réti\">Réti</a> contre <a href=\"https://fr.wikipedia.org/wiki/Capablanca\" title=\"Capablanca\" class=\"mw-redirect\">Capablanca</a>, en 1924.</div>\n</div>\n</div>\n<p>En compétition, il est obligatoire de noter les coups joués<sup id=\"cite_ref-8\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-8\">[3]</a></sup>, afin de permettre le contrôle de la partie par l'arbitre, son archivage par l'organisateur et sa publication dans des livres, revues, sites web ou bases de données. À cette fin, divers systèmes de notation ont été proposés et utilisés, dont la <a href=\"https://fr.wikipedia.org/wiki/Notation_descriptive\" title=\"Notation descriptive\">notation descriptive</a>, très populaire dans les pays <a href=\"https://fr.wikipedia.org/wiki/Monde_anglo-saxon\" title=\"Monde anglo-saxon\">anglo-saxons</a> et <a href=\"https://fr.wikipedia.org/wiki/Culture_hispanique\" title=\"Culture hispanique\" class=\"mw-redirect\">hispaniques</a>. De nos jours, on utilise mondialement la <a href=\"https://fr.wikipedia.org/wiki/Notation_algébrique\" title=\"Notation algébrique\">notation algébrique</a> abrégée, qui est le système officiel de la <a href=\"https://fr.wikipedia.org/wiki/Fédération_internationale_des_échecs\" title=\"Fédération internationale des échecs\">FIDE</a><sup id=\"cite_ref-9\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-9\">[4]</a></sup>.</p>\n<p>Dans la notation algébrique, chaque colonne de l'<a href=\"https://fr.wikipedia.org/wiki/Échiquier\" title=\"Échiquier\">échiquier</a> est désignée par une lettre de <b>a</b> à <b>h</b> et chaque rangée est désignée par un chiffre de <b>1</b> à <b>8</b>, la case <i>a1</i> étant placée à la gauche des blancs. Les cases de l’échiquier peuvent donc être désignées par la combinaison d'une lettre et d'un chiffre (voir la case g5 sur le diagramme ci-contre).</p>\n<p>Pour l'enregistrement de la partie, on utilise habituellement un formulaire <a href=\"https://fr.wiktionary.org/wiki/ad_hoc\" class=\"extiw\" title=\"wikt:ad hoc\">ad hoc</a>, appelé <i>feuille de partie</i>, dont le format peut varier (voir un exemple ci-contre).</p>\n<p>Pour chaque coup on note :</p>\n<ul><li>le numéro du coup, suivi d'un point (puis, de façon optionnelle une espace)</li>\n<li>l'initiale de la pièce jouée (<b>R</b> pour Roi, <b>D</b> pour Dame, <b>T</b> pour Tour, <b>F</b> pour Fou et <b>C</b> pour Cavalier, l'initiale du pion étant omise, bien qu’anciennement utilisée)</li>\n<li>la case d'arrivée de la pièce jouée (une lettre + un chiffre)</li>\n</ul><p>Exemples :</p>\n<ul><li><b>1. Cf3</b> indique qu'au premier coup des blancs, ceux-ci ont joué leur cavalier de la case g1 à la case f3 (g1 étant la case initiale du cavalier au début du jeu).</li>\n<li><b>1. e4</b> indique qu'au premier coup des blancs, ceux-ci ont joué leur pion de la case e2 à la case e4 (la lettre identifiant le pion n'est pas indiquée).</li>\n</ul><p>On fait suivre le coup noir sans répéter le numéro du coup.</p>\n<p>Exemples :</p>\n<ul><li>1. Cf3 <b>Cf6</b> indique qu'au premier coup des noirs, ceux-ci ont joué leur cavalier de la case g8 à la case f6</li>\n<li>1. e4 <b>e5</b> indique qu'au premier coup des noirs, ceux-ci ont joué leur pion de la case e7 à la case e5</li>\n</ul><p>On n'indique pas la case de départ de la pièce, en général ce n'est pas nécessaire car une seule pièce du type mentionné peut atteindre la case d'arrivée. En cas d'ambiguïté, on ajoute devant la case d'arrivée une lettre ou un chiffre permettant d'identifier la colonne ou la rangée de départ de la pièce concernée.</p>\n<p>Exemple :</p>\n<ul><li>1. e4 e5 2. Cc3 Cc6 <b>3. Cge2</b> indique que c'est le cavalier venant de la case g1 qui se déplace en e2 (et non celui étant en c3 dans la position initiale).</li>\n</ul><p>Lorsque la pièce jouée capture une pièce adverse, on le mentionne en ajoutant une croix entre l'initiale de la pièce et la case d'arrivée.</p>\n<p>Exemple :</p>\n<ul><li>1. Cf3 e5 <b>2. Cxe5</b> indique que le cavalier en f3 capture le pion noir en e5.</li>\n</ul><p>Lorsqu'on indique un coup noir après un commentaire écrit, on le fait précéder d'un <a href=\"https://fr.wikipedia.org/wiki/Point_de_suspension\" title=\"Point de suspension\" class=\"mw-redirect\">point de suspension</a>.</p>\n<p>Exemple :</p>\n<ul><li>1. e4 ouverture du pion roi, <b>1…e5</b> (les noirs viennent de jouer leur pion en e5).</li>\n</ul><h3>Notation des coups spéciaux[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=11\" title=\"Modifier la section : Notation des coups spéciaux\">modifier le code</a>]</h3>\n<p>Le <a href=\"https://fr.wikipedia.org/wiki/Roque_(échecs)\" title=\"Roque (échecs)\">roque</a> est noté <b>0-0</b> pour le petit roque, et <b>0-0-0</b> pour le grand roque.</p>\n<p>La <a href=\"https://fr.wikipedia.org/wiki/En_passant_(échecs)\" title=\"En passant (échecs)\">prise en passant</a> se note comme une prise normale, on mentionne la case d'arrivée du pion. On peut ajouter la mention <b>e.p.</b> après le coup, de façon optionnelle pour faciliter la lecture.</p>\n<p>La <a href=\"https://fr.wikipedia.org/wiki/Promotion_(échecs)\" title=\"Promotion (échecs)\">promotion</a> d'un pion en pièce se note en indiquant le type de pièce en laquelle le pion est promu soit à la fin du coup (exemple : <b>e8D</b>, noté aussi <b>e8=D</b>).</p>\n<p>Lorsque le roi adverse se trouve en <i>échec</i>, on ajoute communément un « + » à la suite du coup, exemple : <b>Dh4+</b>.</p>\n<p>Si le roi est <i>échec et mat</i>, on utilise traditionnellement le symbole « ≠ » (éventuellement précédé d'une espace), ou plus récemment le symbole « # », ou bien on écrit <i>mat</i>. Exemple : <b>Dxf7≠</b>, <b>Dxf7 #</b> ou <b>Dxf7 mat</b>.</p>\n<p>Le signe « ++ » est également utilisé pour indiquer un échec et mat selon le règlement de la FIDE. Certains auteurs l'utilisent cependant pour marquer un <a href=\"https://fr.wikipedia.org/wiki/Échec_au_roi#.C3.89chec_double\" title=\"Échec au roi\">échec double</a>.</p>\n<h3>Notation avec figurines[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=12\" title=\"Modifier la section : Notation avec figurines\">modifier le code</a>]</h3>\n<p>Dans de nombreuses revues internationales, les initiales des pièces sont remplacées par des figurines schématisant chaque pièce, contournant ainsi le barrage de la langue. D'autre part, la notation est parfois encore abrégée en omettant le signe de la prise (x) et le numéro de rangée pour les prises de pion (ainsi, <i>exd4</i> devient <i>exd</i>, ou <i>ed</i>, pour autant qu'il n'y ait pas d'ambiguïté possible).</p>\n<p>Les figurines ressemblent à ceci : <a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_king_icon.png\" class=\"image\"><img alt=\"Chess king icon.png\" src=\"https://upload.wikimedia.org/wikipedia/commons/4/40/Chess_king_icon.png\" width=\"21\" height=\"21\" data-file-width=\"21\" data-file-height=\"21\"/></a> <a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_queen_icon.png\" class=\"image\"><img alt=\"Chess queen icon.png\" src=\"https://upload.wikimedia.org/wikipedia/commons/7/7c/Chess_queen_icon.png\" width=\"21\" height=\"21\" data-file-width=\"21\" data-file-height=\"21\"/></a> <a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_knight_icon.png\" class=\"image\"><img alt=\"Chess knight icon.png\" src=\"https://upload.wikimedia.org/wikipedia/commons/e/e8/Chess_knight_icon.png\" width=\"21\" height=\"21\" data-file-width=\"21\" data-file-height=\"21\"/></a> <a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bishop_icon.png\" class=\"image\"><img alt=\"Chess bishop icon.png\" src=\"https://upload.wikimedia.org/wikipedia/commons/6/6c/Chess_bishop_icon.png\" width=\"21\" height=\"21\" data-file-width=\"21\" data-file-height=\"21\"/></a> <a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rook_icon.png\" class=\"image\"><img alt=\"Chess rook icon.png\" src=\"https://upload.wikimedia.org/wikipedia/commons/5/5e/Chess_rook_icon.png\" width=\"21\" height=\"21\" data-file-width=\"21\" data-file-height=\"21\"/></a> <a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pawn_icon.png\" class=\"image\"><img alt=\"Chess pawn icon.png\" src=\"https://upload.wikimedia.org/wikipedia/commons/c/c1/Chess_pawn_icon.png\" width=\"21\" height=\"21\" data-file-width=\"21\" data-file-height=\"21\"/></a>.</p>\n<h3>Annotation des parties[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=13\" title=\"Modifier la section : Annotation des parties\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Annotation_(échecs)\" title=\"Annotation (échecs)\">Annotation (échecs)</a>.</div>\n<p>Lors d'une <a href=\"https://fr.wikipedia.org/wiki/Analyse_(échecs)\" title=\"Analyse (échecs)\">analyse</a> de partie, le commentateur a souvent besoin de donner son avis sur un coup joué. On a donc intégré au système de notation des symboles, insérés juste après le coup, permettant de donner de manière simple un avis sur le coup.</p>\n<p>Les plus fréquemment utilisés par les joueurs sont :</p>\n<ul><li><b>!</b> : bon coup. C'est souvent un petit avantage (voir plus bas).</li>\n<li><b>!!</b> : très bon coup. C'est souvent un avantage décisif (voir plus bas).</li>\n<li><b>?</b> : mauvais coup.</li>\n<li><b>??</b> : très mauvais coup. Conduit généralement à la perte de la partie.</li>\n</ul><p>D'autres symboles sont possibles :</p>\n<ul><li><b>!?</b> : coup intéressant</li>\n<li><b>?!</b> : coup douteux</li>\n<li><b>N</b> : <b>N</b>ouveauté théorique : un coup inédit dans la « théorie des ouvertures », à un haut niveau de compétition (généralement entre <a href=\"https://fr.wikipedia.org/wiki/Grand_maître_international\" title=\"Grand maître international\">grands maîtres</a>).</li>\n</ul><p>De même, il est souvent utile, à la fin de l'<a href=\"https://fr.wikipedia.org/wiki/Analyse_(échecs)\" title=\"Analyse (échecs)\">analyse</a> d'une <a href=\"https://fr.wikipedia.org/wiki/Variante_(échecs)\" title=\"Variante (échecs)\">variante</a>, de donner un avis sur la <a href=\"https://fr.wikipedia.org/w/index.php?title=Position_(échecs)&action=edit&redlink=1\" class=\"new\" title=\"Position (échecs) (page inexistante)\">position</a> résultant de cette suite de coups. Là aussi, des symboles ont été intégrés à la notation pour faciliter cette tâche :</p>\n<ul><li><b>+-</b> : avantage décisif aux blancs</li>\n<li><b>+=</b> : léger avantage aux blancs</li>\n<li><b>=</b> : position équilibrée</li>\n<li><b>=+</b> : léger avantage aux noirs</li>\n<li><b>-+</b> : avantage décisif aux noirs</li>\n<li><b>∞</b> : position incertaine</li>\n<li><b>=/∞</b> : avec compensation pour un désavantage matériel</li>\n</ul><h3>Notation informatique (PGN et FEN)[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=14\" title=\"Modifier la section : Notation informatique (PGN et FEN)\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Portable_Game_Notation\" title=\"Portable Game Notation\">Portable Game Notation</a>.</div>\n<p>Le format <a href=\"https://fr.wikipedia.org/wiki/Portable_Game_Notation\" title=\"Portable Game Notation\">PGN</a> vise à standardiser le format utilisé pour décrire une partie d'échecs à destination des <a href=\"https://fr.wikipedia.org/wiki/Programmes_informatiques\" title=\"Programmes informatiques\" class=\"mw-redirect\">programmes informatiques</a>. Il se compose d'une partie d'<a href=\"https://fr.wikipedia.org/wiki/En-tête\" title=\"En-tête\" class=\"mw-redirect\">en-têtes</a> qui donnent des informations au sujet des joueurs, de la date et du lieu de la partie, de la cadence, etc.</p>\n<p>Ces en-têtes sont suivis par les coups joués, décrits en format SAN (<i>Standard Algebraic Notation</i>). Le format SAN, qui fait partie de la spécification PGN, est très similaire à la notation algébrique abrégée en langue anglaise (K=Roi, Q=Dame, B=Fou, N=Cavalier, R=Tour) mais en diffère cependant quelque peu (par exemple, en cas de promotion, le signe <i>=</i> est obligatoire: <i>e8=Q</i> tandis qu'en notation algébrique abrégée, ce signe est omis : <i>e8Q</i>).</p>\n<p>Le standard <a href=\"https://fr.wikipedia.org/wiki/Notation_Forsyth-Edwards\" title=\"Notation Forsyth-Edwards\">FEN</a> (<i>Forsyth-Edwards Notation</i>) est utilisé pour décrire une position.</p>\n<p><a href=\"https://fr.wikipedia.org/wiki/Chess_Query_Language\" title=\"Chess Query Language\">Chess Query Language</a> (CQL) est un <a href=\"https://fr.wikipedia.org/wiki/Langage_de_requête\" title=\"Langage de requête\">langage de requête</a> qui permet d'extraire des parties ou des positions d'une base de données de parties d'échecs.</p>\n<h2>Principes de jeu[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=15\" title=\"Modifier la section : Principes de jeu\">modifier le code</a>]</h2>\n<p>La <a href=\"https://fr.wikipedia.org/wiki/Stratégie_échiquéenne\" title=\"Stratégie échiquéenne\">stratégie</a> concerne l'évaluation globale de la <a href=\"https://fr.wikipedia.org/w/index.php?title=Position_(échecs)&action=edit&redlink=1\" class=\"new\" title=\"Position (échecs) (page inexistante)\">position</a> et l'établissement de plans à long terme, par exemple le positionnement des pièces et leur coordination, ou l'attaque dans un secteur donné de l’échiquier, alors que la <a href=\"https://fr.wikipedia.org/wiki/Tactique_échiquéenne\" title=\"Tactique échiquéenne\">tactique</a> concerne la réalisation de manœuvres immédiates qui découlent des éléments stratégiques mis en place. Le <a href=\"https://fr.wikipedia.org/wiki/Grand_maître_international\" title=\"Grand maître international\">grand maitre</a> <a href=\"https://fr.wikipedia.org/wiki/Xavier_Tartacover\" title=\"Xavier Tartacover\" class=\"mw-redirect\">Xavier Tartacover</a>, a dit un jour à ce sujet, que : « La <b>Tactique</b> consiste à savoir ce qu'il faut faire quand il y a quelque chose à faire. La <b>Stratégie</b> consiste à savoir ce qu'il faut faire quand il n'y a rien à faire ! »</p>\n<p>On distingue généralement trois phases dans le déroulement d'une partie d'échecs : l'<a href=\"https://fr.wikipedia.org/wiki/Ouverture_(échecs)\" title=\"Ouverture (échecs)\">ouverture</a> qui dure de 10 à 25 coups et pendant laquelle les joueurs développent leurs pièces en prévision de la bataille à venir ; le <a href=\"https://fr.wikipedia.org/wiki/Milieu_de_partie\" title=\"Milieu de partie\">milieu de partie</a> qui est en général la période la plus combative avec éventuellement des attaques directes sur les rois ; et enfin la <a href=\"https://fr.wikipedia.org/wiki/Finale_(échecs)\" title=\"Finale (échecs)\">finale</a>, lorsque le matériel est réduit, les rois y prennent une part plus active et la promotion des pions est souvent un objectif décisif. Chacune de ces phases fait intervenir à des degrés divers des éléments <a href=\"https://fr.wikipedia.org/wiki/Tactique_échiquéenne\" title=\"Tactique échiquéenne\">tactiques</a>, <a href=\"https://fr.wikipedia.org/wiki/Stratégie_échiquéenne\" title=\"Stratégie échiquéenne\">stratégiques</a> et <a href=\"https://fr.wikipedia.org/wiki/Psychologie_échiquéenne\" title=\"Psychologie échiquéenne\">psychologiques</a>.</p>\n<h3>Stratégie[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=16\" title=\"Modifier la section : Stratégie\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Stratégie_échiquéenne\" title=\"Stratégie échiquéenne\">Stratégie échiquéenne</a>.</div>\n<table class=\"toccolours\" style=\"float: right; margin: 0 0 1em 1em; border:none; font-size: 95%; clear: right; padding:0\"><caption><b>Visualisation de la structure de pions</b></caption>\n<tr><td>\n<div class=\"thumb\" style=\"clear:none;text-align:center\">\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdl45.svg\" class=\"image\" title=\"Tour noire sur case blanche a8\"><img alt=\"Tour noire sur case blanche a8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/22px-Chess_rdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/33px-Chess_rdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/44px-Chess_rdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdl45.svg\" class=\"image\" title=\"Fou noir sur case blanche c8\"><img alt=\"Fou noir sur case blanche c8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/22px-Chess_bdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/33px-Chess_bdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/44px-Chess_bdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdl45.svg\" class=\"image\" title=\"Tour noire sur case blanche e8\"><img alt=\"Tour noire sur case blanche e8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/22px-Chess_rdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/33px-Chess_rdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/44px-Chess_rdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche g8\"><img alt=\"Roi noir sur case blanche g8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/22px-Chess_kdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/33px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/44px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire a7\"><img alt=\"Pion noir sur case noire a7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche b7\"><img alt=\"Pion noir sur case blanche b7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndl45.svg\" class=\"image\" title=\"Cavalier noir sur case blanche d7\"><img alt=\"Cavalier noir sur case blanche d7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/22px-Chess_ndl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/33px-Chess_ndl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/44px-Chess_ndl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche f7\"><img alt=\"Pion noir sur case blanche f7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdd45.svg\" class=\"image\" title=\"Fou noir sur case noire g7\"><img alt=\"Fou noir sur case noire g7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/22px-Chess_bdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/33px-Chess_bdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/44px-Chess_bdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche h7\"><img alt=\"Pion noir sur case blanche h7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche c6\"><img alt=\"Pion noir sur case blanche c6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rld45.svg\" class=\"image\" title=\"Tour blanche sur case noire d6\"><img alt=\"Tour blanche sur case noire d6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/22px-Chess_rld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/33px-Chess_rld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/44px-Chess_rld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndd45.svg\" class=\"image\" title=\"Cavalier noir sur case noire f6\"><img alt=\"Cavalier noir sur case noire f6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/22px-Chess_ndd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/33px-Chess_ndd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/44px-Chess_ndd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche g6\"><img alt=\"Pion noir sur case blanche g6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire e5\"><img alt=\"Pion noir sur case noire e5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche c4\"><img alt=\"Pion blanc sur case blanche c4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche e4\"><img alt=\"Pion blanc sur case blanche e4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nld45.svg\" class=\"image\" title=\"Cavalier blanc sur case noire c3\"><img alt=\"Cavalier blanc sur case noire c3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/22px-Chess_nld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/33px-Chess_nld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/44px-Chess_nld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bld45.svg\" class=\"image\" title=\"Fou blanc sur case noire e3\"><img alt=\"Fou blanc sur case noire e3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/22px-Chess_bld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/33px-Chess_bld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/44px-Chess_bld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche f3\"><img alt=\"Cavalier blanc sur case blanche f3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/22px-Chess_nll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/33px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/44px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche h3\"><img alt=\"Pion blanc sur case blanche h3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche a2\"><img alt=\"Pion blanc sur case blanche a2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire b2\"><img alt=\"Pion blanc sur case noire b2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire f2\"><img alt=\"Pion blanc sur case noire f2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche g2\"><img alt=\"Pion blanc sur case blanche g2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kld45.svg\" class=\"image\" title=\"Roi blanc sur case noire c1\"><img alt=\"Roi blanc sur case noire c1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/22px-Chess_kld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/33px-Chess_kld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/44px-Chess_kld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bll45.svg\" class=\"image\" title=\"Fou blanc sur case blanche f1\"><img alt=\"Fou blanc sur case blanche f1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/22px-Chess_bll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/33px-Chess_bll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/44px-Chess_bll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rll45.svg\" class=\"image\" title=\"Tour blanche sur case blanche h1\"><img alt=\"Tour blanche sur case blanche h1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/22px-Chess_rll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/33px-Chess_rll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/44px-Chess_rll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">Une partie Tarrasch – Euwe de 1922<br/>\nAprès 12…Te8</div>\n</div>\n</div>\n</td>\n<td>\n<div class=\"thumb\" style=\"clear:none;text-align:center\">\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire a7\"><img alt=\"Pion noir sur case noire a7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche b7\"><img alt=\"Pion noir sur case blanche b7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche f7\"><img alt=\"Pion noir sur case blanche f7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche h7\"><img alt=\"Pion noir sur case blanche h7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche c6\"><img alt=\"Pion noir sur case blanche c6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche g6\"><img alt=\"Pion noir sur case blanche g6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire e5\"><img alt=\"Pion noir sur case noire e5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche c4\"><img alt=\"Pion blanc sur case blanche c4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche e4\"><img alt=\"Pion blanc sur case blanche e4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche h3\"><img alt=\"Pion blanc sur case blanche h3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche a2\"><img alt=\"Pion blanc sur case blanche a2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire b2\"><img alt=\"Pion blanc sur case noire b2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire f2\"><img alt=\"Pion blanc sur case noire f2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche g2\"><img alt=\"Pion blanc sur case blanche g2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">et son squelette de pion :<br/>\nLa <a href=\"https://fr.wikipedia.org/wiki/Structure_de_pions#Formation_Rauzer_de_la_d.C3.A9fense_est-indienne\" title=\"Structure de pions\">formation Rauzer</a></div>\n</div>\n</div>\n</td>\n</tr></table><p>L'étape la plus élémentaire dans l'évaluation de la position consiste à compter le matériel de chaque camp. L'expérience permet d'attribuer à chaque type de pièce un certain nombre de points, 1 point pour chaque pion, 3 points pour un cavalier ou un fou, 5 points pour une tour et 9 points pour la dame. Les cavaliers valent un peu plus que les fous dans les positions fermées (encombrées) typiquement en début de partie et à l'inverse les fous valent davantage que les cavaliers dans les positions ouvertes ou en fin de partie. Par ailleurs, deux tours (10 points) valent généralement plus qu'une dame (9 points). Ce décompte est une bonne illustration de la valeur relative des pièces mais les joueurs expérimentés n'ont pas besoin de s'y livrer, ils savent à tout moment où ils en sont. Pour une évaluation précise on prend en compte des considérations positionnelles, par exemple des pions avancés sont un atout ou inversement une faiblesse s'ils sont difficiles à soutenir, une paire de fous (contre fou + cavalier) est appréciée pour sa facilité à contrôler à la fois les cases blanches et les cases noires de l'échiquier.</p>\n<p>Un autre facteur important dans l'évaluation de la position est la prise en compte de la structure de pions, également appelée <i>squelette de pions</i>, ou la répartition dissymétrique des pions sur chaque aile de l'échiquier. Les pions sont peu mobiles et leur configuration détermine largement la stratégie de la partie. Les faiblesses créées dans leur structure (<a href=\"https://fr.wikipedia.org/wiki/Pion_isolé\" title=\"Pion isolé\">pions isolés</a>, <a href=\"https://fr.wikipedia.org/wiki/Pions_doublés\" title=\"Pions doublés\">doublés</a>, <a href=\"https://fr.wikipedia.org/wiki/Pion_arriéré\" title=\"Pion arriéré\">arriérés</a>, trous dans la chaîne de pions) sont souvent permanentes, aussi doivent-elles être soigneusement évitées ou bien compensées, par exemple par des possibilités d'attaque.</p>\n<p>Le diagramme ci-contre, tiré d'une partie <a href=\"https://fr.wikipedia.org/wiki/Siegbert_Tarrasch\" title=\"Siegbert Tarrasch\">Siegbert Tarrasch</a> - <a href=\"https://fr.wikipedia.org/wiki/Max_Euwe\" title=\"Max Euwe\">Max Euwe</a> de <a href=\"https://fr.wikipedia.org/wiki/1922\" title=\"1922\">1922</a>, montre la difficulté qu'il peut y avoir à évaluer certaines positions. En effet l'intuition de nombreux joueurs est ici prise en défaut : Le fou noir est bloqué par son propre pion en e5 et les blancs peuvent exploiter le <i>trou</i> en d6, cependant l'expérience montre que la faiblesse blanche en d4 est plus grave encore : la théorie considère que les noirs ont de meilleures perspectives<sup id=\"cite_ref-10\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-10\">[5]</a></sup>.</p>\n<h3>Tactique[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=17\" title=\"Modifier la section : Tactique\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Tactique_échiquéenne\" title=\"Tactique échiquéenne\">Tactique échiquéenne</a>.</div>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\"><a href=\"https://fr.wikipedia.org/wiki/Mikhaïl_Botvinnik\" title=\"Mikhaïl Botvinnik\">Botvinnik</a> - <a href=\"https://fr.wikipedia.org/wiki/Mikhaïl_Ioudovitch\" title=\"Mikhaïl Ioudovitch\">Ioudovitch</a>,<br/><a href=\"https://fr.wikipedia.org/wiki/Championnat_d%27échecs_d%27URSS\" title=\"Championnat d'échecs d'URSS\">championnat de l'URSS</a> 1933<sup id=\"cite_ref-11\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-11\">[6]</a></sup><div class=\"thumbinner\" style=\"width:246px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:26px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/208px-Chessboard480.svg.png\" width=\"208\" height=\"208\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/312px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/416px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div style=\"position:absolute;z-index:3;top:0px;left:0px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdl45.svg\" class=\"image\" title=\"Tour noire sur case blanche a8\"><img alt=\"Tour noire sur case blanche a8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/26px-Chess_rdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/39px-Chess_rdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/52px-Chess_rdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:26px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdl45.svg\" class=\"image\" title=\"Fou noir sur case blanche c8\"><img alt=\"Fou noir sur case blanche c8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/26px-Chess_bdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/39px-Chess_bdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/52px-Chess_bdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:104px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdd45.svg\" class=\"image\" title=\"Tour noire sur case noire f8\"><img alt=\"Tour noire sur case noire f8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/26px-Chess_rdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/39px-Chess_rdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/52px-Chess_rdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:26px;left:0px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:26px;left:26px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche b7\"><img alt=\"Pion noir sur case blanche b7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:26px;left:52px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:26px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndl45.svg\" class=\"image\" title=\"Cavalier noir sur case blanche d7\"><img alt=\"Cavalier noir sur case blanche d7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/26px-Chess_ndl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/39px-Chess_ndl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/52px-Chess_ndl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:26px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qdd45.svg\" class=\"image\" title=\"Reine noire sur case noire e7\"><img alt=\"Reine noire sur case noire e7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/26px-Chess_qdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/39px-Chess_qdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/52px-Chess_qdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:26px;left:130px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:26px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdd45.svg\" class=\"image\" title=\"Fou noir sur case noire g7\"><img alt=\"Fou noir sur case noire g7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/26px-Chess_bdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/39px-Chess_bdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/52px-Chess_bdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:26px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:52px;left:0px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:52px;left:26px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndd45.svg\" class=\"image\" title=\"Cavalier noir sur case noire b6\"><img alt=\"Cavalier noir sur case noire b6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/26px-Chess_ndd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/39px-Chess_ndd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/52px-Chess_ndd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:52px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche c6\"><img alt=\"Pion noir sur case blanche c6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:52px;left:78px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:52px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche e6\"><img alt=\"Pion noir sur case blanche e6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:52px;left:130px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:52px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche g6\"><img alt=\"Roi noir sur case blanche g6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/26px-Chess_kdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/39px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/52px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:52px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire h6\"><img alt=\"Pion noir sur case noire h6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/26px-Chess_pdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/39px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/52px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:78px;left:0px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire a5\"><img alt=\"Pion noir sur case noire a5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/26px-Chess_pdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/39px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/52px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:78px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:78px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:78px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:78px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:78px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:78px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:78px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:104px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:104px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:104px;left:52px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:104px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire d4\"><img alt=\"Pion blanc sur case noire d4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/26px-Chess_pld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/39px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/52px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:104px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche e4\"><img alt=\"Cavalier blanc sur case blanche e4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/26px-Chess_nll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/39px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/52px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:104px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:104px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:104px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:130px;left:0px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:130px;left:26px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche b3\"><img alt=\"Pion blanc sur case blanche b3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/26px-Chess_pll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/39px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/52px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:130px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:130px;left:78px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:130px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bld45.svg\" class=\"image\" title=\"Fou blanc sur case noire e3\"><img alt=\"Fou blanc sur case noire e3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/26px-Chess_bld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/39px-Chess_bld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/52px-Chess_bld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:130px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:130px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:130px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:156px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:156px;left:26px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:156px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qll45.svg\" class=\"image\" title=\"Reine blanche sur case blanche c2\"><img alt=\"Reine blanche sur case blanche c2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/26px-Chess_qll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/39px-Chess_qll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/52px-Chess_qll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:156px;left:78px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:156px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bll45.svg\" class=\"image\" title=\"Fou blanc sur case blanche e2\"><img alt=\"Fou blanc sur case blanche e2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/26px-Chess_bll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/39px-Chess_bll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/52px-Chess_bll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire f2\"><img alt=\"Pion blanc sur case noire f2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/26px-Chess_pld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/39px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/52px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche g2\"><img alt=\"Pion blanc sur case blanche g2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/26px-Chess_pll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/39px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/52px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire h2\"><img alt=\"Pion blanc sur case noire h2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/26px-Chess_pld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/39px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/52px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:182px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:182px;left:26px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:182px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rld45.svg\" class=\"image\" title=\"Tour blanche sur case noire c1\"><img alt=\"Tour blanche sur case noire c1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/26px-Chess_rld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/39px-Chess_rld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/52px-Chess_rld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rll45.svg\" class=\"image\" title=\"Tour blanche sur case blanche d1\"><img alt=\"Tour blanche sur case blanche d1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/26px-Chess_rll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/39px-Chess_rll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/52px-Chess_rll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:182px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:182px;left:130px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:182px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kld45.svg\" class=\"image\" title=\"Roi blanc sur case noire g1\"><img alt=\"Roi blanc sur case noire g1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/26px-Chess_kld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/39px-Chess_kld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/52px-Chess_kld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:182px;left:182px;width:26px;height:26px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:26px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">Exemple d'un <a href=\"https://fr.wikipedia.org/wiki/Sacrifice_(échecs)\" title=\"Sacrifice (échecs)\">sacrifice</a> de pièce qui expose le roi noir. Après 1. Fh5+ les noirs abandonnent car le mat est inévitable, par exemple 1…Rxh5 2. Cg3+ Rh4 3. De4+ Tf4 4. Dxf4≠, ou 1…Rh7 2. Cf6+ Rh8 3. Dh7≠.</div>\n</div>\n</div>\n<p>La tactique concerne habituellement des actions à très court terme, au point qu'elles peuvent être complètement calculées par le joueur<sup id=\"cite_ref-12\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-12\">[G 6]</a></sup>. La profondeur du calcul, c'est-à-dire le nombre de coups de la variante la plus longue, dépend des capacités du joueur, ou de la puissance de l'ordinateur le cas échéant. Dans les positions tranquilles, avec de nombreuses alternatives de part et d'autre, il y a peu de chances qu'un calcul profond soit possible, alors que dans les positions comportant un nombre limité de coups forcés, les joueurs les plus forts sont à même de calculer de très longues séquences de coups.</p>\n<p>Des suites forcées d'un ou deux coups, les menaces, échanges de pièces, attaques doubles, etc. peuvent être enchaînés dans des combinaisons : des séquences de manœuvres souvent forcées pour l'un ou l'autre des deux camps. Les théoriciens ont décrit un grand nombre de méthodes élémentaires et de manœuvres caractéristiques comme le <a href=\"https://fr.wikipedia.org/wiki/Clouage\" title=\"Clouage\">clouage</a>, la <a href=\"https://fr.wikipedia.org/wiki/Fourchette_(échecs)\" title=\"Fourchette (échecs)\">fourchette</a>, l'<a href=\"https://fr.wikipedia.org/wiki/Enfilade_(échecs)\" title=\"Enfilade (échecs)\">enfilade</a>, la <a href=\"https://fr.wikipedia.org/w/index.php?title=Batterie_(échecs)&action=edit&redlink=1\" class=\"new\" title=\"Batterie (échecs) (page inexistante)\">batterie</a>, l'<a href=\"https://fr.wikipedia.org/wiki/Attaque_à_la_découverte\" title=\"Attaque à la découverte\">attaque à la découverte</a> et en particulier l'échec à la découverte, le <a href=\"https://fr.wikipedia.org/wiki/Zwischenzug\" title=\"Zwischenzug\">coup intermédiaire</a> (ou <i>zwischenzug</i>), la déviation, le leurre, le <a href=\"https://fr.wikipedia.org/wiki/Sacrifice_(échecs)\" title=\"Sacrifice (échecs)\">sacrifice</a>, le minage, la surcharge, l'interception<sup id=\"cite_ref-13\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-13\">[G 7]</a></sup>.</p>\n<h3>Ouverture[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=18\" title=\"Modifier la section : Ouverture\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Ouverture_(échecs)\" title=\"Ouverture (échecs)\">Ouverture (échecs)</a>.</div>\n<p>L'<a href=\"https://fr.wikipedia.org/wiki/Ouverture_(échecs)\" title=\"Ouverture (échecs)\">ouverture</a> est le nom donné aux premiers coups d'une partie<sup id=\"cite_ref-14\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-14\">[G 8]</a></sup>. On donne aux ouvertures reconnues des noms comme la <a href=\"https://fr.wikipedia.org/wiki/Partie_espagnole\" title=\"Partie espagnole\">partie espagnole</a> ou la <a href=\"https://fr.wikipedia.org/wiki/Défense_sicilienne\" title=\"Défense sicilienne\">défense sicilienne</a> mais également la <a href=\"https://fr.wikipedia.org/wiki/Partie_des_quatre_cavaliers\" title=\"Partie des quatre cavaliers\">partie des quatre cavaliers</a>. Un grand nombre d'ouvrages spécialisés les répertorient, comme, par exemple, l'<a href=\"https://fr.wikipedia.org/wiki/Encyclopédie_des_ouvertures_d%27échecs\" title=\"Encyclopédie des ouvertures d'échecs\">Encyclopédie des ouvertures d'échecs</a>.</p>\n<p>Il existe des dizaines d'ouvertures aux styles très variés, certaines sont tranquilles comme le <a href=\"https://fr.wikipedia.org/wiki/Début_Réti\" title=\"Début Réti\">début Réti</a> alors que d'autres, comme le <a href=\"https://fr.wikipedia.org/wiki/Gambit_letton\" title=\"Gambit letton\">gambit letton</a>, sont très agressives. Les variantes comportent en général de 10 à 15 coups, mais certaines variantes, dans lesquelles on estime que ne sont joués que les meilleurs coups de part et d'autre, peuvent comporter jusqu'à 30 ou 35 coups. Les joueurs professionnels passent des années à étudier les ouvertures et continuent à les approfondir leur carrière durant, participant eux-mêmes à leur étude systématique. En effet, au plus haut niveau de jeu le début de partie se présente comme un duel de connaissances entre deux compétiteurs ainsi qu'un laboratoire permanent permettant de tester les idées nouvelles.</p>\n<p>Les ouvertures poursuivent toutes des buts stratégiques similaires :</p>\n<ul><li>le développement des pièces (leur mise en jeu),</li>\n<li>l'occupation ou le contrôle du centre,</li>\n<li>la mise en sécurité du roi,</li>\n<li>l'établissement d'une bonne <a href=\"https://fr.wikipedia.org/wiki/Structure_de_pions\" title=\"Structure de pions\">structure de pions</a>.</li>\n</ul><p>La plupart des joueurs et des théoriciens considèrent que le fait de jouer en premier donne aux blancs un petit <a href=\"https://fr.wikipedia.org/wiki/Avantage_du_trait_aux_échecs\" title=\"Avantage du trait aux échecs\">avantage</a>. Dans l'ouverture l'objectif des noirs est de neutraliser cet avantage ou alors de trouver des compensations dans une position déséquilibrée.</p>\n<h3>Milieu de partie[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=19\" title=\"Modifier la section : Milieu de partie\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Milieu_de_partie\" title=\"Milieu de partie\">Milieu de partie</a>.</div>\n<p>Le <a href=\"https://fr.wikipedia.org/wiki/Milieu_de_partie\" title=\"Milieu de partie\">milieu de partie</a> ou milieu de jeu débute lorsque la plupart des pièces ont été développées. Le recours à la théorie des ouvertures n'étant plus de mise, les joueurs doivent évaluer leur position, concevoir des plans basés sur ses caractéristiques, et dans le même temps tenir compte des possibilités tactiques<sup id=\"cite_ref-15\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-15\">[G 9]</a></sup>.</p>\n<p>Certains plans ou thèmes stratégiques liés aux structures de pions découlent directement de l'ouverture, par exemple l'<i>attaque de minorité</i>, qui consiste à avancer des pions de l'aile dame alors que l'adversaire possède plus de pions sur cette aile. L'étude des ouvertures doit donc être menée en parallèle de la préparation des plans possibles dans le milieu de partie.</p>\n<p>Le milieu de partie est la phase de la partie dans laquelle l'attaque sur le roi prend le plus d'importance, bien que ce thème ne soit pas à négliger dans les autres phases du jeu. Un exemple classique est le sacrifice double de la partie <a href=\"https://fr.wikipedia.org/wiki/Lasker_-_Bauer_(Amsterdam,_1889)\" title=\"Lasker - Bauer (Amsterdam, 1889)\" class=\"mw-redirect\">Lasker - Bauer 1889</a>.</p>\n<p>Une autre question stratégique importante dans le milieu de partie est de savoir quand il est opportun d'entrer en finale, c'est-à-dire simplifier la position en échangeant du matériel. Par exemple, un avantage matériel même minime permet souvent le gain, mais seulement en finale. Le camp le plus fort doit donc trouver un moyen de forcer son adversaire à jouer une finale favorable. Il doit pour cela éviter les cas connus comme donnant la nulle malgré la différence de matériel, par exemple la plupart des positions avec roi, fou et pion contre roi et fou avec des fous de couleurs opposées (l'un sur cases blanches et l'autre sur cases noires) ou roi, tour et cavalier contre roi et tour.</p>\n<h3>Finale[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=20\" title=\"Modifier la section : Finale\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Finale_(échecs)\" title=\"Finale (échecs)\">Finale (échecs)</a>.</div>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\">\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche c8\"><img alt=\"Roi noir sur case blanche c8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/22px-Chess_kdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/33px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/44px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire c7\"><img alt=\"Pion blanc sur case noire c7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h7 vide\" style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kld45.svg\" class=\"image\" title=\"Roi blanc sur case noire d6\"><img alt=\"Roi blanc sur case noire d6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/22px-Chess_kld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/33px-Chess_kld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/44px-Chess_kld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g1 vide\" style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">Un exemple de <a href=\"https://fr.wikipedia.org/wiki/Zugzwang\" title=\"Zugzwang\">zugzwang</a> réciproque : avoir le <a href=\"https://fr.wikipedia.org/wiki/Trait_(échecs)\" title=\"Trait (échecs)\">trait</a> dans cette position est désavantageux pour les blancs comme pour les noirs.</div>\n</div>\n</div>\n<p>La fin de partie, ou finale, est la phase de la partie qui se déroule lorsqu'il ne reste que quelques pièces sur l'échiquier<sup id=\"cite_ref-16\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-16\">[G 10]</a></sup>. Il y a trois différences stratégiques avec les étapes précédentes :</p>\n<ul><li>Lors de la finale les pions prennent une importance particulière, les finales se résument souvent à tenter de promouvoir les pions en les amenant sur la dernière rangée de l'échiquier.</li>\n<li>Le roi, qui doit être protégé pendant le milieu de partie à cause de la menace de se faire mater, devient une pièce puissante en finale. Il est souvent amené au centre de l'échiquier où il peut protéger ses pions, attaquer les pions adverses et gêner les mouvements du roi adverse.</li>\n<li>Le <a href=\"https://fr.wikipedia.org/wiki/Zugzwang\" title=\"Zugzwang\">zugzwang</a>, situation où tous les coups légaux sont défavorables alors que passer son tour n'est pas possible aux échecs, est souvent un facteur de première importance dans les finales. C'est rarement le cas en milieu ou en début de partie, car un zugzwang ne se produit généralement que lorsqu'il reste peu de matériel. Par exemple, le diagramme ci-contre est un zugzwang réciproque (un zugzwang pour les deux camps) : si les noirs ont le trait ils sont obligés de jouer 1…Rb7 et ils laissent ainsi les blancs promouvoir leur pion en dame après 2.Rd7 ; si les blancs ont le trait ils doivent soit jouer 1.Rc6 qui pate le roi noir, soit perdre leur pion en jouant tout autre coup, dans les deux cas ils concèdent la partie nulle.</li>\n</ul><p>Les finales sont classées en fonction du type de pièces qui restent sur l'échiquier. Les mats de base sont les positions dans lesquelles un camp possède un roi seul et l'autre camp une ou deux pièces en mesure de mater, en combinant les efforts de ces pièces et du roi. Par exemple, les finales de pions ne comportent que des rois et des pions dans les deux camps et la tâche du camp le plus fort consiste à promouvoir un pion. Les finales plus complexes sont classées en fonction des pièces sur l'échiquier en-dehors des rois, par exemple tour et pion contre tour. Toutes les finales de six pièces ou moins au total, rois inclus, ont été entièrement analysées par ordinateur. Le résultat de ces analyses forme les <a href=\"https://fr.wikipedia.org/wiki/Table_de_finale\" title=\"Table de finale\">tables de finales</a>.</p>\n<h2>Parties[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=21\" title=\"Modifier la section : Parties\">modifier le code</a>]</h2>\n<h3>Miniatures[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=22\" title=\"Modifier la section : Miniatures\">modifier le code</a>]</h3>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\">Mat du berger\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdl45.svg\" class=\"image\" title=\"Tour noire sur case blanche a8\"><img alt=\"Tour noire sur case blanche a8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/22px-Chess_rdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/33px-Chess_rdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/44px-Chess_rdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdl45.svg\" class=\"image\" title=\"Fou noir sur case blanche c8\"><img alt=\"Fou noir sur case blanche c8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/22px-Chess_bdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/33px-Chess_bdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/44px-Chess_bdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qdd45.svg\" class=\"image\" title=\"Reine noire sur case noire d8\"><img alt=\"Reine noire sur case noire d8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/22px-Chess_qdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/33px-Chess_qdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/44px-Chess_qdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche e8\"><img alt=\"Roi noir sur case blanche e8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/22px-Chess_kdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/33px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/44px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdd45.svg\" class=\"image\" title=\"Fou noir sur case noire f8\"><img alt=\"Fou noir sur case noire f8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/22px-Chess_bdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/33px-Chess_bdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/44px-Chess_bdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdd45.svg\" class=\"image\" title=\"Tour noire sur case noire h8\"><img alt=\"Tour noire sur case noire h8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/22px-Chess_rdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/33px-Chess_rdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/44px-Chess_rdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire a7\"><img alt=\"Pion noir sur case noire a7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche b7\"><img alt=\"Pion noir sur case blanche b7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire c7\"><img alt=\"Pion noir sur case noire c7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche d7\"><img alt=\"Pion noir sur case blanche d7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qll45.svg\" class=\"image\" title=\"Reine blanche sur case blanche f7\"><img alt=\"Reine blanche sur case blanche f7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/22px-Chess_qll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/33px-Chess_qll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/44px-Chess_qll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire g7\"><img alt=\"Pion noir sur case noire g7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche h7\"><img alt=\"Pion noir sur case blanche h7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndl45.svg\" class=\"image\" title=\"Cavalier noir sur case blanche c6\"><img alt=\"Cavalier noir sur case blanche c6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/22px-Chess_ndl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/33px-Chess_ndl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/44px-Chess_ndl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndd45.svg\" class=\"image\" title=\"Cavalier noir sur case noire f6\"><img alt=\"Cavalier noir sur case noire f6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/22px-Chess_ndd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/33px-Chess_ndd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/44px-Chess_ndd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire e5\"><img alt=\"Pion noir sur case noire e5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bll45.svg\" class=\"image\" title=\"Fou blanc sur case blanche c4\"><img alt=\"Fou blanc sur case blanche c4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/22px-Chess_bll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/33px-Chess_bll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/44px-Chess_bll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche e4\"><img alt=\"Pion blanc sur case blanche e4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche a2\"><img alt=\"Pion blanc sur case blanche a2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire b2\"><img alt=\"Pion blanc sur case noire b2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche c2\"><img alt=\"Pion blanc sur case blanche c2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire d2\"><img alt=\"Pion blanc sur case noire d2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire f2\"><img alt=\"Pion blanc sur case noire f2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche g2\"><img alt=\"Pion blanc sur case blanche g2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire h2\"><img alt=\"Pion blanc sur case noire h2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rld45.svg\" class=\"image\" title=\"Tour blanche sur case noire a1\"><img alt=\"Tour blanche sur case noire a1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/22px-Chess_rld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/33px-Chess_rld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/44px-Chess_rld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche b1\"><img alt=\"Cavalier blanc sur case blanche b1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/22px-Chess_nll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/33px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/44px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bld45.svg\" class=\"image\" title=\"Fou blanc sur case noire c1\"><img alt=\"Fou blanc sur case noire c1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/22px-Chess_bld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/33px-Chess_bld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/44px-Chess_bld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kld45.svg\" class=\"image\" title=\"Roi blanc sur case noire e1\"><img alt=\"Roi blanc sur case noire e1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/22px-Chess_kld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/33px-Chess_kld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/44px-Chess_kld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nld45.svg\" class=\"image\" title=\"Cavalier blanc sur case noire g1\"><img alt=\"Cavalier blanc sur case noire g1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/22px-Chess_nld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/33px-Chess_nld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/44px-Chess_nld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rll45.svg\" class=\"image\" title=\"Tour blanche sur case blanche h1\"><img alt=\"Tour blanche sur case blanche h1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/22px-Chess_rll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/33px-Chess_rll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/44px-Chess_rll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">Après 3. Dxf7 mat</div>\n</div>\n</div>\n<p>Une miniature est généralement définie comme une partie d'échecs qui se termine en moins de 20 coups<sup id=\"cite_ref-17\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-17\">[G 11]</a></sup>. Cela peut être une partie entre débutants, comme le <a href=\"https://fr.wikipedia.org/wiki/Coup_du_berger\" title=\"Coup du berger\">coup du berger</a> reproduit ci-dessous, ou bien une partie terminée rapidement entre forts joueurs.</p>\n<ul><li>Le <a href=\"https://fr.wikipedia.org/wiki/Coup_du_berger\" title=\"Coup du berger\">coup du berger</a> est une partie de débutants, elle exploite la faiblesse du pion noir f7, qui n'est défendu que par le roi. La légende dit qu'il aurait été inventé par un berger ayant été défié par un roi. Le coup du berger permet de battre très rapidement les joueurs débutants. Voir le diagramme ci-contre, la partie se déroule généralement ainsi : <b>1. e4 e5 2. Fc4 Cc6 3. Dh5 Cf6?? 4. Dxf7 mat</b></li>\n</ul><ul><li>Le <a href=\"https://fr.wikipedia.org/wiki/Mat_du_lion\" title=\"Mat du lion\">mat du lion</a>, appelé également mat du sot ou mat de l'écolier, est la partie la plus courte qu'il est possible de jouer, elle est gagnée par les noirs en seulement deux coups : <b>1.g4 e5 2.f3 Dh4 mat</b>.</li>\n</ul><ul><li>Le <a href=\"https://fr.wikipedia.org/wiki/Mat_de_Legal\" title=\"Mat de Legal\">mat de Legal</a> est quant à lui déjà plus sophistiqué.</li>\n</ul><ul><li>La <a href=\"https://fr.wikipedia.org/wiki/Partie_de_l%27opéra\" title=\"Partie de l'opéra\">partie de l'opéra</a>, jouée par <a href=\"https://fr.wikipedia.org/wiki/Paul_Morphy\" title=\"Paul Morphy\">Paul Morphy</a> contre le <a href=\"https://fr.wikipedia.org/wiki/Brunswick-Lunebourg\" title=\"Brunswick-Lunebourg\" class=\"mw-redirect\">duc de Brunswick</a> et le comte Isouard en <a href=\"https://fr.wikipedia.org/wiki/1858\" title=\"1858\">1858</a>, est célèbre pour son contenu spectaculaire.</li>\n</ul><h3>Partie commentée[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=23\" title=\"Modifier la section : Partie commentée\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Partie_immortelle\" title=\"Partie immortelle\">Partie immortelle</a>.</div>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\">\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdl45.svg\" class=\"image\" title=\"Tour noire sur case blanche a8\"><img alt=\"Tour noire sur case blanche a8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/22px-Chess_rdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/33px-Chess_rdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/44px-Chess_rdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndd45.svg\" class=\"image\" title=\"Cavalier noir sur case noire b8\"><img alt=\"Cavalier noir sur case noire b8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/22px-Chess_ndd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/33px-Chess_ndd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/44px-Chess_ndd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdl45.svg\" class=\"image\" title=\"Fou noir sur case blanche c8\"><img alt=\"Fou noir sur case blanche c8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/22px-Chess_bdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/33px-Chess_bdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/44px-Chess_bdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche e8\"><img alt=\"Roi noir sur case blanche e8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/22px-Chess_kdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/33px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/44px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdd45.svg\" class=\"image\" title=\"Fou noir sur case noire f8\"><img alt=\"Fou noir sur case noire f8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/22px-Chess_bdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/33px-Chess_bdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/44px-Chess_bdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdd45.svg\" class=\"image\" title=\"Tour noire sur case noire h8\"><img alt=\"Tour noire sur case noire h8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/22px-Chess_rdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/33px-Chess_rdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/44px-Chess_rdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire a7\"><img alt=\"Pion noir sur case noire a7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche d7\"><img alt=\"Pion noir sur case blanche d7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche f7\"><img alt=\"Pion noir sur case blanche f7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire g7\"><img alt=\"Pion noir sur case noire g7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche h7\"><img alt=\"Pion noir sur case blanche h7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche c6\"><img alt=\"Pion noir sur case blanche c6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndd45.svg\" class=\"image\" title=\"Cavalier noir sur case noire f6\"><img alt=\"Cavalier noir sur case noire f6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/22px-Chess_ndd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/33px-Chess_ndd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Chess_ndd45.svg/44px-Chess_ndd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bll45.svg\" class=\"image\" title=\"Fou blanc sur case blanche b5\"><img alt=\"Fou blanc sur case blanche b5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/22px-Chess_bll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/33px-Chess_bll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/44px-Chess_bll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche f5\"><img alt=\"Cavalier blanc sur case blanche f5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/22px-Chess_nll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/33px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/44px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qdd45.svg\" class=\"image\" title=\"Reine noire sur case noire g5\"><img alt=\"Reine noire sur case noire g5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/22px-Chess_qdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/33px-Chess_qdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/44px-Chess_qdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche e4\"><img alt=\"Pion blanc sur case blanche e4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire f4\"><img alt=\"Pion noir sur case noire f4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche g4\"><img alt=\"Pion blanc sur case blanche g4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche d3\"><img alt=\"Pion blanc sur case blanche d3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche a2\"><img alt=\"Pion blanc sur case blanche a2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire b2\"><img alt=\"Pion blanc sur case noire b2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche c2\"><img alt=\"Pion blanc sur case blanche c2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire h2\"><img alt=\"Pion blanc sur case noire h2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rld45.svg\" class=\"image\" title=\"Tour blanche sur case noire a1\"><img alt=\"Tour blanche sur case noire a1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/22px-Chess_rld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/33px-Chess_rld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/44px-Chess_rld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche b1\"><img alt=\"Cavalier blanc sur case blanche b1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/22px-Chess_nll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/33px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/44px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bld45.svg\" class=\"image\" title=\"Fou blanc sur case noire c1\"><img alt=\"Fou blanc sur case noire c1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/22px-Chess_bld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/33px-Chess_bld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/44px-Chess_bld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qll45.svg\" class=\"image\" title=\"Reine blanche sur case blanche d1\"><img alt=\"Reine blanche sur case blanche d1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/22px-Chess_qll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/33px-Chess_qll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/44px-Chess_qll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kll45.svg\" class=\"image\" title=\"Roi blanc sur case blanche f1\"><img alt=\"Roi blanc sur case blanche f1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/22px-Chess_kll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/33px-Chess_kll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/44px-Chess_kll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rld45.svg\" class=\"image\" title=\"Tour blanche sur case noire g1\"><img alt=\"Tour blanche sur case noire g1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/22px-Chess_rld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/33px-Chess_rld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/44px-Chess_rld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">Après 11.Tg1!</div>\n</div>\n</div>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\">\n<div class=\"thumbinner\" style=\"width:214px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png\" width=\"176\" height=\"176\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/264px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/352px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div style=\"position:absolute;z-index:3;top:0px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdl45.svg\" class=\"image\" title=\"Tour noire sur case blanche a8\"><img alt=\"Tour noire sur case blanche a8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/22px-Chess_rdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/33px-Chess_rdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/44px-Chess_rdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdl45.svg\" class=\"image\" title=\"Fou noir sur case blanche c8\"><img alt=\"Fou noir sur case blanche c8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/22px-Chess_bdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/33px-Chess_bdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/44px-Chess_bdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d8 vide\" style=\"position:absolute;z-index:3;top:0px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdl45.svg\" class=\"image\" title=\"Roi noir sur case blanche e8\"><img alt=\"Roi noir sur case blanche e8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/22px-Chess_kdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/33px-Chess_kdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/04/Chess_kdl45.svg/44px-Chess_kdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndl45.svg\" class=\"image\" title=\"Cavalier noir sur case blanche g8\"><img alt=\"Cavalier noir sur case blanche g8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/22px-Chess_ndl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/33px-Chess_ndl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/44px-Chess_ndl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdd45.svg\" class=\"image\" title=\"Tour noire sur case noire h8\"><img alt=\"Tour noire sur case noire h8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/22px-Chess_rdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/33px-Chess_rdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/44px-Chess_rdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire a7\"><img alt=\"Pion noir sur case noire a7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:22px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:22px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche d7\"><img alt=\"Pion noir sur case blanche d7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:22px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:22px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche f7\"><img alt=\"Pion noir sur case blanche f7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire g7\"><img alt=\"Pion noir sur case noire g7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/22px-Chess_pdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/33px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/44px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:22px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche h7\"><img alt=\"Pion noir sur case blanche h7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:44px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_ndl45.svg\" class=\"image\" title=\"Cavalier noir sur case blanche a6\"><img alt=\"Cavalier noir sur case blanche a6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/22px-Chess_ndl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/33px-Chess_ndl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Chess_ndl45.svg/44px-Chess_ndl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:44px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:44px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:44px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bld45.svg\" class=\"image\" title=\"Fou blanc sur case noire d6\"><img alt=\"Fou blanc sur case noire d6\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/22px-Chess_bld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/33px-Chess_bld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/44px-Chess_bld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:44px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:44px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:44px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:44px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:66px;left:0px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:22px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche b5\"><img alt=\"Pion noir sur case blanche b5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/22px-Chess_pdl45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/33px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/44px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:66px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche d5\"><img alt=\"Cavalier blanc sur case blanche d5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/22px-Chess_nll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/33px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/44px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pld45.svg\" class=\"image\" title=\"Pion blanc sur case noire e5\"><img alt=\"Pion blanc sur case noire e5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/22px-Chess_pld45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/33px-Chess_pld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Chess_pld45.svg/44px-Chess_pld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:66px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche f5\"><img alt=\"Cavalier blanc sur case blanche f5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/22px-Chess_nll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/33px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/44px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:66px;left:132px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:66px;left:154px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche h5\"><img alt=\"Pion blanc sur case blanche h5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:88px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:88px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:88px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:88px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:88px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:88px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:88px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche g4\"><img alt=\"Pion blanc sur case blanche g4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:88px;left:154px;width:22px;height:22px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:110px;left:0px;width:22px;height:22px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:110px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:110px;left:44px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:66px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche d3\"><img alt=\"Pion blanc sur case blanche d3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:110px;left:88px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:110px;left:110px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qll45.svg\" class=\"image\" title=\"Reine blanche sur case blanche f3\"><img alt=\"Reine blanche sur case blanche f3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/22px-Chess_qll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/33px-Chess_qll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/44px-Chess_qll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:110px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:110px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche a2\"><img alt=\"Pion blanc sur case blanche a2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:132px;left:22px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:44px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche c2\"><img alt=\"Pion blanc sur case blanche c2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/22px-Chess_pll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/33px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/44px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:132px;left:66px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:132px;left:88px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kll45.svg\" class=\"image\" title=\"Roi blanc sur case blanche e2\"><img alt=\"Roi blanc sur case blanche e2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/22px-Chess_kll45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/33px-Chess_kll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/44px-Chess_kll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:132px;left:110px;width:22px;height:22px\"/>\n<div title=\"Case blanche g2 vide\" style=\"position:absolute;z-index:3;top:132px;left:132px;width:22px;height:22px\"/>\n<div title=\"Case noire h2 vide\" style=\"position:absolute;z-index:3;top:132px;left:154px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:0px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qdd45.svg\" class=\"image\" title=\"Reine noire sur case noire a1\"><img alt=\"Reine noire sur case noire a1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/22px-Chess_qdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/33px-Chess_qdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Chess_qdd45.svg/44px-Chess_qdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:154px;left:22px;width:22px;height:22px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:154px;left:44px;width:22px;height:22px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:154px;left:66px;width:22px;height:22px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:154px;left:88px;width:22px;height:22px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:154px;left:110px;width:22px;height:22px\"/>\n<div style=\"position:absolute;z-index:3;top:154px;left:132px;width:22px;height:22px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdd45.svg\" class=\"image\" title=\"Fou noir sur case noire g1\"><img alt=\"Fou noir sur case noire g1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/22px-Chess_bdd45.svg.png\" width=\"22\" height=\"22\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/33px-Chess_bdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/44px-Chess_bdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:154px;left:154px;width:22px;height:22px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:22px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:22px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:22px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">Après 20…Ca6<br/>\nLes blancs matent en 3 coups.</div>\n</div>\n</div>\n<p>Cette partie a opposé <a href=\"https://fr.wikipedia.org/wiki/Adolf_Anderssen\" title=\"Adolf Anderssen\">Adolf Anderssen</a> à <a href=\"https://fr.wikipedia.org/wiki/Lionel_Kieseritzky\" title=\"Lionel Kieseritzky\">Lionel Kieseritzky</a> à <a href=\"https://fr.wikipedia.org/wiki/Londres\" title=\"Londres\">Londres</a>, en <a href=\"https://fr.wikipedia.org/wiki/1851\" title=\"1851\">1851</a>.</p>\n<p><b>1. e4 e5 2. f4</b></p>\n<p>Le principe de cette ouverture, le <a href=\"https://fr.wikipedia.org/wiki/Gambit_du_roi\" title=\"Gambit du roi\">gambit du roi</a>, est de sacrifier un pion dès le deuxième coup pour attaquer.</p>\n<p><b>2… exf4 3. Fc4 Dh4+ 4. Rf1 b5</b></p>\n<p>C'est Kieseritzky qui a découvert ce coup. Le but est d'écarter le fou du roi de la diagonale a2-g8, tout en préparant une attaque ultérieure de pions.</p>\n<p><b>5. Fxb5 Cf6 6. Cf3 Dh6</b></p>\n<p>Ici, les noirs se trompent. La place de la dame est en h5. Ce coup vient à l'encontre de la suite logique du coup en 5.</p>\n<p><b>7. d3 Ch5 8. Ch4! Dg5 9. Cf5! c6 10. g4 Cf6</b></p>\n<p>Les noirs sont maintenant acculés à la défensive.</p>\n<p><b>11. Tg1!</b></p>\n<p>Ce sacrifice du fou ôte tout espoir de contre-attaque aux noirs. Les pièces noires développées doivent retourner à leur base.</p>\n<p><b>11…cxb5 12. h4 Dg6 13. h5 Dg5 14. Df3 Cg8</b></p>\n<p>À cause de 15. Fxf4, les noirs sont contraints d'assurer une case de retraite pour leur dame.</p>\n<p><b>15. Fxf4 Df6 16. Cc3</b></p>\n<p>Toutes les pièces noires sont revenues à leur base, ou presque.</p>\n<p><b>16…Fc5 17. Cd5! Dxb2 18. Fd6! Fxg1</b></p>\n<p>Les noirs ne peuvent prendre le Fd6, car la suite est forcée : 18…Fxd6 19. Cxd6+ Rd8 20. Cxf7+ Re8 21. Cd6+ Rd8 22. Df8 mat. Les blancs ont une telle avance de développement que la décision ne saurait tarder.</p>\n<p><b>19. e5!</b></p>\n<p>La dame noire est privée de la grande diagonale. Une menace de mat, commençant par 20. Cxg7+, est aussi dans l'air.</p>\n<p><b>19…Dxa1+ 20. Re2 Ca6</b></p>\n<p>Kieseritzky s'imagine que la menace de mat est écartée, car la case c7 est protégée. C'est maintenant qu'Anderssen le surprend.</p>\n<p><b>21. Cxg7+ Rd8 22. Df6+!! Cxf6 23. Fe7 <a href=\"https://fr.wikipedia.org/wiki/Échec_et_mat\" title=\"Échec et mat\">mat</a></b></p>\n<p>La coordination des trois pièces blanches tout comme la position des pièces noires, toutes présentes sur l'<a href=\"https://fr.wikipedia.org/wiki/Échiquier\" title=\"Échiquier\">échiquier</a> mais mal coordonnées, ont valu à cette partie le qualificatif « d'Immortelle » par le commentateur Falkbeer, qui publia une analyse détaillée de cette partie en 1855 dans la magazine <i>Wiener Schachzeitung</i><sup id=\"cite_ref-18\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-18\">[7]</a></sup>. Il fit remarquer que la position finale est un <a href=\"https://fr.wikipedia.org/wiki/Lexique_de_la_composition_échiquéenne#M\" title=\"Lexique de la composition échiquéenne\">mat modèle</a>, ce à quoi fut certainement sensible Anderssen qui était également un compositeur de <a href=\"https://fr.wikipedia.org/wiki/Problème_d%27échecs\" title=\"Problème d'échecs\">problèmes d'échecs</a>.</p>\n<h3>Parties célèbres[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=24\" title=\"Modifier la section : Parties célèbres\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Liste_de_parties_d%27échecs_remarquables\" title=\"Liste de parties d'échecs remarquables\">Liste de parties d'échecs remarquables</a>.</div>\n<ul><li><a href=\"https://fr.wikipedia.org/wiki/Partie_immortelle\" title=\"Partie immortelle\">Partie immortelle</a>, jouée par Adolf Anderssen et Lionel Kieseritzky en 1851</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/La_Toujours_Jeune\" title=\"La Toujours Jeune\">La Toujours Jeune</a>, jouée par Adolf Anderssen et Jean Dufresne en 1852</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Partie_de_l%27opéra\" title=\"Partie de l'opéra\">Partie de l'opéra</a>, jouée par Paul Morphy contre le duc de Brunswick et le comte Isouard en 1858</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Lasker_-_Bauer_(Amsterdam,_1889)\" title=\"Lasker - Bauer (Amsterdam, 1889)\" class=\"mw-redirect\">Lasker - Bauer</a>, jouée par Emanuel Lasker et Johann Bauer en 1889</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Maróczy_-_Tartakover_(Teplitz-Schönau,_1922)\" title=\"Maróczy - Tartakover (Teplitz-Schönau, 1922)\" class=\"mw-redirect\">Maróczy - Tartakover</a>, jouée par Géza Maróczy et Xavier Tartakover en 1922</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Partie_du_siècle\" title=\"Partie du siècle\">Partie du siècle</a>, jouée par Donald Byrne et Bobby Fischer en 1956</li>\n</ul><h2>Compétition[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=25\" title=\"Modifier la section : Compétition\">modifier le code</a>]</h2>\n<h3>Jeu à la pendule[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=26\" title=\"Modifier la section : Jeu à la pendule\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Pendule_d%27échecs\" title=\"Pendule d'échecs\">Pendule d'échecs</a>.</div>\n<p>Une partie d'échecs pouvant durer plusieurs heures, il est nécessaire de limiter et de décompter le temps de réflexion de chacun des joueurs.</p>\n<p>Au début, chaque coup devait être joué dans un temps imparti (5 minutes par coup, par exemple). Ensuite, l'utilisation d'une <a href=\"https://fr.wikipedia.org/wiki/Pendule_d%27échecs\" title=\"Pendule d'échecs\">pendule</a> <i>ad hoc</i> a permis d'attribuer un temps de réflexion global pour la durée de la partie, ou bien pour un nombre déterminé de coups, par exemple 40 coups en deux heures.</p>\n<h4>Pendule[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=27\" title=\"Modifier la section : Pendule\">modifier le code</a>]</h4>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Sah_sahovska_ura.png\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Sah_sahovska_ura.png/220px-Sah_sahovska_ura.png\" width=\"220\" height=\"140\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/6/6b/Sah_sahovska_ura.png 1.5x, //upload.wikimedia.org/wikipedia/commons/6/6b/Sah_sahovska_ura.png 2x\" data-file-width=\"315\" data-file-height=\"200\"/></a>\n<div class=\"thumbcaption\">\n\nPendule classique</div>\n</div>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Digitalna_sahovska_ura2.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6d/Digitalna_sahovska_ura2.jpg/220px-Digitalna_sahovska_ura2.jpg\" width=\"220\" height=\"154\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/6/6d/Digitalna_sahovska_ura2.jpg/330px-Digitalna_sahovska_ura2.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6d/Digitalna_sahovska_ura2.jpg/440px-Digitalna_sahovska_ura2.jpg 2x\" data-file-width=\"494\" data-file-height=\"346\"/></a>\n<div class=\"thumbcaption\">\n\nPendule électronique</div>\n</div>\n</div>\n<p>La <a href=\"https://fr.wikipedia.org/wiki/Pendule_d%27échecs\" title=\"Pendule d'échecs\">pendule</a> d'échecs est un boîtier juxtaposant deux horloges identiques, mécaniques ou électroniques, commandées par deux boutons reliés par une bascule. Elle est toujours utilisée dans les compétitions homologuées par la FIDE<sup id=\"cite_ref-19\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-19\">[8]</a></sup>. Après avoir joué son coup, le joueur au trait appuie (avec la main qui a déplacé la pièce) sur le bouton de l'horloge situé de son côté. Cela stoppe son horloge, relève le bouton de son adversaire et remet en marche l'horloge de celui-ci.</p>\n<p>Dans le cas d'une pendule mécanique, le cadran de chaque horloge est équipé d'un <i>drapeau</i>, petite pièce de plastique ou de métal libre mobile autour d'un axe placé à la gauche du nombre 12. Ce drapeau est progressivement soulevé lorsque l'aiguille des minutes approche du 12 de l'horloge, puis retombe brusquement lorsqu'elle l'atteint précisément. Si la chute du drapeau se produit avant que le joueur ait effectué le nombre de coups exigé par la cadence en vigueur, celui-ci perd immédiatement la partie, sauf si l'adversaire dispose d'un matériel insuffisant pour mater, auquel cas la partie se conclut par une nulle.</p>\n<p>Les pendules électroniques permettent une plus grande précision lors des phases de <i><a href=\"https://fr.wikipedia.org/wiki/Zeitnot\" title=\"Zeitnot\">Zeitnot</a></i> et autorisent d'autres cadences de jeu, notamment celles avec incrément (cadences « <a href=\"https://fr.wikipedia.org/wiki/Pendule_d%27échecs#Cadence_Fischer\" title=\"Pendule d'échecs\">Fischer</a> » ou « <a href=\"https://fr.wikipedia.org/wiki/David_Bronstein\" title=\"David Bronstein\">Bronstein</a> »). La polyvalence des pendules électroniques leur permet aussi d'être utilisées dans d'autres jeux, comme le <a href=\"https://fr.wikipedia.org/wiki/Shōgi\" title=\"Shōgi\">shōgi</a>, le <a href=\"https://fr.wikipedia.org/wiki/Jeu_de_go\" title=\"Jeu de go\" class=\"mw-redirect\">jeu de go</a> ou le <a href=\"https://fr.wikipedia.org/wiki/Scrabble\" title=\"Scrabble\">Scrabble</a>.</p>\n<p>L'arbitre choisit de placer la pendule du côté de l'échiquier qui lui convient. Souvent, le joueur qui a les noirs peut choisir le côté de la table où il s'installe. Néanmoins, la décision finale revient à l'arbitre.</p>\n<h4>Cadences de jeu[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=28\" title=\"Modifier la section : Cadences de jeu\">modifier le code</a>]</h4>\n<p>Une <i>cadence</i> est composée d'une ou plusieurs périodes. Une <i>période</i> est définie par un nombre minimal de coups à jouer en un certain temps. La fin d'une période est appelé <i>contrôle de temps</i>.</p>\n<p>La cadence habituelle des parties en compétition est d'une heure et trente minutes pour quarante coups, puis trente minutes pour la fin de la partie, avec un incrément de trente secondes dès le premier coup. Avant la généralisation des pendules électroniques, la cadence usuelle était de deux heures pour quarante coups, puis une heure KO.</p>\n<p>Le temps imparti à chacun des joueurs permet de répartir les parties en plusieurs classes. Chacune d'elle a ses règles spécifiques :</p>\n<ul><li><i><a href=\"https://fr.wikipedia.org/wiki/Blitz_(échecs)\" title=\"Blitz (échecs)\">blitz</a></i> (de l'allemand « éclair ») : partie de moins de quinze minutes par joueur, comptées pour soixante coups si la cadence prévoit un incrément<sup id=\"cite_ref-laws-app_20-0\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-laws-app-20\">[9]</a></sup> ;</li>\n<li><i>partie rapide</i> : partie de quinze à soixante minutes par joueur, comptées pour soixante coups si la cadence prévoit un incrément<sup id=\"cite_ref-laws-app_20-1\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-laws-app-20\">[9]</a></sup> ;</li>\n<li>la <i>cadence de tournoi</i> ou <i>longue</i> : pour la FIDE, c'est une partie de deux heures KO au minimum, ou deux heures pour soixante coups si la cadence prévoit un incrément. Cependant, une cadence inférieure est acceptable dans les compétitions ouvertes seulement aux joueurs dont le <a href=\"https://fr.wikipedia.org/wiki/Classement_Elo\" title=\"Classement Elo\">classement Elo</a> est limité : 1 <abbr class=\"abbr\" title=\"heure\">h</abbr> 30 au minimum si tous les joueurs ont moins de 2200, 1 h au minimum si tous les joueurs ont moins de 1600<sup id=\"cite_ref-21\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-21\">[10]</a></sup> ;</li>\n<li>les <i>parties par correspondance</i> durent plusieurs semaines, la cadence généralement adoptée par l'<a href=\"https://fr.wikipedia.org/wiki/International_Correspondence_Chess_Federation\" title=\"International Correspondence Chess Federation\">ICCF</a> est de cinquante jours pour dix coups ;</li>\n<li>les <i>parties amicales</i> sont souvent jouées sans décompte du temps.</li>\n</ul><h3>Fédération internationale des échecs (FIDE)[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=29\" title=\"Modifier la section : Fédération internationale des échecs (FIDE)\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Fédération_internationale_des_échecs\" title=\"Fédération internationale des échecs\">Fédération internationale des échecs</a>.</div>\n<p>La <a href=\"https://fr.wikipedia.org/wiki/Fédération_internationale_des_échecs\" title=\"Fédération internationale des échecs\">FIDE</a><sup id=\"cite_ref-22\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-22\">[11]</a></sup> fixe les règles du jeu<sup id=\"cite_ref-laws_23-0\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-laws-23\">[12]</a></sup>, publie le <a href=\"https://fr.wikipedia.org/wiki/Classement_Elo\" title=\"Classement Elo\">classement Elo</a> international<sup id=\"cite_ref-24\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-24\">[13]</a></sup>, octroie les titres de <a href=\"https://fr.wikipedia.org/wiki/Grand_maître_international\" title=\"Grand maître international\">grand maître international</a>, <a href=\"https://fr.wikipedia.org/wiki/Maître_international\" title=\"Maître international\">maître international</a>, <a href=\"https://fr.wikipedia.org/wiki/Maître_de_la_Fédération_internationale_des_échecs\" title=\"Maître de la Fédération internationale des échecs\">maître FIDE</a> et leurs pendants féminins<sup id=\"cite_ref-25\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-25\">[14]</a></sup>, ainsi que les titres d'arbitre FIDE et d'arbitre international<sup id=\"cite_ref-fide-arbitres_26-0\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-fide-arbitres-26\">[15]</a></sup>. Elle organise également les <a href=\"https://fr.wikipedia.org/wiki/Olympiade_d%27échecs\" title=\"Olympiade d'échecs\">Olympiades d'échecs</a> et le <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs\" title=\"Championnat du monde d'échecs\">championnat du monde d'échecs</a>. Les membres de la FIDE sont les fédérations nationales, telle la <a href=\"https://fr.wikipedia.org/wiki/Fédération_française_des_échecs\" title=\"Fédération française des échecs\">Fédération française des échecs</a>.</p>\n<p>La FIDE a une <a href=\"https://fr.wikipedia.org/wiki/Commission_permanente_pour_la_composition_échiquéenne\" title=\"Commission permanente pour la composition échiquéenne\" class=\"mw-redirect\">commission permanente pour la composition échiquéenne</a> qui gère le domaine des problèmes d'échecs et en particulier les <a href=\"https://fr.wikipedia.org/wiki/Catégorie:Compétition_de_problèmes_d%27échecs\" title=\"Catégorie:Compétition de problèmes d'échecs\">compétitions liées aux problèmes d'échecs</a>.</p>\n<p>Les joueurs par correspondance dépendent de la <a href=\"https://fr.wikipedia.org/wiki/International_Correspondence_Chess_Federation\" title=\"International Correspondence Chess Federation\">Fédération internationale du jeu d’échecs par correspondance</a> (ICCF), qui reprend les règles de la FIDE mais dont le classement Elo est indépendant.</p>\n<h3>Arbitrage[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=30\" title=\"Modifier la section : Arbitrage\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Arbitre_d%27échecs\" title=\"Arbitre d'échecs\" class=\"mw-redirect\">Arbitre d'échecs</a>.</div>\n<p>Les parties de compétition sont supervisées par des arbitres qui garantissent le respect des règles du jeu.</p>\n<p>On peut classer les arbitres en deux grandes catégories :</p>\n<ul><li>les arbitres de niveau national avec plusieurs gradations selon leur avancement ;</li>\n<li>les arbitres reconnus par la FIDE : les arbitres FIDE et les arbitres internationaux<sup id=\"cite_ref-fide-arbitres_26-1\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-fide-arbitres-26\">[15]</a></sup>.</li>\n</ul><p>En France, il existe quatre niveaux d’arbitres, de AF4 à AF1, ce dernier étant le niveau plus élevé. Il existe également un titre d'Arbitre Fédéral Jeune pour les 12-16 ans. Le site de la <a href=\"https://fr.wikipedia.org/wiki/Fédération_française_des_échecs\" title=\"Fédération française des échecs\">Fédération française des échecs</a> propose une rubrique sur l'arbitrage<sup id=\"cite_ref-27\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-27\">[16]</a></sup>.</p>\n<h3>Tricherie[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=31\" title=\"Modifier la section : Tricherie\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Tricherie_aux_échecs\" title=\"Tricherie aux échecs\">Tricherie aux échecs</a>.</div>\n<p>Plusieurs moyens permettent de tricher aux échecs. Les plus fréquents sont le non-respect d'une règle du jeu en espérant qu'il ne sera pas sanctionné par l'arbitre, l'utilisation discrète d'un <a href=\"https://fr.wikipedia.org/wiki/Programme_d%27échecs\" title=\"Programme d'échecs\">programme d'échecs</a>, la communication avec un complice. Il existe aussi des cas d'abus du système de <a href=\"https://fr.wikipedia.org/wiki/Classement_Elo\" title=\"Classement Elo\">classement Elo</a> et d'obtention de titres de <a href=\"https://fr.wikipedia.org/wiki/Grand_maître_international\" title=\"Grand maître international\">grand maître international</a> ou d'autres titres. Un tricheur est normalement exclu de la compétition dans laquelle il a triché ; il peut aussi être interdit de toute compétition pour une durée déterminée.</p>\n<h3>Systèmes d'appariement[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=32\" title=\"Modifier la section : Systèmes d'appariement\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Articles détaillés : <a href=\"https://fr.wikipedia.org/wiki/Système_suisse\" title=\"Système suisse\">Système suisse</a> et <a href=\"https://fr.wikipedia.org/wiki/Table_de_Berger\" title=\"Table de Berger\">Table de Berger</a>.</div>\n<p>La plupart des tournois d'échecs au niveau amateur se jouent au <a href=\"https://fr.wikipedia.org/wiki/Système_suisse\" title=\"Système suisse\">système suisse</a>. Ce système permet à tous les joueurs de jouer toutes les rondes, et donne un classement général en fin de tournoi qui désigne clairement le vainqueur. Les compétitions de haut niveau sont généralement jouées avec un petit nombre de joueurs au format toutes rondes (chaque participant rencontre tous les autres) en utilisant la <a href=\"https://fr.wikipedia.org/wiki/Table_de_Berger\" title=\"Table de Berger\">table de Berger</a>. Les coupes par élimination directe sont rares ; cette formule se rencontre essentiellement dans le cadre de la <a href=\"https://fr.wikipedia.org/wiki/Coupe_du_monde_d%27échecs\" title=\"Coupe du monde d'échecs\">coupe du monde d'échecs</a>.</p>\n<h3>Champions du monde[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=33\" title=\"Modifier la section : Champions du monde\">modifier le code</a>]</h3>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Capablanca-Lasker_1925.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Capablanca-Lasker_1925.jpg/220px-Capablanca-Lasker_1925.jpg\" width=\"220\" height=\"140\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Capablanca-Lasker_1925.jpg/330px-Capablanca-Lasker_1925.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/d/d3/Capablanca-Lasker_1925.jpg 2x\" data-file-width=\"331\" data-file-height=\"211\"/></a>\n<div class=\"thumbcaption\">\n\n<a href=\"https://fr.wikipedia.org/wiki/José_Raúl_Capablanca\" title=\"José Raúl Capablanca\">José Raúl Capablanca</a> et <a href=\"https://fr.wikipedia.org/wiki/Emanuel_Lasker\" title=\"Emanuel Lasker\">Emanuel Lasker</a> à <a href=\"https://fr.wikipedia.org/wiki/Moscou\" title=\"Moscou\">Moscou</a> en <a href=\"https://fr.wikipedia.org/wiki/1925\" title=\"1925\">1925</a></div>\n</div>\n</div>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs\" title=\"Championnat du monde d'échecs\">Championnat du monde d'échecs</a>.</div>\n<p>Après sa victoire sur <a href=\"https://fr.wikipedia.org/wiki/Johannes_Zukertort\" title=\"Johannes Zukertort\">Johannes Zukertort</a> en 1886, <a href=\"https://fr.wikipedia.org/wiki/Wilhelm_Steinitz\" title=\"Wilhelm Steinitz\">Wilhelm Steinitz</a> fut le premier champion du monde officiel. Ensuite, le titre fut décerné à qui battait, en match, le champion du monde<sup id=\"cite_ref-28\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-28\">[G 12]</a></sup>. Le tenant du titre choisissait le prétendant parmi les meilleurs joueurs ou parmi ceux qui viendraient avec le meilleur apport financier.</p>\n<ul><li>Wilhelm Steinitz (<a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1886\" title=\"Championnat du monde d'échecs 1886\">1886</a> – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1894\" title=\"Championnat du monde d'échecs 1894\">1894</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Emanuel_Lasker\" title=\"Emanuel Lasker\">Emanuel Lasker</a> (1894 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1921\" title=\"Championnat du monde d'échecs 1921\">1921</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/José_Raúl_Capablanca\" title=\"José Raúl Capablanca\">José Raúl Capablanca</a> (1921 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1927\" title=\"Championnat du monde d'échecs 1927\">1927</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Alexandre_Alekhine\" title=\"Alexandre Alekhine\">Alexandre Alekhine</a> (1927 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1935\" title=\"Championnat du monde d'échecs 1935\">1935</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Max_Euwe\" title=\"Max Euwe\">Max Euwe</a> (1935 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1937\" title=\"Championnat du monde d'échecs 1937\">1937</a>, perdit son titre lors du match revanche en 1937)</li>\n<li>Alexandre Alekhine (1937 – 1946, mort champion du monde)</li>\n</ul><p>Entre 1946 et 1948, il n'y eut pas de champion du monde. Le <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1948\" title=\"Championnat du monde d'échecs 1948\">championnat du monde de 1948</a>, organisé par la <a href=\"https://fr.wikipedia.org/wiki/Fédération_internationale_des_échecs\" title=\"Fédération internationale des échecs\">FIDE</a>, fut un tournoi qui opposa cinq joueurs, et fut suivi, tous les trois ans, à partir de 1951, de matchs disputés au meilleur des vingt-quatre parties. Le prétendant était le vainqueur du <a href=\"https://fr.wikipedia.org/wiki/Tournoi_des_candidats\" title=\"Tournoi des candidats\">tournoi des candidats</a> organisé par la FIDE. En cas de défaite, le champion déchu avait droit, à partir de 1956<sup id=\"cite_ref-29\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-29\">[17]</a></sup>, à un match revanche disputé l'année suivante. En cas d'égalité, le champion conservait son titre.</p>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Anatoly_Karpov.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Anatoly_Karpov.jpg/220px-Anatoly_Karpov.jpg\" width=\"220\" height=\"195\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Anatoly_Karpov.jpg/330px-Anatoly_Karpov.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Anatoly_Karpov.jpg/440px-Anatoly_Karpov.jpg 2x\" data-file-width=\"980\" data-file-height=\"867\"/></a>\n<div class=\"thumbcaption\">\n\n<a href=\"https://fr.wikipedia.org/wiki/Anatoly_Karpov\" title=\"Anatoly Karpov\" class=\"mw-redirect\">Anatoly Karpov</a></div>\n</div>\n</div>\n<ul><li><a href=\"https://fr.wikipedia.org/wiki/Mikhaïl_Botvinnik\" title=\"Mikhaïl Botvinnik\">Mikhaïl Botvinnik</a> (1948 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1957\" title=\"Championnat du monde d'échecs 1957\">1957</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Vassily_Smyslov\" title=\"Vassily Smyslov\">Vassily Smyslov</a> (1957 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1958\" title=\"Championnat du monde d'échecs 1958\">1958</a>, perdit son titre lors du match revanche en 1958)</li>\n<li>Mikhaïl Botvinnik (1958 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1960\" title=\"Championnat du monde d'échecs 1960\">1960</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Mikhaïl_Tal\" title=\"Mikhaïl Tal\">Mikhaïl Tal</a> (1960 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1961\" title=\"Championnat du monde d'échecs 1961\">1961</a>, perdit son titre lors du match revanche en 1961)</li>\n<li>Mikhaïl Botvinnik (1961 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1963\" title=\"Championnat du monde d'échecs 1963\">1963</a>)</li>\n</ul><p>Le droit au match revanche fut aboli en 1963.</p>\n<ul><li><a href=\"https://fr.wikipedia.org/wiki/Tigran_Petrossian\" title=\"Tigran Petrossian\">Tigran Petrossian</a> (1963 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1969\" title=\"Championnat du monde d'échecs 1969\">1969</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Boris_Spassky\" title=\"Boris Spassky\">Boris Spassky</a> (1969 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1972\" title=\"Championnat du monde d'échecs 1972\">1972</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Bobby_Fischer\" title=\"Bobby Fischer\">Bobby Fischer</a> (1972 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1975\" title=\"Championnat du monde d'échecs 1975\">1975</a>, perdit son titre par forfait)</li>\n</ul><p>En 1975, Bobby Fischer refusa de jouer le <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1975\" title=\"Championnat du monde d'échecs 1975\">championnat du monde 1975 contre Anatoli Karpov</a>. Les trois championnats suivants (1978, 1981 et 1984) furent disputés sans compter les parties nulles, le titre revenant au premier joueur remportant six parties.</p>\n<ul><li><a href=\"https://fr.wikipedia.org/wiki/Anatoli_Karpov\" title=\"Anatoli Karpov\">Anatoli Karpov</a> (1975 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1985\" title=\"Championnat du monde d'échecs 1985\">1985</a>)</li>\n</ul><p>En février 1985, Le <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1984\" title=\"Championnat du monde d'échecs 1984\">championnat du monde</a>, commencé en septembre 1984, fut interrompu après 48 parties « <i>pour préserver la santé des joueurs</i> ». Le match fut rejoué en octobre-novembre 1985 en 24 parties et le droit au match revanche fut réintroduit.</p>\n<ul><li><a href=\"https://fr.wikipedia.org/wiki/Garry_Kasparov\" title=\"Garry Kasparov\">Garry Kasparov</a> (1985 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1993\" title=\"Championnat du monde d'échecs 1993\">1993</a>)</li>\n</ul><div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Garri_kasparow_20070318.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Garri_kasparow_20070318.jpg/220px-Garri_kasparow_20070318.jpg\" width=\"220\" height=\"220\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/84/Garri_kasparow_20070318.jpg/330px-Garri_kasparow_20070318.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/84/Garri_kasparow_20070318.jpg/440px-Garri_kasparow_20070318.jpg 2x\" data-file-width=\"1000\" data-file-height=\"999\"/></a>\n<div class=\"thumbcaption\">\n\n<a href=\"https://fr.wikipedia.org/wiki/Garry_Kasparov\" title=\"Garry Kasparov\">Garry Kasparov</a></div>\n</div>\n</div>\n<p>En <a href=\"https://fr.wikipedia.org/wiki/1993\" title=\"1993\">1993</a>, Garry Kasparov provoqua une scission avec la FIDE et créa sa propre fédération, la PCA (<i><a href=\"https://fr.wikipedia.org/wiki/Professional_Chess_Association\" title=\"Professional Chess Association\">Professional Chess Association</a></i>). Il y eut alors deux champions du monde, l'un dit « classique », se revendiquant de la lignée des matchs entamée par Steinitz, l'autre dit « FIDE » vainqueur du « Championnat du monde FIDE ».</p>\n<p>Champions du monde « classiques » de 1993 à <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_2006\" title=\"Championnat du monde d'échecs 2006\">2006</a> :</p>\n<ul><li>Garry Kasparov (<a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_1993\" title=\"Championnat du monde d'échecs 1993\">1993</a> – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_2000_(classique)\" title=\"Championnat du monde d'échecs 2000 (classique)\">2000</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Vladimir_Kramnik\" title=\"Vladimir Kramnik\">Vladimir Kramnik</a> (2000 – 2006)</li>\n</ul><div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Magnus_Carlsen_Tata_Steel_2013.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Magnus_Carlsen_Tata_Steel_2013.jpg/220px-Magnus_Carlsen_Tata_Steel_2013.jpg\" width=\"220\" height=\"146\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Magnus_Carlsen_Tata_Steel_2013.jpg/330px-Magnus_Carlsen_Tata_Steel_2013.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Magnus_Carlsen_Tata_Steel_2013.jpg/440px-Magnus_Carlsen_Tata_Steel_2013.jpg 2x\" data-file-width=\"2100\" data-file-height=\"1398\"/></a>\n<div class=\"thumbcaption\">\n\nLe Norvégien <a href=\"https://fr.wikipedia.org/wiki/Magnus_Carlsen\" title=\"Magnus Carlsen\">Magnus Carlsen</a>, Champion du monde depuis 2013.</div>\n</div>\n</div>\n<p>Champions du monde « FIDE » de 1993 à 2006 :</p>\n<ul><li>Anatoli Karpov (<a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_de_la_Fédération_internationale_des_échecs_1993\" title=\"Championnat du monde de la Fédération internationale des échecs 1993\">1993</a> – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_de_la_Fédération_internationale_des_échecs_1999\" title=\"Championnat du monde de la Fédération internationale des échecs 1999\">1999</a>, perdit son titre par forfait en 1999)</li>\n</ul><p>À partir de 1999, contrairement à la tradition, les championnats du monde « FIDE » furent des tournois à élimination directe. Le champion du monde en titre entrait en lice dès les premiers tours, ce que Karpov n'accepta pas en 1999.</p>\n<ul><li><a href=\"https://fr.wikipedia.org/wiki/Aleksandr_Khalifman\" title=\"Aleksandr Khalifman\">Aleksandr Khalifman</a> (1999 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_de_la_Fédération_internationale_des_échecs_2000\" title=\"Championnat du monde de la Fédération internationale des échecs 2000\">2000</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Viswanathan_Anand\" title=\"Viswanathan Anand\">Viswanathan Anand</a> (2000 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_de_la_Fédération_internationale_des_échecs_2001-2002\" title=\"Championnat du monde de la Fédération internationale des échecs 2001-2002\">2002</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Ruslan_Ponomariov\" title=\"Ruslan Ponomariov\">Ruslan Ponomariov</a> (2002 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_de_la_Fédération_internationale_des_échecs_2004\" title=\"Championnat du monde de la Fédération internationale des échecs 2004\">2004</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Rustam_Qosimjonov\" title=\"Rustam Qosimjonov\">Rustam Qosimjonov</a> (2004 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_de_la_Fédération_internationale_des_échecs_2005\" title=\"Championnat du monde de la Fédération internationale des échecs 2005\">2005</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Veselin_Topalov\" title=\"Veselin Topalov\">Veselin Topalov</a> (2005 – <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_2006\" title=\"Championnat du monde d'échecs 2006\">2006</a>)</li>\n</ul><p>Les championnats du monde 2005 et <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_2007\" title=\"Championnat du monde d'échecs 2007\">2007</a> furent des tournois toutes rondes opposant huit joueurs. En 2006 eut lieu le <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_2006\" title=\"Championnat du monde d'échecs 2006\">match de réunification des deux titres</a>. Vladimir Kramnik battit Veselin Topalov.</p>\n<ul><li>Vladimir Kramnik (2006 – 2007)</li>\n<li>Viswanathan Anand (2007 - 2013)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Magnus_Carlsen\" title=\"Magnus Carlsen\">Magnus Carlsen</a> (depuis <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_2013\" title=\"Championnat du monde d'échecs 2013\">2013</a>)</li>\n</ul><p>À compter de 2008, le championnat du monde « unifié » se joue de nouveau sous la forme de match entre le tenant du titre et son challenger.</p>\n<h3>Championnes du monde[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=34\" title=\"Modifier la section : Championnes du monde\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_féminin\" title=\"Championnat du monde d'échecs féminin\">Championnat du monde d'échecs féminin</a>.</div>\n<h3>Grands tournois[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=35\" title=\"Modifier la section : Grands tournois\">modifier le code</a>]</h3>\n<ul><li><a href=\"https://fr.wikipedia.org/wiki/Coupe_du_monde_d%27échecs\" title=\"Coupe du monde d'échecs\">Coupe du monde d'échecs</a> (à <a href=\"https://fr.wikipedia.org/wiki/Bakou\" title=\"Bakou\">Bakou</a> en 2015)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Grand_Prix_FIDE\" title=\"Grand Prix FIDE\">Grand Prix FIDE</a> (plusieurs tournois)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Festival_d%27échecs_de_Bienne\" title=\"Festival d'échecs de Bienne\">Festival d'échecs de Bienne</a> (Suisse)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Festival_d%27échecs_de_Gibraltar\" title=\"Festival d'échecs de Gibraltar\">Festival d'échecs de Gibraltar</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Finale_du_grand_chelem_d%27échecs_de_Bilbao\" title=\"Finale du grand chelem d'échecs de Bilbao\">Finale du grand chelem d'échecs de Bilbao</a> (Espagne)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Open_Aeroflot\" title=\"Open Aeroflot\">Open Aeroflot</a> à Moscou (Russie)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Open_de_Cappelle-la-Grande\" title=\"Open de Cappelle-la-Grande\">Open de Cappelle-la-Grande</a> (France)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Jeu_d%27échecs_en_Corse\" title=\"Jeu d'échecs en Corse\">Tournoi Corsica Masters</a> (France)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Dortmund\" title=\"Tournoi d'échecs de Dortmund\">Tournoi d'échecs de Dortmund</a> (Allemagne)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_d%27Hastings\" title=\"Tournoi d'échecs d'Hastings\">Tournoi d'échecs d'Hastings</a> (Royaume-Uni)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Mémorial_Capablanca\" title=\"Mémorial Capablanca\">Mémorial Capablanca</a> à La Havane (<a href=\"https://fr.wikipedia.org/wiki/Cuba\" title=\"Cuba\">Cuba</a>)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Londres\" title=\"Tournoi d'échecs de Londres\">Tournoi d'échecs de Londres</a> (<i>London Chess Classic</i>, Angleterre)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Mémorial_Tal\" title=\"Mémorial Tal\">Mémorial Tal</a> à Moscou (Russie)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Poïkovski\" title=\"Tournoi d'échecs de Poïkovski\">Tournoi d'échecs de Poïkovski</a> (tournoi Karpov, Russie)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_des_rois\" title=\"Tournoi des rois\">Tournoi des rois</a> (Roumanie)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Sarajevo\" title=\"Tournoi d'échecs de Sarajevo\">Tournoi d'échecs de Sarajevo</a> (Tournoi Bosna, Bosnie-Herzégovine)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Zurich\" title=\"Tournoi d'échecs de Zurich\">Tournoi d'échecs de Zurich</a> (<i>Zurich Chess Challenge</i>, Suisse)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_de_Wijk_aan_Zee\" title=\"Tournoi de Wijk aan Zee\">Tournoi de Wijk aan Zee</a> (Pays-Bas)</li>\n</ul><p>Depuis la saison 2004-2005, les 70 plus grands événements mondiaux sont regroupés au sein de l'<i>ACP Tour</i>, mise en place par l'<a href=\"https://fr.wikipedia.org/wiki/Association_of_Chess_Professionals\" title=\"Association of Chess Professionals\">ACP</a><sup id=\"cite_ref-30\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-30\">[18]</a></sup>.</p>\n<dl><dt>Anciens grands tournois</dt>\n</dl><ul><li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_d%27Amsterdam\" title=\"Tournoi d'échecs d'Amsterdam\">Tournoi d'échecs d'Amsterdam</a> (Pays-Bas)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Bugojno\" title=\"Tournoi d'échecs de Bugojno\">Tournoi d'échecs de Bugojno</a> (Yougoslavie)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_de_Linares\" title=\"Tournoi de Linares\">Tournoi de Linares</a> (Espagne)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Nankin\" title=\"Tournoi d'échecs de Nankin\">Tournoi d'échecs de Nankin</a> (Chine)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Reggio_Emilia\" title=\"Tournoi d'échecs de Reggio Emilia\">Tournoi d'échecs de Reggio Emilia</a> (Italie)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Sofia\" title=\"Tournoi d'échecs de Sofia\">Tournoi d'échecs de Sofia</a> (Bulgarie)</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Tilburg\" title=\"Tournoi d'échecs de Tilburg\">Tournoi d'échecs de Tilburg</a> (Pays-Bas)</li>\n</ul><h2>Psychologie[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=36\" title=\"Modifier la section : Psychologie\">modifier le code</a>]</h2>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Psychologie_échiquéenne\" title=\"Psychologie échiquéenne\">Psychologie échiquéenne</a>.</div>\n<p>La <a href=\"https://fr.wikipedia.org/wiki/Psychologie\" title=\"Psychologie\">psychologie</a> échiquéenne est l'objet de nombreuses études, on peut classer ces études en deux types : « ceux réalisés par les psychologues pour explorer le fonctionnement du psychisme humain et usant du jeu d'échecs comme outil, […] et, d'autre part, les analyses faites par les joueurs d'échecs […] pour améliorer leur niveau… »<sup id=\"cite_ref-31\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-31\">[19]</a></sup></p>\n<p>Dans la première catégorie, <a href=\"https://fr.wikipedia.org/wiki/Alfred_Binet\" title=\"Alfred Binet\">Alfred Binet</a> publie en 1894 <i>Psychologie des grands calculateurs et joueurs d'échecs</i>, ouvrage dans lequel il étudie les processus cognitifs nécessaires au joueur d'échecs, en particulier les représentations mentales qui permettent aux joueurs d'abstraire l'échiquier et ses pièces afin de réfléchir sans avoir à les déplacer ou jouer une <a href=\"https://fr.wikipedia.org/wiki/Partie_à_l%27aveugle\" title=\"Partie à l'aveugle\">partie à l'aveugle</a><sup id=\"cite_ref-32\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-32\">[20]</a></sup>. En 1946, le psychologue néerlandais (et joueur d'échecs) <a href=\"https://fr.wikipedia.org/wiki/Adriaan_de_Groot\" title=\"Adriaan de Groot\">Adriaan de Groot</a> publie une importante étude des mécanismes du choix des coups. Le grand maître et psychologue <a href=\"https://fr.wikipedia.org/wiki/Reuben_Fine\" title=\"Reuben Fine\">Reuben Fine</a> dans son livre <i>Psychology of the Chess Player</i><sup id=\"cite_ref-33\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-33\">[21]</a></sup> montre que la principale différence entre l'amateur et le maître réside dans la capacité à mémoriser puis reconnaître les différents schémas ou thèmes qui apparaissent lors d'une partie. Il compare cette capacité à la maîtrise d'un langage.</p>\n<p>La deuxième catégorie d'études est surtout l'œuvre de grands maîtres soviétiques, en particulier Benjamin Blumenfeld et <a href=\"https://fr.wikipedia.org/wiki/Nikolaï_Kroguious\" title=\"Nikolaï Kroguious\">Nikolaï Kroguious</a>. Ils analysent la genèse des fautes commises par les joueurs et proposent divers remèdes.</p>\n<h2>Histoire[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=37\" title=\"Modifier la section : Histoire\">modifier le code</a>]</h2>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Histoire_du_jeu_d%27échecs\" title=\"Histoire du jeu d'échecs\">Histoire du jeu d'échecs</a>.</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Bargue_The_Chess_Game.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Bargue_The_Chess_Game.jpg/220px-Bargue_The_Chess_Game.jpg\" width=\"220\" height=\"135\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/19/Bargue_The_Chess_Game.jpg/330px-Bargue_The_Chess_Game.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/19/Bargue_The_Chess_Game.jpg/440px-Bargue_The_Chess_Game.jpg 2x\" data-file-width=\"1300\" data-file-height=\"800\"/></a>\n<div class=\"thumbcaption\">\n\n<i>Le jeu d'échecs</i>, par <a href=\"https://fr.wikipedia.org/wiki/Charles_Bargue\" title=\"Charles Bargue\">Charles Bargue</a></div>\n</div>\n</div>\n<p>De nombreux mythes et théories existent sur l'origine du jeu.</p>\n<h3>Légendes[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=38\" title=\"Modifier la section : Légendes\">modifier le code</a>]</h3>\n<h4>Mythe du brahmane Sissa[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=39\" title=\"Modifier la section : Mythe du brahmane Sissa\">modifier le code</a>]</h4>\n<p>La légende la plus célèbre sur l'origine du jeu d'échecs<sup id=\"cite_ref-333-334_34-0\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-333-334-34\">[G 13]</a></sup> raconte l'histoire du roi <a href=\"https://fr.wikipedia.org/w/index.php?title=Belkib&action=edit&redlink=1\" class=\"new\" title=\"Belkib (page inexistante)\">Belkib</a> (Indes, 3 000 ans avant notre ère) qui cherchait à tout prix à tromper son ennui. Il promit donc une récompense exceptionnelle à qui lui proposerait une distraction qui le satisferait. Lorsque le sage Sissa, fils du Brahmine Dahir, lui présenta le jeu d'échecs, le souverain, enthousiaste, demanda à Sissa ce que celui-ci souhaitait en échange de ce cadeau extraordinaire. Humblement, Sissa demanda au prince de déposer un grain de riz sur la première case, deux sur la deuxième, quatre sur la troisième, et ainsi de suite pour remplir l'échiquier en doublant la quantité de grain à chaque case. Le prince accorda immédiatement cette récompense en apparence modeste, mais son conseiller lui expliqua qu'il venait de signer la mort du royaume car les récoltes de l'année ne suffiraient à s'acquitter du prix du jeu. En effet, sur la dernière case de l'échiquier, il faudrait déposer 2<sup>63</sup> graines, soit plus de neuf milliards de milliards de grains (9 223 372 036 854 775 808 grains précisément), et y ajouter le total des grains déposés sur les cases précédentes, ce qui fait un total de 2<sup>64</sup>-1, soit 18 446 744 073 709 551 615 grains, soit environ 4.10<sup>11</sup> tonnes de riz décortiqué<sup id=\"cite_ref-35\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-35\">[22]</a></sup>.</p>\n<p>Des variantes de cette légende existent, l'une suggérant que le roi accepta à condition que le sage compte les graines lui-même, une autre affirmant que Sissa eut la tête tranchée pour une telle effronterie. Certaines versions disent que Sissa ne demanda rien en échange mais que le roi insistant, Sissa aurait alors décidé de se moquer du roi en lui demandant une récompense qu'il ne pourrait donner.</p>\n<h4>Légende grecque[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=40\" title=\"Modifier la section : Légende grecque\">modifier le code</a>]</h4>\n<p>Une autre légende place l'invention du jeu durant la <a href=\"https://fr.wikipedia.org/wiki/Guerre_de_Troie\" title=\"Guerre de Troie\">guerre de Troie</a>. <a href=\"https://fr.wikipedia.org/wiki/Palamède_(mythologie)\" title=\"Palamède (mythologie)\">Palamède</a>, l'un des héros grecs, aurait inventé le jeu pour remonter le moral des troupes durant le siège de Troie<sup id=\"cite_ref-36\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-36\">[23]</a></sup>, ainsi que d'autres jeux : « Les Grecs lui attribuaient [à Palamède] l'invention de plusieurs lettres de leur alphabet, de la monnaie, des dés, des osselets et du « jeu d'échecs » (sic) »<sup id=\"cite_ref-37\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-37\">[24]</a></sup><sup class=\"reference cite_virgule\">,</sup><sup id=\"cite_ref-38\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-38\">[25]</a></sup>. C'est l'origine du nom de la première revue échiquéenne, <i><a href=\"https://fr.wikipedia.org/wiki/Le_Palamède\" title=\"Le Palamède\">Le Palamède</a></i>. Cette légende est née d'une traduction erronée du mot grec πεττεία (petteia), un terme désignant un jeu de plateau différent des échecs, l'équivalent du <a href=\"https://fr.wikipedia.org/wiki/Senet\" title=\"Senet\">senet</a> égyptien<sup id=\"cite_ref-39\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-39\">[26]</a></sup> et ancêtre probable du <a href=\"https://fr.wikipedia.org/wiki/Hnefatafl\" title=\"Hnefatafl\" class=\"mw-redirect\">Tablut</a> ou « Jeu des cinq lignes »<sup id=\"cite_ref-40\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-40\">[27]</a></sup> parfois traduit, à tort, par « dames »<sup id=\"cite_ref-41\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-41\">[28]</a></sup> ou « échecs »<sup id=\"cite_ref-42\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-42\">[29]</a></sup>.</p>\n<h4>Légende latine[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=41\" title=\"Modifier la section : Légende latine\">modifier le code</a>]</h4>\n<p>Selon une autre légende, inventée par le poète anglais <a href=\"https://fr.wikipedia.org/wiki/William_Jones_(linguiste)\" title=\"William Jones (linguiste)\">William Jones</a> en 1763 dans un poème en latin, <a href=\"https://fr.wikipedia.org/wiki/Euphron\" title=\"Euphron\">Euphron</a> (frère de Vénus et dieu des sports) aurait créé les échecs pour aider Mars à séduire la belle <a href=\"https://fr.wikipedia.org/wiki/Caïssa\" title=\"Caïssa\">Caïssa</a>. Cette dernière est parfois considérée comme la déesse des échecs.</p>\n<h3>Origine orientale[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=42\" title=\"Modifier la section : Origine orientale\">modifier le code</a>]</h3>\n<p>Les Arabes font connaissance avec le jeu. Ils s'y adonnent avec passion et étendent sa pratique au fur et à mesure de leurs conquêtes. Vers l'ouest, le jeu traverse le Maghreb et la Méditerranée pour parvenir dans l'<a href=\"https://fr.wikipedia.org/wiki/Espagne\" title=\"Espagne\">Espagne</a> musulmane et atteindre l'Occident chrétien à la fin du X<sup>e</sup> siècle<sup id=\"cite_ref-43\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-43\">[30]</a></sup>. Il existe des jeux d'échecs différents, persans (<a href=\"https://fr.wikipedia.org/wiki/Chatrang\" title=\"Chatrang\">chatrang</a>), indiens (<a href=\"https://fr.wikipedia.org/wiki/Chaturanga\" title=\"Chaturanga\">chaturanga</a>), arabes (<a href=\"https://fr.wikipedia.org/wiki/Shatranj\" title=\"Shatranj\" class=\"mw-redirect\">shatranj</a>), mongols (<a href=\"https://fr.wikipedia.org/wiki/Shatar\" title=\"Shatar\" class=\"mw-redirect\">shatar</a>), européens, birmans (sit-tu-yin), thaïs ou cambodgiens (<a href=\"https://fr.wikipedia.org/wiki/Makruk\" title=\"Makruk\">makruk</a>), malais (catur), chinois ou vietnamiens (<a href=\"https://fr.wikipedia.org/wiki/Xiangqi\" title=\"Xiangqi\">xiangqi</a>), coréens (janggi), japonais (<a href=\"https://fr.wikipedia.org/wiki/Shogi\" title=\"Shogi\" class=\"mw-redirect\">shogi</a>), etc. Tous ces jeux partagent un ensemble de traits qui renvoient à une véritable préhistoire puisqu’il n’existe aucun témoignage direct et sans équivoque du supposé ancêtre commun.</p>\n<p>Si la naissance même du jeu reste encore obscure et controversée<sup id=\"cite_ref-44\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-44\">[31]</a></sup>, on peut au moins affirmer que les échecs sont un jeu asiatique. Trois ensembles géographiques posent leur candidature au titre de berceau du roi des jeux :</p>\n<ul><li>l’Inde du Nord, du Cachemire à la haute vallée du Gange, en passant par le Sind et le Pendjab, le bassin de l’Indus (aujourd’hui largement au Pakistan) ;</li>\n<li>la Chine historique, c’est-à-dire le bassin du <a href=\"https://fr.wikipedia.org/wiki/Fleuve_Jaune\" title=\"Fleuve Jaune\">fleuve Jaune</a> et peut-être celui du Yangzi Jiang, plus au sud ;</li>\n<li>la grande sphère iranienne entre les deux, les pays traversés par l’antique <a href=\"https://fr.wikipedia.org/wiki/Route_de_la_soie\" title=\"Route de la soie\">route de la soie</a> : la Perse mais aussi le Gandhâra, la Bactriane, le Khwarezm, la Sogdiane, la Sérinde, soit l’Asie centrale de l’Iran et de l’Afghanistan au Xinjiang. Linguistiquement et culturellement, ces régions se rattachaient à la sphère iranienne.</li>\n</ul><p>L'Inde est généralement l'hypothèse la plus suivie. Elle a pour elle la tradition puisque même les premiers textes persans et arabes affirmaient que les échecs étaient venus d'Inde. Cependant, les traces historiques prouvant cette origine manquent. L'Asie centrale iranienne au contraire reste la terre des premiers témoignages comme des plus anciennes trouvailles archéologiques. Enfin la Chine revendique aussi le titre de berceau de ce jeu et s'il est vrai que les premiers témoignages confirmés sont tardifs en Chine, il existe des sources certes floues mais plus anciennes que les plus anciennes sources perses ou sanscrites (qui datent de l'époque 600 à 650 <abbr class=\"abbr\" title=\"après Jésus-Christ\">ap. J.-C.</abbr>).</p>\n<p>Dans l'état actuel des connaissances, il est difficile de trancher.</p>\n<p>Une autre croyance très répandue est l'idée que les premiers échecs auraient été inventés (dans ce cas, c'est toujours en Inde) sous la forme d'un jeu se jouant à quatre joueurs et avec l'aide de dés. Vers l'an 600, des Indiens ou des Perses auraient éliminé les dés et regroupé les camps pour n'en faire que deux. Cette hypothèse est très certainement fausse. La plus ancienne mention connue du jeu à quatre date de 1030, soit quatre siècles après la mention du jeu à deux. Tout concourt à penser que ce <a href=\"https://fr.wikipedia.org/wiki/Chaturanga\" title=\"Chaturanga\">chaturanga</a> à quatre, appelé chaturaji, constitue une variante du chaturanga ou <a href=\"https://fr.wikipedia.org/wiki/Chatrang\" title=\"Chatrang\">chatrang</a> à deux et non le contraire<sup id=\"cite_ref-45\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-45\">[32]</a></sup>.</p>\n<p>Le mot sanskrit chaturanga, qui a donné chatrang en pehlevi (moyen persan), signifie quatre membres et désignait à l'origine l'armée épique indienne avec infanterie, cavalerie, éléphanterie et chars de combats. Ces pièces, avec un roi et son conseiller (ministre ou général) formaient l'ensemble des pièces du jeu, très semblables à celui d'aujourd'hui. Chaque joueur maniait 16 pièces sur un tablier de 64 cases, de couleur unique.</p>\n<h3>Diffusion[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=43\" title=\"Modifier la section : Diffusion\">modifier le code</a>]</h3>\n<p>Lorsque les Arabes envahissent la Perse, ils l’adoptent sous le nom de <a href=\"https://fr.wikipedia.org/wiki/Shatranj\" title=\"Shatranj\" class=\"mw-redirect\">shatranj</a>. Les échecs connaissent alors un développement remarquable. C’est au cours des IX<sup>e</sup> et X<sup>e</sup> siècles qu’apparaissent les premiers champions et les premiers traités. On retrouve alors :</p>\n<ul><li>le roi (<i><a href=\"https://fr.wikipedia.org/wiki/Chah\" title=\"Chah\">Shâh</a></i>, c'est lui qui donne son nom au jeu) se déplace d’un pas dans toutes les directions ;</li>\n<li>le conseiller (<i>Farzin</i> ou <a href=\"https://fr.wikipedia.org/wiki/Vizir\" title=\"Vizir\">Vizir</a>) dont le mouvement est limité à une seule case en diagonale ;</li>\n<li>l’<a href=\"https://fr.wikipedia.org/wiki/Éléphant\" title=\"Éléphant\">éléphant</a> (<i>Fil</i>, cf. <a href=\"https://fr.wikipedia.org/wiki/Sanskrit\" title=\"Sanskrit\">sanskrit</a> <i>pīlu</i> qui donnera « fou ») avec un déplacement correspondant à un saut de deux cases en diagonale ;</li>\n<li>le <a href=\"https://fr.wikipedia.org/wiki/Cheval\" title=\"Cheval\">cheval</a> (<i>Faras</i>), identique au cavalier moderne ;</li>\n<li>le char (<i>Roukh</i>), identique à la tour actuelle ;</li>\n<li>le <a href=\"https://fr.wikipedia.org/wiki/Militaire\" title=\"Militaire\">soldat</a> (<i>Baidaq</i>, cf. sanskrit <i>padāti</i> : <i>piéton, <a href=\"https://fr.wikipedia.org/wiki/Infanterie\" title=\"Infanterie\">fantassin</a></i>), l’équivalent du pion, mais dépourvu du double pas initial.</li>\n</ul><p>Le <i>Roukh</i> était parfois représenté comme un char de guerre. Les Arabes y voyaient un général commandant l’armée. Mais son sens littéral reste obscur. Il semble que pour les Arabes, ce mot n’avait pas d’autre sens que celui de désigner cette pièce au Shatranj, un peu comme le mot <i>rook</i> pour les anglophones aujourd’hui. Le lien étymologique avec le <a href=\"https://fr.wikipedia.org/wiki/Sanskrit\" title=\"Sanskrit\">sanskrit</a> <i>ratha</i> : <i><a href=\"https://fr.wikipedia.org/wiki/Char_(Antiquité)\" title=\"Char (Antiquité)\" class=\"mw-redirect\">char</a></i> est peu évident.</p>\n<h3>Arrivée en Europe et évolution[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=44\" title=\"Modifier la section : Arrivée en Europe et évolution\">modifier le code</a>]</h3>\n<div class=\"thumb tleft\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Meister_der_Manessischen_Liederhandschrift_004.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Meister_der_Manessischen_Liederhandschrift_004.jpg/220px-Meister_der_Manessischen_Liederhandschrift_004.jpg\" width=\"220\" height=\"331\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/2/24/Meister_der_Manessischen_Liederhandschrift_004.jpg/330px-Meister_der_Manessischen_Liederhandschrift_004.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/2/24/Meister_der_Manessischen_Liederhandschrift_004.jpg/440px-Meister_der_Manessischen_Liederhandschrift_004.jpg 2x\" data-file-width=\"959\" data-file-height=\"1443\"/></a>\n<div class=\"thumbcaption\">\n\nManuscrit (c.1320)</div>\n</div>\n</div>\n<p>Les échecs arrivent en <a href=\"https://fr.wikipedia.org/wiki/Europe\" title=\"Europe\">Europe</a> sans doute aux alentours de l'an mil<sup id=\"cite_ref-46\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-46\">[G 14]</a></sup> par l’<a href=\"https://fr.wikipedia.org/wiki/Al-Andalus\" title=\"Al-Andalus\">Espagne musulmane</a> ou par l’<a href=\"https://fr.wikipedia.org/wiki/Italie\" title=\"Italie\">Italie</a> du Sud (<a href=\"https://fr.wikipedia.org/wiki/Émirat_de_Sicile\" title=\"Émirat de Sicile\">Sicile</a>)<sup id=\"cite_ref-47\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-47\">[33]</a></sup>. Une légende a longtemps attribué un jeu d'échecs à <a href=\"https://fr.wikipedia.org/wiki/Charlemagne\" title=\"Charlemagne\">Charlemagne</a> qui l'aurait reçu de la part du calife <a href=\"https://fr.wikipedia.org/wiki/Haroun_ar-Rachid\" title=\"Haroun ar-Rachid\" class=\"mw-redirect\">Haroun al-Rachid</a>, on pense aujourd'hui qu'il fut fabriqué postérieurement près <a href=\"https://fr.wikipedia.org/wiki/Salerne\" title=\"Salerne\">Salerne</a> à la fin du XI<sup>e</sup> siècle<sup id=\"cite_ref-48\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-48\">[34]</a></sup>. En <a href=\"https://fr.wikipedia.org/wiki/1010\" title=\"1010\">1010</a>, sa première mention écrite en <a href=\"https://fr.wikipedia.org/wiki/Occident\" title=\"Occident\">Occident</a> a été trouvée dans un testament du <a href=\"https://fr.wikipedia.org/wiki/Comté_d%27Urgel\" title=\"Comté d'Urgel\" class=\"mw-redirect\">comte d'Urgel</a>, en <a href=\"https://fr.wikipedia.org/wiki/Catalogne\" title=\"Catalogne\">Catalogne</a>. De nombreuses pièces d'échecs ont été retrouvées lors de fouilles sur le <a href=\"https://fr.wikipedia.org/wiki/Chevaliers_paysans_de_l%27an_mil_au_lac_de_Paladru\" title=\"Chevaliers paysans de l'an mil au lac de Paladru\">site des chevaliers-paysans</a> du <a href=\"https://fr.wikipedia.org/wiki/Lac_de_Paladru\" title=\"Lac de Paladru\">lac de Paladru</a> (Isère), site qui a été abandonné au plus tard en <a href=\"https://fr.wikipedia.org/wiki/1040\" title=\"1040\">1040</a>. Le <i><a href=\"https://fr.wikipedia.org/wiki/Libro_de_los_juegos\" title=\"Libro de los juegos\">Libro de los juegos</a></i> écrit en <a href=\"https://fr.wikipedia.org/wiki/Espagne\" title=\"Espagne\">Espagne</a> entre <a href=\"https://fr.wikipedia.org/wiki/1251\" title=\"1251\">1251</a> et <a href=\"https://fr.wikipedia.org/wiki/1283\" title=\"1283\">1283</a> et illustré de nombreuses miniatures, expose les règles du jeu au XIII<sup>e</sup> siècle.</p>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Alfonso-LJ-27V.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Alfonso-LJ-27V.jpg/220px-Alfonso-LJ-27V.jpg\" width=\"220\" height=\"146\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/94/Alfonso-LJ-27V.jpg/330px-Alfonso-LJ-27V.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/94/Alfonso-LJ-27V.jpg/440px-Alfonso-LJ-27V.jpg 2x\" data-file-width=\"547\" data-file-height=\"363\"/></a>\n<div class=\"thumbcaption\">\n\nProblème d'échecs <abbr class=\"abbr\" title=\"numéro\">n<sup>o</sup></abbr> 35 du <i><a href=\"https://fr.wikipedia.org/wiki/Libro_de_los_juegos\" title=\"Libro de los juegos\">Libro de los juegos</a></i></div>\n</div>\n</div>\n<p>Dès son arrivée dans la chrétienté, l’échiquier et les pièces s'occidentalisent progressivement<sup id=\"cite_ref-49\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-49\">[G 15]</a></sup> :</p>\n<ul><li>le plateau devient bicolore avec les cases rouges et noires (qui deviendront plus tard blanches et noires) ;</li>\n<li>le vizir devient <i>fierge</i> (ou <i>vierge</i>), puis reine et/ou <a href=\"https://fr.wikipedia.org/wiki/Dame_(échecs)\" title=\"Dame (échecs)\">dame</a> (il est difficile de déterminer lequel des deux termes prévalait — sans doute étaient-ils utilisés indifféremment) ;</li>\n<li>l'éléphant (<i>al fil</i> en <a href=\"https://fr.wikipedia.org/wiki/Arabe\" title=\"Arabe\">arabe</a>, qui reste <i>alfil</i> en <a href=\"https://fr.wikipedia.org/wiki/Espagnol\" title=\"Espagnol\">espagnol</a> aujourd'hui) devient <i>aufin</i>, puis <a href=\"https://fr.wikipedia.org/wiki/Fou_(échecs)\" title=\"Fou (échecs)\">fou</a> (<i>bishop</i> : <i><a href=\"https://fr.wikipedia.org/wiki/Évêque\" title=\"Évêque\">évêque</a></i> en <a href=\"https://fr.wikipedia.org/wiki/Anglais\" title=\"Anglais\">anglais</a>) ;</li>\n<li>le <i>roukh</i> arabe devient <i>roc</i> (ce nom donnera <i>rook</i> en anglais, le verbe « roquer » en français et désignera la tour d'échecs en <a href=\"https://fr.wikipedia.org/wiki/Héraldique\" title=\"Héraldique\">héraldique</a>), puis <a href=\"https://fr.wikipedia.org/wiki/Tour_(échecs)\" title=\"Tour (échecs)\">tour</a> vers la fin du XVII<sup>e</sup> siècle (les <a href=\"https://fr.wikipedia.org/wiki/Tour_(fortification)\" title=\"Tour (fortification)\">tours de guet</a> étant souvent placées en hauteur).</li>\n</ul><p>Dans certaines régions d'Europe, le double pas initial du pion est pratiqué. Certaines règles permettent au roi ou à la reine (ou dame) d'effectuer un saut à deux cases (sans prise) à leur premier mouvement. Ceci constitue la différence principale avec les règles du Shatranj des pays musulmans<sup id=\"cite_ref-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs_50-0\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs-50\">[35]</a></sup>. Mais l’évolution la plus importante a lieu à la fin du <a href=\"https://fr.wikipedia.org/wiki/Moyen_Âge\" title=\"Moyen Âge\">Moyen Âge</a>, après 1470, en Espagne ou en Italie, lorsque les mouvements limités de la reine (ou dame) et du fou sont remplacés par ceux que nous connaissons actuellement<sup id=\"cite_ref-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs_50-1\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs-50\">[35]</a></sup>.</p>\n<p>Les joueurs de cette époque nomment ces nouvelles règles : « eschés de la dame » ou « jeu de la dame enragée »<sup id=\"cite_ref-51\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-51\">[36]</a></sup>.</p>\n<p>Les plus anciens manuscrits conservés relatifs à ces évolutions sont le <a href=\"https://fr.wikipedia.org/wiki/Manuscrit_de_Göttingen\" title=\"Manuscrit de Göttingen\">manuscrit de Göttingen</a> et le <i><a href=\"https://fr.wikipedia.org/wiki/Scachs_d%27amor\" title=\"Scachs d'amor\">Scachs d'amor</a></i>. Le premier traité imprimé reflétant ces innovations est généralement attribué à <a href=\"https://fr.wikipedia.org/wiki/Francesc_Vicent\" title=\"Francesc Vicent\">Francesc Vicent</a>, publié en 1495 à Valence, mais il est aujourd'hui perdu. Le deuxième, attribué à <a href=\"https://fr.wikipedia.org/wiki/Luis_Ramirez_Lucena\" title=\"Luis Ramirez Lucena\" class=\"mw-redirect\">Lucena</a>, nous est parvenu.</p>\n<p>Pour parer aux effets dévastateurs des pièces aux pouvoirs renforcés, le <a href=\"https://fr.wikipedia.org/wiki/Roque_(jeu_d%27échecs)\" title=\"Roque (jeu d'échecs)\" class=\"mw-redirect\">roque</a> est inventé vers 1560 et, progressivement, il remplace le saut initial du roi ou de la reine (la dame) qui deviennent obsolètes<sup id=\"cite_ref-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs_50-2\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs-50\">[35]</a></sup>. On peut considérer que les règles du jeu moderne sont à peu près établies vers <a href=\"https://fr.wikipedia.org/wiki/1650\" title=\"1650\">1650</a>. Si les premiers livres traitant des échecs remontent à l'époque arabe (dans le <a href=\"https://fr.wikipedia.org/wiki/Kitab-al-Fihrist\" title=\"Kitab-al-Fihrist\">Kitab-al-Fihrist</a> d'<a href=\"https://fr.wikipedia.org/wiki/Ibn_al-Nadim\" title=\"Ibn al-Nadim\">Ibn al-Nadim</a>), la stabilisation des règles en Europe donne naissance à une littérature théorique très riche et on observe notamment l'élaboration des premiers systèmes d'ouverture<sup class=\"need_ref_tag\"><a href=\"https://fr.wikipedia.org/wiki/Wikipédia:Style_encyclopédique#Clair\" title=\"Wikipédia:Style encyclopédique\">[pas clair]</a></sup>.</p>\n<h3>Époque moderne[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=45\" title=\"Modifier la section : Époque moderne\">modifier le code</a>]</h3>\n<div class=\"thumb tleft\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:ChessSet.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/ChessSet.jpg/220px-ChessSet.jpg\" width=\"220\" height=\"204\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/ChessSet.jpg/330px-ChessSet.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6f/ChessSet.jpg/440px-ChessSet.jpg 2x\" data-file-width=\"820\" data-file-height=\"760\"/></a>\n<div class=\"thumbcaption\">\n\nPièces de type <a href=\"https://fr.wikipedia.org/wiki/Howard_Staunton\" title=\"Howard Staunton\">Staunton</a></div>\n</div>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Radioshack16504.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Radioshack16504.jpg/220px-Radioshack16504.jpg\" width=\"220\" height=\"165\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/2/26/Radioshack16504.jpg/330px-Radioshack16504.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/2/26/Radioshack16504.jpg/440px-Radioshack16504.jpg 2x\" data-file-width=\"648\" data-file-height=\"486\"/></a>\n<div class=\"thumbcaption\">\n\n<a href=\"https://fr.wikipedia.org/wiki/Jeu_d%27échecs_électronique\" title=\"Jeu d'échecs électronique\">Jeu d'échecs électronique</a>.</div>\n</div>\n</div>\n<table><tr><td/>\n</tr></table><p>L’aspect physique des pièces le plus courant aujourd’hui, le style « <a href=\"https://fr.wikipedia.org/wiki/Jeu_de_pièces_d%27échecs_Staunton\" title=\"Jeu de pièces d'échecs Staunton\">Staunton</a> », date de <a href=\"https://fr.wikipedia.org/wiki/1850\" title=\"1850\">1850</a>. C’est également durant la seconde moitié du XIX<sup>e</sup> siècle qu’émergent les échecs modernes. Les premières compétitions internationales ont lieu, les progrès théoriques de l’art de la défense mettent un terme à l’<a href=\"https://fr.wikipedia.org/wiki/École_romantique_d%27échecs\" title=\"École romantique d'échecs\" class=\"mw-redirect\">ère romantique</a>.</p>\n<p>Au XX<sup>e</sup> siècle, l’<a href=\"https://fr.wikipedia.org/wiki/Union_des_républiques_socialistes_soviétiques\" title=\"Union des républiques socialistes soviétiques\">URSS</a> en assure une promotion très active, le considérant comme un excellent outil de formation intellectuelle<sup id=\"cite_ref-52\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-52\">[G 16]</a></sup>. C’est, en outre, une vitrine de la formation intellectuelle soviétique qui leur permet de dominer largement une discipline prestigieuse.</p>\n<p>Durant la <a href=\"https://fr.wikipedia.org/wiki/Guerre_froide\" title=\"Guerre froide\">guerre froide</a>, l'émergence de <a href=\"https://fr.wikipedia.org/wiki/Bobby_Fischer\" title=\"Bobby Fischer\">Bobby Fischer</a><sup id=\"cite_ref-53\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-53\">[G 17]</a></sup>, le premier Occidental à défier les Soviétiques au plus haut niveau, puis de <a href=\"https://fr.wikipedia.org/wiki/Viktor_Kortchnoï\" title=\"Viktor Kortchnoï\">Viktor Kortchnoï</a><sup id=\"cite_ref-54\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-54\">[G 18]</a></sup>, dissident soviétique qui parvint deux fois en finale du championnat du monde, donnent à cette compétition une véritable dimension politique. Plus tard, les tensions entre conservateurs russes et partisans de la <a href=\"https://fr.wikipedia.org/wiki/Perestroïka\" title=\"Perestroïka\">perestroïka</a> se cristalliseront autour de l’affrontement entre <a href=\"https://fr.wikipedia.org/wiki/Anatoli_Karpov\" title=\"Anatoli Karpov\">Anatoli Karpov</a> et <a href=\"https://fr.wikipedia.org/wiki/Garry_Kasparov\" title=\"Garry Kasparov\">Garry Kasparov</a>.</p>\n<p>À la fin du XX<sup>e</sup> siècle, la confusion concernant le titre de champion du monde amène l’attention médiatique à se concentrer sur l’opposition entre l’<a href=\"https://fr.wikipedia.org/wiki/Homo_sapiens\" title=\"Homo sapiens\">humain</a> et la <a href=\"https://fr.wikipedia.org/wiki/Programme_d%27échecs\" title=\"Programme d'échecs\">machine</a>, comme en témoigne le retentissement médiatique des matchs entre Kasparov et <a href=\"https://fr.wikipedia.org/wiki/Deep_Blue\" title=\"Deep Blue\">Deep Blue</a><sup id=\"cite_ref-deepblue_55-0\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-deepblue-55\">[37]</a></sup>. Les femmes font également leur apparition au plus haut niveau dans un domaine longtemps réservé de fait aux hommes. Ainsi, depuis <a href=\"https://fr.wikipedia.org/wiki/Avril_2003\" title=\"Avril 2003\">avril 2003</a>, <a href=\"https://fr.wikipedia.org/wiki/Judit_Polgár\" title=\"Judit Polgár\">Judit Polgár</a> figure parmi les meilleurs joueurs mondiaux du classement de la <a href=\"https://fr.wikipedia.org/wiki/Fédération_internationale_des_échecs\" title=\"Fédération internationale des échecs\">Fédération internationale des échecs</a><sup id=\"cite_ref-56\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-56\">[38]</a></sup>.</p>\n<p>Depuis <a href=\"https://fr.wikipedia.org/wiki/Janvier_2000\" title=\"Janvier 2000\">janvier 2000</a>, les échecs sont devenus, en France, un <a href=\"https://fr.wikipedia.org/wiki/Sport\" title=\"Sport\">sport</a> reconnu par le Ministère de la Jeunesse et des Sports<sup id=\"cite_ref-57\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-57\">[39]</a></sup>. De nombreuses compétitions sportives sont organisées dans le monde entier. Depuis le début de l'année 2008, l’entrée de ce sport aux <a href=\"https://fr.wikipedia.org/wiki/Jeux_olympiques\" title=\"Jeux olympiques\">Jeux olympiques</a> est discutée<sup id=\"cite_ref-58\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-58\">[40]</a></sup>.</p>\n<p>L’actuel champion du monde est le Norvégien <a href=\"https://fr.wikipedia.org/wiki/Magnus_Carlsen\" title=\"Magnus Carlsen\">Magnus Carlsen</a> qui a succédé à l'Indien <a href=\"https://fr.wikipedia.org/wiki/Viswanathan_Anand\" title=\"Viswanathan Anand\">Viswanathan Anand</a> en 2013<sup id=\"cite_ref-59\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-59\">[41]</a></sup>.</p>\n<h2>Introduction des échecs dans le cursus scolaire[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=46\" title=\"Modifier la section : Introduction des échecs dans le cursus scolaire\">modifier le code</a>]</h2>\n<p>Depuis janvier 2011, en France, des études scientifiques et technologiques ont été menées sur l’intégration d’un nouveau procédé : l’apprentissage des échecs.</p>\n<p>La pratique de cet enseignement a pour origine de travailler sur la logique, la rigueur de mettre en place des stratégies. Tout ceci amène les élèves à respecter les règles du jeu et le jeu de l’adversaire. Quelques objectifs pédagogiques sont mis en avant pour les élèves :</p>\n<ul><li>développer la motivation et la concentration ;</li>\n<li>encourager l’esprit d’autonomie et d’initiative ;</li>\n<li>favoriser l’apprentissage de la citoyenneté.</li>\n</ul><p>Cette pratique sera effective pour les élèves des écoles, des collèges et des lycées. Ainsi, les élèves possèdent un moyen ludique pour acquérir de nouvelles aptitudes.</p>\n<p>D’autres pays nous ont précédé à la mise en place ce programme. L’Arménie est le premier pays au monde qui a, en 2011, rendu obligatoire les échecs dans le cadre scolaire. Ce fut au tour du Mexique en 2014 puis de la Chine, de l’Inde et de l’Allemagne. À la suite de ce succès l’Espagne, après adoption de la loi d’insertion des échecs comme instrument pédagogique, compte un millier d’établissements qui l’ont mis en place de manière obligatoire ou optionnelle.</p>\n<h2>Composition échiquéenne[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=47\" title=\"Modifier la section : Composition échiquéenne\">modifier le code</a>]</h2>\n<p>La <a href=\"https://fr.wikipedia.org/wiki/Problème_d%27échecs\" title=\"Problème d'échecs\">composition échiquéenne</a>, qui forme un monde à part dans l’univers des échecs, représente son versant artistique<sup id=\"cite_ref-60\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-60\">[G 19]</a></sup>. Le <a href=\"https://fr.wikipedia.org/wiki/Problème_d%27échecs\" title=\"Problème d'échecs\">problème d'échecs</a> (au sens large) se conforme à des règles de jeu aussi rigoureuses que dans le jeu d'échecs (même si elles sont parfois revisitées comme dans les <a href=\"https://fr.wikipedia.org/wiki/Échecs_féeriques\" title=\"Échecs féeriques\">problèmes féériques</a>) mais il présente des situations très éloignées de la partie d'échecs réelle. Des considérations esthétiques, souvent géométriques, priment sur la réalité de la lutte entre deux joueurs. Cet univers comporte un certain nombre de conventions : on exige par exemple (sauf énoncé contraire) que la solution du problème soit unique, lorsqu'il s'agit d'un gain (étude) on présente le problème en donnant le trait aux blancs, on évite que le premier coup de la solution soit une prise ou un échec, etc. La composition échiquéenne est une discipline récente, au moins au sens moderne du terme (XIX<sup>e</sup> siècle).</p>\n<p>Comme dans le domaine de la partie, des compétitions sont organisées, elles sont de deux sortes :</p>\n<ul><li>des concours de composition qui consistent à créer un problème, souvent sur un thème donné ;</li>\n<li>des compétitions de résolution de problèmes, dont les compétiteurs sont appelés des <a href=\"https://fr.wikipedia.org/wiki/Problémiste\" title=\"Problémiste\">solutionnistes</a>.</li>\n</ul><p>Rares sont les forts joueurs d’échecs qui s’intéressent aux problèmes d’échecs, les deux univers sont très différents. Notons toutefois que les grands maîtres anglais <a href=\"https://fr.wikipedia.org/wiki/John_Nunn\" title=\"John Nunn\">John Nunn</a> et <a href=\"https://fr.wikipedia.org/wiki/Jonathan_Mestel\" title=\"Jonathan Mestel\">Jonathan Mestel</a> ont remporté le <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_de_solutions\" title=\"Championnat du monde de solutions\" class=\"mw-redirect\">Championnat du monde de solutions</a>, et que <a href=\"https://fr.wikipedia.org/wiki/Richard_Réti\" title=\"Richard Réti\">Richard Réti</a>, <a href=\"https://fr.wikipedia.org/wiki/Vassily_Smyslov\" title=\"Vassily Smyslov\">Vassily Smyslov</a> et <a href=\"https://fr.wikipedia.org/wiki/Pal_Benko\" title=\"Pal Benko\">Pal Benko</a> sont des compositeurs d'étude réputés.</p>\n<h3>Problème[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=48\" title=\"Modifier la section : Problème\">modifier le code</a>]</h3>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Problème_d’échecs\" title=\"Problème d’échecs\" class=\"mw-redirect\">Problème d’échecs</a>.</div>\n<p>Si les problèmes les plus fréquents sont les mats en deux coups<sup id=\"cite_ref-61\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-61\">[G 20]</a></sup>, il y a une grande variété de types d'énoncé. Il y a des <a href=\"https://fr.wikipedia.org/wiki/Problème_orthodoxe\" title=\"Problème orthodoxe\" class=\"mw-redirect\">problèmes orthodoxes</a>, des <a href=\"https://fr.wikipedia.org/wiki/Problème_hétérodoxe\" title=\"Problème hétérodoxe\" class=\"mw-redirect\">problèmes hétérodoxes</a> (mats aidés et mats inverses), des <a href=\"https://fr.wikipedia.org/wiki/Échecs_féeriques\" title=\"Échecs féeriques\">problèmes féériques</a> (où les règles et les pièces en jeu peuvent être différentes du jeu habituel), des problèmes d’<a href=\"https://fr.wikipedia.org/wiki/Analyse_rétrograde\" title=\"Analyse rétrograde\">analyse rétrograde</a>, etc.</p>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\"><b>Thomas Taverner</b>\n<p><i>Dubuque Chess Journal 1889</i></p>\n<div class=\"thumbinner\" style=\"width:246px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:26px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/208px-Chessboard480.svg.png\" width=\"208\" height=\"208\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/312px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/416px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:52px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdd45.svg\" class=\"image\" title=\"Fou noir sur case noire d8\"><img alt=\"Fou noir sur case noire d8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/26px-Chess_bdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/39px-Chess_bdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_bdd45.svg/52px-Chess_bdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdl45.svg\" class=\"image\" title=\"Tour noire sur case blanche e8\"><img alt=\"Tour noire sur case blanche e8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/26px-Chess_rdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/39px-Chess_rdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chess_rdl45.svg/52px-Chess_rdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rdd45.svg\" class=\"image\" title=\"Tour noire sur case noire f8\"><img alt=\"Tour noire sur case noire f8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/26px-Chess_rdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/39px-Chess_rdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Chess_rdd45.svg/52px-Chess_rdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:0px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdl45.svg\" class=\"image\" title=\"Fou noir sur case blanche g8\"><img alt=\"Fou noir sur case blanche g8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/26px-Chess_bdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/39px-Chess_bdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/52px-Chess_bdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:26px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:26px;left:26px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:26px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nld45.svg\" class=\"image\" title=\"Cavalier blanc sur case noire c7\"><img alt=\"Cavalier blanc sur case noire c7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/26px-Chess_nld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/39px-Chess_nld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/52px-Chess_nld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:26px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:26px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:26px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:26px;left:156px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:26px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bll45.svg\" class=\"image\" title=\"Fou blanc sur case blanche h7\"><img alt=\"Fou blanc sur case blanche h7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/26px-Chess_bll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/39px-Chess_bll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Chess_bll45.svg/52px-Chess_bll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:52px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:52px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:52px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:52px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:52px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:52px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:52px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:52px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:78px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:78px;left:26px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:78px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire c5\"><img alt=\"Pion noir sur case noire c5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/26px-Chess_pdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/39px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/52px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:78px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:78px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case blanche f5 vide\" style=\"position:absolute;z-index:3;top:78px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:78px;left:156px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:78px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qll45.svg\" class=\"image\" title=\"Reine blanche sur case blanche h5\"><img alt=\"Reine blanche sur case blanche h5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/26px-Chess_qll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/39px-Chess_qll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chess_qll45.svg/52px-Chess_qll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a4 vide\" style=\"position:absolute;z-index:3;top:104px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:104px;left:26px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:104px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche c4\"><img alt=\"Pion noir sur case blanche c4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:104px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:104px;left:104px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:104px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdd45.svg\" class=\"image\" title=\"Roi noir sur case noire f4\"><img alt=\"Roi noir sur case noire f4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Chess_kdd45.svg/26px-Chess_kdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/da/Chess_kdd45.svg/39px-Chess_kdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/da/Chess_kdd45.svg/52px-Chess_kdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:104px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:104px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:130px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:130px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:130px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:130px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:130px;left:104px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:130px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche f3\"><img alt=\"Pion blanc sur case blanche f3\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/26px-Chess_pll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/39px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/52px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:130px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:130px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:156px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:156px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:156px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case noire d2 vide\" style=\"position:absolute;z-index:3;top:156px;left:78px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:156px;left:104px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pll45.svg\" class=\"image\" title=\"Pion blanc sur case blanche e2\"><img alt=\"Pion blanc sur case blanche e2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/26px-Chess_pll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/39px-Chess_pll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Chess_pll45.svg/52px-Chess_pll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:156px;left:130px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:156px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kll45.svg\" class=\"image\" title=\"Roi blanc sur case blanche g2\"><img alt=\"Roi blanc sur case blanche g2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/26px-Chess_kll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/39px-Chess_kll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/85/Chess_kll45.svg/52px-Chess_kll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rld45.svg\" class=\"image\" title=\"Tour blanche sur case noire h2\"><img alt=\"Tour blanche sur case noire h2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/26px-Chess_rld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/39px-Chess_rld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Chess_rld45.svg/52px-Chess_rld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:182px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:182px;left:26px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:182px;left:52px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nld45.svg\" class=\"image\" title=\"Cavalier blanc sur case noire c1\"><img alt=\"Cavalier blanc sur case noire c1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/26px-Chess_nld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/39px-Chess_nld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Chess_nld45.svg/52px-Chess_nld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:182px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:182px;left:104px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:182px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_rll45.svg\" class=\"image\" title=\"Tour blanche sur case blanche f1\"><img alt=\"Tour blanche sur case blanche f1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/26px-Chess_rll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/39px-Chess_rll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/44/Chess_rll45.svg/52px-Chess_rll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bld45.svg\" class=\"image\" title=\"Fou blanc sur case noire g1\"><img alt=\"Fou blanc sur case noire g1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/26px-Chess_bld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/39px-Chess_bld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/52px-Chess_bld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche h1 vide\" style=\"position:absolute;z-index:3;top:182px;left:182px;width:26px;height:26px\"/>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:26px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">Les blancs jouent et matent en deux coups.</div>\n</div>\n</div>\n<p>Ci-contre, un problème de Thomas Taverner publié en 1889 dans le <i>Dubuque Chess Journal</i>. C'est un mat direct en deux coups.</p>\n<p>La clé du problème est <b>1.Th1</b>. Elle est difficile à trouver parce qu'elle n'introduit aucune menace. Au lieu de cela, elle évacue la case h2, qui devient utilisable pour mater ; c'est ce que les problémistes appellent le thème <a href=\"https://fr.wikipedia.org/wiki/Bristol_(Angleterre)\" title=\"Bristol (Angleterre)\">Bristol</a>, en référence à un problème de Frank Healey publié en 1861 dans un tournoi de cette ville. Les noirs sont mis en <a href=\"https://fr.wikipedia.org/wiki/Zugzwang\" title=\"Zugzwang\">zugzwang</a>, une situation dans laquelle chacun de leur coup détériore leur position (les problémistes parlent plutôt de <i>blocus</i>). Mais les règles du jeu leur imposent de jouer et chacun des coups noirs entraîne un coup blanc matant. Par exemple, si les noirs jouent 1… Fxh7, la case d5 n'est plus contrôlée, et les blancs jouent 2.Cd5#. Ou bien si les noirs jouent 1… Te5, ils bloquent la case de fuite du roi, ce qui permet 2.Dg4#. Sur 1…Fg5, les blancs jouent 2.Dh2#, profitant de l'effet Bristol. Si les noirs pouvaient ne pas jouer en réponse à la clé, les blancs ne pourraient pas mater en un coup.</p>\n<p>Le thème de ce problème est appelé <i>tuyaux d'orgues</i> ; il se caractérise par la position des tours et des fous noirs. Si chacune de ces quatre pièces avance d'une ou de deux cases, elle intercepte une autre pièce et permet un mat. Par exemple, si les noirs jouent <b>1…Fe7</b>, la case e3 n'est plus contrôlée, et cela permet <b>2.e3≠</b>. Si les noirs jouent <b>1…Te7</b>, c'est la case h4 qui n'est plus contrôlée et les blancs matent par <b>2.Th4≠</b>. Le thème de l'interférence mutuelle de deux pièces dans deux variantes porte le nom <a href=\"https://fr.wikipedia.org/wiki/Grimshaw_(échecs)\" title=\"Grimshaw (échecs)\">Grimshaw</a>, les tuyaux d'orgues présentent donc deux Grimshaw.</p>\n<div style=\"clear:both;\"/>\n<h3>Étude[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=49\" title=\"Modifier la section : Étude\">modifier le code</a>]</h3>\n<div class=\"thumb tright\" style=\"clear:right;text-align:center\"><a href=\"https://fr.wikipedia.org/wiki/Alekseï_Troïtski\" title=\"Alekseï Troïtski\">Alekseï Troïtski</a><br/>\n1898\n<div class=\"thumbinner\" style=\"width:246px\">\n<table cellpadding=\"0\" cellspacing=\"0\" style=\"background:white;font-size:88%;border:1px #b0b0b0 solid;padding:0;margin:auto\"><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;width:18px;height:26px\">8</td>\n<td colspan=\"8\" rowspan=\"8\" style=\"padding:0;vertical-align:inherit\">\n<div class=\"chess-board\" style=\"position:relative\"><img alt=\"Chessboard480.svg\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/208px-Chessboard480.svg.png\" width=\"208\" height=\"208\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/312px-Chessboard480.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/416px-Chessboard480.svg.png 2x\" data-file-width=\"480\" data-file-height=\"480\"/><div title=\"Case blanche a8 vide\" style=\"position:absolute;z-index:3;top:0px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b8 vide\" style=\"position:absolute;z-index:3;top:0px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c8 vide\" style=\"position:absolute;z-index:3;top:0px;left:52px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:0px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bld45.svg\" class=\"image\" title=\"Fou blanc sur case noire d8\"><img alt=\"Fou blanc sur case noire d8\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/26px-Chess_bld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/39px-Chess_bld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Chess_bld45.svg/52px-Chess_bld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e8 vide\" style=\"position:absolute;z-index:3;top:0px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case noire f8 vide\" style=\"position:absolute;z-index:3;top:0px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case blanche g8 vide\" style=\"position:absolute;z-index:3;top:0px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case noire h8 vide\" style=\"position:absolute;z-index:3;top:0px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a7 vide\" style=\"position:absolute;z-index:3;top:26px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b7 vide\" style=\"position:absolute;z-index:3;top:26px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case noire c7 vide\" style=\"position:absolute;z-index:3;top:26px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case blanche d7 vide\" style=\"position:absolute;z-index:3;top:26px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e7 vide\" style=\"position:absolute;z-index:3;top:26px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case blanche f7 vide\" style=\"position:absolute;z-index:3;top:26px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case noire g7 vide\" style=\"position:absolute;z-index:3;top:26px;left:156px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:26px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_qdl45.svg\" class=\"image\" title=\"Reine noire sur case blanche h7\"><img alt=\"Reine noire sur case blanche h7\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Chess_qdl45.svg/26px-Chess_qdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Chess_qdl45.svg/39px-Chess_qdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Chess_qdl45.svg/52px-Chess_qdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche a6 vide\" style=\"position:absolute;z-index:3;top:52px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b6 vide\" style=\"position:absolute;z-index:3;top:52px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c6 vide\" style=\"position:absolute;z-index:3;top:52px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case noire d6 vide\" style=\"position:absolute;z-index:3;top:52px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case blanche e6 vide\" style=\"position:absolute;z-index:3;top:52px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case noire f6 vide\" style=\"position:absolute;z-index:3;top:52px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case blanche g6 vide\" style=\"position:absolute;z-index:3;top:52px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case noire h6 vide\" style=\"position:absolute;z-index:3;top:52px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a5 vide\" style=\"position:absolute;z-index:3;top:78px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b5 vide\" style=\"position:absolute;z-index:3;top:78px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case noire c5 vide\" style=\"position:absolute;z-index:3;top:78px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case blanche d5 vide\" style=\"position:absolute;z-index:3;top:78px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e5 vide\" style=\"position:absolute;z-index:3;top:78px;left:104px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:78px;left:130px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche f5\"><img alt=\"Pion noir sur case blanche f5\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire g5 vide\" style=\"position:absolute;z-index:3;top:78px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case blanche h5 vide\" style=\"position:absolute;z-index:3;top:78px;left:182px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:104px;left:0px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_nll45.svg\" class=\"image\" title=\"Cavalier blanc sur case blanche a4\"><img alt=\"Cavalier blanc sur case blanche a4\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/26px-Chess_nll45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/39px-Chess_nll45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Chess_nll45.svg/52px-Chess_nll45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire b4 vide\" style=\"position:absolute;z-index:3;top:104px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c4 vide\" style=\"position:absolute;z-index:3;top:104px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case noire d4 vide\" style=\"position:absolute;z-index:3;top:104px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case blanche e4 vide\" style=\"position:absolute;z-index:3;top:104px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case noire f4 vide\" style=\"position:absolute;z-index:3;top:104px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case blanche g4 vide\" style=\"position:absolute;z-index:3;top:104px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case noire h4 vide\" style=\"position:absolute;z-index:3;top:104px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case noire a3 vide\" style=\"position:absolute;z-index:3;top:130px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b3 vide\" style=\"position:absolute;z-index:3;top:130px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case noire c3 vide\" style=\"position:absolute;z-index:3;top:130px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case blanche d3 vide\" style=\"position:absolute;z-index:3;top:130px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e3 vide\" style=\"position:absolute;z-index:3;top:130px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case blanche f3 vide\" style=\"position:absolute;z-index:3;top:130px;left:130px;width:26px;height:26px\"/>\n<div title=\"Case noire g3 vide\" style=\"position:absolute;z-index:3;top:130px;left:156px;width:26px;height:26px\"/>\n<div title=\"Case blanche h3 vide\" style=\"position:absolute;z-index:3;top:130px;left:182px;width:26px;height:26px\"/>\n<div title=\"Case blanche a2 vide\" style=\"position:absolute;z-index:3;top:156px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case noire b2 vide\" style=\"position:absolute;z-index:3;top:156px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case blanche c2 vide\" style=\"position:absolute;z-index:3;top:156px;left:52px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:156px;left:78px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kld45.svg\" class=\"image\" title=\"Roi blanc sur case noire d2\"><img alt=\"Roi blanc sur case noire d2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/26px-Chess_kld45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/39px-Chess_kld45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Chess_kld45.svg/52px-Chess_kld45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case blanche e2 vide\" style=\"position:absolute;z-index:3;top:156px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case noire f2 vide\" style=\"position:absolute;z-index:3;top:156px;left:130px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:156px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdl45.svg\" class=\"image\" title=\"Pion noir sur case blanche g2\"><img alt=\"Pion noir sur case blanche g2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/26px-Chess_pdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/39px-Chess_pdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Chess_pdl45.svg/52px-Chess_pdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:156px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_pdd45.svg\" class=\"image\" title=\"Pion noir sur case noire h2\"><img alt=\"Pion noir sur case noire h2\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/26px-Chess_pdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/39px-Chess_pdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/41/Chess_pdd45.svg/52px-Chess_pdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div title=\"Case noire a1 vide\" style=\"position:absolute;z-index:3;top:182px;left:0px;width:26px;height:26px\"/>\n<div title=\"Case blanche b1 vide\" style=\"position:absolute;z-index:3;top:182px;left:26px;width:26px;height:26px\"/>\n<div title=\"Case noire c1 vide\" style=\"position:absolute;z-index:3;top:182px;left:52px;width:26px;height:26px\"/>\n<div title=\"Case blanche d1 vide\" style=\"position:absolute;z-index:3;top:182px;left:78px;width:26px;height:26px\"/>\n<div title=\"Case noire e1 vide\" style=\"position:absolute;z-index:3;top:182px;left:104px;width:26px;height:26px\"/>\n<div title=\"Case blanche f1 vide\" style=\"position:absolute;z-index:3;top:182px;left:130px;width:26px;height:26px\"/>\n<div style=\"position:absolute;z-index:3;top:182px;left:156px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_kdd45.svg\" class=\"image\" title=\"Roi noir sur case noire g1\"><img alt=\"Roi noir sur case noire g1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Chess_kdd45.svg/26px-Chess_kdd45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/da/Chess_kdd45.svg/39px-Chess_kdd45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/da/Chess_kdd45.svg/52px-Chess_kdd45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n<div style=\"position:absolute;z-index:3;top:182px;left:182px;width:26px;height:26px\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_bdl45.svg\" class=\"image\" title=\"Fou noir sur case blanche h1\"><img alt=\"Fou noir sur case blanche h1\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/26px-Chess_bdl45.svg.png\" width=\"26\" height=\"26\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/39px-Chess_bdl45.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Chess_bdl45.svg/52px-Chess_bdl45.svg.png 2x\" data-file-width=\"45\" data-file-height=\"45\"/></a></div>\n</div>\n</td>\n<td style=\"padding:0;vertical-align:inherit;width:18px;height:26px\">8</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">7</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">7</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">6</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">6</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">5</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">5</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">4</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">4</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">3</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">3</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">2</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">2</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"padding:0;vertical-align:inherit;height:26px\">1</td>\n<td style=\"padding:0;vertical-align:inherit;height:26px\">1</td>\n</tr><tr style=\"vertical-align:middle\"><td style=\"vertical-align:inherit;padding:0\"/>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">a</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">b</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">c</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">d</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">e</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">f</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">g</td>\n<td style=\"padding:0;vartical-align:inherit;height:18px;width:26px\">h</td>\n<td style=\"vertical-align:inherit;padding:0\"/>\n</tr></table><div class=\"thumbcaption\">Les blancs jouent et font nulle.</div>\n</div>\n</div>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Étude_d%27échecs\" title=\"Étude d'échecs\">Étude d'échecs</a>.</div>\n<p>Les <a href=\"https://fr.wikipedia.org/wiki/Étude_d%27échecs\" title=\"Étude d'échecs\">études</a> sont des compositions qui montrent un gain ou une nulle extraordinaire en fin de partie<sup id=\"cite_ref-62\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-62\">[G 21]</a></sup>. Si le problème d'échecs est un domaine réservé à une minorité de passionnés dans le monde des échecs, l'étude est elle-même un monde à part dans la composition échiquéenne.</p>\n<p>Ci-contre, une étude d’<a href=\"https://fr.wikipedia.org/wiki/Alekseï_Troïtski\" title=\"Alekseï Troïtski\">Alekseï Troïtski</a> de <a href=\"https://fr.wikipedia.org/wiki/1898\" title=\"1898\">1898</a>. La position est a priori facilement gagnante pour les noirs qui disposent d'un avantage matériel considérable. Toutefois une suite de coups précise (et difficile à trouver pour un débutant) permet aux blancs d’obtenir la partie nulle, quels que soient les coups des noirs. On remarque que la position bien que légale n'est pas réaliste et n'aurait aucune chance de se produire dans une partie réelle.</p>\n<p>La solution est la suivante : <b>1.Re1</b> enferme le roi noir et menace 2.Fb6 mat. (1.Re2? échoue à cause de 1…Dh5+! 2.Re1 Dd1+ 3.Rxd1 Rf2 et les noirs se libèrent de toute pression et gagnent) <b>1…Da7</b> pour empêcher Fb6, mais tout de même : <b>2.Fb6+ Dxb6 3.Cxb6</b> la position est simplifiée mais les blancs ne peuvent pas s'opposer à la promotion du pion f5 donc : <b>3…f4</b> la seule chance des blancs est d'essayer de mater le roi noir emprisonné avec leur cavalier : <b>4.Cd5 f3 5.Cf4 f2+ 6.Rd2! Rf1!</b> (après 6…f1=D? les blancs gagnent avec 7.Ch3 mat tandis qu’après 6…f1=C+? 7.Re1 et les noirs ne peuvent pas empêcher 8.Ch3 mat) <b>7.Cd5!</b> (si les noirs font une Dame avec 7…g1=D? les blancs gagnent avec 8.Ce3 mat) <b>7…Rg1 8.Cf4 Rf1 9.Cd5</b> et la partie est nulle par répétition de la position (nulle positionnelle). Les éléments artistiques de cette étude sont l'exploitation de l'enfermement du roi noir, une défense par sous-promotion en cavalier, deux positions de mat différentes par le cavalier blanc et une nulle positionnelle.</p>\n<div style=\"clear:both;\"/>\n<h2>Variantes du jeu d'échecs[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=50\" title=\"Modifier la section : Variantes du jeu d'échecs\">modifier le code</a>]</h2>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Articles détaillés : <a href=\"https://fr.wikipedia.org/wiki/Variante_du_jeu_d%27échecs\" title=\"Variante du jeu d'échecs\">Variante du jeu d'échecs</a> et <a href=\"https://fr.wikipedia.org/wiki/Échecs_féeriques\" title=\"Échecs féeriques\">Échecs féeriques</a>.</div>\n<p>La grande popularité du jeu a encouragé l'apparition de nombreuses variantes du jeu<sup id=\"cite_ref-63\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-63\">[42]</a></sup>, spontanément dans les clubs ou de façon volontariste par des joueurs imaginatifs. Ces variantes modifient parfois légèrement la façon de jouer comme dans le <a href=\"https://fr.wikipedia.org/wiki/Blitz_(échecs)\" title=\"Blitz (échecs)\">blitz</a> ou partie rapide, dans lequel la réflexion de fond s'efface au profit de l'intuition et des réflexes des joueurs ; ou encore plus notablement dans le <a href=\"https://fr.wikipedia.org/wiki/Blitz_à_quatre\" title=\"Blitz à quatre\">blitz à quatre</a> dans lequel les pièces capturées sur un premier échiquier sont utilisables par un partenaire sur un second échiquier, la première partie gagnée faisant gagner son équipe. La <a href=\"https://fr.wikipedia.org/wiki/Partie_en_consultation\" title=\"Partie en consultation\">partie en consultation</a> est une autre façon de jouer en équipe : un camp, ou les deux, est tenu par plusieurs joueurs qui décident collectivement du coup à jouer.</p>\n<p>D'autres variantes ont été imaginées par des joueurs tels que <a href=\"https://fr.wikipedia.org/wiki/José_Raúl_Capablanca\" title=\"José Raúl Capablanca\">José Raúl Capablanca</a> ou <a href=\"https://fr.wikipedia.org/wiki/Bobby_Fischer\" title=\"Bobby Fischer\">Bobby Fischer</a>, elles consistent à modifier les caractéristiques de l'échiquier ou à ajouter de nouvelles pièces afin, selon leurs auteurs, de renouveler l'intérêt du jeu en limitant l'importance des connaissances au profit de la créativité : les <a href=\"https://fr.wikipedia.org/wiki/Échecs_Capablanca\" title=\"Échecs Capablanca\">échecs Capablanca</a> et les <a href=\"https://fr.wikipedia.org/wiki/Échecs_aléatoires_Fischer\" title=\"Échecs aléatoires Fischer\">échecs aléatoires Fischer</a>. Toutefois on ne considère pas toute invention, d'un soir ou commerciale, comme une variante du jeu, on préfère réserver ce terme (en particulier dans le cadre de cet article) aux formes du jeu qui ont trouvé leur public à travers une pratique chez les joueurs. Ainsi, les <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs_de_Messigny&action=edit&redlink=1\" class=\"new\" title=\"Échecs de Messigny (page inexistante)\">échecs de Messigny</a> ou les <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs_football&action=edit&redlink=1\" class=\"new\" title=\"Échecs football (page inexistante)\">échecs football</a> ont effectivement été joués lors de réunions de problémistes à <a href=\"https://fr.wikipedia.org/wiki/Messigny\" title=\"Messigny\" class=\"mw-redirect\">Messigny</a>, ainsi que le <a href=\"https://fr.wikipedia.org/w/index.php?title=Kriegspiel_(jeu)&action=edit&redlink=1\" class=\"new\" title=\"Kriegspiel (jeu) (page inexistante)\">Kriegspiel</a> y compris par des champions d'échecs, le <a href=\"https://fr.wikipedia.org/wiki/Qui_perd_gagne_(échecs)\" title=\"Qui perd gagne (échecs)\">qui perd gagne</a> étant quant à lui célèbre en club.</p>\n<p>En parallèle, les compositeurs de <a href=\"https://fr.wikipedia.org/wiki/Problème_d%27échecs\" title=\"Problème d'échecs\">problème d'échecs</a> ont élargi les possibilités de leur art en créant des problèmes basés sur des variantes connues du jeu, et ils ont eux-mêmes créé un très grand nombre de pièces nouvelles et conditions supplémentaires qui forment un domaine appelé les <a href=\"https://fr.wikipedia.org/wiki/Condition_féerique\" title=\"Condition féerique\">échecs féeriques</a><sup id=\"cite_ref-64\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-64\">[G 22]</a></sup>. On distingue donc les variantes du jeu d'échecs des échecs féeriques, sachant que des correspondances les relient souvent.</p>\n<p>Des jeux cousins tels que le <a href=\"https://fr.wikipedia.org/wiki/Chaturanga\" title=\"Chaturanga\">chaturanga</a>, le <a href=\"https://fr.wikipedia.org/wiki/Chatrang\" title=\"Chatrang\">chatrang</a>, le <a href=\"https://fr.wikipedia.org/wiki/Xiangqi\" title=\"Xiangqi\">xiangqi</a>, le <a href=\"https://fr.wikipedia.org/wiki/Makruk\" title=\"Makruk\">makruk</a>, le <a href=\"https://fr.wikipedia.org/wiki/Shatar\" title=\"Shatar\" class=\"mw-redirect\">shatar</a> et le <a href=\"https://fr.wikipedia.org/wiki/Shōgi\" title=\"Shōgi\">shōgi</a> ne sont pas des variantes du jeu d'échecs mais des jeux originaux, tous plus anciens que le jeu d'échecs moderne.</p>\n<center>\n<ul class=\"gallery mw-gallery-traditional\"><li class=\"gallerybox\" style=\"width: 155px\">\n<div style=\"width: 155px\">\n<div class=\"thumb\" style=\"width: 150px;\">\n<div style=\"margin:34.5px auto;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Rundskak_foto.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Rundskak_foto.jpg/120px-Rundskak_foto.jpg\" width=\"120\" height=\"81\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/4/45/Rundskak_foto.jpg/180px-Rundskak_foto.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/45/Rundskak_foto.jpg/240px-Rundskak_foto.jpg 2x\" data-file-width=\"429\" data-file-height=\"290\"/></a></div>\n</div>\n<div class=\"gallerytext\">\n<center><a href=\"https://fr.wikipedia.org/wiki/Échecs_circulaires\" title=\"Échecs circulaires\">Échecs circulaires</a></center>\n</div>\n</div>\n</li>\n<li class=\"gallerybox\" style=\"width: 155px\">\n<div style=\"width: 155px\">\n<div class=\"thumb\" style=\"width: 150px;\">\n<div style=\"margin:30px auto;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Cylindrical_chessboard_2.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Cylindrical_chessboard_2.jpg/120px-Cylindrical_chessboard_2.jpg\" width=\"120\" height=\"90\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Cylindrical_chessboard_2.jpg/180px-Cylindrical_chessboard_2.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Cylindrical_chessboard_2.jpg/240px-Cylindrical_chessboard_2.jpg 2x\" data-file-width=\"1024\" data-file-height=\"768\"/></a></div>\n</div>\n<div class=\"gallerytext\">\n<center><a href=\"https://fr.wikipedia.org/wiki/Échecs_cylindriques\" title=\"Échecs cylindriques\">Échecs cylindriques</a></center>\n</div>\n</div>\n</li>\n<li class=\"gallerybox\" style=\"width: 155px\">\n<div style=\"width: 155px\">\n<div class=\"thumb\" style=\"width: 150px;\">\n<div style=\"margin:30px auto;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Toroidal_chessboard.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Toroidal_chessboard.jpg/120px-Toroidal_chessboard.jpg\" width=\"120\" height=\"90\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Toroidal_chessboard.jpg/180px-Toroidal_chessboard.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Toroidal_chessboard.jpg/240px-Toroidal_chessboard.jpg 2x\" data-file-width=\"1024\" data-file-height=\"768\"/></a></div>\n</div>\n<div class=\"gallerytext\">\n<center><a href=\"https://fr.wikipedia.org/wiki/Échecs_cylindriques\" title=\"Échecs cylindriques\">Échecs toriques</a></center>\n</div>\n</div>\n</li>\n</ul></center>\n<h2>Échecs et informatique[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=51\" title=\"Modifier la section : Échecs et informatique\">modifier le code</a>]</h2>\n<h3>Programmes d'échecs[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=52\" title=\"Modifier la section : Programmes d'échecs\">modifier le code</a>]</h3>\n<div class=\"thumb tleft\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Xboard.png\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Xboard.png/220px-Xboard.png\" width=\"220\" height=\"268\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Xboard.png/330px-Xboard.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Xboard.png/440px-Xboard.png 2x\" data-file-width=\"557\" data-file-height=\"679\"/></a>\n<div class=\"thumbcaption\">\n\nProgramme <i>Open Source</i> <a href=\"https://fr.wikipedia.org/wiki/XBoard\" title=\"XBoard\">XBoard</a> sous <a href=\"https://fr.wikipedia.org/wiki/Linux\" title=\"Linux\">GNU/Linux</a></div>\n</div>\n</div>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Deep_Blue.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Deep_Blue.jpg/220px-Deep_Blue.jpg\" width=\"220\" height=\"331\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/b/be/Deep_Blue.jpg/330px-Deep_Blue.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/b/be/Deep_Blue.jpg 2x\" data-file-width=\"400\" data-file-height=\"601\"/></a>\n<div class=\"thumbcaption\">\n\n<a href=\"https://fr.wikipedia.org/wiki/Deep_Blue\" title=\"Deep Blue\">Deep Blue</a>, l'ordinateur qui a défait Garry Kasparov en 1997.</div>\n</div>\n</div>\n<div class=\"bandeau-section bandeau-niveau-detail loupe\">Article détaillé : <a href=\"https://fr.wikipedia.org/wiki/Programme_d%27échecs\" title=\"Programme d'échecs\">Programme d'échecs</a>.</div>\n<p>Les échecs ont constitué l'un des premiers défis en matière d'intelligence artificielle<sup id=\"cite_ref-65\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-65\">[G 23]</a></sup>.</p>\n<p>Le premier <a href=\"https://fr.wikipedia.org/wiki/Championnat_du_monde_d%27échecs_des_ordinateurs\" title=\"Championnat du monde d'échecs des ordinateurs\">championnat du monde d'échecs des ordinateurs</a> se déroula en 1974. Il fut remporté par le programme soviétique <a href=\"https://fr.wikipedia.org/wiki/Kaissa\" title=\"Kaissa\">Kaissa</a>.</p>\n<p>En 1995, <a href=\"https://fr.wikipedia.org/wiki/International_Business_Machines_Corporation\" title=\"International Business Machines Corporation\" class=\"mw-redirect\">IBM</a> n'hésite pas à investir dans le projet <a href=\"https://fr.wikipedia.org/wiki/Deep_Blue\" title=\"Deep Blue\">Deep Blue</a>, dont la seconde mouture, en 1997, sera la première machine à battre un champion du monde dans des conditions normales de jeu (à cette époque, les ordinateurs étaient déjà redoutables en partie rapide). Kasparov contestera néanmoins la valeur de cette victoire en soulignant que, contrairement aux conditions d'un match de championnat du monde contre un humain, il n'avait pas eu accès aux parties disputées par l'ordinateur auparavant pour sa préparation (la réciproque étant fausse). Il relève de plus qu'une intervention humaine a été nécessaire en cours de match afin que la machine ne reproduise pas certaines erreurs des premières parties. Kasparov exigea une revanche qui lui fut refusée par IBM. Depuis, les affrontements entre les meilleurs joueurs mondiaux et les machines (Kasparov contre <a href=\"https://fr.wikipedia.org/wiki/Junior_(programme_d%27échecs)\" title=\"Junior (programme d'échecs)\">Deep Junior</a>, Kramnik contre <a href=\"https://fr.wikipedia.org/wiki/Fritz_(programme_d%27échecs)\" title=\"Fritz (programme d'échecs)\">Deep Fritz</a>, Kasparov contre <a href=\"https://fr.wikipedia.org/wiki/Fritz_(programme_d%27échecs)\" title=\"Fritz (programme d'échecs)\">X3D Fritz</a>) ont pris le relais d'un championnat du monde défaillant dans les médias. On peut remarquer à ce sujet que, contrairement à <i>Deep Blue</i>, les logiciels opposés aux humains sont des programmes commerciaux tournant sur des micro-ordinateurs standard (alors que Deep Blue fonctionnait sur une machine plus puissante).</p>\n<p>Depuis la victoire de <i>Deep Blue</i>, le statut des échecs en tant que défi informatique s'est amoindri, et l'attention des programmeurs s'est reportée sur le <a href=\"https://fr.wikipedia.org/wiki/Jeu_de_go\" title=\"Jeu de go\" class=\"mw-redirect\">go</a>. En effet, dans ce cas, la puissance de calcul qui fait la force des machines joue un rôle moins important face à la stratégie et la capacité d'évaluation d'une position, plus complexes à modéliser.</p>\n<p>Pourtant l'exception <a href=\"https://fr.wikipedia.org/wiki/Hydra_(ordinateur_d%27échecs)\" title=\"Hydra (ordinateur d'échecs)\">Hydra</a> a refait parler des <a href=\"https://fr.wikipedia.org/wiki/Superordinateur\" title=\"Superordinateur\">superordinateurs</a> dédiés au jeu d'échecs en <a href=\"https://fr.wikipedia.org/wiki/Juin_2005\" title=\"Juin 2005\">juin 2005</a>, en battant le grand maître international et <abbr class=\"abbr\" title=\"Septième\">7<sup>e</sup></abbr> mondial <a href=\"https://fr.wikipedia.org/wiki/Michael_Adams\" title=\"Michael Adams\">Michael Adams</a>, sur un score sans appel de 5,5 points contre 0,5.</p>\n<p>En <a href=\"https://fr.wikipedia.org/wiki/Décembre_2006\" title=\"Décembre 2006\">décembre 2006</a>, le champion du monde Kramnik s'est fait battre par le nouveau logiciel <a href=\"https://fr.wikipedia.org/wiki/Fritz_(programme_d%27échecs)\" title=\"Fritz (programme d'échecs)\">Deep fritz 2006</a> 4 à 2 (2 défaites, 4 nulles).</p>\n<h3>Programmes de résolution de problèmes[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=53\" title=\"Modifier la section : Programmes de résolution de problèmes\">modifier le code</a>]</h3>\n<p>De nombreux programmes ont également vu le jour pour vérifier la correction d'un <a href=\"https://fr.wikipedia.org/wiki/Problème_d%27échecs\" title=\"Problème d'échecs\">problème d'échecs</a>. Lorsqu'un problème a été vérifié par ordinateur, cela est mentionné sur le diagramme par le symbole « C+ ».</p>\n<h2>Symbolique des échecs[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=54\" title=\"Modifier la section : Symbolique des échecs\">modifier le code</a>]</h2>\n<p>Très rapidement après leur arrivée en <a href=\"https://fr.wikipedia.org/wiki/Europe\" title=\"Europe\">Europe</a>, les échecs acquièrent un statut particulier<sup id=\"cite_ref-66\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-66\">[43]</a></sup>. <a href=\"https://fr.wikipedia.org/wiki/Divertissement\" title=\"Divertissement\">Divertissement</a> de l'<a href=\"https://fr.wikipedia.org/wiki/Élite\" title=\"Élite\">élite</a>, ils représentent une activité <a href=\"https://fr.wikipedia.org/wiki/Noblesse\" title=\"Noblesse\">noble</a> au cours de laquelle s'affrontent les esprits des participants<sup id=\"cite_ref-67\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-67\">[44]</a></sup>. Les possibilités quasi-infinies offertes par le jeu fascinent et donnent naissance à de nombreuses interprétations <a href=\"https://fr.wikipedia.org/wiki/Ésotérisme\" title=\"Ésotérisme\">ésotériques</a>. Certains le considèrent notamment comme une représentation du monde où chaque situation peut être modélisée en une position qui peut trouver sa solution sur l'échiquier<sup id=\"cite_ref-68\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-68\">[45]</a></sup>.</p>\n<p>Les échecs sont surnommés « le roi des jeux »<sup id=\"cite_ref-69\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-69\">[46]</a></sup>, et ce statut particulier rend toute tentative de mécanisation extraordinaire. Si les premiers automates joueurs d'échecs comme le <a href=\"https://fr.wikipedia.org/wiki/Turc_mécanique\" title=\"Turc mécanique\">turc mécanique</a>, sont des mystifications<sup id=\"cite_ref-70\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-70\">[G 24]</a></sup>, la capacité à jouer aux échecs sera l'un des premiers objectifs des concepteurs d'<a href=\"https://fr.wikipedia.org/wiki/Ordinateur\" title=\"Ordinateur\">ordinateurs</a> et l'un des premiers témoignages de l'apparition de ce qui est alors considéré comme de l'<a href=\"https://fr.wikipedia.org/wiki/Intelligence_artificielle\" title=\"Intelligence artificielle\">intelligence artificielle</a><sup id=\"cite_ref-71\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-71\">[G 25]</a></sup>. C'est cette perception du jeu d'échecs comme expression de l'intelligence humaine qui dramatise les affrontements entre Gary Kasparov et la machine <a href=\"https://fr.wikipedia.org/wiki/Deep_Blue\" title=\"Deep Blue\">Deep Blue</a><sup id=\"cite_ref-deepblue_55-1\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-deepblue-55\">[37]</a></sup>. La défaite du champion de l'espèce humaine marque alors fortement les esprits.</p>\n<p>Le jeu d'échecs symbolise fréquemment l'affrontement de deux psychés, deux capacités intellectuelles. Cette dimension encourage l'<a href=\"https://fr.wikipedia.org/wiki/Union_des_républiques_socialistes_soviétiques\" title=\"Union des républiques socialistes soviétiques\">Union soviétique</a> à se doter d'une école d'échecs qui forme pendant un demi-siècle tous les champions du monde<sup id=\"cite_ref-72\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-72\">[47]</a></sup>. C'est également un aspect fréquemment utilisé dans l'<a href=\"https://fr.wikipedia.org/wiki/Culture_populaire\" title=\"Culture populaire\">art populaire</a> pour figurer l'opposition, et parfois la séduction, entre deux personnages.</p>\n<h2>Arts et culture[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=55\" title=\"Modifier la section : Arts et culture\">modifier le code</a>]</h2>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Honoré_Daumier_032.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Honoré_Daumier_032.jpg/220px-Honoré_Daumier_032.jpg\" width=\"220\" height=\"164\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/74/Honor%C3%A9_Daumier_032.jpg/330px-Honor%C3%A9_Daumier_032.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/74/Honor%C3%A9_Daumier_032.jpg/440px-Honor%C3%A9_Daumier_032.jpg 2x\" data-file-width=\"885\" data-file-height=\"660\"/></a>\n<div class=\"thumbcaption\">\n\n<i>Le Joueur d'échecs</i> d'<a href=\"https://fr.wikipedia.org/wiki/Honoré_Daumier\" title=\"Honoré Daumier\">Honoré Daumier</a></div>\n</div>\n</div>\n<p>De nombreux tableaux, sculptures, films et photographies mettent en scène le jeu d'échecs<sup id=\"cite_ref-73\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-73\">[48]</a></sup><sup class=\"reference cite_virgule\">,</sup><sup id=\"cite_ref-74\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-74\">[49]</a></sup><sup class=\"reference cite_virgule\">,</sup><sup id=\"cite_ref-75\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-75\">[50]</a></sup>.</p>\n<h3>Poésie[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=56\" title=\"Modifier la section : Poésie\">modifier le code</a>]</h3>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Caissa.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/3/37/Caissa.jpg/220px-Caissa.jpg\" width=\"220\" height=\"345\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/3/37/Caissa.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/3/37/Caissa.jpg 2x\" data-file-width=\"300\" data-file-height=\"470\"/></a>\n<div class=\"thumbcaption\">\n\nUne illustration ancienne de <i><a href=\"https://fr.wikipedia.org/wiki/Caïssa\" title=\"Caïssa\">Caïssa</a></i></div>\n</div>\n</div>\n<p>Les deux plus anciens poèmes sur les échecs sont en latin :</p>\n<ul><li><i>Schaccia ludus</i>, publié en 1527 par <a href=\"https://fr.wikipedia.org/wiki/Marco_Girolamo_Vida\" title=\"Marco Girolamo Vida\">Marco Girolamo Vida</a>, expose les règles du jeu de l'époque et met en scène une partie, arbitrée par <a href=\"https://fr.wikipedia.org/wiki/Jupiter_(mythologie)\" title=\"Jupiter (mythologie)\">Jupiter</a>, opposant <a href=\"https://fr.wikipedia.org/wiki/Phœbus\" title=\"Phœbus\" class=\"mw-redirect\">Phœbus</a> à <a href=\"https://fr.wikipedia.org/wiki/Mercure_(mythologie)\" title=\"Mercure (mythologie)\">Mercure</a>.</li>\n</ul><ul><li><i><a href=\"https://fr.wikipedia.org/wiki/Caïssa\" title=\"Caïssa\">Caïssa</a></i>, écrit en <a href=\"https://fr.wikipedia.org/wiki/Hexamètre_dactylique\" title=\"Hexamètre dactylique\">hexamètres</a> <a href=\"https://fr.wikipedia.org/wiki/Latin\" title=\"Latin\">latins</a> par William Jones en 1763, a consacré la <a href=\"https://fr.wikipedia.org/wiki/Dryades_(mythologie)\" title=\"Dryades (mythologie)\" class=\"mw-redirect\">dryade</a> mythique comme déesse du jeu d'échecs.</li>\n</ul><h3>Littérature[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=57\" title=\"Modifier la section : Littérature\">modifier le code</a>]</h3>\n<p>Plusieurs livres de fiction utilisent le jeu d'échecs comme élément important de l'histoire. Parmi eux, deux se distinguent en mettant le jeu au centre de l'intrigue : <i><a href=\"https://fr.wikipedia.org/wiki/Le_Joueur_d%27échecs\" title=\"Le Joueur d'échecs\">Le Joueur d'échecs</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Stefan_Zweig\" title=\"Stefan Zweig\">Stefan Zweig</a>, et <i><a href=\"https://fr.wikipedia.org/wiki/La_Défense_Loujine\" title=\"La Défense Loujine\">La Défense Loujine</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Vladimir_Nabokov\" title=\"Vladimir Nabokov\">Vladimir Nabokov</a>.</p>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Lucas_van_Leyden_-_The_Game_of_Chess_-_WGA12919.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Lucas_van_Leyden_-_The_Game_of_Chess_-_WGA12919.jpg/220px-Lucas_van_Leyden_-_The_Game_of_Chess_-_WGA12919.jpg\" width=\"220\" height=\"173\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Lucas_van_Leyden_-_The_Game_of_Chess_-_WGA12919.jpg/330px-Lucas_van_Leyden_-_The_Game_of_Chess_-_WGA12919.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Lucas_van_Leyden_-_The_Game_of_Chess_-_WGA12919.jpg/440px-Lucas_van_Leyden_-_The_Game_of_Chess_-_WGA12919.jpg 2x\" data-file-width=\"1300\" data-file-height=\"1022\"/></a>\n<div class=\"thumbcaption\">\n\n<i><a href=\"https://fr.wikipedia.org/wiki/La_Partie_d%27échecs_(Lucas_van_Leyden)\" title=\"La Partie d'échecs (Lucas van Leyden)\">La Partie d'échecs</a></i> de <a href=\"https://fr.wikipedia.org/wiki/Lucas_van_Leyden\" title=\"Lucas van Leyden\">Lucas van Leyden</a> (ca 1508)</div>\n</div>\n</div>\n<p><i>Le Joueur d'échecs</i>, nouvelle de Stefan Zweig, a pour sujet l'affrontement d'un joueur particulièrement doué, qui a appris seul à jouer aux échecs, seule façon pour lui de garder son esprit alerte alors qu'il était emprisonné en isolement total sous le régime nazi, et du champion du monde fictif de l'époque, homme particulièrement vulgaire et inculte. Le personnage principal finit par abandonner le match pour ne pas sombrer dans la folie.</p>\n<p><i>La Défense Loujine</i> raconte la vie de Loujine, joueur d'échecs russe fictif qui arrive au plus haut niveau et que l'excès de jeu d'échecs conduit, lui aussi, à la folie. Le roman est particulièrement acclamé par la critique pour la façon dont il dépeint l'univers intérieur du joueur d'échecs, ce qui se passe dans son esprit pendant qu'il réfléchit<sup id=\"cite_ref-76\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-76\">[G 26]</a></sup>.</p>\n<p>Certains romans utilisent les échecs comme élément de la trame de fond. Ainsi, l'intrigue du <i><a href=\"https://fr.wikipedia.org/wiki/Le_Tableau_du_maître_flamand\" title=\"Le Tableau du maître flamand\">Tableau du maître flamand</a></i>, d'<a href=\"https://fr.wikipedia.org/wiki/Arturo_Pérez-Reverte\" title=\"Arturo Pérez-Reverte\">Arturo Pérez-Reverte</a>, s'explique par une <a href=\"https://fr.wikipedia.org/wiki/Analyse_rétrograde\" title=\"Analyse rétrograde\">analyse rétrograde</a>, et celle de <i><a href=\"https://fr.wikipedia.org/wiki/La_ville_est_un_échiquier\" title=\"La ville est un échiquier\">La ville est un échiquier</a></i> par la liste des coups d'une partie <a href=\"https://fr.wikipedia.org/wiki/Wilhelm_Steinitz\" title=\"Wilhelm Steinitz\">Steinitz</a>-<a href=\"https://fr.wikipedia.org/wiki/Mikhail_Tchigorine\" title=\"Mikhail Tchigorine\">Tchigorine</a>. Dans <i><a href=\"https://fr.wikipedia.org/wiki/L%27Échiquier_du_mal\" title=\"L'Échiquier du mal\">L'Échiquier du mal</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Dan_Simmons\" title=\"Dan Simmons\">Dan Simmons</a>, les personnages capables de « dominer » d'autres personnages les utilisent pour jouer une partie d'échecs vivante. La nouvelle <i>Un combat</i>, de <a href=\"https://fr.wikipedia.org/wiki/Patrick_Süskind\" title=\"Patrick Süskind\">Patrick Süskind</a>, relate une partie où le gagnant n'est pas celui qu'on pense, illustrant l'importance de la psychologie dans le jeu. Dans <i><a href=\"https://fr.wikipedia.org/wiki/La_Joueuse_d%27échecs\" title=\"La Joueuse d'échecs\">La Joueuse d'échecs</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Bertina_Henrichs\" title=\"Bertina Henrichs\">Bertina Henrichs</a>, une modeste femme de ménage grecque découvre la puissance du jeu d'échecs.</p>\n<p>D'autres livres entrent également dans cette catégorie, comme <i><a href=\"https://fr.wikipedia.org/wiki/5150_rue_des_Ormes\" title=\"5150 rue des Ormes\" class=\"mw-redirect\">5150 rue des Ormes</a></i> de <a href=\"https://fr.wikipedia.org/wiki/Patrick_Senécal\" title=\"Patrick Senécal\">Patrick Senécal</a>, <i><a href=\"https://fr.wikipedia.org/wiki/La_ville_est_un_échiquier\" title=\"La ville est un échiquier\">La ville est un échiquier</a></i> de <a href=\"https://fr.wikipedia.org/wiki/John_Brunner\" title=\"John Brunner\">John Brunner</a>, <i><a href=\"https://fr.wikipedia.org/wiki/Le_Huit_(roman)\" title=\"Le Huit (roman)\">Le Huit</a></i> de <a href=\"https://fr.wikipedia.org/wiki/Katherine_Neville\" title=\"Katherine Neville\">Katherine Neville</a>, <i><a href=\"https://fr.wikipedia.org/wiki/Le_Gambit_des_étoiles\" title=\"Le Gambit des étoiles\">Le Gambit des étoiles</a></i> de <a href=\"https://fr.wikipedia.org/wiki/Gérard_Klein_(science-fiction)\" title=\"Gérard Klein (science-fiction)\" class=\"mw-redirect\">Gérard Klein</a>, <i>Fous d'échecs</i> de <a href=\"https://fr.wikipedia.org/wiki/Serge_Rezvani\" title=\"Serge Rezvani\">Serge Rezvani</a>.</p>\n<p>En <a href=\"https://fr.wikipedia.org/wiki/Bande_dessinée\" title=\"Bande dessinée\">bande dessinée</a>, le <a href=\"https://fr.wikipedia.org/wiki/Manga\" title=\"Manga\">manga</a> français <i><a href=\"https://fr.wikipedia.org/wiki/Zeitnot_(bande_dessinée)\" title=\"Zeitnot (bande dessinée)\">Zeitnot</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Ed_Tourriol\" title=\"Ed Tourriol\">Ed Tourriol</a> et Eckyo, se déroule dans le milieu des clubs d'échecs lycéens.</p>\n<p>Le jeu d'échecs est également mentionné pour son pouvoir évocateur dans de nombreux livres, comme <i><a href=\"https://fr.wikipedia.org/wiki/De_l%27autre_côté_du_miroir\" title=\"De l'autre côté du miroir\">De l'autre côté du miroir</a></i>, où Alice participe à une partie « grandeur nature » ; <i><a href=\"https://fr.wikipedia.org/wiki/Le_Neveu_de_Rameau\" title=\"Le Neveu de Rameau\">Le Neveu de Rameau</a></i> de <a href=\"https://fr.wikipedia.org/wiki/Denis_Diderot\" title=\"Denis Diderot\">Denis Diderot</a>, où, dans l'incipit, Diderot fait référence au <a href=\"https://fr.wikipedia.org/wiki/Café_de_la_Régence\" title=\"Café de la Régence\">Café de la Régence</a> et à ses joueurs d'échecs de l'époque, notamment <a href=\"https://fr.wikipedia.org/wiki/Kermur_de_Legal\" title=\"Kermur de Legal\">Legal</a> (connu pour son mat) et <a href=\"https://fr.wikipedia.org/wiki/François-André_Danican_Philidor\" title=\"François-André Danican Philidor\">Philidor</a> (connu pour la <a href=\"https://fr.wikipedia.org/wiki/Défense_Philidor\" title=\"Défense Philidor\">défense</a> du même nom). <a href=\"https://fr.wikipedia.org/wiki/Isaac_Asimov\" title=\"Isaac Asimov\">Isaac Asimov</a> a mis en scène les échecs dans plusieurs de ses romans et nouvelles, notamment <i>Cailloux dans le ciel</i> où ce jeu est présenté comme une des rares choses qui n'ont pas changé au cours des millénaires. <a href=\"https://fr.wikipedia.org/wiki/Honoré_de_Balzac\" title=\"Honoré de Balzac\">Balzac</a>, dans <i><a href=\"https://fr.wikipedia.org/wiki/Le_Bal_de_Sceaux\" title=\"Le Bal de Sceaux\">Le Bal de Sceaux</a></i>, décrit l'habileté aux échecs comme une qualité louable chez un gentilhomme<sup id=\"cite_ref-77\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-77\">[51]</a></sup>.</p>\n<p>On peut également citer <i><a href=\"https://fr.wikipedia.org/wiki/Fin_de_partie\" title=\"Fin de partie\">Fin de partie</a></i> (<i>Endgame</i> de son titre original), pièce de théâtre écrite par <a href=\"https://fr.wikipedia.org/wiki/Samuel_Beckett\" title=\"Samuel Beckett\">Samuel Beckett</a>, amateur d'échecs. Le titre de cette pièce renvoie au jeu d'échecs et de nombreuses références subtiles y sont faites par le biais des actes, des rôles et des positions des personnages : déplacements de Clov lors de la scène d'ouverture ; position centrale de Hamm (personnage tyrannique dont le fauteuil roulant apparait vite comme un trône), évoquant là encore la position du roi d'échecs.</p>\n<p>Dans le livre <i>Le Trésor de la Guerre d'Espagne</i>, Serge Pey décrit une partie d'échecs jouée par les membres d'une société secrète portant un hippocampe tatoué sur leurs poignets en hommage au déplacement du cavalier. Dans cette nouvelle, les héros procèdent à une partie aveugle s'effectuant uniquement avec le parfum de verres remplis d'alcool différents. Dans un autre chapitre du même livre Serge Pey décrit une partie en morse effectuée dans une prison chilienne, sous la dictature de Pinochet.</p>\n<p>Dans la nouvelle <i>Strange Eden</i> (« Étrange Eden ») de <a href=\"https://fr.wikipedia.org/wiki/Philip_K._Dick\" title=\"Philip K. Dick\">Philip K. Dick</a>, la jeune femme extraterrestre que rencontre Brent lui propose une partie d'échecs; puis elle lui apprend que c'est son peuple qui l'aurait introduit chez les brahmanes.</p>\n<p>Dans le recueil de nouvelles <i><a href=\"https://fr.wikipedia.org/wiki/Fantômes_et_Farfafouilles\" title=\"Fantômes et Farfafouilles\">Fantômes et Farfafouilles</a></i> de <a href=\"https://fr.wikipedia.org/wiki/Fredric_Brown\" title=\"Fredric Brown\">Fredric Brown</a>, La nouvelle <i>l'hérésie du fou</i> est en fait une partie d'échecs vue par un fou d'échecs (<i>bishop</i> en anglais). Tout le long de la narration en point de vue interne, une atmosphère de guerre moyenâgeuse s'impose à l'esprit du lecteur.</p>\n<p>Dans le roman <i><a href=\"https://fr.wikipedia.org/wiki/L%27Ultime_Secret\" title=\"L'Ultime Secret\">L'Ultime Secret</a></i> de Bernard Werber Isidore et Lucrèce enquêtent sur l'étrange mort de Samuel Fincher, génie du jeu d'échecs ayant vaincu le meilleur ordinateur à ce jour.</p>\n<p>Dans la nouvelle <i><a href=\"https://fr.wikipedia.org/wiki/Double_assassinat_dans_la_rue_Morgue\" title=\"Double assassinat dans la rue Morgue\">Double assassinat dans la rue Morgue</a></i> d'<a href=\"https://fr.wikipedia.org/wiki/Edgar_Allan_Poe\" title=\"Edgar Allan Poe\">Edgar Allan Poe</a>, le jeu d'échecs apparaît également, mais est comparé négativement au jeu de dames anglais.</p>\n<h3>Cinéma[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=58\" title=\"Modifier la section : Cinéma\">modifier le code</a>]</h3>\n<div class=\"thumb tright\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Chess_Fever_Kapablanka.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Chess_Fever_Kapablanka.jpg/220px-Chess_Fever_Kapablanka.jpg\" width=\"220\" height=\"178\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Chess_Fever_Kapablanka.jpg/330px-Chess_Fever_Kapablanka.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/a/a2/Chess_Fever_Kapablanka.jpg 2x\" data-file-width=\"440\" data-file-height=\"356\"/></a>\n<div class=\"thumbcaption\">\n\n<a href=\"https://fr.wikipedia.org/wiki/José_Raúl_Capablanca\" title=\"José Raúl Capablanca\">José Raúl Capablanca</a> dans <i>La Fièvre des échecs</i> en 1926.</div>\n</div>\n</div>\n<p>Le premier film réalisé autour de la thématique du jeu d'échecs est <i><a href=\"https://fr.wikipedia.org/wiki/La_Fièvre_des_échecs\" title=\"La Fièvre des échecs\">La Fièvre des échecs</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Vsevolod_Poudovkine\" title=\"Vsevolod Poudovkine\">Vsevolod Poudovkine</a>, tourné pendant le <a href=\"https://fr.wikipedia.org/wiki/Tournoi_d%27échecs_de_Moscou_1925\" title=\"Tournoi d'échecs de Moscou 1925\">tournoi de Moscou de 1925</a>. D'autres films sont situés dans le monde des échecs de compétition, comme <i><a href=\"https://fr.wikipedia.org/wiki/La_Diagonale_du_fou\" title=\"La Diagonale du fou\">La Diagonale du fou</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Richard_Dembo\" title=\"Richard Dembo\">Richard Dembo</a>, inspiré des matches de championnat de monde entre <a href=\"https://fr.wikipedia.org/wiki/Anatoly_Karpov\" title=\"Anatoly Karpov\" class=\"mw-redirect\">Karpov</a> et <a href=\"https://fr.wikipedia.org/wiki/Viktor_Kortchnoï\" title=\"Viktor Kortchnoï\">Kortchnoï</a> ; <i><a href=\"https://fr.wikipedia.org/wiki/À_la_recherche_de_Bobby_Fischer\" title=\"À la recherche de Bobby Fischer\">À la recherche de Bobby Fischer</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Steven_Zaillian\" title=\"Steven Zaillian\">Steven Zaillian</a>, inspiré de la vie de <a href=\"https://fr.wikipedia.org/wiki/Josh_Waitzkin\" title=\"Josh Waitzkin\" class=\"mw-redirect\">Josh Waitzkin</a> ; <i><a href=\"https://fr.wikipedia.org/wiki/La_Partie_d%27échecs\" title=\"La Partie d'échecs\">La Partie d'échecs</a></i>, d'<a href=\"https://fr.wikipedia.org/wiki/Yves_Hanchar\" title=\"Yves Hanchar\">Yves Hanchar</a>.</p>\n<p>Le dernier film en date, <i><a href=\"https://fr.wikipedia.org/wiki/Le_Prodige_(film,_2015)\" title=\"Le Prodige (film, 2015)\">Le Prodige</a></i> (2015), est un film biographique dont le personnage central est Bobby Fischer, interprété par <a href=\"https://fr.wikipedia.org/wiki/Tobey_Maguire\" title=\"Tobey Maguire\">Tobey Maguire</a>. Ce film, réalisé par Edward Zwick, est centré sur l'affrontement du champion américain avec le Soviétique <a href=\"https://fr.wikipedia.org/wiki/Boris_Spassky\" title=\"Boris Spassky\">Boris Spassky</a> (joué par Liev Schreiber) et la montée de sa folie.</p>\n<p>D'autres films utilisent le jeu d'échecs de façon métaphorique, comme <i><a href=\"https://fr.wikipedia.org/wiki/Le_Septième_Sceau\" title=\"Le Septième Sceau\">Le Septième Sceau</a></i>, d'<a href=\"https://fr.wikipedia.org/wiki/Ingmar_Bergman\" title=\"Ingmar Bergman\">Ingmar Bergman</a>, où le chevalier propose une partie d'échecs à la Mort en espérant retarder l'échéance fatidique ; <i><a href=\"https://fr.wikipedia.org/wiki/Les_Joueurs_d%27échecs\" title=\"Les Joueurs d'échecs\" class=\"mw-redirect\">Les Joueurs d'échecs</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Satyajit_Ray\" title=\"Satyajit Ray\">Satyajit Ray</a> ; ou en tant que support de l'intrigue, comme le thriller <i><a href=\"https://fr.wikipedia.org/wiki/Face_à_face_(film,_1992)\" title=\"Face à face (film, 1992)\">Face à face</a></i>, de Carl Shenkel.</p>\n<p>Certains des romans cités ci-dessus ont également été adaptés en films, comme <i><a href=\"https://fr.wikipedia.org/wiki/La_Défense_Loujine_(film)\" title=\"La Défense Loujine (film)\">La Défense Loujine</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Marleen_Gorris\" title=\"Marleen Gorris\">Marleen Gorris</a>, et <i><a href=\"https://fr.wikipedia.org/wiki/Joueuse\" title=\"Joueuse\">Joueuse</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Caroline_Bottaro\" title=\"Caroline Bottaro\">Caroline Bottaro</a>, dont le scénario est inspiré de <i><a href=\"https://fr.wikipedia.org/wiki/La_Joueuse_d%27échecs\" title=\"La Joueuse d'échecs\">La Joueuse d'échecs</a></i>, transposé en Corse avec <a href=\"https://fr.wikipedia.org/wiki/Sandrine_Bonnaire\" title=\"Sandrine Bonnaire\">Sandrine Bonnaire</a>.</p>\n<p>Il existe aussi des films d'animation mettant en scène les échecs, comme <i><a href=\"https://fr.wikipedia.org/wiki/Le_Joueur_d%27échecs_(court-métrage)\" title=\"Le Joueur d'échecs (court-métrage)\">Geri's Game</a></i>, court-métrage d'animation produit et réalisé par les studios <a href=\"https://fr.wikipedia.org/wiki/Pixar_Animation_Studios\" title=\"Pixar Animation Studios\">Pixar</a>.</p>\n<p>D'autres films sont en rapport avec les échecs, par exemple <i>La légende de Zatoïchi: Voyage en Enfer</i> de <a href=\"https://fr.wikipedia.org/wiki/Kenji_Misumi\" title=\"Kenji Misumi\">Kenji Misumi</a>, <i>L'Échiquier de la passion</i> de <a href=\"https://fr.wikipedia.org/wiki/Wolfgang_Petersen\" title=\"Wolfgang Petersen\">Wolfgang Petersen</a>, <i>Jouer sa vie</i> de <a href=\"https://fr.wikipedia.org/wiki/Gilles_Carle\" title=\"Gilles Carle\">Gilles Carle</a>.</p>\n<p>On peut également noter de nombreuses apparitions du jeu d'échecs dans des films où sa présence n'est pas un ressort dramatique mais plutôt de l'ordre du symbole. Ainsi, dans <i><a href=\"https://fr.wikipedia.org/wiki/Bons_baisers_de_Russie_(film)\" title=\"Bons baisers de Russie (film)\">Bons baisers de Russie</a></i>, le méchant est un génie des échecs et de la stratégie et travaille pour le SPECTRE contre <a href=\"https://fr.wikipedia.org/wiki/James_Bond\" title=\"James Bond\">James Bond</a>. Dans <i><a href=\"https://fr.wikipedia.org/wiki/K_(film,_1997)\" title=\"K (film, 1997)\">K</a></i>, d'<a href=\"https://fr.wikipedia.org/wiki/Alexandre_Arcady\" title=\"Alexandre Arcady\">Alexandre Arcady</a>, les deux personnages principaux sont liés par leur goût des échecs.</p>\n<p>Le jeu d'échecs comme symbole de l'intelligence humaine est repris dans <i><a href=\"https://fr.wikipedia.org/wiki/Blade_Runner_(film)\" title=\"Blade Runner (film)\">Blade Runner</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Ridley_Scott\" title=\"Ridley Scott\">Ridley Scott</a>, où le <i>répliquant</i> met son créateur échec et mat, et dans <i><a href=\"https://fr.wikipedia.org/wiki/2001,_l%27Odyssée_de_l%27espace\" title=\"2001, l'Odyssée de l'espace\">2001, l'Odyssée de l'espace</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Stanley_Kubrick\" title=\"Stanley Kubrick\">Stanley Kubrick</a>, grand amateur d'échecs, où le super-ordinateur CARL (<a href=\"https://fr.wikipedia.org/wiki/HAL_9000\" title=\"HAL 9000\">HAL 9000</a>) l'emporte sur l'astronaute David Bowman.</p>\n<p>Dans <i><a href=\"https://fr.wikipedia.org/wiki/Harry_Potter_à_l%27école_des_sorciers\" title=\"Harry Potter à l'école des sorciers\">Harry Potter à l'école des sorciers</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Chris_Columbus\" title=\"Chris Columbus\">Chris Columbus</a>, <a href=\"https://fr.wikipedia.org/wiki/Ron_Weasley\" title=\"Ron Weasley\">Ronald Weasley</a> joue avec Harry aux échecs <i>version sorcier</i>, avec des pièces animées par magie, puis doit diriger une partie d'échecs contre des pièces grandeur nature, l'une des épreuves à affronter avant d'accéder à la <a href=\"https://fr.wikipedia.org/wiki/Pierre_philosophale\" title=\"Pierre philosophale\">pierre philosophale</a>.</p>\n<p><a href=\"https://fr.wikipedia.org/wiki/Magnéto_(comics)\" title=\"Magnéto (comics)\">Magnéto</a> et le professeur <a href=\"https://fr.wikipedia.org/wiki/Professeur_Xavier\" title=\"Professeur Xavier\">Charles-Xavier</a>, les principaux antagonistes de la saga <a href=\"https://fr.wikipedia.org/wiki/X-Men_(film)\" title=\"X-Men (film)\">X-Men</a>, s'affrontent régulièrement aux échecs. C'est notamment le cas dans <a href=\"https://fr.wikipedia.org/wiki/X-Men_2\" title=\"X-Men 2\">X-Men 2</a>, où les deux personnages jouent dans la cellule de Magnéto. Le film <a href=\"https://fr.wikipedia.org/wiki/X-Men_:_L%27Affrontement_final\" title=\"X-Men : L'Affrontement final\">X-Men : L'Affrontement final</a> se clôt sur une partie d'échecs que Magnéto joue seul.</p>\n<p>Dans <i><a href=\"https://fr.wikipedia.org/wiki/L%27Affaire_Thomas_Crown_(film,_1968)\" title=\"L'Affaire Thomas Crown (film, 1968)\">L'Affaire Thomas Crown</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Norman_Jewison\" title=\"Norman Jewison\">Norman Jewison</a>, le suspect et celle qui le traque s'affrontent et se séduisent au cours d'une partie. Le personnage joué par <a href=\"https://fr.wikipedia.org/wiki/Faye_Dunaway\" title=\"Faye Dunaway\">Faye Dunaway</a> fait perdre ses moyens au personnage joué par <a href=\"https://fr.wikipedia.org/wiki/Steve_McQueen\" title=\"Steve McQueen\">Steve McQueen</a> en le provoquant par différents gestes et poses langoureux.</p>\n<p>Citons enfin <i><a href=\"https://fr.wikipedia.org/wiki/Les_Visiteurs_du_soir\" title=\"Les Visiteurs du soir\">Les Visiteurs du soir</a></i> de <a href=\"https://fr.wikipedia.org/wiki/Marcel_Carné\" title=\"Marcel Carné\">Marcel Carné</a> ; <i><a href=\"https://fr.wikipedia.org/wiki/Revolver_(film)\" title=\"Revolver (film)\">Revolver</a></i>, de <a href=\"https://fr.wikipedia.org/wiki/Guy_Ritchie\" title=\"Guy Ritchie\">Guy Ritchie</a> ; <i><a href=\"https://fr.wikipedia.org/wiki/Whatever_Works\" title=\"Whatever Works\">Whatever Works</a></i> de <a href=\"https://fr.wikipedia.org/wiki/Woody_Allen\" title=\"Woody Allen\">Woody Allen</a>, où le personnage principal, un intellectuel surdoué et misanthrope, abandonne son emploi de professeur de physique pour enseigner les échecs.</p>\n<p>Dans <i><a href=\"https://fr.wikipedia.org/wiki/Sherlock_Holmes_:_Jeu_d%27ombres\" title=\"Sherlock Holmes : Jeu d'ombres\">Sherlock Holmes : Le Jeu des Ombres</a></i> de Guy Ritchie, on retrouve à plusieurs reprises un motif d'échiquier en noir et blanc afin d'illustrer la lutte intellectuelle entre Sherlock Holmes et le Professeur Moriarty. D'ailleurs, le climax mène à une partie d'échecs entre les deux personnages.</p>\n<h3>Musique[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=59\" title=\"Modifier la section : Musique\">modifier le code</a>]</h3>\n<p>Le ballet <i><a href=\"https://fr.wikipedia.org/wiki/Checkmate_(Bliss)\" title=\"Checkmate (Bliss)\">Checkmate</a></i> (<i>échec et mat</i>) a été écrit par le compositeur britannique <a href=\"https://fr.wikipedia.org/wiki/Arthur_Bliss\" title=\"Arthur Bliss\">Arthur Bliss</a> en <a href=\"https://fr.wikipedia.org/wiki/1937\" title=\"1937\">1937</a> et met en scène les pièces échiquéennes jusqu'à l'assaut final du roi noir.</p>\n<p>Avec son tableau <i>Chess Piece</i> (1944), l'américain <a href=\"https://fr.wikipedia.org/wiki/John_Cage\" title=\"John Cage\">John Cage</a> allie peinture, musique et échecs puisqu'il s'agit d'une partition peinte sur la représentation d'un échiquier<sup id=\"cite_ref-musicam_78-0\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-musicam-78\">[52]</a></sup>.</p>\n<p>L'album <i>E2-E4</i> (1984) du musicien allemand <a href=\"https://fr.wikipedia.org/wiki/Manuel_Göttsching\" title=\"Manuel Göttsching\">Manuel Göttsching</a> emprunte son titre à l'ouverture du pion-roi<sup id=\"cite_ref-musicam_78-1\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-musicam-78\">[52]</a></sup>.</p>\n<p>La <a href=\"https://fr.wikipedia.org/wiki/Comédie_musicale\" title=\"Comédie musicale\">comédie musicale</a> <i><a href=\"https://fr.wikipedia.org/wiki/Chess_(comédie_musicale)\" title=\"Chess (comédie musicale)\">Chess</a></i> (<a href=\"https://fr.wikipedia.org/wiki/1986\" title=\"1986\">1986</a>), sur une musique de <a href=\"https://fr.wikipedia.org/wiki/Björn_Ulvaeus\" title=\"Björn Ulvaeus\">Björn Ulvaeus</a> et <a href=\"https://fr.wikipedia.org/wiki/Benny_Andersson\" title=\"Benny Andersson\">Benny Andersson</a> (anciens membres d'<a href=\"https://fr.wikipedia.org/wiki/ABBA\" title=\"ABBA\">ABBA</a>) et des paroles de <a href=\"https://fr.wikipedia.org/wiki/Tim_Rice\" title=\"Tim Rice\">Tim Rice</a>, met en scène un triangle amoureux entre deux participants à un championnat du monde d'échecs et une femme qui tente de séduire l'un et tombe amoureuse de l'autre.</p>\n<div class=\"thumb tleft\">\n<div class=\"thumbinner\" style=\"width:222px;\"><a href=\"https://fr.wikipedia.org/wiki/Fichier:Marostica_PiazzaScacchi.jpg\" class=\"image\"><img alt=\"\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Marostica_PiazzaScacchi.jpg/220px-Marostica_PiazzaScacchi.jpg\" width=\"220\" height=\"147\" class=\"thumbimage\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/6/67/Marostica_PiazzaScacchi.jpg/330px-Marostica_PiazzaScacchi.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/67/Marostica_PiazzaScacchi.jpg/440px-Marostica_PiazzaScacchi.jpg 2x\" data-file-width=\"900\" data-file-height=\"600\"/></a>\n<div class=\"thumbcaption\">\n\n<a href=\"https://fr.wikipedia.org/wiki/Marostica\" title=\"Marostica\">Marostica</a>, Place de l'échiquier</div>\n</div>\n</div>\n<h3>Tradition médiévale[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=60\" title=\"Modifier la section : Tradition médiévale\">modifier le code</a>]</h3>\n<p>La ville de <a href=\"https://fr.wikipedia.org/wiki/Marostica\" title=\"Marostica\">Marostica</a>, <a href=\"https://fr.wikipedia.org/wiki/Italie\" title=\"Italie\">Italie</a>, organise une partie d'échecs sur la place publique, avec des personnages vivants costumés qui tiennent lieu de pièces. Cette coutume remontre à <a href=\"https://fr.wikipedia.org/wiki/1454\" title=\"1454\">1454</a>. Deux gentilshommes, Rinaldo d'Angarano et Vieri da Vallonara, étaient tous deux amoureux de Lionora, fille du seigneur de Marostica. Ils voulaient s'affronter en duel. Mais le pacifique seigneur leur proposa de s'affronter plutôt au jeu d'échecs. La place publique dallée de pierres alternativement noires et bistre tenait lieu d'échiquier. Le gagnant épouserait la belle Lionora ; le perdant, sa sœur cadette. Le spectacle se déroule au mois de septembre les années paires avec 550 figurants. Pour l'occasion, on recouvre l'échiquier de carrés de tissu<sup id=\"cite_ref-79\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-79\">[53]</a></sup><sup class=\"reference cite_virgule\">,</sup><sup id=\"cite_ref-80\" class=\"reference\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_note-80\">[54]</a></sup>.</p>\n<div style=\"clear:both;\"/>\n<h2>Notes et références[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=61\" title=\"Modifier la section : Notes et références\">modifier le code</a>]</h2>\n<h3>Références issues du <i>Guide des Échecs</i>[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=62\" title=\"Modifier la section : Références issues du Guide des Échecs\">modifier le code</a>]</h3>\n<p>Livre dont sont issues ces références : <a href=\"https://fr.wikipedia.org/wiki/Nicolas_Giffard\" title=\"Nicolas Giffard\">Nicolas Giffard</a> et Alain Biénabe, <cite class=\"italique\">Le Guide des Échecs : Traité complet</cite>, Bouquins, <time class=\"nowrap\" datetime=\"1993-03-30\">30 mars 1993</time>, 1591 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-221-05913-5\" title=\"Spécial:Ouvrages de référence/978-2-221-05913-5\">978-2-221-05913-5</a>)</small>.</p>\n<div class=\"references-small decimal\" style=\"-moz-column-count:3;-webkit-column-count:3;column-count:3;\">\n<ol class=\"references\"><li id=\"cite_note-1\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-1\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 3-15.</li>\n<li id=\"cite_note-2\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-2\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 13-15.</li>\n<li id=\"cite_note-3\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-3\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 16.</li>\n<li id=\"cite_note-4\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-4\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 20-22.</li>\n<li id=\"cite_note-7\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-7\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 14.</li>\n<li id=\"cite_note-12\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-12\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 87.</li>\n<li id=\"cite_note-13\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-13\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 87-117.</li>\n<li id=\"cite_note-14\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-14\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 197.</li>\n<li id=\"cite_note-15\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-15\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 161-196.</li>\n<li id=\"cite_note-16\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-16\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 118.</li>\n<li id=\"cite_note-17\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-17\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 36.</li>\n<li id=\"cite_note-28\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-28\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 379-656.</li>\n<li id=\"cite_note-333-334-34\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-333-334_34-0\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 333-334.</li>\n<li id=\"cite_note-46\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-46\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 335.</li>\n<li id=\"cite_note-49\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-49\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 337.</li>\n<li id=\"cite_note-52\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-52\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 471.</li>\n<li id=\"cite_note-53\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-53\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 521.</li>\n<li id=\"cite_note-54\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-54\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 568.</li>\n<li id=\"cite_note-60\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-60\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 915.</li>\n<li id=\"cite_note-61\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-61\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 925.</li>\n<li id=\"cite_note-62\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-62\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 1137.</li>\n<li id=\"cite_note-64\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-64\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 1167.</li>\n<li id=\"cite_note-65\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-65\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 899.</li>\n<li id=\"cite_note-70\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-70\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 899.</li>\n<li id=\"cite_note-71\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-71\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 900.</li>\n<li id=\"cite_note-76\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-76\">↑</a> <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 908.</li>\n</ol></div>\n<h3>Autres notes et références[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=63\" title=\"Modifier la section : Autres notes et références\">modifier le code</a>]</h3>\n<div class=\"references-small decimal\" style=\"-moz-column-count:2;-webkit-column-count:2;column-count:2;\">\n<ol class=\"references\"><li id=\"cite_note-5\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-5\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://www.cnrtl.fr/etymologie/mat\">Trésor de la langue française informatisé</a>.</li>\n<li id=\"cite_note-6\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-6\">↑</a> <a href=\"https://fr.wikipedia.org/wiki/Richard_Réti\" title=\"Richard Réti\">Richard Réti</a>, <i>Les Maîtres de l'échiquier.</i></li>\n<li id=\"cite_note-8\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-8\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/fide/handbook?id=124&view=article\">« <cite style=\"font-style: normal\">Laws of chess, article 8</cite> »</a>, FIDE <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-9\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-9\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/component/handbook/?id=125&view=article\">« <cite style=\"font-style: normal\">Laws of chess — Appendices, appendice C</cite> »</a>, FIDE <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-10\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-10\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://www.chessgames.com/perl/chessgame?gid=1006866\">Siegbert Tarrasch vs Max Euwe (1922)</a>.</li>\n<li id=\"cite_note-11\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-11\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://www.chessgames.com/perl/chessgame?gid=1031833\">« <cite style=\"font-style: normal\">Botvinnik-Yudovich,USSR Championship 1933</cite> »</a>.</li>\n<li id=\"cite_note-18\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-18\">↑</a> Gérard Demuydt, <a rel=\"nofollow\" class=\"external text\" href=\"http://www.mjae.com/immortelle.html\">« <cite style=\"font-style: normal\">A. Anderssen - L. Kieseritzky, l'Immortelle de Londres, 1851</cite> »</a> <small style=\"line-height:1em;\">(consulté le 6 janvier 2010)</small>.</li>\n<li id=\"cite_note-19\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-19\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/fide/handbook?id=124&view=article\">« <cite style=\"font-style: normal\">Laws of chess, article 6</cite> »</a>, FIDE <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-laws-app-20\">↑ <sup><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-laws-app_20-0\">a</a> et <a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-laws-app_20-1\">b</a></sup> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/fide/handbook?id=125&view=article\">« <cite style=\"font-style: normal\">Laws of Chess — Appendices</cite> »</a>, FIDE <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-21\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-21\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/fide/handbook?id=66&view=article\">« <cite style=\"font-style: normal\">FIDE Rating Regulations (Qualification Commission) — Rate of Play</cite> »</a>, FIDE <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-22\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-22\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com\">« <cite style=\"font-style: normal\">Fédération Internationale des Échecs</cite> »</a> <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-laws-23\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-laws_23-0\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/fide/handbook?id=124&view=article\">« <cite style=\"font-style: normal\">Laws of chess</cite> »</a>, FIDE <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-24\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-24\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://ratings.fide.com\">« <cite style=\"font-style: normal\">FIDE Chess Ratings</cite> »</a> <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-25\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-25\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/fide/handbook?id=10&view=category\">« <cite style=\"font-style: normal\">International Title Regulations (Qualification Commission)</cite> »</a>, FIDE <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-fide-arbitres-26\">↑ <sup><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-fide-arbitres_26-0\">a</a> et <a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-fide-arbitres_26-1\">b</a></sup> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/fide/handbook?id=14&view=category\">« <cite style=\"font-style: normal\">Regulations for the Titles of Arbiters</cite> »</a>, FIDE <small style=\"line-height:1em;\">(consulté le 23 décembre 2009)</small>.</li>\n<li id=\"cite_note-27\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-27\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://echecs.asso.fr/Default.aspx?cat=5\">« <cite style=\"font-style: normal\">Le secteur de l'Arbitrage</cite> »</a>, Fédération française des échecs <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-29\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-29\">↑</a> Avant 1956, le champion du monde, s'il avait été battu, aurait disputé un match-tournoi à trois avec le nouveau champion et le nouveau candidat sélectionné par la FIDE. <i>My Great Predecessors</i>, tome II, <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 215.</li>\n<li id=\"cite_note-30\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-30\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.chessprofessionals.org/\">« <cite style=\"font-style: normal\"><i>Association of Chess Professionals</i></cite> »</a> <small style=\"line-height:1em;\">(consulté le 6 novembre 2013)</small>.</li>\n<li id=\"cite_note-31\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-31\">↑</a> Jacques Dexteit et Norbert Engel, <i>Jeu d'échecs et sciences humaines</i>, Payot page 85.</li>\n<li id=\"cite_note-32\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-32\">↑</a> <a href=\"https://fr.wikipedia.org/wiki/Alfred_Binet\" title=\"Alfred Binet\">Alfred Binet</a>, <cite class=\"italique\">Psychologie des grands calculateurs et joueurs d'échecs</cite>, <a href=\"https://fr.wikipedia.org/wiki/Éditions_L%27Harmattan\" title=\"Éditions L'Harmattan\">L'Harmattan</a>, <time class=\"nowrap\" datetime=\"2005-04\">avril 2005</time>, 366 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/2-7475-7537-3\" title=\"Spécial:Ouvrages de référence/2-7475-7537-3\">2-7475-7537-3</a>, <a rel=\"nofollow\" class=\"external text\" href=\"http://www.editions-harmattan.fr/index.asp?navig=catalogue&obj=livre&no=19084\">présentation en ligne</a>)</small>.</li>\n<li id=\"cite_note-33\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-33\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a href=\"https://fr.wikipedia.org/wiki/Reuben_Fine\" title=\"Reuben Fine\">Reuben Fine</a>, <cite class=\"italique\" lang=\"en\">Psychology of the Chess Player</cite>, Dover Publications Inc., <time class=\"nowrap\" datetime=\"1956-12\">décembre 1956</time>, 74 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-0-486-21551-8\" title=\"Spécial:Ouvrages de référence/978-0-486-21551-8\">978-0-486-21551-8</a>)</small>.</li>\n<li id=\"cite_note-35\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-35\">↑</a> <cite style=\"font-style:normal\" class=\"ouvrage\"><a rel=\"nofollow\" class=\"external text\" href=\"http://www.itranet.tg/ftriztgr1.html\">« Poids de 1000 grains de paddy TGR 1: 28 g »</a> <sup>(<a rel=\"nofollow\" class=\"external text\" href=\"http://web.archive.org/web/*/http://www.itranet.tg/ftriztgr1.html\">Archive</a> • <a rel=\"nofollow\" class=\"external text\" href=\"http://archive.wikiwix.com/cache/?url=http://www.itranet.tg/ftriztgr1.html\">Wikiwix</a> • <a rel=\"nofollow\" class=\"external text\" href=\"http://archive.is/http://www.itranet.tg/ftriztgr1.html\">Archive.is</a> • <a rel=\"nofollow\" class=\"external text\" href=\"https://www.google.fr/search?q=cache:http://www.itranet.tg/ftriztgr1.html\">Google</a> • <a href=\"https://fr.wikipedia.org/wiki/Projet:Correction_des_liens_externes#J.27ai_trouv.C3.A9_un_lien_mort.2C_que_faire_.3F\" title=\"Projet:Correction des liens externes\">Que faire ?</a>)</sup>, consulté le 2013-11-06</cite>. <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fao.org/docrep/t0567f/T0567F05.htm\">« La balle constitue environ 20 pour cent du poids du paddy »</a>.</li>\n<li id=\"cite_note-36\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-36\">↑</a> <a href=\"https://fr.wikipedia.org/wiki/Homère\" title=\"Homère\">Homère</a>, <i><a href=\"https://fr.wikipedia.org/wiki/Odyssée\" title=\"Odyssée\">Odyssée</a></i>, I, 107 ; <a href=\"https://fr.wikipedia.org/wiki/Euripide\" title=\"Euripide\">Euripide</a>, <i>Iphigénie à Aulis</i>, v. 195 et suiv. Voir aussi de nombreuses peintures de vases grecs.</li>\n<li id=\"cite_note-37\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-37\">↑</a> Larousse encyclopédique en 10 volumes, Paris, 1984, vol.VIII, <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 7747 <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-03-102308-1\" title=\"Spécial:Ouvrages de référence/978-2-03-102308-1\">978-2-03-102308-1</a>)</small>.</li>\n<li id=\"cite_note-38\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-38\">↑</a> <a href=\"https://fr.wikipedia.org/wiki/Robert_Graves\" title=\"Robert Graves\">Robert Graves</a>, « Les Mythes grecs », édition Fayard, Paris, 1967, traduit de l'anglais par Mounir Hafez, <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 497-517 édition originale : <i>Greek myths</i>, Cassell & c° LTD, Londres 1958.</li>\n<li id=\"cite_note-39\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-39\">↑</a> Pierre Monnet, <cite class=\"italique\">Jeu d'Echecs, Jeu de Dames, histoire parallèle</cite>, <time>2012</time>, <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 4.</li>\n<li id=\"cite_note-40\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-40\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) Roland G. Austin, « <cite style=\"font-style:normal;\">Greek board games</cite> », <i>Antiquity</i>, <time class=\"nowrap\" datetime=\"1940-09-14\">14 septembre 1940</time>, <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 257-271 <small style=\"line-height:1em;\">(<a rel=\"nofollow\" class=\"external text\" href=\"http://www.gamesmuseum.uwaterloo.ca/Archives/Austin/index.html\">lire en ligne</a>)</small>.</li>\n<li id=\"cite_note-41\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-41\">↑</a> <a href=\"https://fr.wikipedia.org/wiki/Euripide\" title=\"Euripide\">Euripide</a> (<abbr class=\"abbr\" title=\"traduction\">trad.</abbr> François Jouan), <cite class=\"italique\">Iphigénie à Aulis</cite>, Belle-Lettres, <time>2002</time><small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/2-251-00127-1\" title=\"Spécial:Ouvrages de référence/2-251-00127-1\">2-251-00127-1</a>)</small>, <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 67, vers 194-198.</li>\n<li id=\"cite_note-42\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-42\">↑</a> Gorgias de Leontinoï (<abbr class=\"abbr\" title=\"traduction\">trad.</abbr> Jean-Paul Dumont), <cite class=\"italique\">Eloge de Palamède</cite>, La Pléiade, <abbr class=\"abbr\" title=\"collection\">coll.</abbr> « Les Présocratiques », <time>2008</time><small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-07-011139-8\" title=\"Spécial:Ouvrages de référence/978-2-07-011139-8\">978-2-07-011139-8</a>)</small>, <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 1043, paragraphe 30.</li>\n<li id=\"cite_note-43\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-43\">↑</a> <a rel=\"nofollow\" class=\"external free\" href=\"http://classes.bnf.fr/echecs/histoire/naissance.htm\">http://classes.bnf.fr/echecs/histoire/naissance.htm</a></li>\n<li id=\"cite_note-44\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-44\">↑</a> Jean-Louis Cazaux, <cite class=\"italique\">L'odyssée des échecs</cite>, Praxéo, <time>2011</time></li>\n<li id=\"cite_note-45\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-45\">↑</a> à ne pas confondre avec sa variante tardive à quatre joueurs dite <i><a href=\"https://fr.wikipedia.org/w/index.php?title=Chaturaji&action=edit&redlink=1\" class=\"new\" title=\"Chaturaji (page inexistante)\">chaturaji</a> <a href=\"https://en.wikipedia.org/wiki/chaturaji\" class=\"extiw\" title=\"en:chaturaji\">(en)</a></i>; voir la mise au point de Jean-Louis Cazaux, <a rel=\"nofollow\" class=\"external text\" href=\"http://praxeo-fr.blogspot.fr/2010/11/articles-echecs-et-chaturanga-la-fin.html\">« <cite style=\"font-style: normal\">Échecs et chaturanga : la fin d'un mythe</cite> »</a>, sur <i>Editions Praxéo</i>, <time class=\"nowrap\" datetime=\"2010-11-03\">3 novembre 2010</time><small style=\"line-height:1em;\">(consulté le 3 septembre 2014)</small></li>\n<li id=\"cite_note-47\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-47\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://www.moracchini-echecs-institut.com/histoire.php?m=5&sm=1\">Petite histoire d'un grand jeu : Les échecs – Développements</a>, Moracchini Échecs Institut.</li>\n<li id=\"cite_note-48\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-48\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://classes.bnf.fr/echecs/charle/index.htm\">Dossiers pédagogiques</a> de la <a href=\"https://fr.wikipedia.org/wiki/Bibliothèque_nationale_de_France\" title=\"Bibliothèque nationale de France\">Bibliothèque nationale de France</a>.</li>\n<li id=\"cite_note-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs-50\">↑ <sup><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs_50-0\">a</a>, <a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs_50-1\">b</a> et <a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-L.27Odyss.C3.A9e_des_jeux_d.27.C3.A9checs_50-2\">c</a></sup><a rel=\"nofollow\" class=\"external text\" href=\"http://history.chess.free.fr/odyssee.htm\">Référence</a>, Jean-Louis Cazaux, \"L'Odyssée des jeux d'échecs\", Praxéo, 2010</li>\n<li id=\"cite_note-51\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-51\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://classes.bnf.fr/echecs/pedago/antho/18.htm\">Anthologie sur le jeu d'échecs</a> sur le site de la BNF</li>\n<li id=\"cite_note-deepblue-55\">↑ <sup><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-deepblue_55-0\">a</a> et <a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-deepblue_55-1\">b</a></sup> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) Monty Newborn, <cite class=\"italique\" lang=\"en\">Kasparov versus Deep Blue : Computer Chess Comes of Age</cite>, Springer, <time class=\"nowrap\" datetime=\"1996-12-13\">13 décembre 1996</time>, 322 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-0-387-94820-1\" title=\"Spécial:Ouvrages de référence/978-0-387-94820-1\">978-0-387-94820-1</a>)</small>.</li>\n<li id=\"cite_note-56\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-56\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) Tibor Karolyi, <cite class=\"italique\" lang=\"en\">Judit Polgar : The Princess of Chess</cite>, Batsford, <time class=\"nowrap\" datetime=\"2004-09-01\"><abbr class=\"abbr\" title=\"premier\">1<sup>er</sup></abbr> septembre 2004</time>, 288 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-0-7134-8890-6\" title=\"Spécial:Ouvrages de référence/978-0-7134-8890-6\">978-0-7134-8890-6</a>)</small>.</li>\n<li id=\"cite_note-57\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-57\">↑</a> Arrêté du <time class=\"nowrap date-lien\" datetime=\"2000-01-19\"><a href=\"https://fr.wikipedia.org/wiki/19_janvier\" title=\"19 janvier\">19</a> <a href=\"https://fr.wikipedia.org/wiki/Janvier_2000\" title=\"Janvier 2000\">janvier</a> <a href=\"https://fr.wikipedia.org/wiki/2000\" title=\"2000\">2000</a></time> du ministre chargé des Sports (<i>Bulletin officiel du ministère de la jeunesse et des sports</i> du <time class=\"nowrap date-lien\" datetime=\"2000-02-29\"><a href=\"https://fr.wikipedia.org/wiki/29_février\" title=\"29 février\">29</a> <a href=\"https://fr.wikipedia.org/wiki/Février_2000\" title=\"Février 2000\">février</a> <a href=\"https://fr.wikipedia.org/wiki/2000\" title=\"2000\">2000</a></time>).</li>\n<li id=\"cite_note-58\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-58\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://multimedia.olympic.org/pdf/en_report_527.pdf\">Olympic Programme Commission</a> au paragraphe 2.5 « Mind Sports ».</li>\n<li id=\"cite_note-59\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-59\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/component/content/article/1-fide-news/7539-fide-world-championship-2013.html\">Magnus Carlsen is World Champion</a>.</li>\n<li id=\"cite_note-63\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-63\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) David Pritchard, <cite class=\"italique\" lang=\"en\">Encyclopedia of Chess Variants</cite>, Games & Puzzles Publications, <time class=\"nowrap\" datetime=\"2001-10\">octobre 2001</time>, 372 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-0-9524142-0-9\" title=\"Spécial:Ouvrages de référence/978-0-9524142-0-9\">978-0-9524142-0-9</a>)</small>.</li>\n<li id=\"cite_note-66\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-66\">↑</a> <a rel=\"nofollow\" class=\"external free\" href=\"http://www.larousse.fr/encyclopedie/divers/%C3%A9checs/45405#11003855\">http://www.larousse.fr/encyclopedie/divers/%C3%A9checs/45405#11003855</a></li>\n<li id=\"cite_note-67\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-67\">↑</a> (<abbr class=\"abbr\" title=\"Langue : latin\">la</abbr>) <a href=\"https://fr.wikipedia.org/wiki/Jacques_de_Cessoles\" title=\"Jacques de Cessoles\">Jacques de Cessoles</a>, <cite class=\"italique\" lang=\"la\">Liber de moribus hominum et officiis nobilium</cite>.</li>\n<li id=\"cite_note-68\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-68\">↑</a> Manouk Borzakian, « <cite style=\"font-style:normal;\">La géopolitique en échecs</cite> », <i><a href=\"https://fr.wikipedia.org/wiki/Le_Monde_diplomatique\" title=\"Le Monde diplomatique\">Le Monde diplomatique</a></i>, <time class=\"nowrap\" datetime=\"2009-08\">août 2009</time>, <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 27 <small style=\"line-height:1em;\">(<a rel=\"nofollow\" class=\"external text\" href=\"http://www.monde-diplomatique.fr/2009/08/BORZAKIAN/17740\">lire en ligne</a>)</small>.</li>\n<li id=\"cite_note-69\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-69\">↑</a> Jean-Michel Péchiné, <cite class=\"italique\">Les Échecs : Roi des jeux, jeu des rois</cite>, Gallimard, <time class=\"nowrap\" datetime=\"1997-11-04\">4 novembre 1997</time>, 128 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-07-053396-1\" title=\"Spécial:Ouvrages de référence/978-2-07-053396-1\">978-2-07-053396-1</a>)</small>.</li>\n<li id=\"cite_note-72\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-72\">↑</a> (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a href=\"https://fr.wikipedia.org/wiki/Andrew_Soltis\" title=\"Andrew Soltis\">Andrew Soltis</a>, <cite class=\"italique\" lang=\"en\">Soviet Chess 1917-1991</cite>, McFarland, <time class=\"nowrap\" datetime=\"1999-11-01\"><abbr class=\"abbr\" title=\"premier\">1<sup>er</sup></abbr> novembre 1999</time>, 478 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-0-7864-0676-0\" title=\"Spécial:Ouvrages de référence/978-0-7864-0676-0\">978-0-7864-0676-0</a>)</small>.</li>\n<li id=\"cite_note-73\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-73\">↑</a> Yves Marek, <cite class=\"italique\">Art, échecs et mat</cite>, Imprimerie nationale, <time class=\"nowrap\" datetime=\"2008-09-01\"><abbr class=\"abbr\" title=\"premier\">1<sup>er</sup></abbr> septembre 2008</time>, 186 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-7427-7493-7\" title=\"Spécial:Ouvrages de référence/978-2-7427-7493-7\">978-2-7427-7493-7</a>)</small>.</li>\n<li id=\"cite_note-74\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-74\">↑</a> Jean-Marc Ricci, <a rel=\"nofollow\" class=\"external text\" href=\"http://www.jmrw.com/Chess/Tableau_echecs/index.htm\">« <cite style=\"font-style: normal\">Tableaux ayant pour sujet les échecs</cite> »</a> <small style=\"line-height:1em;\">(consulté le 29 décembre 2009)</small>.</li>\n<li id=\"cite_note-75\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-75\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://www.chess-in-the-cinema.de/\">« <cite style=\"font-style: normal\">Chess in the cinema</cite> »</a> <small style=\"line-height:1em;\">(consulté le 16 janvier 2011)</small>.</li>\n<li id=\"cite_note-77\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-77\">↑</a> « Je sais que ce garçon tire le pistolet admirablement, chasse très bien, joue merveilleusement au billard, aux échecs et au trictrac ; il fait des armes et monte à cheval comme feu le chevalier de Saint-Georges (…) dessine, danse et chante bien. Eh ! diantre, qu'avez-vous donc, vous autres ? Si ce n'est pas là un gentilhomme parfait, montrez-moi un bourgeois qui sache tout cela. » <a href=\"https://fr.wikipedia.org/wiki/Honoré_de_Balzac\" title=\"Honoré de Balzac\">Honoré de Balzac</a>, <i><a href=\"https://fr.wikipedia.org/wiki/Le_Bal_de_Sceaux\" title=\"Le Bal de Sceaux\">Le Bal de Sceaux</a></i>, Édition <a href=\"https://fr.wikipedia.org/wiki/Charles_Furne\" title=\"Charles Furne\">Charles Furne</a>, 1845, vol.I <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 127.</li>\n<li id=\"cite_note-musicam-78\">↑ <sup><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-musicam_78-0\">a</a> et <a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-musicam_78-1\">b</a></sup> Fabricio Cardenas, <a rel=\"nofollow\" class=\"external text\" href=\"http://musicamscire.blogspot.fr/2012/03/echecs-et-musique.html\">Musicam scire, <i>Echecs et musique</i></a>, 7 mars 2012</li>\n<li id=\"cite_note-79\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-79\">↑</a> Guida rapida d'Italia, <a href=\"https://fr.wikipedia.org/wiki/Touring_Club_Italiano\" title=\"Touring Club Italiano\">Touring Club Italiano</a>, 1996, 5 volumes, vol.II, <abbr class=\"abbr\" title=\"page(s)\">p.</abbr> 142-143 <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-88-365-1085-6\" title=\"Spécial:Ouvrages de référence/978-88-365-1085-6\">978-88-365-1085-6</a>)</small>.</li>\n<li id=\"cite_note-80\"><a href=\"https://fr.wikipedia.org/wiki/Échecs#cite_ref-80\">↑</a> <a rel=\"nofollow\" class=\"external text\" href=\"http://www.wel.it/Welcome/Veneto/ProvVicenza/Marostica/img/marostica.jpg\">Vue du jeu d'échecs à Marostica</a>.</li>\n</ol></div>\n<h2>Voir aussi[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=64\" title=\"Modifier la section : Voir aussi\">modifier le code</a>]</h2>\n\n\n<h3>Articles connexes[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=65\" title=\"Modifier la section : Articles connexes\">modifier le code</a>]</h3>\n<ul><li><a href=\"https://fr.wikipedia.org/wiki/Lexique_du_jeu_d%27échecs\" title=\"Lexique du jeu d'échecs\">Lexique du jeu d'échecs</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Règles_du_jeu_d%27échecs\" title=\"Règles du jeu d'échecs\">Règles du jeu d'échecs</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Notation_algébrique\" title=\"Notation algébrique\">Notation algébrique</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Échecs_par_correspondance\" title=\"Échecs par correspondance\">Échecs par correspondance</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Le_Palamède\" title=\"Le Palamède\">Le Palamède</a> (magazine d'échecs, 1836-1847).</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Fédération_internationale_des_échecs\" title=\"Fédération internationale des échecs\">Fédération internationale des échecs</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Programme_d%27échecs\" title=\"Programme d'échecs\">Programme d'échecs</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/XBoard\" title=\"XBoard\">XBoard</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Deep_Blue\" title=\"Deep Blue\">Deep Blue</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Intelligence_artificielle\" title=\"Intelligence artificielle\">Intelligence artificielle</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Partie_à_l%27aveugle\" title=\"Partie à l'aveugle\">Partie à l'aveugle</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Free_Internet_Chess_Server\" title=\"Free Internet Chess Server\">FICS</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Encyclopédie_des_ouvertures_d%27échecs\" title=\"Encyclopédie des ouvertures d'échecs\">Code ECO</a> et <a href=\"https://fr.wikipedia.org/wiki/Code_ECE\" title=\"Code ECE\" class=\"mw-redirect\">Code ECE</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Shōgi\" title=\"Shōgi\">Shōgi (Jeu d'échecs japonais)</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Xiangqi\" title=\"Xiangqi\">Xiangqi (Jeu d'échecs chinois)</a></li>\n</ul><h3>Bibliographie[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=66\" title=\"Modifier la section : Bibliographie\">modifier le code</a>]</h3>\n<ul><li><a href=\"https://fr.wikipedia.org/wiki/1934\" title=\"1934\">1934</a> : <a href=\"https://fr.wikipedia.org/wiki/Xavier_Tartakover\" title=\"Xavier Tartakover\">Xavier Tartakover</a>, <a href=\"https://fr.wikipedia.org/wiki/Bréviaire_des_échecs\" title=\"Bréviaire des échecs\">Bréviaire des échecs</a>, Stock ; <a href=\"https://fr.wikipedia.org/wiki/Le_Livre_de_poche\" title=\"Le Livre de poche\">Le Livre de poche</a>, 2003 <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-253-04620-2\" title=\"Spécial:Ouvrages de référence/978-2-253-04620-2\">978-2-253-04620-2</a>)</small>\n<div style=\"margin-left:2em; line-height:1.5;\">Un grand classique de l'instruction échiquéenne.</div>\n</li>\n<li>1967 : <a href=\"https://fr.wikipedia.org/wiki/François_Le_Lionnais\" title=\"François Le Lionnais\">François Le Lionnais</a> et <a href=\"https://fr.wikipedia.org/w/index.php?title=Ernst_Maget&action=edit&redlink=1\" class=\"new\" title=\"Ernst Maget (page inexistante)\">Ernst Maget</a>, <i>Dictionnaire des échecs</i>, éd. PUF, 1967.</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/1974\" title=\"1974\">1974</a> : Camil Seneca, <i>Les Échecs</i>, 464 p., <a href=\"https://fr.wikipedia.org/wiki/Le_Livre_de_poche\" title=\"Le Livre de poche\">Le Livre de poche</a> <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-253-03090-4\" title=\"Spécial:Ouvrages de référence/978-2-253-03090-4\">978-2-253-03090-4</a>)</small>\n<div style=\"margin-left:2em; line-height:1.5;\">Avec le <a href=\"https://fr.wikipedia.org/wiki/Bréviaire_des_échecs\" title=\"Bréviaire des échecs\">Bréviaire des échecs</a>, manuel pour débutant notable. Les <a href=\"https://fr.wikipedia.org/wiki/Finale_élémentaire\" title=\"Finale élémentaire\">finales élémentaires</a> y sont très clairement expliquées, et ce livre contient lui aussi des <a href=\"https://fr.wikipedia.org/wiki/Partie_miniature\" title=\"Partie miniature\">parties miniatures</a> intéressantes.</div>\n</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/1981\" title=\"1981\">1981</a> : Jacques Dexteit et Norbert Engel, <i>Jeu d'échecs et sciences humaines</i>, 296 p., <a href=\"https://fr.wikipedia.org/wiki/Payot_%26_Rivages\" title=\"Payot & Rivages\">Payot</a> <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-228-12880-3\" title=\"Spécial:Ouvrages de référence/978-2-228-12880-3\">978-2-228-12880-3</a>)</small>.</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/1997\" title=\"1997\">1997</a> : <i>Larousse des échecs</i>, <a href=\"https://fr.wikipedia.org/wiki/Éditions_Larousse\" title=\"Éditions Larousse\">Éditions Larousse</a> <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-03-518207-4\" title=\"Spécial:Ouvrages de référence/978-2-03-518207-4\">978-2-03-518207-4</a>)</small>.</li>\n<li>1993 : <a href=\"https://fr.wikipedia.org/wiki/Nicolas_Giffard\" title=\"Nicolas Giffard\">Nicolas Giffard</a> et Alain Biénabe, <cite class=\"italique\">Le Guide des Échecs : Traité complet</cite>, Bouquins, <time class=\"nowrap\" datetime=\"1993-03-30\">30 mars 1993</time>, 1591 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-221-05913-5\" title=\"Spécial:Ouvrages de référence/978-2-221-05913-5\">978-2-221-05913-5</a>)</small>.</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/2000\" title=\"2000\">2000</a> : Pascal Reysset et Jean-Louis Cazaux, <i>L'Univers des échecs</i>, Éditions Bornemann, Univers du jeu <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-85182-631-2\" title=\"Spécial:Ouvrages de référence/978-2-85182-631-2\">978-2-85182-631-2</a>)</small>.</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/2002\" title=\"2002\">2002</a> : Colleen Schafroth, <i>L'Art des échecs</i>, Éditions de la Martinière <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-7324-2852-9\" title=\"Spécial:Ouvrages de référence/978-2-7324-2852-9\">978-2-7324-2852-9</a>)</small>.</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/2002\" title=\"2002\">2002</a> : Thierry Wendling, <i>Ethnologie des joueurs d'échecs</i>, PUF <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-13-051440-4\" title=\"Spécial:Ouvrages de référence/978-2-13-051440-4\">978-2-13-051440-4</a>)</small>.</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/2005\" title=\"2005\">2005</a> : Jacques Bernard, <i>Socio-anthropologie des joueurs d'échecs</i>, L'Harmattan, <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-74-758462-3\" title=\"Spécial:Ouvrages de référence/978-2-74-758462-3\">978-2-74-758462-3</a>)</small>.</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/2005\" title=\"2005\">2005</a> : Jérôme Maufras, <i>Le jeu d'échecs</i>, <a href=\"https://fr.wikipedia.org/wiki/Presses_universitaires_de_France\" title=\"Presses universitaires de France\">Presses universitaires de France</a>, collection <a href=\"https://fr.wikipedia.org/wiki/Que_sais-je\" title=\"Que sais-je\" class=\"mw-redirect\">Que sais-je</a> <small>(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-13-054386-2\" title=\"Spécial:Ouvrages de référence/978-2-13-054386-2\">978-2-13-054386-2</a>)</small>\n<div style=\"margin-left:2em; line-height:1.5;\">Ce livre est découpé en trois parties et chacune en trois sous-parties : <i>Histoire du jeu, histoire du monde</i> (Des origines au XIX<sup>e</sup> siècle ; De l'époque industrielle à la guerre de 1914-1918 ; De 1918 à aujourd'hui), <i>Le monde des échecs</i> (Un jeu, des pratiques ; Une activité de masse, un sport professionnel ; Un jeu aux règles simples) et <i>Les échecs, un jeu-monde</i> (L'homme à travers les échecs ; Échecs et art ; La société à travers les échecs).</div>\n</li>\n<li>2008: Yves Marek, <i>Art, échecs et mat</i>, Actes sud-imprimerie Nationale.</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/2009\" title=\"2009\">2009</a> : <a href=\"https://fr.wikipedia.org/wiki/Nicolas_Giffard\" title=\"Nicolas Giffard\">Nicolas Giffard</a> et Alain Biénabe, <cite class=\"italique\">Le nouveau guide des échecs : Traité complet</cite>, <a href=\"https://fr.wikipedia.org/wiki/Éditions_Robert_Laffont\" title=\"Éditions Robert Laffont\">Robert Laffont</a>, <time class=\"nowrap\" datetime=\"2009-10-01\"><abbr class=\"abbr\" title=\"premier\">1<sup>er</sup></abbr> octobre 2009</time>, 1701 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-221-11013-3\" title=\"Spécial:Ouvrages de référence/978-2-221-11013-3\">978-2-221-11013-3</a>)</small>.</li>\n<li><a href=\"https://fr.wikipedia.org/wiki/2010\" title=\"2010\">2010</a> : <a href=\"https://fr.wikipedia.org/wiki/Jean-Louis_Cazaux\" title=\"Jean-Louis Cazaux\">Jean-Louis Cazaux</a>, <cite class=\"italique\">L'Odyssée des jeux d'échecs</cite>, <a href=\"https://fr.wikipedia.org/w/index.php?title=Éditions_Praxeo&action=edit&redlink=1\" class=\"new\" title=\"Éditions Praxeo (page inexistante)\">Praxeo</a>, <time class=\"nowrap\" datetime=\"2010-11\">novembre 2010</time>, 367 <abbr class=\"abbr\" title=\"pages\">p.</abbr> <small style=\"line-height:1em;\">(<a href=\"https://fr.wikipedia.org/wiki/International_Standard_Book_Number\" title=\"International Standard Book Number\">ISBN</a> <a href=\"https://fr.wikipedia.org/wiki/Spécial:Ouvrages_de_référence/978-2-9520472-8-9\" title=\"Spécial:Ouvrages de référence/978-2-9520472-8-9\">978-2-9520472-8-9</a>)</small>.</li>\n</ul><h3>Liens externes[ | <a href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&action=edit&section=67\" title=\"Modifier la section : Liens externes\">modifier le code</a>]</h3>\n<ul><li>(<abbr class=\"abbr\" title=\"Langue : multilingue\">mul</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.dmoz.org/World/Français/Jeux/Jeux_de_réflexion/Echecs/\">Catégorie jeu d'échecs</a> de l’annuaire <a href=\"https://fr.wikipedia.org/wiki/DMOZ\" title=\"DMOZ\">DMOZ</a></li>\n<li>(<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fide.com/\">Fédération internationale des échecs</a></li>\n<li>(<abbr class=\"abbr\" title=\"Langue : français\">fr</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.echecs.asso.fr\">Fédération française des échecs</a></li>\n<li>(<abbr class=\"abbr\" title=\"Langue : français\">fr</abbr>) (<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.fqechecs.qc.ca\">Fédération québécoise des échecs</a></li>\n<li>(<abbr class=\"abbr\" title=\"Langue : anglais\">en</abbr>) <a rel=\"nofollow\" class=\"external text\" href=\"http://www.iccf.com/\">International Correspondence Chess Federation</a></li>\n</ul><ul id=\"bandeau-portail\" class=\"bandeau-portail\"><li><a href=\"https://fr.wikipedia.org/wiki/Portail:Échecs\" title=\"Portail des échecs\"><img alt=\"Portail des échecs\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Chess.svg/24px-Chess.svg.png\" width=\"24\" height=\"24\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/0/05/Chess.svg/36px-Chess.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/05/Chess.svg/48px-Chess.svg.png 2x\" data-file-width=\"256\" data-file-height=\"256\"/></a> <a href=\"https://fr.wikipedia.org/wiki/Portail:Échecs\" title=\"Portail:Échecs\">Portail des échecs</a></li>\n<li><a href=\"https://fr.wikipedia.org/wiki/Portail:Jeux\" title=\"Portail des jeux\"><img alt=\"Portail des jeux\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Nuvola_apps_atlantik.png/24px-Nuvola_apps_atlantik.png\" width=\"24\" height=\"24\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/77/Nuvola_apps_atlantik.png/36px-Nuvola_apps_atlantik.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/77/Nuvola_apps_atlantik.png/48px-Nuvola_apps_atlantik.png 2x\" data-file-width=\"128\" data-file-height=\"128\"/></a> <a href=\"https://fr.wikipedia.org/wiki/Portail:Jeux\" title=\"Portail:Jeux\">Portail des jeux</a></li>\n</ul><div id=\"article_de_qualite\" class=\"bandeau-simple bandeau-niveau-neutre plainlinks\" style=\"background-color:#FFFBFB;\">\n<div class=\"bandeau-centrer\">\n<div class=\"bandeau-cell grosse-icone etoile-or\">\n\n<div class=\"hidden\">\n<center>La version du 25 novembre 2005 de cet article a été reconnue comme « <b>article de qualité</b> », c'est-à-dire qu'elle répond à des critères de qualité concernant le style, la clarté, la pertinence, la citation des sources et l'illustration.</center>\n</div>\n</div>\n</div>\n</div>\n\n\n<!-- \nNewPP limit report\nParsed by mw1176\nCached time: 20160411062754\nCache expiry: 2592000\nDynamic content: false\nCPU time usage: 2.267 seconds\nReal time usage: 2.682 seconds\nPreprocessor visited node count: 13650/1000000\nPreprocessor generated node count: 0/1500000\nPost‐expand include size: 602839/2097152 bytes\nTemplate argument size: 8294/2097152 bytes\nHighest expansion depth: 10/40\nExpensive parser function count: 1/500\nLua time usage: 0.936/10.000 seconds\nLua memory usage: 4.73 MB/50 MB\nNumber of Wikibase entities loaded: 1-->\n\n<!-- \nTransclusion expansion time report (%,ms,calls,template)\n100.00% 1716.191 1 - -total\n 34.69% 595.403 17 - Modèle:Diagramme_d'échecs_petit\n 27.00% 463.423 2 - Modèle:Références\n 12.65% 217.016 1 - Modèle:Lien_brisé\n 12.41% 212.943 1 - Modèle:Module_biblio/indication_de_langue\n 8.71% 149.431 4 - Modèle:Diagramme_d'échecs\n 5.48% 94.096 17 - Modèle:Ouvrage\n 4.20% 72.034 1 - Modèle:Portail\n 4.17% 71.639 17 - Modèle:Lien_web\n 3.93% 67.431 1 - Modèle:Infobox_Jeu\n-->\n\n<!-- Saved in parser cache with key frwiki:pcache:idhash:7183-0!*!0!!fr!4!* and timestamp 20160411062751 and revision id 124883739\n -->\n<noscript><img src=\"https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1\" alt=\"\" title=\"\" width=\"1\" height=\"1\" style=\"border: none; position: absolute;\"/></noscript></div>\t\t\t\t\t<div class=\"printfooter\">\n\t\t\t\t\t\tCe document provient de « <a dir=\"ltr\" href=\"https://fr.wikipedia.org/w/index.php?title=Échecs&oldid=124883739\">https://fr.wikipedia.org/w/index.php?title=Échecs&oldid=124883739</a> ».\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"visualClear\"/>\n\t\t\t\t\t\t\t", | ||
52 | "annotations": [], | ||
53 | "mimetype": "text/html", | ||
54 | "language": "fr", | ||
55 | "reading_time": 85, | ||
56 | "domain_name": "fr.wikipedia.org", | ||
57 | "tags": [] | ||
58 | }, | ||
59 | { | ||
60 | "is_archived": 0, | ||
61 | "is_starred": 0, | ||
62 | "id": 608, | ||
63 | "title": "90% des dossiers médicaux des Coréens du sud vendus à des entreprises privées - ZATAZ", | ||
64 | "url": "http://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/", | ||
65 | "content": "<p class=\"c2\"><strong>La Corée du Sud vibre en ce moment à la lecture d’une information qui pend aux nez des Français. Une entreprise privée a récupéré 90% des dossiers médicaux des habitants du pays du matin calme au soleil levant pour les revendre.</strong></p>\n<p>Une entreprise spécialisée dans le développement de logiciels en charge de gérer les frais médicaux, programmes utilisés dans les hôpitaux et la Korean Pharmaceutical Information Center, a offert il y a quelques mois ses logiciels de gestion d’officines. Plus de la moitié des pharmacies du pays ont utilisé l’outil. Sauf que <a href=\"http://www.koreaherald.com/view.php?ud=20150726000368\" target=\"_blank\">les données sauvegardées ont été revendues</a> à IMS Health Korea. Cette entreprise, dont le siège social est basé aux USA, a ensuite commercialisé, illégalement, les données à d’autres sociétés en Corée.</p>\n<p>La loi 2011 sur le droit de la protection des renseignements personnels interdit l’utilisation des renseignements personnels et des renseignements médicaux sans le consentement des patients. Le Pharmaceutical Information Center est actuellement jugé pour cette collecte illégale, qui date de 2013, et la distribution des informations médicales de 90% des Coréens.</p>\n<blockquote readability=\"4\">\n<p><strong>Un cas qui pourrait toucher la France ?</strong></p>\n</blockquote>\n<p class=\"c2\">Depuis février 2015, l’ouverture des données de santé dans l’hexagone a été décidée par le législateur. L’assurance-maladie a annoncé qu’elle proposait, en accès libre, sa base de données « <em>Damir</em> » sur le site data.gouv.fr. Un big data de la santé qui regroupe les informations issues de 1,2 milliard de feuilles de soins, de 500 millions d’actes médicaux et de 11 millions d’hospitalisations. Ce big data ne propose pas les identités (pas de nom, de numéro de sécurité sociale, …), uniquement des millions de chiffres et de données de santé. Cette faramineuse base de données, qui double de volume chaque année, permet d’extraire, par exemple, des statistiques liées à la santé dans les régions. <a href=\"http://www.assemblee-nationale.fr/14/amendements/2302/CION-SOC/AS1387.pdf\" target=\"_blank\">L’article 47 de loi</a> permet aux acteurs privés d’accéder aux données de la CNAMTS. C’est l’Institut national des données de santé (<a href=\"http://www.institut-des-donnees-de-sante.fr/\" target=\"_blank\">INDS</a>) qui a en charge de répondre aux demandes du « privé » pour accéder aux données plus ciblées (et payantes).</p>\n", | ||
66 | "annotations": [], | ||
67 | "mimetype": "text/html", | ||
68 | "language": "fr-FR", | ||
69 | "reading_time": 1, | ||
70 | "domain_name": "www.zataz.com", | ||
71 | "preview_picture": "http://www.zataz.com/wp-content/uploads/HD-Virus.png", | ||
72 | "tags": [] | ||
73 | }, | ||
74 | { | ||
75 | "is_archived": 0, | ||
76 | "is_starred": 0, | ||
77 | "id": 606, | ||
78 | "title": "Mass Surveillance As Art", | ||
79 | "url": "https://www.nationaljournal.com/s/73311/mass-surveillance-art", | ||
80 | "content": "<div class=\"container\" readability=\"38\"> \n<div class=\"row main col-sm-10 col-sm-offset-1 col-md-offset-2 col-md-8 article-body\" readability=\"41\">\n<p>Sept. 18, 2015, 6 a.m.</p>\n </div>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 image\" readability=\"37\"><img src=\"https://www.nationaljournal.com/media/media/2015/09/17/06Julian-Assange.jpg\"/><p>Julian Assange in a 2012 portrait by Jacob Appelbaum. Jacob Appelbaum</p>\n</div>\n<div class=\"wrapper bg-img light container row bento-layout col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 article-body c3\" readability=\"116\">\n<p>But today, the loquacious Appelbaum wants to just talk about his art. Mostly.</p>\n<p>The photographer has assembled intimate portraits of his authority-challenging comrades—Poitras, Harrison, Weiwei, Wikileaks cofounder Julian Assange, Snowden-favored journalist Glenn Greenwald, and former NSA analyst-turned-whistleblower William Binney—each bathed in an infrared glow. The technique, which results in an unmistakable resemblance to surveillance footage, was accomplished using cibachrome prints and shooting with a discontinued Kodak Color Infrared camera—a process Appelbaum likes to boast is “fully analog.”</p>\n<p>“A key part about this is the process and the film itself—it is a surveillance film,” Appelbaum tells me. “That said, I am partial to the color red. I really like it. and I think that it signifies passion, and I think that passion is something that all the people in the show share.”</p>\n<p>Appelbaum also likes black. He wears a gray button-up, black jeans, black shoes, a black belt, and a conspicuous black tie during our interview. His trademark thick horn-rimmed glasses—also black—rest easily on his face, doing little to mask the darting intensity in eyes. A metal bar punctures two holes into the upper cartilage of his right ear. Even forced to dress up, he has the unmistakable look of a cyberpunk.</p>\n<p>His art show, which opened Sept. 11 and runs until Halloween, is titled <em>Samizdata: Evidence of Conspiracy</em>, after a Russian word referring to the dodging of censors to share illicit material within the Soviet bloc—think Aleksandr Solzhenitsyn’s <em>The Gulag Archipelago</em>. It is hosted at the NOME Gallery, which opened earlier this year and has a strong bend for anti-authoritarian—and, some might say, anti-American—social commentary. NOME’s previous two exhibits, Paolo Cirio’s <a href=\"http://www.nomeproject.com/news/nome-presents-overexposed-paolo-cirio\"><em>Overexposed</em></a> and James Bridle’s <a href=\"http://www.nomeproject.com/exhibitions/glomar-response\"><em>The Glomar Response</em></a>, both took critical aim at the U.S. intelligence community, offering unflinching examinations of senior officials like CIA Director John Brennan and FBI Director James Comey, and of the level of redactions present in the Senate Intelligence Committee’s landmark torture report.</p>\n<p>For Appelbaum, though, his artwork developed organically. All of the photos were taken before the concept of a gallery materialized, except for a shot of Harrison, the British Wikileaker. Harrison’s portrait, which finds her sitting on a rock and, head cocked a bit, looking softly into the camera, also happens to be Appelbaum’s favorite, because it balances her qualities as both “a total badass motherfucker” and “the pixie of Wikileaks.”</p>\n<p>The photographs “show the people in the way that I think of them,” Appelbaum explains. The most striking demonstration of that edict rests in the portrait of Binney, which finds the former NSA official standing, with one fist clenched, in front of a tree in Berlin. Surveillance nerds will be immediately struck by the photo, because Binney doesn’t have legs in real life. He lost them to diabetes years ago.</p>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 pull-quote pull-quote-wrapper quote-body\" readability=\"37\">\n<p>A key part about this is the process and the film itself—it is a surveillance film. ”</p>\n<p>Jacob Appelbaum </p>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 article-body\" readability=\"137\">\n<p><strong>Later that evening</strong> at the gallery, Appelbaum is giving a walk-through for a small gathering of press and some friends. He seems a little less comfortable in front of a larger group, speaking more deliberately and evenly as he describes each photograph.</p>\n<p>Greenwald’s portrait, taken in 2012 in Rio de Janeiro, shows the combative journalist in a softer light. His partner, David Miranda, has his arms draped around him as the two stand beside one of their many dogs in the rain forest.</p>\n<p>“As an artist, I think it’s really important to be cognizant of the things you promote. So I don’t take pictures of people smoking because I think it’s disgusting. And I don’t want children to go out and smoke cigarettes. But I do want children to be homosexuals,” says Appelbaum, who has identified himself as “queer” in past interviews.</p>\n<p>“Glenn Greenwald and David Miranda are totally fierce and fantastic men; they’re beautiful,” he continues. “They’re the hottest gay couple alive, so if you argue with me that’s fine—but they’re still going to be the hottest gay couple alive.”</p>\n<p>He stops in front of the Binney portrait, which he says is his second favorite after Harrison’s.</p>\n<p>“He’s one of the only honorable people to ever work in the intelligence community,” Appelbaum says. “He’s one of the very few Americans that makes me not ashamed to be American.”</p>\n<p>Applebaum sighs deeply and pauses. He looks suddenly vulnerable for a brief moment before recollecting himself and moving on to Ai Weiwei’s portrait.</p>\n<p>Weiwei is both a subject and a bit of collaborator in Appelbaum’s exhibit, thanks to the inclusion of an adorable plush panda. Along with several other pandas, its cotton innards were gutted by Appelbaum and Weiwei during a meet-up in Beijing earlier this year—captured, naturally, on film by Poitras—and replaced with shredded Snowden documents. The project’s title, “Panda to Panda,” is a reference to the slang term used to refer to China’s secret police. It’s abbreviation, P2P, doubles as shorthand for peer-to-peer communication—a kind of decentralized networking digital activists like to use to avoid detection.</p>\n<p>If the exhibition is an intimate window into the lives of the world’s most famous digital-privacy Avengers, Appelbaum might best be understood as the Captain America of the group—except obviously lacking in the patriotism department. While adept at many things, his most potent contribution to the team may be his rah-rah evangelism for the cause, which anyone who has listened to his confident, long-winded dissertations on the moral imperatives of privacy can attest are compelling and easy to buy into. It was a skill that served him well as a core developer of the Tor Project, an online browser that keeps users anonymous.</p>\n<p>Appelbaum is also the common link for the movement’s disparate members, who are spread out on several different continents in varying degrees of exile. He bridges the gap between more radical elements, like Julian Assange, who believes nearly no secret is worthy of redaction, and the more considerate views held by Greenwald and Poitras. (An example of that tension: When Greenwald and Poitras, keepers of the Snowden trove, refused to publish the name of a country in which the NSA was recording nearly all phone calls, Wikileaks condemned the omission in a Twitter rant. Not satisfied to merely vent, Wikileaks <a href=\"http://www.nationaljournal.com/tech/2014/05/23/wikileaks-claims-nsa-is-recording-nearly-all-afghanistans-phone-calls\">announced</a> days later that “Country X” was in fact Afghanistan.)</p>\n<p>Appelbaum bristles at the notion that his photographs rise to that level of navel-gazing—that it exists as choreographed flattery for a team of international super-dissidents. The exhibit, he says, depicts “individuals that work together for very positive goals, very much work in tandem together—but they wouldn’t call themselves a group.”</p>\n<p>Instead, he offers, “they represent a network, and these are the nodes of that network. I’m not reflecting back on our movement, but rather this is a trend in civil society, from China to the Ecuadorian embassy in London to New York City to Berlin. It goes around the world.”</p>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 pull-quote pull-quote-wrapper quote-body\" readability=\"37\">\n<p>Glenn Greenwald and David Miranda are totally fierce and fantastic men; they’re beautiful. ”</p>\n<p>Jacob Appelbaum </p>\n</div>\n<div class=\"wrapper container row bento-layout\" readability=\"72\">\n<div class=\"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 article-body\" readability=\"115\">\n<p><strong>After I had faked my</strong> way through 20 minutes of our interview focusing on his art—during which Appelbaum seems to get annoyed more than once at my naivete—I turned to politics. I ask what he thinks of the U.S. presidential campaign and Hillary Clinton.</p>\n<p>Clinton would be great for advancing lots of social causes and making health care more affordable and could be an overall effective leader, Appelbaum concedes, before adding that her election would also “be the worst outcome for me personally” and anyone else who tries to expose government secrets.</p>\n<p>“Can you imagine a presidential candidate that will try to hunt down Wikileaks people more seriously?” he asks. “If Hillary Clinton becomes president, it’ll be great news for my mother, and I think that alone is worthwhile. But it will be my own death sentence.”</p>\n<p>Appelbaum’s lawyers have advised him to not return to the United States. Due to a long-running Justice Department investigation into Wikileaks, his past affiliation with the group could spell trouble for the thirty-something ex-pat from California. The Justice Department did not respond to multiple requests for comment regarding the investigation.</p>\n<p>Earlier this year, Google informed Appelbaum that it was compelled to hand over his personal account data to the U.S. government for the purposes of the investigation. In a lengthy rant on Twitter, Appelbaum posted select screenshots of Google’s 306-page legal disclosure.</p>\n<p>“Ten pages into this legal document and I’m convinced that I’m never going to return to my home country,” Appelbaum <a href=\"https://twitter.com/ioerror/status/611701134353375232\">tweeted</a> at the time. “What the actual fuck.”</p>\n<p>Appelbaum doesn’t think any of the presidential candidates would have much sympathy for leakers—or that any would do much to rein in the NSA. Other than Clinton, he dismisses the rest of the presidential candidates as “a grab bag of hilarity,” expectedly taking his time to pillory Donald Trump and his “Make America Great Again” slogan. (“What a hat!,” he exclaims with a laugh, admitting he’d like to own one for comedic effect.)</p>\n<p>I ask whether he feels differently about Sen. Bernie Sanders, the self-described socialist running for the Democratic nomination, or Republican Sen. Rand Paul, both of whom have been consistently and vocally opposed to overbroad NSA data collection.</p>\n<p>“Rand Paul might be great on the NSA, but how is he on other things, like the death penalty?” He admits a liking for Sanders but quickly notes “he could do a lot better on racism,” citing the candidate’s handling of Black Lives Matter protesters who interrupted him during a recent campaign event. </p>\n<p>Appelbaum takes pains to stress that he and those featured in his art are not just critics of mass-surveillance regimes but people who believe they are at the vanguard of fighting for civil liberties, of which spying remains a crucially important battle front—one that he expects to rage on for decades.</p>\n<p>“Reining in the NSA is a really weird subissue,” he says. “If you look at the gay-rights movement, it took a really long time for that to become a mainstream issue. And I’m thinking the NSA issue, it’s mainstream in a lot of ways but it’s real hard to understand.”</p>\n</div>\n<div class=\"col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 image\" readability=\"7\"><img src=\"https://www.nationaljournal.com/media/media/2015/09/17/04-Glenn-GreenwaldDavid.jpg\"/><p>Glenn Greenwald and David Miranda in a 2012 portrait by Jacob Appelbaum. Jacob Appelbaum</p>\n</div>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 pull-quote pull-quote-wrapper quote-body\" readability=\"45\">\n<p>If Hillary Clinton becomes president, it’ll be great news for my mother, and I think that alone is worthwhile. But it will be my own death sentence. ”</p>\n<p>Jacob Appelbaum </p>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 article-body\" readability=\"135\">\n<p><strong>The next day</strong>, the panda is wearing a T-shirt. “Fuck the NSA,” it reads in bold black letters that adorn it, baby-sized and powder blue. Tatiana Bazzichelli, the show’s curator, explains that one of Appelbaum’s friends stopped by earlier and brought it as a gallery-warming present.</p>\n<p>I came back to the gallery for the public opening to see the bigger crowd and because Appelbaum told me that Poitras—whom I’d been trying to get in touch with since I arrived in Berlin—would stop by.</p>\n<p>Connecting with her is no easy task. On top of being intensely private, Poitras was keeping busy. I’d heard she had been spending most of her time recently in New York, readying a preview for the city’s annual film festival of a new documentary series she is launching called <em>Field of Vision</em>. “Asylum,” the first episode of the project, is a portrait of Wikileaks’s Assange, following him as he publishes the diplomatic cables that rocked the world and ends up marooned in London’s Ecuadorian embassy, where he has been holed up for the past three years.</p>\n<p>Poitras is also preparing an “immersive film environment” that will debut in February at New York’s Whitney Museum of American Art. Appelbaum instructed me to pay attention to the Whitney installation when I asked what we might see next come out of the Snowden archive.</p>\n<p>Despite steady rain, the exhibit’s opening showing is impressive. The small gallery is crowded with dozens of people, and another 20 are outside enjoying free alcohol and smoking cigarettes.</p>\n<p>Much of the crowd is monochromatic, dressed, like Appelbaum, all in black. A majority of conversations I overhear are in English. I spot Appelbaum—now wearing a red shirt but still tolerating the unnecessary black tie—with a glass of wine in hand, laughing boisterously with a couple of friends who came out for his big night. Now that it’s here, he looks relieved. He stops every few minutes to snap photos with his smartphone of various guests— the anti-surveillance activist’s desire to document the moment is unrestrained. Later in the night, he will bound over to me and jubilantly tell me that four of the portraits have already been sold.</p>\n<p>True to Appelbaum’s promise, Poitras arrives, and I catch her moments after she enters. She doesn’t recognize me at first, but after I jog her memory of a past interview she warms up. “Is this on the record?” she asks after I’ve already put my notebook away. I tell her no, and we exchange pleasantries briefly before she is pulled away.</p>\n<p>I waited 90 minutes before having another chance to talk to her. The Oscar-winning filmmaker who quarterbacks the release of Snowden files in major media organizations around the world is a coveted celebrity in this room, and a never-ending line of fans all seem to have a hug to give and a story to catch up on. </p>\n<p>Finally I see Poitras alone, gazing into the flowers that surround Weiwei’s portrait. This has been the first time all night she has had more than a moment to check out the art.</p>\n<p>After agreeing to a brief interview, she comments that the gallery is an “extraordinary document of a decade that changed history.” She said she has been urging Appelbaum to share his art with the world for years and is happy he is finally obliging.</p>\n<p>We are interrupted twice by friends of Poitras who approach and give her a celebratory hug. I quickly ask about her lawsuit against the Justice Department seeking records related to the dozens of times she was detained at airports, but she doesn’t have an update. On the surveillance-reform law that Obama signed into law earlier this year, which effectively ends the NSA’s bulk collection of domestic phone metadata, she says it is a nice start but quickly adds, “I don’t think U.S. citizens are the only ones who should have a right to privacy.” She demurs on taking much credit for the law’s passage, despite the clear line of momentum that traces back to the first Snowden revelations. Soon my time is up, as another friend of hers interrupts to share a quick laugh and pull her back into the crowd.</p>\n<p>I see Appelbaum once more before I leave, and he admits a great sense of relief now that the exhibit has opened. But he keeps the night in perspective. “Never once during this process did I think I was going to be raided,” he says when I ask how the stress compared to writing a big expose on the NSA.</p>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 pull-quote pull-quote-wrapper quote-body\" readability=\"37\">\n<p>I don’t think U.S. citizens are the only ones who should have a right to privacy. ”</p>\n<p>Laura Poitras </p>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 article-body\" readability=\"86\">\n<p><strong> </strong><strong>I don’t know</strong> if Appelbaum will ever return to the United States. Watching him in Berlin, I’m not sure he really needs to. He has found a home here and just started a Ph.D program at the Eindhoven University of Technology in the Netherlands, “primarily focusing on mathematics to thwart spies for the next thousand years.”</p>\n<p>It is unclear whether Applebaum is being sensible and reacting to the likelihood of real arrest and incarceration if he sets foot on American soil, or whether, like many people who inhabit the digital-rights sphere, he is being a tad paranoid.</p>\n<p>But unlike Poitras, Appelbaum doesn’t have a protective shield that comes with the notoriety of winning an Oscar. And he knows he’s not Snowden, an international celebrity he believes will be able to return home one day in a way that brings him home with “a ticker-tape parade.” Former Attorney General Eric Holder said this summer that the “possibility exists” of such a scenario, though the Obama administration—which has prosecuted more individuals under the Espionage Act than all previous presidencies combined—poured water on the idea when it responded to an online petition calling for Snowden’s pardon.</p>\n<p>“What would I come home to? To what justice system?” Appelbaum asks near the end of our interview. “The FBI tried to talk to me in Europe, tried to get me to go to the U.S. embassy to discuss ‘safely returning home’ on ‘neutral ground.’ It’s so ridiculous; it’s ridiculous bullshit on so many different levels.”</p>\n<p>Pondering his new life in Europe, Applebaum is still processing his abrupt, unplanned departure from the United States. Berlin, he says, “is a wonderful place. It’s wonderful on so many levels.’’</p>\n<p>But the separation is clearly painful too.</p>\n<p>“I kind of wish I had said goodbye to my mother, if I ever see her again in my life. That stuff weighs very heavily on me,” he says. “It would have been nice to pack my house, get some extra underwear, and take some photos of my dead father with me.”</p>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 image\" readability=\"37\"><img src=\"https://www.nationaljournal.com/media/media/2015/09/17/03-Laura-Poitras.jpg.2600x1462.wide.jpg\"/><p>Laura Poitras in a 2013 a portrait by Jacob Appelbaum. Jacob Appelbaum</p>\n</div>\n<div class=\"wrapper container row bento-layout col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 article-body\" readability=\"40\">\n<p><strong><em>Dustin Volz is currently on assignment in Berlin through the Arthur F. Burns Fellowship, a two-month reporting program in Germany run by the International Center for Journalists. A version of this story was also published in</em> Handelsblatt Global Edition<em>.</em></strong></p>\n</div>\n<p><a class=\"fb\" target=\"_blank\" onclick=\"window.open('https://www.facebook.com/dialog/feed?redirect_uri=https://www.nationaljournal.com&display=popup&app_id=1420640618178948&link=http://njour.nl/s/73311%3foref=facebook.com%26mref=facebook_share&name=I%20don’t%20think%20U.S.%20citizens%20are%20the%20only%20ones%20who%20should%20have%20a%20right%20to%20privacy.&picture=https://www.nationaljournal.com/media/media/2015/09/17/06Julian-Assange.jpg','pagename','resizable,height=300,width=450'); return false;\">Share</a> <a class=\"twitt\" target=\"_blank\" href=\"https://twitter.com/intent/tweet?url=http://njour.nl/s/73311%3Foref=t.co%26mref=twitter_share&text=I%20don%E2%80%99t%20think%20U.S.%20citizens%20are%20the%20only%20ones%20who%20should%20have%20a%20right%20to%20privacy.\"> Tweet</a> <a class=\"mail\" target=\"_blank\" href=\"mailto:?subject=I%20don%E2%80%99t%20think%20U.S.%20citizens%20are%20the%20only%20ones%20who%20should%20have%20a%20right%20to%20privacy.&body=http://njour.nl/s/73311%3Foref=email_share%26mref=email_share\"> Email</a></p>\n", | ||
81 | "annotations": [], | ||
82 | "mimetype": "text/html", | ||
83 | "reading_time": 20, | ||
84 | "domain_name": "www.nationaljournal.com", | ||
85 | "preview_picture": "https://www.nationaljournal.com/media/media/2015/09/17/06Julian-Assange.jpg", | ||
86 | "tags": [] | ||
87 | }, | ||
88 | { | ||
89 | "is_archived": 0, | ||
90 | "is_starred": 0, | ||
91 | "id": 605, | ||
92 | "title": "What David Cameron did to the pig, his party is now doing to the country", | ||
93 | "url": "http://www.newstatesman.com/2015/09/what-david-cameron-did-pig-his-party-now-doing-country", | ||
94 | "content": "<p>Whatever you do, don’t think about David Cameron and a dead pig. I know, I know it’s like trying not to think of an elephant, but the fact is that the allegations that the Prime Minister may have put a 'private part of his anatomy\" into a dead pig's mouth as part of an initiation ritual for an elite drinking society at Oxford University are actually a very serious matter, and it’s all about corruption and the nature of elected power, and it would help if we could all just calm down for a second and stop giggling. Don’t think I don’t see you at the back there.</p>\n<p>You know, I feel for David Cameron today, I really do. Politicians’ private sex lives should never be used against them - unless their particular proclivities implicate them in gross hypocrisy or they have harmed another human being. If the rumours are true, it’s unlikely that the pig in question was hurt by the Prime Minister’s ministrations, given that it was already missing its limbs and torso.</p>\n<p>Sniggering aside, this is unlikely to hurt David Cameron in the long run. He’s not looking for re-election, and besides, everyone knows posh people get up to weird sex stuff. Weird sex stuff is as British as weak tea and racism. When I was at Oxford, it was an open secret that the posh kids had naughty parties, and, of course, so did the rest of us - the difference was the much lower budget, and the fact that the posh kids didn’t seem to enjoy it as much as we did. It all seemed to be more about getting on than getting off. You didn’t shag or not shag the pig’s face because that was what you were into, you did it because you had your eye on a safe seat in Dorset in 20 years’ time and you needed to make the right friends.</p>\n<p>There is a reason that David Cameron is allowed to hold office when everyone assumes he spent the 1980s taking drugs and getting up to weird things with his Eton mates, but Jeremy Corbyn is considered unelectable because he didn’t sing the national anthem last week. Cameron is part of a select group of people to whom different rules apply, and he knows it, and his friends know it, and the tabloids know it, and the whole cosy British political machine knows it. This is why Corbyn will spend the next five years being savaged for having a slightly rumpled tie by the same newspapers that reported on the dead pig allegations under the title \"the making of an extraordinary Prime Minister\".</p>\n<p>The thing that's really horrifying about what has already been dubbed the 'Hameron' scandal is that it demonstrates what entitlement of this kind actually means, and how embarrassing it all is. There are people out there who can spend their early twenties in close proximity to cocaine and popping their peckers in offal and not even consider for a second that there might be anyone better placed to run the country. These are people who know the rules don’t apply to them, who know they can do whatever they want and still end up in charge. </p>\n<p>I don't honestly care whether or not David Cameron shagged a dead pig. I've been to enough house parties in Bethnal Green that this sort of thing doesn't shock me. Come back to me when there’s video evidence of Cameron dressed in a leather gimp-suit tanned from the flayed skins of the former shadow cabinet, leaping into an entire Shropshire field full of pigs and screaming that his name is Legion. Then we’ll talk. There are a lot of things that David Cameron has definitely done that I do find disgusting, though. Taking away benefits from sick and disabled people, pricing poor kids out of higher education, and forcing millions of families to rely on food banks. That, to me, is shocking and grotesque. I don't give a damn about what he did or didn’t do to that pig, and whether there was mood-lighting involved. </p>\n<p>But the fact is that a lot of people do, and they're precisely the sort of people whose votes Cameron has relied on to shore up the power he clearly feels is his by right, might and various dodgy initiation rituals involving sex workers, smashing up pubs and knobbing bits of meat. Cameron clearly believes those people are there to be manipulated, and that’s the reason this story actually matters, beyond the immediate risk that a handful of pearl-clutchers in the Home Counties might splutter themselves to death. </p>\n<p>I was explaining all this to an American friend who asked, not unreasonably, why I'd spent all morning scrolling through Twitter and cackling like a toddler with a nerf gun. I did my best to describe seriously what had happened, and my friend, who does not follow British politics, asked me, 'so this guy, was he elected or appointed?'</p>\n<p>The answer, of course, is both. David Cameron is not just prime minister because a quarter of the country voted for him. That's not how power works in Britain, or anywhere, and it's moments like this that show it plainly, which is why we're all vaguely embarrassed today. Cameron's route to the office he clearly believes himself born to began much earlier, possibly even on a balmy Oxford night, just Dave, a dead pig and a select group of wide-eyed, gurning future business leaders, all whooping and cheering.</p>\n<p>It would surely have been a moment more important to Cameron's career than any number of photoshoots with builders in Totnes. Power and money are accessed through the back door, or, as it may be, the pig's mouth, and as with any kink, the eroticism isn't about the act, but about what the act symbolises. It's about humiliation, about control, about power play. What might the young swain have been thinking as he unzipped? What went through his head? If you ask me, I'll bet he was thinking: <em>Soon. Someday soon, I will do this to the whole bloody country.</em></p>\n", | ||
95 | "annotations": [], | ||
96 | "mimetype": "text/html", | ||
97 | "language": "en", | ||
98 | "reading_time": 5, | ||
99 | "domain_name": "www.newstatesman.com", | ||
100 | "preview_picture": "http://www.newstatesman.com/sites/default/files/styles/thumb_730/public/blogs_2015/09/gettyimages-464604046.jpg?itok=EaABrZda", | ||
101 | "tags": [] | ||
102 | }, | ||
103 | { | ||
104 | "is_archived": 1, | ||
105 | "is_starred": 0, | ||
106 | "id": 604, | ||
107 | "title": "CLICK HERE to support 2016 CES Winner, Revolutionary Auto-Tracking Robot", | ||
108 | "url": "https://www.indiegogo.com/projects/2016-ces-winner-revolutionary-auto-tracking-robot", | ||
109 | "content": "<div class=\"visible-xs visible-sm\" readability=\"8\">\n<div class=\"row\" readability=\"12\">\n<section class=\"col-sm-8\" readability=\"8\"><p>Sign Up for Inspiration</p>\n<p>Private, secure, spam-free</p>\n</section><section class=\"col-sm-4 i-top-lined-mobile-only\"><p>Follow us</p>\n </section></div>\n<div class=\"row\" readability=\"9\">\n<section class=\"col-sm-8 i-top-lined\" readability=\"5\"><p>About Indiegogo</p>\n</section><section class=\"col-sm-4 i-top-lined\"><div class=\"row\">\n<p>Language</p>\n</div>\n</section></div>\n</div>\n<div class=\"visible-md visible-lg\" readability=\"13\">\n<section class=\"row\" readability=\"4\"><div class=\"col-md-3\">\n<p>Campaigning</p>\n </div>\n<div class=\"col-md-3\">\n<p>Contributing</p>\n </div>\n<div class=\"col-md-6\" readability=\"13\">\n<p>Sign Up for Inspiration</p>\n<p>Private, secure, spam-free</p>\n</div>\n</section><section class=\"row\"><div class=\"col-md-3\">\n<p>About Indiegogo</p>\n </div>\n<div class=\"col-md-4\">\n<p>Follow us</p>\n</div>\n<div class=\"col-md-2\">\n<p>Language</p>\n</div>\n</section></div>\n<section class=\"i-top-lined\" readability=\"1\">\n</section>", | ||
110 | "annotations": [], | ||
111 | "mimetype": "text/html", | ||
112 | "reading_time": 0, | ||
113 | "domain_name": "www.indiegogo.com", | ||
114 | "preview_picture": "https://c1.iggcdn.com/indiegogo-media-prod-cld/image/upload/c_fill,f_auto,h_630,w_1200/v1447395263/d6ckex9ynild6ica1xdk.jpg", | ||
115 | "tags": [] | ||
116 | }, | ||
117 | { | ||
118 | "is_archived": 0, | ||
119 | "is_starred": 1, | ||
120 | "id": 603, | ||
121 | "title": "No title found", | ||
122 | "url": "http://carnetdevol.shost.ca/wordpress/aide-memoire-sur-les-commandes-associees-a-systemd/", | ||
123 | "content": "wallabag can't retrieve contents for this article. Please report this issue to us.", | ||
124 | "annotations": [], | ||
125 | "mimetype": "text/html", | ||
126 | "reading_time": 0, | ||
127 | "domain_name": "carnetdevol.shost.ca", | ||
128 | "tags": [] | ||
129 | }, | ||
130 | { | ||
131 | "is_archived": 1, | ||
132 | "is_starred": 0, | ||
133 | "id": 602, | ||
134 | "title": "Présentation d'Arduino - Tuto Arduino - Le blog d'Eskimon", | ||
135 | "url": "http://eskimon.fr/73-arduino-101-presentation", | ||
136 | "content": "<div class=\"chapitre\" id=\"457282\">\n<p class=\"introduction\">Comment faire de l’électronique en utilisant un langage de programmation ? La réponse, c’est le projet Arduino qui l’apporte. Vous allez le voir, celui-ci a été conçu pour être accessible à tous par sa simplicité. Mais il peut également être d’usage professionnel, tant les possibilités d’applications sont nombreuses.</p>\n<div class=\"sommaire\"><strong class=\"tgros\">Sommaire</strong>\n<ul><li><a href=\"http://eskimon.fr/73-arduino-101-presentation#457704\">Qu’est-ce que c’est ?</a></li>\n<li><a href=\"http://eskimon.fr/73-arduino-101-presentation#769345\">Pourquoi choisir Arduino ?</a></li>\n<li><a href=\"http://eskimon.fr/73-arduino-101-presentation#458252\">Les cartes Arduino</a></li>\n<li><a href=\"http://eskimon.fr/73-arduino-101-presentation#629075\">Liste d’achat</a></li>\n</ul></div>\n<div class=\"sideSommaire blocwrapper\"><ins class=\"adsbygoogle c1\" data-ad-client=\"ca-pub-2080155902357792\" data-ad-slot=\"1103196807\"/></div>\n<div class=\"sousparties\">\n<div class=\"souspartie\" id=\"457704\">\n<h2>Qu’est-ce que c’est ?</h2>\n<div class=\"texte\">Une équipe de développeurs composée de <em>Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, David Mellis et Nicholas Zambetti</em> a imaginé un projet répondant au doux nom de <strong>Arduino</strong> et mettant en œuvre une petite carte électronique programmable et un logiciel multiplateforme, qui puisse être accessible à tout un chacun dans le but de créer facilement des systèmes électroniques. Étant donné qu’il y a des débutants parmi nous, commençons par voir un peu le vocabulaire commun propre au domaine de l’électronique et de l’informatique.\n<h3>Une carte électronique</h3>\n<p>Une <strong>carte électronique</strong> est un support plan, flexible ou rigide, généralement composé d’<a href=\"http://fr.wikipedia.org/wiki/Poly%C3%A9poxyde\">epoxy</a> ou de fibre de verre. Elle possède des pistes électriques disposées sur une, deux ou plusieurs couches (en surface et/ou en interne) qui permettent la mise en relation électrique des composants électroniques. Chaque piste relie tel composant à tel autre, de façon à créer un système électronique qui fonctionne et qui réalise les opérations demandées.</p>\n<div class=\"centre\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422585.png\"/><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422584.png\"/><br/><em>Exemples de cartes électroniques</em></div>\n<p>Évidemment, tous les composants d’une carte électronique ne sont pas forcément reliés entre eux. Le câblage des composants suit un plan spécifique à chaque carte électronique, qui se nomme le <strong>schéma électronique</strong>.</p>\n<div class=\"centre\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422580.png\"/><br/><em>Exemple de schéma électronique – carte Arduino Uno</em></div>\n<p>Enfin, avant de passer à la réalisation d’un carte électronique, il est nécessaire de transformer le schéma électronique en un <strong>schéma de câblage</strong>, appelé <strong>typon</strong>.</p>\n<div class=\"centre\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422582.png\"/><br/><em>Exemple de typon – carte Arduino</em></div>\n<p class=\"question\">Une fois que l’on a une carte électronique, on fait quoi avec ?</p>\n<p>Eh bien une fois que la carte électronique est faite, nous n’avons plus qu’à la tester et l’utiliser ! Dans notre cas, avec Arduino, nous n’aurons pas à fabriquer la carte et encore moins à la concevoir. Elle existe, elle est déjà prête à l’emploi et nous n’avons plus qu’à l’utiliser. Et pour cela, vous allez devoir apprendre comment l’utiliser, ce que je vais vous montrer dans ce tutoriel.</p>\n<h3>Programmable ?</h3>\n<p>J’ai parlé de <strong>carte électronique programmable</strong> au début de ce chapitre. Mais savez-vous ce que c’est exactement ? Non pas vraiment. Alors voyons ensemble de quoi il s’agit. La carte Arduino est une carte électronique qui ne sait rien faire sans qu’on lui dise quoi faire. Pourquoi ? Eh bien c’est du au fait qu’elle est <strong>programmable</strong>. Cela signifie qu’elle a besoin d’un <strong>programme</strong> pour fonctionner.</p>\n<h4>Un programme</h4>\n<p>Un programme est une liste d’instructions qui est exécuté par un système. Par exemple votre navigateur internet, avec lequel vous lisez probablement ce cours, est un programme. On peut analogiquement faire référence à une liste de course :</p>\n<div class=\"gauche\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422587.png\"/></div>\n<p>Chaque élément de cette liste est une <strong>instruction</strong> qui vous dis : « Va chercher le lait » ou « Va chercher le pain », etc. Dans un programme le fonctionnement est similaire :</p>\n<ul><li>Attendre que l’utilisateur rentre un site internet à consulter</li>\n<li>Rechercher sur internet la page demandée</li>\n<li>Afficher le résultat</li>\n</ul><p>Tel pourrait être le fonctionnement de votre navigateur internet. Il va attendre que vous lui demandiez quelque chose pour aller le chercher et ensuite vous le montrer. Eh bien, tout aussi simplement que ces deux cas, une carte électronique programmable suit une liste d’instructions pour effectuer les opérations demandées par le programme.</p>\n<p class=\"question\">Et on les trouves où ces programmes ? Comment on fait pour le mettre dans la carte ? o_O</p>\n<p>Des programmes, on peut en trouver de partout. Mais restons concentré sur Arduino. Le programme que nous allons mettre dans la carte Arduino, c’est nous qui allons le réaliser. Oui, vous avez bien lu. Nous allons programmer cette carte Arduino. Bien sûr, ce ne sera pas aussi simple qu’une liste de course, mais rassurez-vous cependant car nous allons réussir quand même ! Je vous montrerais comment y parvenir, puisque avant tout c’est un des objectifs de ce tutoriel. Voici un exemple de programme : <img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422588.png\"/> Vous le voyez comme moi, il s’agit de plusieurs lignes de texte, chacune étant une instruction. Ce langage ressemble à un véritable baragouin et ne semble vouloir <em>à priori</em> rien dire du tout… Et pourtant, c’est ce que nous saurons faire dans quelques temps ! Car nous apprendrons le <strong>langage informatique</strong> utilisé pour programmer la carte Arduino. Je ne m’attarde pas sur les détails, nous aurons amplement le temps de revenir sur le sujet plus tard. Pour répondre à la deuxième question, nous allons avoir besoin d’un logiciel…</p>\n<h3>Et un logiciel ?</h3>\n<p>Bon, je ne vais pas vous faire le détail de ce qu’est un logiciel, vous savez sans aucun doute de quoi il s’agit. Ce n’est autre qu’un programme informatique exécuté sur un ordinateur. Oui, pour programmer la carte Arduino, nous allons utiliser un programme ! En fait, il va s’agir d’un <strong>compilateur</strong>. Alors qu’est-ce que c’est exactement ?</p>\n<h4>Un compilateur</h4>\n<p>En informatique, ce terme désigne un logiciel qui est capable de traduire un langage informatique, ou plutôt un programme utilisant un langage informatique, vers un langage plus approprié afin que la machine qui va le lire puisse le comprendre. C’est un peu comme si le patron anglais d’une firme Chinoise donnait des instructions en anglais à un de ses ouvriers chinois. L’ouvrier ne pourrait comprendre ce qu’il doit faire. Pour cela, il a besoin que l’on traduise ce que lui dit son patron. C’est le rôle du <strong>traducteur</strong>. Le compilateur va donc traduire les instructions du programme précédent, écrites en langage texte, vers un langage dit « machine ». Ce langage utilise uniquement des 0 et des 1. Nous verrons plus tard pourquoi. Cela pourrait être imagé de la façon suivante :</p>\n<div class=\"centre\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422590.png\"/></div>\n<p>Donc, pour traduire le langage texte vers le langage machine (avec des 0 et des 1), nous aurons besoin de ce fameux compilateur. Et pas n’importe lequel, il faut celui qui soit capable de traduire le langage texte Arduino vers le langage machine Arduino. Et oui, sinon rien ne va fonctionner. Si vous mettez un traducteur Français vers Allemand entre notre patron anglais et son ouvrier chinois, ça ne fonctionnera pas mieux que s’ils discutaient directement. Vous comprenez ?</p>\n<p class=\"question\">Et pourquoi on doit utiliser un traducteur, on peut pas simplement apprendre le langage machine directement ?</p>\n<p>Comment dire… non ! Non parce que le langage machine est quasiment impossible à utiliser tel quel. Par exemple, comme il est composé de 0 et de 1, si je vous montre ça : « 0001011100111010101000111 », vous serez incapable, tout comme moi, de dire ce que cela signifie ! Et même si je vous dis que la suite « 01000001 » correspond à la lettre « A », je vous donne bien du courage pour coder rien qu’une phrase ! 😛 Bref, oubliez cette idée. C’est quand même plus facile d’utiliser des mots anglais (car oui nous allons être obligé de faire un peu d’anglais pour programmer, mais rien de bien compliqué rassure-vous) que des suites de 0 et de 1. Vous ne croyez pas ?</p>\n<h4>Envoyer le programme dans la carte</h4>\n<p>Là, je ne vais pas vous dire grand chose car c’est l’environnement de développement qui va gérer tout ça. Nous n’aurons qu’à apprendre comment utiliser ce dernier et il se débrouillera tout seul pour envoyer le programme dans la carte. Nah ! Nous n’aurons donc qu’à créer le programme sans nous soucier du reste.</p>\n</div>\n</div>\n<div class=\"souspartie\" id=\"769345\">\n<h2>Pourquoi choisir Arduino ?</h2>\n<div class=\"texte\">\n<h3>Que va-t-on faire avec ?</h3>\n<p>Avec Arduino, nous allons commencer par apprendre à programmer puis à utiliser des composants électroniques. Au final, nous saurons créer des systèmes électroniques plus ou moins complexes. Mais ce n’est pas tout…</p>\n<h4>D’abord, Arduino c’est…</h4>\n<p>… une carte électronique programmable et un logiciel gratuit :</p>\n<div class=\"centre\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/307927.png\"/></div>\n<h4>Mais aussi</h4>\n<p>– Un prix dérisoire étant donné l’étendue des applications possibles. On comptera 20 euros pour la carte que l’on va utiliser dans le cours. Le logiciel est fournit gratuitement ! – Une compatibilité sous toutes les plateformes, à savoir : Windows, Linux et Mac OS. – Une communauté ultra développée ! Des milliers de forums d’entre-aide, de présentations de projets, de propositions de programmes et de bibliothèques, … – Un site en anglais <a href=\"http://www.arduino.cc/\">arduino.cc</a> et un autre en français <a href=\"http://www.arduino.cc/\">arduino.cc</a> où vous trouverez tout de la référence Arduino, le matériel, des exemples d’utilisations, de l’aide pour débuter, des explications sur le logiciel et le matériel, etc. – Une liberté quasi absolue. Elle constitue en elle même deux choses :</p>\n<ul><li>Le logiciel : gratuit et open source, développé en Java, dont la simplicité d’utilisation relève du savoir cliquer sur la souris</li>\n<li>Le matériel : cartes électroniques dont les schémas sont en libre circulation sur internet</li>\n</ul><p class=\"attention\">Cette liberté a une condition : le nom « Arduino » ne doit être employé que pour les cartes « officielles ». En somme, vous ne pouvez pas fabriquer votre propre carte sur le modèle Arduino et lui assigner le nom « Arduino ».</p>\n<h4>Et enfin, les applications possibles</h4>\n<p>Voici une liste non exhaustive des applications possible réalisées grâce à Arduino :</p>\n<ul><li>contrôler des appareils domestiques</li>\n<li>donner une « intelligence » à un robot</li>\n<li>réaliser des jeux de lumières</li>\n<li>permettre à un ordinateur de communiquer avec une carte électronique et différents capteurs</li>\n<li>télécommander un appareil mobile (modélisme)</li>\n<li>etc.</li>\n</ul><p>Il y a tellement d’autres infinités d’utilisations, vous pouvez simplement chercher sur votre moteur de recherche préféré ou sur Youtube le mot « Arduino » pour découvrir les milliers de projets réalisés avec !</p>\n<h4>Arduino dans ce tutoriel</h4>\n<p>Je vais quand même rappeler les principaux objectifs de ce cours. Nous allons avant tout découvrir Arduino dans son ensemble et apprendre à l’utiliser. Dans un premier temps, il s’agira de vous présenter ce qu’est Arduino, comment cela fonctionne globalement, pour ensuite entrer un peu plus dans le détail. Nous allons alors apprendre à utiliser le langage Arduino pour pouvoir créer des programmes très simple pour débuter. Nous enchainerons ensuite avec les différentes fonctionnalités de la carte et ferons de petits TP qui vous permettront d’assimiler chaque notion abordée. Dès lors que vous serez plutôt à l’aise avec toutes les bases, nous nous rapprocherons de l’utilisation de composants électroniques plus ou moins complexes et finirons par un plus « gros » TP alliant la programmation et l’électronique. De quoi vous mettre de l’eau à la bouche ! 😛</p>\n<h3>Arduino à l’école ?</h3>\n<p>Pédagogiquement, Arduino a aussi pas mal d’atout. En effet, ses créateurs ont d’abord pensé ce projet pour qu’il soit facile d’accès. Il permet ainsi une très bonne approche de nombreux domaines et ainsi d’apprendre plein de choses assez simplement.</p>\n<h4>Des exemples</h4>\n<p>Voici quelques exemples d’utilisation possible :</p>\n<ul><li>Simuler le fonctionnement des portes logiques</li>\n<li>Permettre l’utilisation de différents capteurs</li>\n<li>Mettre en œuvre et faciliter la compréhension d’un réseau informatique</li>\n<li>Se servir d’Arduino pour créer des maquettes animées montrant le fonctionnement des collisions entres les plaques de la croute terrestre, par exemple <img src=\"http://eskimon.fr/wp-includes/images/smilies/mrgreen.png\" alt=\":mrgreen:\" class=\"wp-smiley c2\"/></li>\n<li>Donner un exemple concret d’utilisation des matrices avec un clavier alphanumérique 16 touches ou plus</li>\n<li>Être la base pour des élèves ayant un TPE à faire pour le BAC</li>\n<li>…</li>\n</ul><p>De plus, énormément de ressources et tutoriels (mais souvent en anglais) se trouvent sur internet, ce qui offre un autonomie particulière à l’apprenant.</p>\n<h4>Des outils existant !</h4>\n<p>Enfin, pour terminer de vous convaincre d’utiliser Arduino pour découvrir le monde merveilleux de l’embarqué, il existe différents outils qui puissent être utilisé avec Arduino. Je vais en citer deux qui me semble être les principaux : <a href=\"http://blog.ardublock.com/\">Ardublock</a> est un outil qui se greffe au logiciel Arduino et qui permet de programmer avec des blocs. Chaque bloc est une instruction. On peut aisément faire des programmes avec cet outil et mêmes des plutôt complexes. Cela permet par exemple de se concentrer sur ce que l’on doit faire avec Arduino et non se concentrer sur Arduino pour ensuite ce que l’on doit comprendre avec. Citons entre autre la simulation de porte logique : plutôt créer des programmes rapidement sans connaitre le langage pour comprendre plus facilement comment fonctionne une porte logique. Et ce n’est qu’un exemple. Car cela permet aussi de permettre à de jeunes enfants de commencer à programmer sans de trop grandes complications.</p>\n<div class=\"centre\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422596.png\"/><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422595.png\"/><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422597.png\"/><br/><em>Exemple de programmes réalisés avec Ardublock</em></div>\n<p><a href=\"http://processing.org/\">Processing</a> est une autre plateforme en lien avec Arduino. Là il n’y a pas de matériel, uniquement un logiciel. Il permet entre autre de créer des interfaces graphiques avec un langage de programmation très similaire à celui d’Arduino. Par contre, cela demande un niveau un peu plus élevé pour pouvoir l’utiliser, même si cela reste simple dans l’ensemble.</p>\n<div class=\"centre\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422599.png\"/><br/><em>Voilà un exemple de ce que j’avais réalisé avec Processing pour faire communiquer mon ordinateur avec ma carte Arduino</em></div>\n<p>J’espère avoir été assez convaincant afin que vous franchissiez le pas et ayez du plaisir à apprendre ! <img src=\"http://eskimon.fr/wp-includes/images/smilies/simple-smile.png\" alt=\":)\" class=\"wp-smiley c2\"/></p>\n</div>\n</div>\n<div class=\"souspartie\" id=\"458252\">\n<h2>Les cartes Arduino</h2>\n<div class=\"texte\">Le matériel que j’ai choisi d’utiliser tout au long de ce cours n’a pas un prix excessif et, je l’ai dit, tourne aux alentours de 25 € TTC. Il existe plusieurs magasins en lignes et en boutiques qui vendent des cartes Arduino. Je vais vous en donner quelques-uns, mais avant, il va falloir différencier certaines choses.\n<h4>Les fabricants</h4>\n<p>Le projet Arduino est libre et les schémas des cartes circulent librement sur internet. D’où la mise en garde que je vais faire : il se peut qu’un illustre inconnu fabrique lui même ses cartes Arduino. Cela n’a rien de mal en soi, s’il veut les commercialiser, il peut. Mais s’il est malhonnête, il peut vous vendre un produit défectueux. Bien sûr, tout le monde ne cherchera pas à vous arnaquer. Mais la prudence est de rigueur. Faites donc attention où vous achetez vos cartes.</p>\n<h4>Les types de cartes</h4>\n<div class=\"floatDroite\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422602.gif\"/></div>\n<p>Il y a trois types de cartes :</p>\n<ul><li>Lesdites « officielles » qui sont fabriquées en Italie par le fabricant officiel : <em>Smart Projects</em></li>\n<li>Lesdits « compatibles » qui ne sont pas fabriqués par <em>Smart Projects</em>, mais qui sont totalement compatibles avec les Arduino officielles.</li>\n<li>Les « autres » fabriquées par diverse entreprise et commercialisées sous un nom différent (Freeduino, Seeduino, Femtoduino, …).</li>\n</ul><h4>Les différentes cartes</h4>\n<p>Des cartes Arduino il en existe beaucoup ! Voyons celles qui nous intéressent… <strong>La carte <em>Uno</em> et <em>Duemilanove</em></strong> Nous choisirons d’utiliser la carte portant le nom de « Uno » ou « Duemilanove ». Ces deux versions sont presque identiques.</p>\n<div class=\"centre\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422601.png\"/><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422600.gif\"/><br/><em>Carte Arduino « Duemilavove » et « Uno » avec laquelle nous allons travailler</em></div>\n<p><strong>La carte <em>Mega</em></strong> La carte Arduino Mega est une autre carte qui offre toutes les fonctionnalités de la carte précédente, mais avec des fonctionnalités supplémentaires. On retrouve notamment un nombre d’entrées et de sorties plus important ainsi que plusieurs liaisons séries. Bien sûr, le prix est plus élevé : > 40 € !</p>\n<div class=\"centre\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422586.png\"/><br/><em>Carte Arduino « Mega »</em></div>\n<p><strong>Les autres cartes</strong> Il existe encore beaucoup d’autres cartes, je vous laisse vous débrouiller pour trouver celle qui conviendra à vos projets. Cela dit, je vous conseil dans un premier temps d’utiliser la carte Arduino Uno ou Duemilanove d’une part car elle vous sera largement suffisante pour débuter et d’autre part car c’est avec celle-ci que nous présentons le cours.</p>\n<h4>Où acheter ?</h4>\n<p>Il existe sur le net une multitude de magasins qui proposent des cartes Arduino. Pour consulter la liste de ces magasins, rien de plus simple, il suffit de vous rendre sur le forum dédié :</p>\n<div class=\"centre\"><a href=\"http://fr.openclassrooms.com/forum/sujet/les-meilleures-boutiques-d-electronique-90967\"><strong>Les meilleurs boutiques d’électronique</strong></a> Cliquez-ici</div>\n<p class=\"question\">J’ai vu des cartes officielles « édition SMD/CMS ». Ca à l’air bien aussi, c’est quoi la différence ? Je peux m’en servir ?</p>\n<p>Il n’y a pas de différence ! enfin presque… « SMD » signifie <strong>Surface Mount Device</strong>, en français on appelle ça des « CMS » pour <strong>Composants Montés en Surface</strong>. Ces composants sont soudés directement sur le cuivre de la carte, il ne la traverse pas comme les autres. Pour les cartes Arduino, on retrouve le composant principal en édition SMD dans ces cartes. La carte est donc la même, aucune différence pour le tuto. Les composants sont les mêmes, seule l’allure « physique » est différente. Par exemple, ci-dessus la « Mega » est en SMD et la Uno est « classique ».</p>\n</div>\n</div>\n<div class=\"souspartie\" id=\"629075\">\n<h2>Liste d’achat</h2>\n<div class=\"texte\">Tout au long du cours, nous allons utiliser du matériel en supplément de la carte. Rassurez-vous le prix est bien moindre. Je vous donne cette liste, cela vous évitera d’acheter en plusieurs fois. Vous allez devoir me croire sur parole sur leur intérêt. Nous découvrirons comment chaque composant fonctionne et comment les utiliser tout au long du tutoriel. <img src=\"http://eskimon.fr/wp-includes/images/smilies/simple-smile.png\" alt=\":)\" class=\"wp-smiley c2\"/><p class=\"attention\">Attention, cette liste ne contient que les composants en quantités minimales strictes. Libre à vous de prendre plus de LED et de résistances par exemple (au cas où vous en perdriez ou détruisiez…). Pour ce qui est des prix, j’ai regardé sur différents sites grands publics (donc pas Farnell par exemple), ils peuvent donc paraître plus élevé que la normale dans la mesure où ces sites amortissent moins sur des ventes à des clients fidèles qui prennent tout en grande quantité…</p>\n<p>Avant que j’oublie, quatres éléments n’apparaitront pas dans la liste et sont indispensables :</p>\n<table><tbody><tr><th>Une Arduino Uno ou Duemilanove</th>\n<th>Un câble USB A mâle/B mâle</th>\n</tr><tr><td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369652.gif\"/></td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/422603.png\"/></td>\n</tr></tbody></table><table><tbody><tr><th>Une BreadBoard (plaque d’essai)</th>\n<th>Un lot de fils pour brancher le tout !</th>\n</tr><tr><td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369653.jpg\"/></td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369661.png\"/></td>\n</tr></tbody></table><h3>Liste Globale</h3>\n<p>Voici donc la liste du matériel nécessaire pour suivre le cours. Libre à vous de tout acheter ou non.</p>\n<div class=\"erreur\">Liste incomplète, le tutoriel n’est pas terminé ! Mais elle suffit pour suivre les chapitres en ligne.</div>\n<table><tbody><tr><th>Désignation</th>\n<th>Quantité</th>\n<th>Photo</th>\n<th>Description</th>\n</tr><tr><td>LED rouge</td>\n<td>7</td>\n<td rowspan=\"3\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369662.png\"/></td>\n<td rowspan=\"3\">Ce composant est une sorte de lampe un peu spécial. Nous nous en servirons principalement pour faire de la signalisation.</td>\n</tr><tr><td>LED verte</td>\n<td>3</td>\n</tr><tr><td>LED jaune (ou orange)</td>\n<td>2</td>\n</tr><tr><td>Résistance (entre 220 et 470 Ohm)</td>\n<td>10</td>\n<td rowspan=\"3\"><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369663.png\"/></td>\n<td rowspan=\"3\">La résistance est un composant de base qui s’oppose au passage du courant. On s’en sert pour limiter des courants maximums mais aussi pour d’autres choses.</td>\n</tr><tr><td>Résistance (entre 2.2 et 4.7 kOhm)</td>\n<td>2</td>\n</tr><tr><td>Résistance (10 kOhm)</td>\n<td>2</td>\n</tr><tr><td>Bouton Poussoir</td>\n<td>2</td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369665.jpg\"/></td>\n<td>Un bouton poussoir sert à faire passer le courant lorsqu’on appuie dessus ou au contraire garder le circuit « éteint » lorsqu’il est relâché.</td>\n</tr><tr><td>Transistor (2N2222 ou BC547)</td>\n<td>2</td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369664.png\"/></td>\n<td>Le transistor sert à plein de chose. Il peut être utilisé pour faire de l’amplification (de courant ou de tension) mais aussi comme un interrupteur commandé électriquement.</td>\n</tr><tr><td>Afficheur 7 segments (anode commune)</td>\n<td>2</td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/345467.png\"/></td>\n<td>Un afficheur 7 segments est un ensemble de LEDs (cf. ci-dessus) disposées géométriquement pour afficher des chiffres.</td>\n</tr><tr><td>Décodeur BCD (CD4543BE)</td>\n<td>1</td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369667.png\"/></td>\n<td>Le décodeur BCD (Binaire Codé Décimal) permet piloter des afficheurs 7 segments en limitant le nombre de fils de données (4 au lieu de 7).</td>\n</tr><tr><td>Condensateur (10nF/5V ou plus)</td>\n<td>2</td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369673.jpg\"/></td>\n<td>Le condensateur est un composant de base. Il sert à plein de chose. On peut se le représenter comme un petit réservoir à électricité.</td>\n</tr><tr><td>Condensateur (1000µF 15V ou plus</td>\n<td>1</td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/370226.png\"/></td>\n<td>Celui-ci est un plus gros réservoir que le précédent</td>\n</tr><tr><td>Potentiomètre linéaire (10 kOhm)</td>\n<td>1</td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369668.png\"/></td>\n<td>Le potentiomètre est une résistance que l’on peut faire varier manuellement.</td>\n</tr><tr><td>LED RVB</td>\n<td>1</td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/369672.jpg\"/></td>\n<td>Une LED RVB (Rouge Vert Bleu) est une LED permettant de mélanger les couleurs de bases pour en créer d’autres.</td>\n</tr><tr><td>Écran LCD alphanumérique</td>\n<td>1</td>\n<td><img alt=\"\" src=\"http://eskimon.fr/wp-content/uploads/tuto/385800.jpg\"/></td>\n<td>L’écran LCD alphanumérique permet d’afficher des caractères tels que les chiffres et les lettres. Il va apporter de l’interactivité à vos projets les plus fous !</td>\n</tr></tbody></table><h3>Les revendeurs</h3>\n<p>Je vous ai déjà donné le lien, vous pourrez trouver ces composants chez les revendeurs listés dans ce sujet du forum :</p>\n<div class=\"centre\"><a href=\"http://fr.openclassrooms.com/forum/sujet/les-meilleures-boutiques-d-electronique-90967\"><strong>Les meilleurs boutiques d’électronique</strong></a> Cliquez-ici</div>\n<h3>Les kits</h3>\n<p>Enfin, il existe des kits tout prêts chez certains revendeurs. Nous n’en conseillerons aucun pour plusieurs raisons. Tout d’abord, pour ne pas faire trop de publicité et rester conforme avec la charte du site. Ensuite, car il est difficile de trouver un kit « complet ». Ils ont tous des avantages et des inconvénients mais aucun (au moment de la publication de ces lignes) ne propose absolument tous les composants que nous allons utiliser. Nous ne voulons donc pas que vous reveniez vous plaindre sur les forums car nous vous aurions fait dépenser votre argent inutilement !</p>\n<div class=\"erreur\">Cela étant dit, merci de <strong>ne pas nous spammer de MP</strong> pour que l’on donne notre avis sur tel ou tel kit ! Usez des forums pour cela, il y a toujours quelqu’un qui sera là pour vous aider. Et puis nous n’avons pas les moyens de tous les acheter et tester leur qualité !</div>\n</div>\n</div>\n</div>\n<div class=\"conclusion\"/>\n</div>\n\n\n", | ||
137 | "annotations": [], | ||
138 | "mimetype": "text/html", | ||
139 | "language": "fr-FR", | ||
140 | "reading_time": 17, | ||
141 | "domain_name": "eskimon.fr", | ||
142 | "preview_picture": "http://eskimon.fr/wp-content/uploads/tuto/385800.jpg", | ||
143 | "tags": [] | ||
144 | }, | ||
145 | { | ||
146 | "is_archived": 1, | ||
147 | "is_starred": 0, | ||
148 | "id": 543, | ||
149 | "title": "Lenovo ThinkPad X1 Carbon Ultrabook Review", | ||
150 | "url": "http://www.notebookcheck.net/Lenovo-ThinkPad-X1-Carbon-Ultrabook-Review.138033.0.html", | ||
151 | "content": "<p class=\"align-justify\">The Lenovo X1 Carbon 3rd Gen is <strong>a beautiful machine</strong>. Much like the <a href=\"http://www.notebookcheck.net/Dell-XPS-13-9343-Touchscreen-Ultrabook-Review.135817.0.html\" target=\"_self\" class=\"internal-link\">Dell XPS 13</a> took the initiative to cram a 13-inch screen into an 11-inch form factor, the X1 Carbon sports dimensions that are more comparable to a typical 13-inch machine—and that includes its <strong>weight and thinness</strong>, both of which are <strong>indisputably manageable</strong>. It’s also <strong>practically designed</strong>; the <strong>matte black surfaces</strong> that comprise the majority of the case are minimalist and attractive, but they’re simultaneously haptically comfortable, with an <strong>unmistakably cool metal feel</strong> and a comfortable fit for use on both lap and desk. The case also feels fairly solid, though the incidence of flex and relative lack of torsion resistance in some regards gave us pause.</p>\n<p class=\"align-justify\">Perhaps more exciting, however, is <strong>what has improved over the <a href=\"http://www.notebookcheck.net/Review-Update-Lenovo-ThinkPad-X1-Carbon-Touch-20A7-002DGE-Ultrabook.113926.0.html\" target=\"_self\" class=\"internal-link\">X1 Carbon 2nd Gen</a></strong>. Criticism of the <a href=\"http://www.notebookcheck.net/Review-Update-Lenovo-ThinkPad-X1-Carbon-Touch-20A7-002DGE-Ultrabook.113926.0.html\" target=\"_self\" class=\"internal-link\">2nd Gen</a>’s radical (and arguably illogical) keyboard design and polarizing full-depression clickpad scared away many prospective buyers—as such fearlessly progressive and experimental design decisions generally don’t fit well with the business market, where practicality rules supreme. The Gen 3 wholeheartedly acknowledges these complaints and implements a complete reversal of those decisions. As a result, <strong>the keyboard</strong>—immediately familiar and accessible—<strong>is one of the absolute best we have ever used on an Ultrabook</strong>. Meanwhile, the <strong>three classic top-mounted physical buttons for use with the Trackpoint have returned</strong>, and the <strong>touchpad</strong> itself <strong>ditches the controversial full-click design</strong> in favor of a far more comfortable (and, in our judgment, reliable) clickpad approach. The end result is that the X1 Carbon Gen 3 <strong>features some of the best input devices we’ve tested on an Ultrabook</strong>.</p>\n<p class=\"align-justify\">What about performance? <strong>CPU performance differences between the <a href=\"http://www.notebookcheck.net/Review-Update-Lenovo-ThinkPad-X1-Carbon-Touch-20A7-002DGE-Ultrabook.113926.0.html\" target=\"_self\" class=\"internal-link\">2nd Gen</a> and 3rd Gen</strong> X1 Carbon models <strong>were essentially nil</strong> in our testing—for all intents and purposes, the machines are identical in this regard. However in GPU testing, we witnessed a notable speed boost—in some cases up to 19% better. As compared with other modern notebooks of its class, apart from some multi-core synthetic performance hiccups, <strong>the X1 Carbon 3rd Gen holds its own, both in terms of CPU/GPU and general system performance</strong>. The only final niggle here is the Samsung PM851 SSD, whose write speeds are conspicuously capped at around 250 MB/s.</p>\n<p class=\"align-justify\">While the leap to a Broadwell chipset and slightly larger battery seemed sure to promise improved <strong>battery runtimes</strong>, we were surprised to find throughout our testing that <strong>there wasn’t much of a difference at all</strong>. Our classic Wi-Fi Surfing Test produced a result <strong>only slightly better than that of the <a href=\"http://www.notebookcheck.net/Review-Update-Lenovo-ThinkPad-X1-Carbon-Touch-20A7-002DGE-Ultrabook.113926.0.html\" target=\"_self\" class=\"internal-link\">2nd Gen</a></strong>, and the revised Wi-Fi test we just recently implemented—which is more broad and aggressive and arguably closer to actual real-world usage patterns—recorded under five hours before the machine shut down. That’s hardly an impressive number on one hand given the 50 Wh battery and supposed enhanced efficiency, though it’s still likely to get most users through a typical trip unplugged, especially if more restrictive power savings options are employed. If longer battery life is a priority, we’d suggest taking a look instead at the <a href=\"http://www.notebookcheck.net/Dell-XPS-13-9343-Touchscreen-Ultrabook-Review.135817.0.html\" target=\"_self\" class=\"internal-link\">Dell XPS 13-9343</a> or the <a href=\"http://www.notebookcheck.net/Apple-MacBook-Air-13-MD761D-B-2014-06-Notebook-Review-Update.119805.0.html\" target=\"_self\" class=\"internal-link\">MacBook Air 13</a>.</p>\n<p class=\"align-justify\">Rounding out the list of considerations is an <strong>underwhelming screen</strong>, at least in terms of brightness, contrast, and color saturation—though we do most certainly appreciate the <strong>anti-glare display filter</strong> for both its diffusion of reflections and relative ease of cleaning. The X1 Carbon Gen 3 is also <strong>invariably cool and quiet</strong>, clearly favoring comfort over top-end performance (as we discovered during our stress testing of the device).</p>\n<p class=\"align-justify\">Summing up, the X1 Carbon Gen 3 is <strong>indisputably superior to its predecessor</strong>. Although some of these improvements come in the form of better GPU performance, cooler temperatures, and lower average system noise levels, the vast majority of them center on the thankful retreat from the experimental (and finicky) input devices of the Gen 2 design and back to sanity. This isn’t just a return to form, either; to reiterate, by our judgment, they are some of the best input devices on any Ultrabook we’ve tested to date. But in spite of this self-improvement, <strong>how does the X1 Carbon compare with its modern competitors</strong>? In truth, though it’s a compelling option, <strong>it’s lost some ground since our last encounter</strong>. While notebooks such as the <a href=\"http://www.notebookcheck.net/Apple-MacBook-Air-13-MD761D-B-2014-06-Notebook-Review-Update.119805.0.html\" target=\"_self\" class=\"internal-link\">MacBook Air 13</a> and (especially) the <a href=\"http://www.notebookcheck.net/Dell-XPS-13-9343-Touchscreen-Ultrabook-Review.135817.0.html\" target=\"_self\" class=\"internal-link\">Dell XPS 13-9343</a> have sprinted forward with such massive improvements in portability, battery life, and LCD quality, the X1 Carbon 3rd Gen has only marginally improved, mostly regaining footing it’s lost elsewhere. It’s <strong>still a strong contender</strong>, and it’s <strong>certainly the best Carbon to date</strong>, but especially at a <strong>pricey $1,574</strong>, we fear that its inability to innovate further may relegate it to the shadows of these more aggressive contenders.</p>\n", | ||
152 | "annotations": [], | ||
153 | "mimetype": "text/html", | ||
154 | "language": "en", | ||
155 | "reading_time": 3, | ||
156 | "domain_name": "www.notebookcheck.net", | ||
157 | "preview_picture": "http://www.notebookcheck.net/fileadmin/Notebooks/Lenovo/ThinkPad_X1_Carbon_2015/x12015.jpg", | ||
158 | "tags": [] | ||
159 | }, | ||
160 | { | ||
161 | "is_archived": 0, | ||
162 | "is_starred": 0, | ||
163 | "id": 541, | ||
164 | "title": "Visitons le Château de Landsberg !", | ||
165 | "url": "http://autour-du-mont-sainte-odile.overblog.com/2016/01/visitons-le-chateau-de-landsberg.html", | ||
166 | "content": "<p class=\"c1\">Situé au dessus de Heiligenstein et de Barr, à mi-hauteur de la montée vers plateau de la Bloss, le château de Landsberg est un but de promenade apprécié des randonneurs et des amateurs de vieilles pierres. Posé sur un éperon de granite, visible de loin, la forteresse médiévale domine fièrement la plaine d’Alsace.</p>\n<p class=\"c1\"><img alt=\"Visitons le Château de Landsberg !\" class=\"ob-cell ob-img ob-media c2\" src=\"http://img.over-blog-kiwi.com/0/28/39/78/20160128/ob_e68986_2.jpg\"/></p>\n<h3>Le château primitif</h3>\n<p class=\"c1\">Fin du onzième siècle, <strong><a href=\"http://autour-du-mont-sainte-odile.overblog.com/2014/01/l%E2%80%99assassinat-de-philippe-de-souabe.html\">Philippe de Souabe et Otton de Brunswick</a></strong> se disputent le trône impérial. Philippe, tenant des Hohenstaufen, veut conforter la puissance des couvents du <strong>Mont Sainte Odile.</strong> Il s’appuie sur un de ses représentants pour construire une nouvelle forteresse sur le Mont. <strong>Conrad de Vinhege</strong> érige le château de Landsberg dont sa famille prendra bientôt le nom. Nous sommes en 1197-1198. Le burg est construit sur les terres de l’<strong>abbaye de Niedermunster</strong>, le Couvent du Bas du Mont Sainte Odile. Un acte est signé de l’Abbesse <strong>Edelinde</strong>, il est daté du 23 juin 1200, il confirme la cession du terrain au chevalier Conrad.<br/>Nous avons publié le <a href=\"http://autour-du-mont-sainte-odile.overblog.com/2015/01/edelinde-et-le-chateau-de-landsberg.html\"><strong>texte de l’abbesse Edelinde</strong></a>, l’an passé. (cliquez sur le lien)<br/>Ce premier château n’avait pas l’importance des ruines que nous pouvons admirer aujourd’hui. Il ne comportait qu’un donjon et un corps de logis, complété par une basse-cour. Commençons la visite des ruines par cette partie. Le <strong>donjon</strong> est construit sur un carré de dix mètres de côté. Puissant, placé en diagonale par rapport au corps de logis, il formait bouclier pour défendre celui-ci du côté de la plaine, au nord-est. En levant la tête, le visiteur découvre l’accès : une porte haute, qui était accessible par un pont volant à partir de l’étage du logis seigneurial. Tout en haut du donjon, on distingue encore les corbeaux qui portaient les hourds. Les hourds, constructions de bois, ancêtres des mâchicoulis, permettaient aux défenseurs de surplomber les assaillants du château.<br/><img alt=\"Visitons le Château de Landsberg !\" class=\"ob-cell ob-img ob-media c3\" src=\"http://img.over-blog-kiwi.com/0/28/39/78/20160128/ob_d6d5c7_litho.jpg\"/>Le <strong>logis seigneurial</strong> comportait un rez-de-chaussée dédié à l’usage domestique : cuisines, citerne, salle des gardes. Ces pièces basses n’étaient éclairées que par quelques meurtrières. Le premier étage était l’habitation de Conrad et de ses successeurs : la façade nord-est est largement éclairée par quatre <strong>baies géminées</strong> en plein-cintre. Les fenêtres doubles sont séparées par de fines colonnes et surmontées d’élégants occuli. Au sud-est, deux doubles baies et un <strong>magnifique oriel</strong> agrémentent la façade. Situé sur le coté de la porte du château, cet élément de décor est le plus frappant du site du Landsberg, un genre d’échauguette semi-cylindrique, portée par un cul de lampe conique. Nous serions là dans la chapelle castrale du Landsberg. Coté extérieur, deux petites sculptures ornent la base de l’oriel : une fleur de lys et un petit personnage accroupi. A l’intérieur, une frise d’arceaux délimite les petites fenêtres du chœur de la chapelle. L’une d’elles a la forme d’une croix. Admirez la finesse des dessins du chapiteau de la colonne toujours en place au droite de l’oriel !<br/>Le château de Landsberg est situé à la limite géologique des grès, prédominants au nord, et des granites d’Andlau, côté sud. Les bases et les assises de la forteresse sont en granite, roche dure extraite du fossé creusé au nord, par les carriers du moyen âge. Les parties hautes sont en grès rose du Maennelstein, plus facile à travailler.</p>\n<h3 class=\"c4\">Le château neuf</h3>\n<p class=\"c1\">Ce premier château était, somme toute, de dimensions modestes. Quelques dizaines d’ années plus tard, preuve de l’importance des couvents du Mont Sainte Odile et signe de la puissance croissante de la famille de Landsberg, le site fut agrandi de façon conséquente. Nous sommes alors en 1240-1250.<br/>L’extension se fait au nord-ouest. Les deux tours rondes et l’imposante courtine délimitent l’emprise du Château Neuf. A l’origine, cette nouvelle enceinte était détachée du vieux burg, les deux sites ne furent rattachés que postérieurement. Les <strong>tours circulaires</strong> mesurent environ sept mètres de diamètre. Leur sommet portaient des créneaux. Un <strong>chemin de ronde</strong> surmontait la courtine : il était garni de hourds et traversait les deux tours. Archères et bretèches sont toutes orientées au nord, côté montagne, là où le risque d’attaque était le plus grand.<br/>Deux corps de logis se partageaient le site. Au sud, le bâtiment ne comportait qu’un seul étage, éclairé au sud-ouest par des fenêtres à banquettes, aujourd’hui murées. Le deuxième bâtiment, côté nord, fut construit plus tard. Composé de deux étages, il communiquait directement avec la tour nord.<br/>L’ensemble a connu plusieurs remaniements au cours des siècles.</p>\n<p class=\"c1\"><img alt=\"Visitons le Château de Landsberg !\" class=\"ob-cell ob-img ob-media c5\" src=\"http://img.over-blog-kiwi.com/0/28/39/78/20160128/ob_0861df_11.jpg\"/></p>\n<h3 class=\"c4\">Les extensions du XVème et du XVIème siècles</h3>\n<p class=\"c1\">L’apparition des <strong>armes à feu</strong> modifie l’art de la guerre. La géométrie des châteaux doit s’adapter aux armes nouvelles : résister aux boulets et accueillir couleuvrines et canons. Tous les châteaux des Vosges n’ont pas connu cette évolution, certains, trop solitaires, trop isolés, ont été abandonnés dés cette époque. Au Landsberg, les seigneurs ont respecté le vieux burg dans sa forme initiale, mais ils l’ont adapté tout d’abord en renforçant ses murs, puis en l’entourant de nouvelles murailles. Au nord, le château neuf se voit délaissé, ses nombreuses ouvertures extérieures sont murées, à part les archères, bien entendu. Ses courtines sont prolongées pour assurer la continuité avec celles du vieux burg. Un <strong>puissant bastion</strong> est construit au sud-est. Les armes nouvelles sont mises en place : couleuvrines, poivrière portant une canonnière protégée par des vastes vantaux. Ainsi, un vaste glacis s’étend devant la forteresse. C’est en faisant le tour du château dans les fossés que le promeneur se rendra le mieux compte de la force de la place et de son adaptation aux débuts de l’artillerie.<br/><img alt=\"Visitons le Château de Landsberg !\" class=\"ob-cell ob-img ob-media c6\" src=\"http://img.over-blog-kiwi.com/0/28/39/78/20160128/ob_57b020_plan-schematique.png\"/>Quelques temps, le château est passé des Landsberg au Comte Palatin, avant de revenir à la famille qui resta maître des lieux jusqu’à la Révolution.<br/>On ne trouve guère de textes relatant l’histoire du château de Landsberg dans les temps troublés que connut l’Alsace. Lors de la <strong>Guerre du Bundschuh</strong>, les paysans révoltés s’étaient installés dans la prévôté de Truttenhausen, toute proche. Cependant, rien ne dit que les Rustauds aient attaqué le château. Lors de la <strong>Guerre de Trente Ans</strong>, il semble que les troupes de Mansfeld, puis les Suédois se soient plutôt attaqués aux riches villes de la plaine, comme Obernai, oubliant les forteresses de montagne, déjà devenues inutiles. Cependant, le château est décrit comme ruiné au milieu du XVIIème siècle.<br/>Depuis longtemps, les Landsberg avaient délaissé le burg de leurs ancêtres pour lui préférer leur <strong>résidence de Niedernai</strong>, située en plaine. Le château fut confié à des gardes, puis servit de ferme. Aujourd’hui, les ruines du Landsberg sont une propriété privée. Merci à vous de respecter le site.</p>\n<p class=\"c1\">Dans la basse cour du château fleurit au printemps, l’<strong>éranthe d’hiver</strong>. Sa floraison ne dure que quelques jours. Cette petite fleur jaune est rare sous nos climats. De son nom latin ‘Eranthis hyemalis’, l’éranthe est originaire d’Italie ou de Turquie. La légende nous dit qu’elle aurait été rapportée des croisades par un sire de Landsberg. Elle serait un remède à la mélancolie.</p>\n<h3 class=\"c4\">Promenade et accès au château de Landsberg<img alt=\"Visitons le Château de Landsberg !\" class=\"ob-cell ob-img ob-media c7\" src=\"http://img.over-blog-kiwi.com/0/28/39/78/20160128/ob_902c3e_org.jpg\"/></h3>\n<p class=\"c1\">Les automobilistes pourront garer leur véhicule sur le petit parking situé à l’ouest d’Heiligenstein. Ils gagneront Truttenhausen sur la petite route à travers prés. Un sentier du Club Vosgien ( disque bleu ) monte vers les ruines.<br/>Les marcheurs préfèreront effectuer une boucle à partir de Saint-Jacques, par exemple. Saint-Jacques, Kapellenhausfelsen, Ameisenberg, Landsberg ( balisage : triangle bleu ) avec un retour sur Saint-Jacques par le sentier sans dénivelé ( rectangle : bicolore rouge et blanc).<br/>A moins qu’ils ne préfèrent rechercher les pierres sculptées du <a href=\"http://autour-du-mont-sainte-odile.overblog.com/des-chameaux-en-alsace\"><strong>Chemin des Chameaux</strong></a>. (cliquez sur le lien ), ou découvrir la <a href=\"http://autour-du-mont-sainte-odile.overblog.com/2015/07/la-chapelle-de-frere-leon-pres-de-barr.html\"><strong>Chapelle du Frère Léon</strong></a> dans la vallée de la Kirneck.</p>\n<h3 class=\"c4\">Illustrations</h3>\n<ul><li class=\"c8\">Photographies du château de Landsberg ( BrR, FrP et PiP)</li>\n<li class=\"c8\">Schéma des ruines ( PiP)</li>\n<li class=\"c8\">L’Orgueil, Herrade de landsberg, Hortus Deliciarum</li>\n<li class=\"c8\">Les Ruines du Landsberg, aquarelle de Osterwald, 1873</li>\n</ul>\n", | ||
167 | "annotations": [], | ||
168 | "mimetype": "text/html", | ||
169 | "language": "fr", | ||
170 | "reading_time": 7, | ||
171 | "domain_name": "autour-du-mont-sainte-odile.overblog.com", | ||
172 | "preview_picture": "http://img.over-blog-kiwi.com/0/28/39/78/20160128/ob_68f59d_12.jpg", | ||
173 | "tags": [] | ||
174 | }, | ||
175 | { | ||
176 | "is_archived": 1, | ||
177 | "is_starred": 0, | ||
178 | "id": 454, | ||
179 | "title": "Contrer les stéréotypes par les livres : “C'est dès l'enfance qu'ils se construisent”", | ||
180 | "url": "https://www.actualitte.com/article/monde-edition/contrer-les-stereotypes-par-les-livres-c-est-des-l-enfance-qu-ils-se-construisent/64058", | ||
181 | "content": "<br/><h2><strong>Même dans l'espace jeunesse d'un immense salon littéraire, difficile de passer à côté du livre de coloriage féministe — et fier de l'être — de la maison d'édition Goater. Cette structure atypique, adossée à un bar de Rennes, Le Papier-Timbré, propose des titres tout aussi uniques, de ces livres que l'on devine importants avant même de les ouvrir. </strong></h2>\n\n<p class=\"c3\"><img alt=\"Livre Paris 2016\" src=\"https://farm2.staticflickr.com/1650/25284788384_ea234db7b9_z.jpg\" class=\"c2\"/></p>\n<p class=\"c3\">Judikael et Jean-Marie Goater (ActuaLitté, CC BY SA 2.0)</p>\n\n\n<p class=\"p1\">Le Papier-Timbré et les éditions Goater avancent main dans la main, dans une même structure, depuis 2009. En plus de la licence IV, permis de publier : « <em>On est très occupé par les soirées étudiantes et festives, mais on développe en plus des projets autour des livres qui, parfois, émergent d'ailleurs avec la clientèle. C'est surtout un motif supplémentaire pour se retrouver et partager des moments de convivialité, partager des goûts, des envies, de la littérature, des essais et de la jeunesse</em> », explique Jean-Marie Goater.</p>\n<p class=\"p1\"> </p>\n<p class=\"p1\">En plus de la production maison, le café-librairie propose celle de maisons soeurs : les éditions de juillet, L'Oeuf, les Éditions Pontcerq, essentiellement des petits éditeurs de Rennes et de la Bretagne. La maison est diffusée et distribuée en Bretagne par Coop Breizh, diffusé par Hobo Diffusion, distribué par Makassar pour la France (comme <a href=\"https://www.actualitte.com/article/monde-edition/avec-les-editions-prairial-le-surrealisme-nrv-est-de-retour/64055\">les éditions surréalistes Prairial</a>). Les tirages vont de 500 exemplaires à 3000 sauf exceptions et coéditions comme <em>Détachez vos ceintures</em>, projet collectif des éditions du Kyste contre l'aéroport de Notre-Dame-des-Landes, ou <em>Galette-saucisse, je t’aime !</em> de Benjamin Keltz, avec les Éditions du coin de la rue.</p>\n<p class=\"p1\"> </p>\n<p class=\"p1\"><em>Mon premier cahier de coloriage féministe !</em> sera en librairie d'ici quelques jours, et la maison Goater y croit dur comme fer : « <em>Nous avons commencé par traduire et adapter</em> C'est quoi ton genre ?<em>, un livre écrit par Jacinta Bunnell et publié par l'éditeur anarchiste américain PM Press</em> », explique Jean-Marie Goater. Dans les pages du livre, on croise des monstres qui aiment les petits sacs à main et les chaussures, des princesses qui ne suivent pas vraiment le dress code, ou des enfants en fauteuil roulant, encore rares dans les livres jeunesse.</p>\n<p class=\"p1\"> </p>\n<p class=\"p1 c3\"><img alt=\"Livre Paris 2016\" src=\"https://farm2.staticflickr.com/1628/25822534701_142d157b15_z.jpg\" class=\"c2\"/></p>\n<p class=\"p1 c3\">(ActuaLitté, CC BY SA 2.0)</p>\n<p class=\"p1 c3\"> </p>\n<p class=\"p1\"> </p>\n<p class=\"p1\">Après cette publication, la maison a souhaité développer un projet en France, en réunissant 16 dessinatrices dont 4 dessinateurs pour leur proposer d'expliquer le féminisme aux enfants, à travers un dessin. « <em>Le livre aborde la vie à l'école, les habillements, les métiers, le sport, mais aussi les quelques femmes féministes importantes de l'histoire... Ça reste ludique et sans prétention encyclopédique sur le féminisme, mais il est plus simple d'aborder le sujet avec un support comme celui-ci à la maison, à l'école ou au centre de loisirs.</em> » Comme le précédent, l'ouvrage présente d'une nouvelle manière les situations traditionnelles des livres de coloriage ou jeunesse.</p>\n<p class=\"p1\"> </p>\n<h3 class=\"p1\"><strong>Des ressources rares, des besoins importants</strong></h3>\n<p class=\"p1\"> </p>\n<p class=\"p1\">Pas la peine d'insister pour que Jean-Marie Goater partage son avis : « <em>La production majoritaire est quand même très caricaturale et stéréotypée, cependant on remarque depuis quelques années des éditeurs intéressants qui essaient de bousculer un peu ces stéréotypes comme La Ville Brûle, ou encore l'édition LGBT qui commence à arriver avec Des ailes sur un tracteur qui a publié un cahier de coloriage avec Sophie Labelle, plutôt sur les questions trans.</em> »</p>\n<p class=\"p1\"> </p>\n<p class=\"p1\">Contrairement à ce que les détracteurs des livres jeunesse atypiques prétendent (<a href=\"https://www.actualitte.com/recherche?q=tous+a+poil+cope\">coucou, Jean-François Copé</a>), lutter contre les stéréotypes n'a rien d'une guerre de civilisation ou autre affabulation du genre. Il s'agit simplement de montrer que chacun doit être fier de ce qu'il est, respecter ce que l'autre est, et ne pas chercher l'assentiment des uns ou des autres. « <em>Fuck the world</em> », comme dirait 2Pac... « <em>Se poser ces questions est indispensable, il faut qu'il y ait ce débat : les enfants ne sont pas si naïfs que ça, ils ont besoin de se poser ce genre de questions.</em> »</p>\n<p class=\"p1\"> </p>\n<p class=\"p1 c3\"><img alt=\"Livre Paris 2016\" src=\"https://farm2.staticflickr.com/1554/25284764604_1d8b3e9a0a_z.jpg\" class=\"c2\"/></p>\n<p class=\"p1 c3\">(ActuaLitté, CC BY SA 2.0)</p>\n<p class=\"p1\"> </p>\n<p class=\"p1\"> </p>\n<p class=\"p1\">Judikael, venu aider son père, acquiesce : il a répondu à l'appel à dessins et proposé une activité dans le cahier de coloriage féministe. « <em>Ce genre de ressources pour enfant est important, parce que c'est dès l'enfance que se construisent certains préjugés, certains stéréotypes qui restent ensuite. Quand on voit que 90 % des personnes présentes dans les manuels scolaires sont des hommes par exemple, ce genre d'ouvrages permet à certaines personnes de se reconnaître davantage dans certains rôles, qu'on ne leur attribue pas forcément de base.</em> »</p>\n<p class=\"p1\"> </p>\n<p class=\"p1\">Là est la lutte, résumée par Judikael : « <em>On parle souvent de</em> “déconstruire” <em>dans le féminisme, les préjugés ou autre, ces livres peuvent permettre d'éviter de les construire.</em> » En Terminale L, Judikael confirme que les préjugés sont toujours présents, forcément surtout en sport ou vis-à-vis de « <em>la filière homme</em> » (comprendre, la filière scientifique) et de « <em>la filière femme </em>» (comprendre, la filière littéraire). Si l'histoire du féminisme est désormais abordée en classe, certains sujets restent touchy : le journal du lycée s'est vu censurer un article sur la culture du viol, et la ségrégation hommes-femmes, « <em>au prétexte que c'était trop hard, que les lycéens n'allaient pas comprendre </em>»...</p>\n<p class=\"p1\"> </p>\n<h3 class=\"p1\"><strong>« <em>L'édition, c'est un milieu qui est quand même très hypocrite</em> »</strong></h3>\n<p class=\"p1\"> </p>\n<p class=\"p1\">À votre avis, comment réagit l'éditeur de <em>Mon premier cahier de coloriage féministe</em> lorsqu'on lui parle des différences entre les salaires <a href=\"https://www.actualitte.com/article/monde-edition/l-inegalite-entre-hommes-et-femmes-persiste-dans-le-monde-du-livre/63891\">des hommes et des femmes dans l'édition</a>, ou dans les aides attribuées par le CNL ? Sans langue de bois : « <em>C'est pas trop surprenant malheureusement, parce que c'est à l'image des autres professions. En tant que bar-maison d'édition, de toute façon, je ne rentre pas dans la case du CNL, je me tourne plutôt vers la région</em> », explique Jean-Marie Goater.</p>\n<p class=\"p1\"> </p>\n<p class=\"p1\">Haut les coeurs : « <em>C'est pas grave, je m'en passe très bien. L'édition, c'est un milieu qui a quand même une grande dimension d'hypocrisie sur pas mal d'aspects, on le voit sur certaines pratiques... Il y a des cons dans ce métier-là comme dans d'autres métiers, mais je pense que ce serait bien de faire le ménage, comme à Angoulême, c'est quand même criant. Dans certains secteurs du livre, la majorité des lecteurs sont des lectrices, très clairement, ce serait quand même la moindre des choses qu'il n'y ait pas des inégalités de ce type qui existent dans le monde de l'édition.</em> »</p>\n<p class=\"p1\"> </p>\n<p class=\"p1 c3\"><img alt=\"Livre Paris 2016\" src=\"https://farm2.staticflickr.com/1672/25796714772_315ae8c648_z.jpg\" class=\"c2\"/></p>\n<p class=\"p1 c3\">Un album jeunesse bilingue français-langue des signes (ActuaLitté, CC BY SA 2.0)</p>\n<p class=\"p1\"> </p>\n<p class=\"p1\"> </p>\n<p class=\"p1\">Même sans aide du CNL, les éditions Goater produisent de quoi lire : <em>Les Joyeux Punks</em>, un album à compter, mais aussi une collection d'albums bilingues français-langue des signes, des livres en breton, dont une traduction du <em>Persepolis</em> de Marjane Satrapi. Pour les amateurs de polar, Goater noir, une collection de 14 titres qui a notamment fait revivre <em>Le Soviet</em>, la série culte des années 89-90 d'abord publiée chez Fleuve Noir et Série Noire. Pour les amateurs des écrits du Colonel Durruti, un inédit est prévu pour le mois d'octobre prochain.</p>\n<p class=\"p1\"> </p>\n<p class=\"p1\">Perdez-vous sans hésiter dans le catalogue de la maison, qui propose aussi de la littérature blanche \"classique\", des essais sur l'écologie et le convivialisme ou la convivialité, l'écologie sociale, et l'Histoire, surtout XXe.</p>\n\n<br/>", | ||
182 | "annotations": [], | ||
183 | "mimetype": "text/html", | ||
184 | "language": "en", | ||
185 | "reading_time": 6, | ||
186 | "domain_name": "www.actualitte.com", | ||
187 | "preview_picture": "//cdn.actualitte.com/images/facebook/25284788384-ea234db7b9-z-56eeff88c23a0.jpg", | ||
188 | "tags": [] | ||
189 | }, | ||
190 | { | ||
191 | "is_archived": 1, | ||
192 | "is_starred": 0, | ||
193 | "id": 99, | ||
194 | "title": "[ROM][6.0.1][Layers][N5] TipsyOS official builds {UBER TCs}", | ||
195 | "url": "http://forum.xda-developers.com/google-nexus-5/development/rom-tipsyos-official-builds-uber-tcs-t3325989", | ||
196 | "content": "<div class=\"post-text post-first-post\" id=\"post_message_65589573\" readability=\"82\">\n<div class=\"c16\" readability=\"51\"><img src=\"http://imagizer.imageshack.us/v2/640x480q90/673/zEwXs9.png\" border=\"0\" alt=\"\" title=\"\"/><p><span>*Welcome to Tipsy OS*</span></p>\n<div class=\"c16\"><img src=\"http://imagizer.imageshack.us/v2/1024x768q90/922/uy7Jf6.png\" border=\"0\" alt=\"\" title=\"\"/></div>\n<br/><span>This is something Martin Coulon (@martinusbe) started in his 'free' time when waiting for GZR Validus or Tesla builds and having some drinks.<br/>He just started with a slim base; on lp and early mm, and now using <a href=\"https://github.com/AOSPB\" target=\"_blank\" rel=\"nofollow\"><strong class=\"c17\"><span>AOSPB</span></strong></a> as a base (wich Martin is also a part of)....then added what we thought useful.<br/>It grew up to be a fully functional Rom<br/>The main goal is to keep it AOSPB/Slim based and will not add any cm features unless AOSPB/Slim does.<br/></span>\n<p>TipsyOS is Black and Yellow default themed, we don't like white UI, so it may look a bit weird on light switch,<br/>but heh! use layers to suit it your needs =)</p>\n<p>We are a team wich is constantly learning and ...drinking because both gets along so well hahaha <img src=\"http://forum.xda-cdn.com/images/smilies/laugh.gif\" border=\"0\" alt=\"\" title=\"Laugh\" class=\"inlineimg\"/></p>\n<p>Just report the bugs and request features, we'll see what we can do!.......</p>\n<p><strong>And don't get it twisted</strong>, its not because we're Tipsy that this project is not a serious one, try it and feel speed and stability <img src=\"http://forum.xda-cdn.com/images/smilies/tongue.gif\" border=\"0\" alt=\"\" title=\"Stick Out Tongue\" class=\"inlineimg\"/></p>\n<p>My builds are compiled with UBER toolchains 4.9 on both rom and kernel code.<br/>We can go over with 5.2/3, 6 ...but to be really honest, 4.9 is the most battery friendly in my opinion, and is still super smooth and snappy!</p>\n<p>Im using a cm device tree base a bit modified...<br/>This rom includes a custom kernel, cm was my base, and i have decided to go a bit wild and cherry-picked up <em>some</em> stuff from:<br/>Francisco Franco, Chet Kener, Faux123, Flar2, Hellsgod and some others<br/>So a <strong class=\"c17\">huge thanks</strong> for them and their AWESOME open sources work!<br/>I will continue to work on this kernel because its fun <img src=\"http://forum.xda-cdn.com/images/smilies/laugh.gif\" border=\"0\" alt=\"\" title=\"Laugh\" class=\"inlineimg\"/></p>\n<div class=\"c16\" readability=\"8\"><img src=\"http://imagizer.imageshack.us/v2/1024x768q90/923/nPeHiF.png\" border=\"0\" alt=\"\" title=\"\"/><p><strong><em><span>For cool wallpapers, test builds, requests; join us on our community!</span></em></strong></p>\n</div>\n<strong class=\"c17\"><span><a href=\"https://plus.google.com/u/0/communities/114022867167626892613\" target=\"_blank\" rel=\"nofollow\"><span>Google+ Community</span></a></span></strong>\n<div class=\"c16\"><strong class=\"c17\"><span>Features:</span></strong>\n<div class=\"c20\">\n<p>Code:</p>\n<pre class=\"alt2 c19\" dir=\"ltr\">\nWe slowly adding only what we need, we don't want a 1236544547 features rom...\n\"The Tavern\":\nPower menu customisations\nToasts/ListView/System animations\nBattery bar\nLCD Density\nGesture Anywhere\nExpanded Desktop\nStatus bar customisations\nAosp Recents and OmniSwitch \nBuilt in:\nDashboard (settings) columns selector\nDashboard lines remover\nSlim Navbar customisation\nVolume steps\nNotification led changer\nHeadsUp switch\nKernel Adiutor app\nLayers manager app\nLayers backup/restore app\nAdaway\nNova launcher\nViper4Android\nES Manager\nSnapCam\nChangelog generator in about phone menu....\nand prolly some other stuff that i can't remember but heh,\n just flash dat sh#t to figure out by yourself =)\n</pre></div>\n</div>\n<p><span><br/><span class=\"c12\">Installation Instructions</span><br/></span></p>\n<p><span>1. Make sure you have a working recovery and a nandroid backup</span></p>\n<p><span>2. Download the ROM.</span></p>\n<p><span>3. Reboot to recovery.</span></p>\n<p><span>4.Wipe everything! system/data/cache partitions (except internal storage indeed!)</span></p>\n<p><span>7. Flash the ROM.</span></p>\n<p><span><em>Optional- Flash 6.x GApps.</em></span></p>\n<p><span>8. Reboot and feel Tipsy!</span></p>\n<p><strong class=\"c17\"><span>Download:</span></strong></p>\n<p><span><a href=\"https://www.androidfilehost.com/?w=files&flid=48392\" target=\"_blank\" rel=\"nofollow\"><strong class=\"c17\"><span>Tipsy HammerHead downloads folder</span></strong></a></span></p>\n<p><span>STAY TIPSY <img src=\"http://forum.xda-cdn.com/images/smilies/wink.gif\" border=\"0\" alt=\"\" title=\"Wink\" class=\"inlineimg\"/><img src=\"http://forum.xda-cdn.com/images/smilies/laugh.gif\" border=\"0\" alt=\"\" title=\"Laugh\" class=\"inlineimg\"/></span><br/><img src=\"http://imageshack.com/a/img924/6871/q1zjrl.gif\" border=\"0\" alt=\"\" title=\"\"/></p>\n<p><span><strong>TipsyOs, a ROM for Nexus 5 aka Hammerhead</strong></span></p>\n</div>\n<br/><strong class=\"c17\"><span>Kernel features:</span></strong><br/>Kexec patch for multirom support, intelliplug, hellsactive governor, extra io schedulers, intellithermal v2, etc etc and growing, just check commits on history on the link below\n<p><strong class=\"c17\"><span>Known bugs:</span></strong><br/>quick tiles may be a bit messy while re arranging them....<br/>u tell me then.</p>\n<p><span>don't even think to report a bug with:</span><br/>a dirty flashed rom,<br/>xposed frameworks installed,<br/>all of your apps installed, if u have a bug, clean flash the build, (flash the gapps if needed) and reproduce your bug without any data restore.<br/>BRING BACK LOGCAT or u will be simply ignored....</p>\n<p><strong class=\"c17\">Contributors</strong><br/><a href=\"http://forum.xda-developers.com/member.php?u=4139665\" target=\"_blank\">martinusbe</a><br/>@<a href=\"http://forum.xda-developers.com/member.php?u=5265704\" target=\"_blank\">Alx31</a><br/><strong>ROM OS Version:</strong> 6.0.1 Marshmallow<br/><strong>ROM Kernel:</strong> Linux 3.4.x<br/><strong>Based On:</strong> AOSPB</p>\n<p><strong class=\"c17\">Version Information</strong><br/><strong>Status:</strong> Stable<br/><strong>Created</strong> 2016_29_02</p>\n<p><strong class=\"c17\">Credits:</strong><br/>AOSPB/Slim team for an amazing base, Google, CyanogenMod for device trees and some other repos, Dirty Unicorns/CrDroid/AICP and other roms with their open sources i may have forgotten...</p>\n<p><strong class=\"c17\">Rom code:</strong> <a class=\"c21\" href=\"https://github.com/TipsyOs\" target=\"_blank\" rel=\"nofollow\">https://github.com/TipsyOs</a><br/><strong class=\"c17\">Device:</strong> <a class=\"c21\" href=\"https://github.com/TipsyOs-Devices/device_lge_hammerhead/commits/6.0\" target=\"_blank\" rel=\"nofollow\">Hammerhead commits history</a><br/><strong class=\"c17\">Kernel code:</strong> <a class=\"c21\" href=\"https://github.com/TipsyOs-Devices/kernel_lge_hammerhead/commits/6.0\" target=\"_blank\" rel=\"nofollow\">Kernel commits history</a><br/><strong class=\"c17\">My github:</strong> <a class=\"c21\" href=\"https://github.com/Alx31\" target=\"_blank\" rel=\"nofollow\">https://github.com/Alx31</a></p>\n<p><img src=\"http://imagizer.imageshack.us/v2/640x480q90/901/JGwVTy.png\" border=\"0\" alt=\"\" title=\"\"/></p>\n</div><p>Last edited by Alx31; 29th February 2016 at 10:48 PM.</p>", | ||
197 | "annotations": [], | ||
198 | "mimetype": "text/html", | ||
199 | "language": "en", | ||
200 | "reading_time": 3, | ||
201 | "domain_name": "forum.xda-developers.com", | ||
202 | "preview_picture": "http://cdn3.xda-developers.com/images/xda-facebook-default.jpg", | ||
203 | "tags": [] | ||
204 | }, | ||
205 | { | ||
206 | "is_archived": 0, | ||
207 | "is_starred": 0, | ||
208 | "id": 98, | ||
209 | "title": "Top 15 Podcasts All Web Developers Should Follow - Envato Tuts+ Code Article", | ||
210 | "url": "http://code.tutsplus.com/articles/top-15-podcasts-all-web-developers-should-follow--net-14461", | ||
211 | "content": "<p>As web developers, we’re always trying to get better at what we do. One of the best ways to do that is to listen to what other developers have to share. And even if you’re not learning, it’s still fun to hear what other devs are talking about. Today, I’ll share 15 podcasts that you should definitely check out.</p>\n<hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/yahootheater.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/yahootheater.png\"/></div>\n<p>It seems that as often as a few times a month, Yahoo! brings in developers on the cutting edge of web technology to keep their employees up to date. For the benefit of the rest of us, these talks are recorded and published. You’ll find well-known devs like Douglas Crockford and NNicolas Zakas, and talks on everything from performance and accessibility to JavaScript and the DOM.</p>\n<ul><li><a href=\"http://itunes.apple.com/us/podcast/yui-theater/id263846173\">iTunes Feed</a></li>\n<li><a href=\"http://feeds.yuiblog.com/yuiblog/yui-theater\">RSS Feed</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/devshow.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/devshow.png\"/></div>\n<p>This may be my favourite show from this list. The Dev Show, hosted weekly by Dan Benjamin and Jason Seifer, will give you a carefully curated set of development-related links (usually with a web dev slant) to enjoy. As an added bonus, you can <a href=\"http://live.5by5.tv\">watch the show live</a> on Tuesdays at 1pm EST.</p>\n<ul><li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=352611845\">iTunes Feed (Audio)</a></li>\n<li><a href=\"http://feeds.feedburner.com/thedevshow\">RSS Feed (Audio)</a></li>\n<li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=374004076\">iTunes Feed (Video)</a></li>\n<li><a href=\"http://feeds.feedburner.com/devshowvideo\">RSS Feed (Video)</a></li>\n<li><a href=\"http://twitter.com/devshow\">Twitter</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/changelog.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/changelog.png\"/></div>\n<p>The tagline for the Changelog says it all: “Open Source moves fast. Keep up.” This podcast, and the accompanying blog, is all about keeping you updated with the latest in Open Source Technology. It’s hosted by Adam Stacoviak and Wynn Netherland, and seems to be the official Github podcast.</p>\n<ul><li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=341623264&subMediaType=Audio\">iTunes Feed</a></li>\n<li><a href=\"http://feeds.feedburner.com/thechangelog\">RSS Feed</a></li>\n<li><a href=\"http://twitter.com/changelogshow\">Twitter</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/jquerypodcast.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/jquerypodcast.png\"/></div>\n<p>If you’re familiar with jQuery (and you probably are), you know there’s a podcast to go with it. Each week, hosts Ralph Whitbeck and Rey Bango bring you the latest in jQuery news, as well as great interviews with important people in the jQuery community. You can listen in to the jQuery wisdom of people like Remy Sharp, Yehuda Katz, Cody Lindley, and our own Jeffrey Way, among so many others.</p>\n<ul><li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=339835419\">iTunes Feed</a></li>\n<li><a href=\"http://feeds.feedburner.com/jQueryPodcastShowNotes\">RSS Feed</a></li>\n<li><a href=\"http://www.twitter.com/jquerypodcast\">Twitter</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/sitepoint.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/sitepoint.png\"/></div>\n<p>Sitepoint is a great resource for anyone interesting in technology, design, and even business. Books, courses, forums, blogs, articles, they’ve got it all. Of course, there’s a podcast too: check it out to find out what’s going on in the web industry.</p>\n<ul><li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=296180681&s=143441\">iTunes Feed</a></li>\n<li><a href=\"http://www.sitepoint.com/blogs/?feed=podcast\">RSS Feed</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/webpulp.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/webpulp.png\"/></div>\n<p>According to the site, WebPulp is “a podcast about technology that powers the web.” In each podcast, host Josh Owens interviews someone from behind the scenes of a well-known webapp; you’ll find out what hardware and software it takes to run apps like the 37signals apps, or GitHub.</p>\n<ul><li><a href=\"http://itunes.apple.com/us/podcast/webpulp-tv/id371328694\">iTunes Feed</a></li>\n<li><a href=\"http://webpulp.tv/rss\">RSS Feed</a></li>\n<li><a href=\"http://twitter.com/webpulptv\">Twitter</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/wordpresspodcast.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/wordpresspodcast.png\"/></div>\n<p>It’s pretty apparent that both Nettuts+ readers and writers are big fans of WordPress. If you can’t get enough WordPress goodness, you’ll probably want to sign up for the WordPress Podcast, “a weekly podcast with news, interviews and plugin tips.” There’s a bonus here: one of the most recent interviewees was none other than Collis Ta’eed, CEO of Envato.</p>\n<ul><li><a href=\"http://itunes.apple.com/us/podcast/wordpress-community-podcast/id164651619\">iTunes Feed</a></li>\n<li><a href=\"http://wp-community.org/feed/\">RSS Feed</a></li>\n<li><a href=\"http://twitter.com/wppodcast\">Twitter</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/eepodcast.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/eepodcast.png\"/></div>\n<p>If you’re a user of Ellis Lab’s Expression Engine, you’ll enjoy the EE Podcast (Ellis Lab is the company behind CodeIgniter; in fact, EE is build completely on CI). Each week, Ryan Irelan and Lea Alcantara will fill in you on a certain aspect of of EE deveopment.</p>\n<ul><li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=334063423\">iTunes Feed</a></li>\n<li><a href=\"http://feeds.feedburner.com/eepodcast\">RSS Feed</a></li>\n<li><a href=\"http://twitter.com/eepodcast\">Twitter</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/csstricks.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/csstricks.png\"/></div>\n<p>If you’re a web developer, you’re probably pretty familiar with Chris Coyier’s website <a href=\"http://www.css-tricks.com\">CSS Tricks</a>. Besides his excellent articles, Chris occasionally puts out a screencast every few weeks. With his relaxed style, you’ll learn about a random—but always practical—part of web development in each episode.</p>\n<ul><li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=273881728\">iTunes Feed</a></li>\n<li><a href=\"http://feeds.feedburner.com/CSS-Tricks-Screencasts\">RSS Feed</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/bigwebshow.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/bigwebshow.png\"/></div>\n<p>Hosted by Jeffrey Zeldman and Dan Benjamin, the Big Web Show “features special guests and topics like web publishing, art direction, content strategy, typography, web technology, and more. It’s everything web that matters.” You’ll listen to interviews in which famous web personalities like Eric Meyer, Jason Fried, Nicole Sullivan, Ethan Marcotte, and other professionals you should know open their minds and let you learn from the best. You can <a href=\"http://5by5.tv/bigwebshow\">catch this show live</a> on Thursdays a 1PM EST. Just like the Dev Show and the EE Podcast, the Big Web Show is part of Dan Benjamin’s incredible <a href=\"http://5by5.tv\">5by5 podcast network</a>.</p>\n<ul><li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=370445683\">iTunes Feed (Audio)</a></li>\n<li><a href=\"http://feeds.feedburner.com/bigwebshow\">RSS Feed (Audio)</a></li>\n<li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=374004085\">iTunes Feed (Video)</a></li>\n<li><a href=\"http://feeds.feedburner.com/bigwebshowvideo\">RSS Feed (Video)</a></li>\n<li><a href=\"http://twitter.com/bigwebshow\">Twitter</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/thinkvitamin.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/thinkvitamin.png\"/></div>\n<p>You may be familiar with Carsonified, the company behind many web dev / design training initiatives (including the Future of Web Design and Future of Web Apps confernces). On Think Vitamin, Carsonified’s “blog about the web”, you can catch Think Vitamin Radio, “a bi-weekly chat about web design, development, and entrepreneurship.”</p>\n<ul><li><a href=\"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=351340191\">iTunes Feed</a></li>\n<li><a href=\"http://feeds.feedburner.com/thinkvitaminradio\">RSS Feed</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/userability.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/userability.png\"/></div>\n<p>User Interface Engineering “is a leading research, training, and consulting firm specializing in web site and product usability.” You can take advantage of some of the free usability training they offer in their podcast, the Userability Podcast.</p>\n<ul><li><a href=\"http://itunes.apple.com/podcast/uie-brain-sparks/id119728465\">iTunes Feed</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/jqueryfordesigners.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/jqueryfordesigners.png\"/></div>\n<p>This is a great resource for any beginner (and even intermediate) jQuery developers. In each episode, Remy Sharp will explain how to create an popular web effect using jQuery. You’ll learn how to build pop-up bubbles, sliding headers, and simple tabs.</p>\n<ul><li><a href=\"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=281057468\">iTunes Feed</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/nettuts.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/nettuts.png\"/></div>\n<p>Of course, Nettuts+ publishes screencasts, too! For your convenience, you can get these in an iTunes feed, or subscribe to them on YouTube.</p>\n<ul><li><a href=\"http://itunes.apple.com/podcast/nettuts/id291173544?i=60856588\">iTunes Feed</a></li>\n<li><a href=\"http://www.youtube.com/user/nettutsplus\">Youtube Profile</a></li>\n</ul><hr/>\n<div class=\"tutorial_image\"><img src=\"https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/huffduffer.png\" data-original-url=\"http://nettuts.s3.amazonaws.com/793_podcasts/huffduffer.png\"/></div>\n<p>HuffDuffer is a site created by Jeremy Keith; it allows you to easily create your own podcasts. From the tag cloud above, you can see that a lot of the content being collected is related to web development. Check it out!</p>\n<hr/>\n<p>I’m sure most developers listen to the occasional podcast. Have I missed your favourite podcast? Let us all know in the comments!</p>\n", | ||
212 | "annotations": [], | ||
213 | "mimetype": "text/html", | ||
214 | "reading_time": 4, | ||
215 | "domain_name": "code.tutsplus.com", | ||
216 | "preview_picture": "https://cdn.tutsplus.com/net/uploads/legacy/793_podcasts/preview.jpg", | ||
217 | "tags": [] | ||
218 | }, | ||
219 | { | ||
220 | "is_archived": 1, | ||
221 | "is_starred": 0, | ||
222 | "id": 97, | ||
223 | "title": "University of Mississippi", | ||
224 | "url": "http://olemiss.edu", | ||
225 | "content": "<header readability=\"1\">\n<section class=\"hero\">\n</section></header><div class=\"pushdown\">\n<div id=\"academics-push\" class=\"push main c2\" readability=\"21\">\n<hr/><h4>UNIVERSITY OF MISSISSIPPI SCHOOLS AND COLLEGES</h4>\n<hr/><p>The Schools of Nursing and Pharmacy operate on both the Oxford and Jackson campuses. The Schools of Dentistry, Health Related Professionals and Medicine, and the Health Sciences Graduate School, are based in Jackson only. (Additional healthcare programs are available through the School of Applied Sciences on the Oxford campus.) Other than these exceptions, the schools above are on the Oxford campus.</p>\n</div>\n</div>\n<section id=\"herophoto\" readability=\"3\"><p><a href=\"http://www.olemiss.edu/emergency/\"><strong>Public Service Announcement</strong>: UM Health Center Seeing Increase in Flu Cases MORE INFO</a></p>\n<div class=\"flexslider page\">\n<ul class=\"slides\"><li class=\"quad3\">\n<figure><img alt=\"\" src=\"http://olemiss.edu/www.olemiss.edu/_images/hero2/2016-03-02_20_23_23CTG_0268-AC.jpg\"/><figcaption readability=\"2\"><h5>Hotty Toddy</h5>\n<p>Martavious Newby celebrates with fans after Ole Miss' 86-78 win over Mississippi State.</p>\n</figcaption></figure></li>\n<li class=\"quad3\">\n<figure><img alt=\"\" src=\"http://olemiss.edu/www.olemiss.edu/_images/hero2/2016-03-02_20_23_23CTG_0268-AB.jpg\"/><figcaption readability=\"6\"><h5>Moody's Amazing Night</h5>\n<p>Stefan Moody celebrates at the end of Ole Miss' 86-78 win over Mississippi State. Moody finished his final game at The Pavilion on Senior Night with a career-high 43 points.</p>\n</figcaption></figure></li>\n<li class=\"quad2\">\n<figure><img alt=\"\" src=\"http://olemiss.edu/www.olemiss.edu/_images/hero2/2016-03-01_16_29_53CTG_0266-D.jpg\"/><figcaption readability=\"4\"><h5>Career Expo</h5>\n<p>Students talk to prospective employers during an all-majors career fair held at The Inn at Ole Miss.</p>\n</figcaption></figure></li>\n<li class=\"quad2\">\n<figure><img alt=\"\" src=\"http://olemiss.edu/www.olemiss.edu/_images/hero2/2016-03-01_15_50_57SKB_2725-AAweb.jpg\"/><figcaption readability=\"8\"><h5>Choir Rehearsal</h5>\n<p>Members of the University of Mississippi Concert Singers prepare for a performance at the American Choral Directors Association convention March 10 in Chattanooga, Tenn.</p>\n</figcaption></figure></li>\n<li class=\"quad3\">\n<figure><img alt=\"\" src=\"http://olemiss.edu/www.olemiss.edu/_images/hero2/2016-02-29_15_05_23Dental-White-Coat-2016_13web.jpg\"/><figcaption readability=\"6\"><h5>Dentist's Pledge</h5>\n<p>Kendra Clark (right) and other students in the UMMC School of Dentistry Class of 2018 recite the Dentist's Pledge at the American College of Dentists White Coat Ceremony held Feb. 26 in Jackson.</p>\n</figcaption></figure></li>\n</ul><div class=\"weather\">\n<p>45°</p>\n<p>Oxford, MS</p>\n</div>\n</div>\n</section>\n<div id=\"newsannouncements\" readability=\"31\">\n<section id=\"news\"><a href=\"http://news.olemiss.edu\" class=\"link2all\">ALL NEWS</a>\n<h2>Latest News</h2>\n<article>\n<h3>UM Honors 150 Students with Who's Who Distinction</h3>\n</article><article>\n<h3>UM Lazarus Project Attracts International Collaborations</h3>\n</article><article>\n<h3>Schedule Set for BancorpSouth Rebel Road Trip</h3>\n</article></section><section id=\"announcements\"><a href=\"http://olemiss.edu/newsevents/announcements.html\" class=\"link2all\">ALL ANNOUNCEMENTS</a>\n<h2>Announcements</h2>\n<ul><li readability=\"1\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=rebeccac-300-2R6EhILE.html\">Conferences — Oxford Conference for the Book</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=rebeccac-300-2R6EhILE.html\">Celebrating the written word.</a></p>\n</li>\n<li readability=\"3\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=rmwhitti-300-6zip0xir.html\">Lectures — William Winter Institute Keynote Address</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=rmwhitti-300-6zip0xir.html\">Dr. Susan Neiman will provide the keynote address, 'Learning from the Germans: What Can They Teach Us about Racial Reconciliation'</a></p>\n</li>\n<li readability=\"4\">\n<h3><a href=\"http://olemiss.edu/#\">Campus News — Conversation with Dr. Susan Neiman</a></h3>\n<p><a href=\"http://olemiss.edu/#\">Dr. Neiman will speak with campus activists on memory and iconography on Thursday, March 3 at the William Winter Institute in Lamar Hall</a></p>\n</li>\n<li readability=\"6\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=nicwea-300-pxgOJp5E.pdf\">Class News — Watercolor In London Meeting THIS Thursday!</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=nicwea-300-pxgOJp5E.pdf\">Summer Study Abroad Watercolor in London meeting THIS THURSDAY, March 3rd, Noon, Meek 110. Don't miss out and BRING A FRIEND!</a></p>\n</li>\n<li readability=\"5\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=mlong-300-nGVc0sVA.html\">Lectures — Porter L. Fortune, Jr. History Symposium</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=mlong-300-nGVc0sVA.html\">Dr. Robert Karl, of Princeton University, will present the Keynote Address at the 2016 Porter L. Fortune, Jr. History Symposium.</a></p>\n</li>\n<li readability=\"3\">\n<h3><a href=\"http://goo.gl/forms/MCxDZ1E3tZ\">Green Initiative — ASB Seeks Input on Bicycle Issues</a></h3>\n<p><a href=\"http://goo.gl/forms/MCxDZ1E3tZ\">ASB is working on resolutions to improve the bike community on campus! Let us know what you think by taking this quick survey-new link.</a></p>\n</li>\n<li readability=\"2\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=jamunson-300-PkJPHikV.pdf\">Academics — Breakfast For Dinner? It Is At Lenoir Dining!</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=jamunson-300-PkJPHikV.pdf\">It's breakfast for dinner this week at Lenoir Dining. Make your reservations online at lenoirdining.com or by calling 662-915-1863.</a></p>\n</li>\n<li readability=\"2\">\n<h3><a href=\"http://olemiss.edu/#\">Invitation — Tallahatchie Toastmasters Meeting</a></h3>\n<p><a href=\"http://olemiss.edu/#\">Anyone interested in improving their communication and leadership skills are welcome to attend the meeting. Guests are always welcome!</a></p>\n</li>\n<li readability=\"4\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=cekalu-300-pukIwGmb.html\">Invitation — Oxford Writers Featured at Overby Center</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=cekalu-300-pukIwGmb.html\">The extraordinary literary community in Oxford will be the subject of a panel discussion at the Overby Center, followed by a reception.</a></p>\n</li>\n<li readability=\"1\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=rebeccac-300-hWem8ZK1.html\">Conferences — Oxford Conference for the Book</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=rebeccac-300-hWem8ZK1.html\">Celebrating the written word.</a></p>\n</li>\n<li readability=\"6\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=mlong-300-XkqfHOm8.html\">Brown Bag — Croft Professor Lecture Series: Dr. Joshua First</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=mlong-300-XkqfHOm8.html\">Dr. Joshua First, Croft Asst. Prof. of History, will speak on 'Ukraine's Revolution and Documentary Nationalism'; Fri., March 4; Croft 107.</a></p>\n</li>\n<li readability=\"5\">\n<h3><a href=\"http://olemiss.edu/#\">Campus News — Lunch and Learn with Dr. Susan Neiman</a></h3>\n<p><a href=\"http://olemiss.edu/#\">Dr. Susan Neiman and UM students will discuss her book, Moral Clarity, during a lunch and learn at the William Winter Institute.</a></p>\n</li>\n<li readability=\"2\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=jrbreela-300-sk5TCBl9.pdf\">Arts and Culture — Colloquium: Thalberg in the American South</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=jrbreela-300-sk5TCBl9.pdf\">This colloquium will be taught by Dr. Ian Hominick in room 136 (Small Ensemble Room) on Friday at 4 o'clock.</a></p>\n</li>\n<li>\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=kcozart-300-aSL2Edda.pdf\">Conferences — 2016 Isom Student Gender Conference</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=kcozart-300-aSL2Edda.pdf\">'Undoing the Norms'</a></p>\n</li>\n<li readability=\"1\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=ikaufman-300-dsdTiMuB.html\">Invitation — 'El Cafe' de los Lunes' Meets this Monday</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=ikaufman-300-dsdTiMuB.html\">Come practice your Spanish with us in a relaxed setting. Join us every Monday.</a></p>\n</li>\n<li readability=\"3\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=jharris-300-uAfBgf3h.html\">UM Memo — UM Faculty/Staff Appeals Committee</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=jharris-300-uAfBgf3h.html\">Location: Mississippi Small Business Development Center Boardroom, 122 Jeanette Phillips Drive. See details for map.</a></p>\n</li>\n<li readability=\"3\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=blair-300-5fkNFdmA.pdf\">Study Abroad — Scholarships for Study Abroad in China!</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=blair-300-5fkNFdmA.pdf\">UM has received two generous Chinese Government Scholarships for study in China during AY 2016/17. See Study Abroad for more info!</a></p>\n</li>\n<li readability=\"1\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=jharris-300-M98IbaPW.html\">Invitation — How to Develop a Business Plan (Oxford)</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=jharris-300-M98IbaPW.html\">This seminar is designed to assist in preparing a business plan.</a></p>\n</li>\n<li readability=\"2\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=mdennis-300-soCfN09J.pdf\">Library — Citation Management Workshop</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=mdennis-300-soCfN09J.pdf\">Join Buffy Choinski in Room 106E to learn more about using RefWorks and other tools to make your bibliographies easier!</a></p>\n</li>\n<li readability=\"1\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=rebeccac-300-efSwrORQ.html\">Brown Bag — 'Collaboration'</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=rebeccac-300-efSwrORQ.html\">Brown Bag Lecture with Ann Fisher-Wirth and Maude Schuyler Clay.</a></p>\n</li>\n<li readability=\"3\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=tbbaker-300-DeTNJicl.html\">Campus News — Register for Ole Miss Big Event 2016</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=tbbaker-300-DeTNJicl.html\">Sign up to be a part of the largest day of community service in the state of Mississippi! Registration is open on myOleMiss until 3/21.</a></p>\n</li>\n<li readability=\"3\">\n<h3><a href=\"http://technews.olemiss.edu/online-timesheets-now-required-eligible-um-employees/\">TECHNews — Online Timesheets Required - Eligible UM Employees</a></h3>\n<p><a href=\"http://technews.olemiss.edu/online-timesheets-now-required-eligible-um-employees/\">Beginning in early March,all eligible employees will be REQUIRED to record their time using the ESS Timesheet application within myOleMiss.</a></p>\n</li>\n<li readability=\"3\">\n<h3><a href=\"http://green.olemiss.edu/propose-a-project/\">Green Initiative — Green Fund Proposals Due March 23</a></h3>\n<p><a href=\"http://green.olemiss.edu/propose-a-project/\">Students, faculty & staff - Receive funding for your sustainability project! Green Fund proposals are due March 23.</a></p>\n</li>\n<li readability=\"4\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=dawiley-300-xvEUewt4.html\">IT Alert — Some IT Services Unavailable March 14</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=dawiley-300-xvEUewt4.html\">System upgrades are scheduled to begin 12 a.m. on Monday, March 14. Some IT services will be unavailable until this work is completed.</a></p>\n</li>\n<li readability=\"3\">\n<h3><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=whamilton-300-vNtM6yzN.html\">Parking and Transportation — New Road Construction Near Rebel Drive Water Tower</a></h3>\n<p><a href=\"https://secure1.olemiss.edu/tools/ViewUserFile.jsp?filename=whamilton-300-vNtM6yzN.html\">Starting in March, a new road will be constructed as Phase I of the North Residential Parking Garage project.</a></p>\n</li>\n</ul></section></div>\n<hr/><hr/><section id=\"sports\" class=\"c7\"><a href=\"http://www.olemisssports.com\" class=\"link2all\">olemisssports.com</a>\n<h2>UM Athletics</h2>\n<div class=\"games\">\n<div class=\"game\">\n<h3>Men's Basketball</h3>\n<div class=\"team win\"><img src=\"http://web6.olemiss.edu/mercury/sports/10431523.olemiss.png\" alt=\"team logo\"/> Ole Miss 86</div>\n<div class=\"team\"><img src=\"http://web6.olemiss.edu/mercury/sports/10164724.msst.png\" alt=\"team logo\"/> Miss. St. 78</div>\n<p>Wednesday, Mar. 2</p>\n</div>\n<div class=\"game\">\n<h3>Men's Baseball</h3>\n<div class=\"team win\"><img src=\"http://web6.olemiss.edu/mercury/sports/10431523.olemiss.png\" alt=\"team logo\"/> Ole Miss 9</div>\n<div class=\"team\"><img src=\"http://web6.olemiss.edu/mercury/sports/10166676.memphis.png\" alt=\"team logo\"/> Memphis 7</div>\n<p>Wednesday, Mar. 2</p>\n</div>\n<div class=\"game\">\n<h3>Women's Basketball</h3>\n<div class=\"team\"><img src=\"http://web6.olemiss.edu/mercury/sports/10431523.olemiss.png\" alt=\"team logo\"/> Ole Miss 59</div>\n<div class=\"team win\"><img src=\"http://web6.olemiss.edu/mercury/sports/10166693.vanderbilt.png\" alt=\"team logo\"/> Vanderbilt 74</div>\n<p>Wednesday, Mar. 2</p>\n</div>\n</div>\n</section><footer/>\n", | ||
226 | "annotations": [], | ||
227 | "mimetype": "text/html", | ||
228 | "language": "en", | ||
229 | "reading_time": 4, | ||
230 | "domain_name": "olemiss.edu", | ||
231 | "tags": [] | ||
232 | }, | ||
233 | { | ||
234 | "is_archived": 1, | ||
235 | "is_starred": 0, | ||
236 | "id": 96, | ||
237 | "title": "FinnChristiansen.de Jetzt Dank Let’s Encrypt Per HTTPS Erreichbar", | ||
238 | "url": "https://www.finnchristiansen.de/2015/12/06/finnchristiansen-de-jetzt-dank-lets-encrypt-per-https-erreichbar/", | ||
239 | "content": "<div class=\"entry-content-thumbnail\"><img width=\"750\" height=\"179\" src=\"https://www.finnchristiansen.de/wp-content/uploads/2015/12/letsencrypt-1024x245.png\" class=\"attachment-large size-large wp-post-image\" alt=\"letsencrypt\" srcset=\"https://www.finnchristiansen.de/wp-content/uploads/2015/12/letsencrypt-300x72.png 300w, https://www.finnchristiansen.de/wp-content/uploads/2015/12/letsencrypt-1024x245.png 1024w, https://www.finnchristiansen.de/wp-content/uploads/2015/12/letsencrypt.png 1025w\" sizes=\"(max-width: 750px) 100vw, 750px\"/></div><div class=\"entry-content\">\n<p>Wenn ich in meinen FeedReader blicke, tauchen dort viele Beiträge zu <a href=\"https://letsencrypt.org/\" target=\"_blank\">Let’s Encrypt</a> auf. <a href=\"https://letsencrypt.org/2015/12/03/entering-public-beta.html\" target=\"_blank\">Seit Donnerstag befindet sich Let’s Encrypt in der offenen Beta Phase</a> und nun kann jeder ohne vorherige Freischaltung die kostenlosen SSL Zertifikate beantragen. Das habe ich natürlich auch getan.<br/></p>\n<p>Viele meiner Seiten oder Dienste waren zwar auch schon vorher SSL-verschlüsselt erreichbar, aber meistens habe ich dafür selbstsignierte Zertifkate bzw. eine selbstsignierte Certificate Authority verwendet. Für meine ownCloud Installation hatte ich mir sogar mal ein Zertifikat gekauft, da auch andere die Cloud nutzen und ich so ohne große Erklärungen ownCloud Links versenden konnte.</p>\n<p>Zur Verwendung von Let’s Encrypt brauche ich nicht mehr viel sagen, das haben schon <a href=\"https://thomas-leister.de/internet/lets-encrypt-zertifikate-im-manual-mode-abholen/\" target=\"_blank\">Thomas Leister</a>, <a href=\"http://linuxundich.de/gnu-linux/ssl-zertifikat-lets-encrypt-synology-nas/\" target=\"_blank\">Christoph Langner</a> oder andere getan. <a href=\"https://tuxproject.de/blog/2015/12/virtualisierungswahn/\" target=\"_blank\">Auch Kritik wird geäußert</a>, da der Let’s Encrypt Client verhältnismäßig aufgebläht ist und das Erstellen eines CSRs (Zertifikatsantrag) schon ewig mit openssl auf der Konsole bestens funktioniert. Let’s Encrypt möchte diesen Prozess aber vereinfachen und sogar die Installation des Zertifikates vereinfachen und sogar automatisieren.</p>\n<p>Ich habe meine Zertifikate mit Let’s Encrypt mit meinem Arch Linux Desktop im „Manual Mode“ erstellt und per Hand auf die Server verteilt. Das ist mir lieber, als dass ich die Software auf jeden Server installiere. Handarbeit ist eh notwendig, da ich <a href=\"https://www.finnchristiansen.de/2015/08/27/tlsa-records-fuer-dane-erstellen/\" target=\"_blank\">DANE</a> einsetze und die Records eh anpassen musste.</p>\n<p>Leider können nur Zertifikate für 10 Subdomains / Host-Records einer Domain beantragt werden. Das habe ich für die 10 wichtigsten getan, die übrigen 15 kann ich hoffentlich bald nachholen. Bisher gibt es eine entsprechende Fehlermeldung, falls man versucht, mehr Zertifikate zu beantragen:</p>\n<div id=\"crayon-56d87312178e8166484796\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate c6\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-toolbar crayon-tools c1\" data-settings=\" mouseover overlay hide delay\">\n<div class=\"crayon-button crayon-nums-button crayon-button-icon\" title=\"Zeilennummern\"/>\n<div class=\"crayon-button crayon-plain-button crayon-button-icon\" title=\"Unformatierte Code-Ansicht\"/>\n<div class=\"crayon-button crayon-wrap-button crayon-button-icon\" title=\"Zeilenumbruch umschalten\"/>\n<div class=\"crayon-button crayon-expand-button crayon-button-icon\" title=\"Code aufklappen\"/>\n<div class=\"crayon-button crayon-copy-button crayon-button-icon\" title=\"Copy\"/>\n<div class=\"crayon-button crayon-popup-button crayon-button-icon\" title=\"Code in einem neuen Fenster anzeigen\"/>\n</div>\n<div class=\"crayon-info c2\"/>\n<div class=\"crayon-plain-wrap\">\n<textarea wrap=\"soft\" class=\"crayon-plain print-no c3\" data-settings=\"dblclick\" readonly=\"readonly\">\nError: urn:acme:error:rateLimited :: There were too many requests of a given type :: Error creating new cert :: Too many certificates already issued for: finnchristiansen.de\n</textarea></div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\"><tr class=\"crayon-row\"><td class=\"crayon-nums\" data-settings=\"show\">\n<div class=\"crayon-nums-content crayon-num c4\">1</div>\n</td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre crayon-line c5\">Error: urn:acme:error:rateLimited :: There were too many requests of a given type :: Error creating new cert :: Too many certificates already issued for: finnchristiansen.de</div>\n</td>\n</tr></table></div>\n</div>\n<p>Die Zertifikate sind 90 Tage gültig, so dass ich mir eine Erinnerung im Kalender hinterlegt habe, damit ich die Zertifikate erneuern kann. Bis dahin: Viel Spaß beim Erstellen und Einbauen der Zertifikate.</p>\n<p><em>Beitragsbild-Quelle: <a href=\"https://letsencrypt.org/\" target=\"_blank\">LetsEncrypt.org</a> – <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0 License</a>.</em></p>\n</div>", | ||
240 | "annotations": [], | ||
241 | "mimetype": "text/html", | ||
242 | "language": "de-DE", | ||
243 | "reading_time": 1, | ||
244 | "domain_name": "www.finnchristiansen.de", | ||
245 | "tags": [] | ||
246 | }, | ||
247 | { | ||
248 | "is_archived": 1, | ||
249 | "is_starred": 0, | ||
250 | "id": 82, | ||
251 | "title": "Le développeur et l'ingénierie logicielle", | ||
252 | "url": "http://wemucs.com/le-developpeur-et-lingenierie-logicielle/", | ||
253 | "content": "<p><strong>Etre un développeur, ce n'est pas juste pisser du code. Non. L'architecture de l'applicatif est bien plus importante et la conception fera la différence entre un bon et mauvais développeur.</strong></p><p>Julien Dollon a tout résumé en un seul tweet :<br/></p>\n<p>Alors, voyons un peu ce qui paraît essentiel pour progresser dans le développement et l'ingénierie logicielle plus généralement.</p>\n<h2 id=\"lesbases\">Les bases</h2>\n<p>Peu importe votre âge, que vous ayez fait de longues études dans une école prestigieuse ou non : vous devez maîtriser vos bases. J'entends par là :</p>\n<ul><li>Savoir développer sans framework ni librairie</li>\n<li>Connaitre la programmation orientée objet</li>\n<li>Etre à l'aise avec une base de données</li>\n<li>Avoir des notions de réseau</li>\n<li>S'intéresser au hardware</li>\n</ul><p>Oui, parce que si vous maîtrisez vos bases, vous comprendrez que tous les langages manipulent des données qui passent leur temps à transiter entre unités de calcul et de stockage.</p>\n<p><strong>Un bon développeur doit pouvoir changer de plateforme ou de langage très rapidement</strong>, s’imprégner d’une nouvelle base de données ou même d’un nouveau protocole en très peu de temps. A chaque fois, ce n'est que question de logique et d'implémentation.</p>\n<h2 id=\"lacuriosit\">La curiosité</h2>\n<p>L'intégrisme mène au côté obscur. Et puis, vous risquez de finir votre carrière à bosser sur des projets fait en ASP 2.0 ou en PHP 4. Chacun son truc mais ce qui fait la beauté du monde, c'est <strong>la diversité</strong>.</p>\n<p>Il est vraiment important d'être à l'aise avec un environnement et un langage. Vous coderez plus vite et vous contournerez les pièges. De l'autre côté, être ouvert sera votre plus grande force. Le PHP ou le Java ne sont pas les seuls : vous pourriez être surpris par la simplicité et la rapidité de Python et du Go, ou même des outils Unix/Linux codés en C.</p>\n<p>Si vous avez un peu de temps, n'hésitez pas à vous amusez à développer de tous petits applicatifs pour découvrir un nouveau langage. Après tout, les histoires d'amour sont souvent inattendues !</p>\n<h2 id=\"ladettetechnique\">La dette technique</h2>\n<p>On entre un peu plus dans le vif du sujet. Maîtriser ses bases, c'est bien. Connaître plusieurs langages et être à l'aise avec des frameworks, c'est mieux. Imaginer un logiciel pour qu'il soit encore en prod dans 10 ans, c'est la réussite !</p>\n<h4 id=\"projetscourtsetabsencedemaintenance\">Projets courts et absence de maintenance</h4>\n<p>Un certain nombre de développeurs bossent sur des projets assez courts (entre 3 mois et 1 an) sans en assumer la maintenance. Au final, c'est soit un autre développeur qui reprendra les spaghettis pour le debugger ou essayer d'y ajouter une fonctionnalité.</p>\n<p>Alors ça peut être super cool :</p>\n<ul><li>on peut changer souvent de techno / librairies / frameworks</li>\n<li>on peut sortir du concret très vite</li>\n<li>on peut plus facilement contribuer à l'open source avec de nouveaux projets</li>\n</ul><p>Mais vous allez inévitablement contribuer à la plus grande frustration du développeur : reprendre du code qui a plusieurs années écrit par quelqu'un d'autre… Au final, soit vous ferez un hack, soit vous ferez une librairie à part sur un patron de conception différent, <strong>augmentant la dette technique</strong>.</p>\n<p><img src=\"http://wemucs.com/content/images/2016/02/65748811.jpg\" alt=\"Shitty code\"/></p>\n<h4 id=\"projetslongsetddis\">Projets longs et dédiés</h4>\n<p>De l'autre côté, si vous travaillez chez un éditeur ou un \"client final\", vous aurez sans doute l'opportunité de travailler sur des projets qui resteront en production durant des années, voir des dizaines d'années. Et là, la vision que vous allez avoir est quelque peu différente.</p>\n<p>Je ne vais pas revenir sur ce qu'est la dette technique. <a href=\"http://blog.dollon.net/la-dette-technique/\">Julien l'a très bien décrit dans son article</a>, que je vous invite à lire à la suite.</p>\n<p>Ne pas créer de dette technique involontaire et contrôler la volontaire, ce sera votre plus grande mission. Et pour cela, pas de magie : c'est <strong>l'expérience</strong> qui parlera. Les vieux ne sont pas tous des cons et ils vous donneront souvent de précieux conseils !<br/>La plus grande réussite, c'est de pouvoir ajouter des fonctionnalités dans 10 ans à votre projet en suivant la même conception de départ avec toutes les briques déjà en place.</p>\n<p>Quelques petites remarques en vrac :</p>\n<ul><li>Bien nommer ses variables, fonctions et classes : elles doivent s'auto-décrire sans commentaire, représenter la réalité sans confusion</li>\n<li>La POO, ce n'est pas automatique : le fonctionnel permet de découpler plus facilement les briques</li>\n<li>Les micro-services, c'est bien, mais il faut faire attention de ne pas devoir gérer 50 bases de projets différents</li>\n<li>Les tests unitaires et fonctionnels sont aussi importants que l'implémentation</li>\n<li>Les librairies externes, oui, mais elles ne doivent pas devenir un poids si elles deviennent trop couplées à votre projet</li>\n<li>Et j'en passe !</li>\n</ul><h2 id=\"rflectionvsttebaisse\">Réflection vs tête baissée</h2>\n<p>Dans une vie de développeur, on rencontre à la fois des projets simples, répétitifs et un peu bateau. Ce qui nous motive réellement, ce sont les <strong>défis complexes</strong> à résoudre et heureusement, on en rencontre très souvent.</p>\n<p>Démarrer à coder tout de suite, c'est foncer tête baissée et créer des fondations fragiles. Au final, vous commencez à poser des briques pour construire votre maison sans en avoir dessiné le plan précis.</p>\n<ul><li>Comprenez les besoins métiers, et mettez-vous à la place des utilisateurs. Passez beaucoup de temps avec eux pour tout expliciter et les avertir de ce que vous pourrez et ne pourrez pas faire</li>\n<li>Faites une étude sur l'architecture et les technologies possibles : prenez un papier, un crayon et représentez-les</li>\n<li>Soyez impartial de votre décision : mettez les points positifs en regard des négatifs pour chaque possibilité</li>\n<li>Demandez d'autres avis que le votre en organisant des brainstorming. <strong>C'est en équipe que l'on avance le plus</strong>, vous mettrez sans doute en évidence des points que vous aviez oublié et il faut savoir reconnaitre que vous n'aviez pas la meilleure solution !</li>\n</ul><h2 id=\"seremettreenquestion\">Se remettre en question</h2>\n<p>Il ne faut pas seulement avoir l'impression de faire du bon travail, il est important de s'en assurer. La définition d'un \"bon\" travail va varier énormément en fonction des contextes et en fonction des attentes. Cependant, au fur et à mesure de l'avancé de vos projets, <strong>faites un point sur ce que vous venez de créer</strong> : mettez en avant les points forts avec en perspective les parties faibles.</p>\n<p><img src=\"http://wemucs.com/content/images/2016/02/continuous-improvement-cycle.gif\" alt=\"Continuous Improvement Cycle\"/></p>\n<p>Il est évident qu'avec le recul, après mise en production et sans doute les premiers bugs ou comportements non voulus, ou même simplement la difficulté de faire évoluer vos outils, vous pourrez réellement voir ce qui a cloché et comment l'éviter à l'avenir. C'est ça le travail d'un développeur et d'un ingénieur en général : aller de l'avant en étant lucide sur le passé.</p>\n<p>Oh, et surtout <strong>pas de vanité</strong>. Utilisez des métriques qui veulent vraiment dire quelque chose, n'essayez pas de cacher la vilaine classe FileUtils qui devient un cauchemar : il faut savoir être sincère dans ces moments là.</p>\n<h2 id=\"enrsum\">En résumé…</h2>\n<p>Il faut de tout pour faire un monde ! Si vous préférez changer de projets tous les 4 matins, être à l'affut de toutes les nouveautés, alors restez comme vous êtes et soyez des précurseurs !</p>\n<p>A l'inverse, si vous désirez vraiment entrer dans de la conception logicielle, la pure et dure, alors je vous conseille fortement de travailler sur des projets au long court. Cela ne vous empêchera pas de vous éclatez, mais vous allez pouvoir vraiment réfléchir à ce qu'est un bon logiciel et ce qui ne l'est pas.</p>\n<p>Et puis, si vous le pouvez, <strong>bossez avec des pointures</strong> dans le domaine. Apprenez sur le tas avec des séniors qui ont des années de dev dans les baskets. Ils seront sans doute de précieux conseils, même si votre première Pull Request aura sans doute 3 commentaires par ligne !</p>\n<p><img src=\"http://wemucs.com/content/images/2016/02/57772588.jpg\" alt=\"Self merged\"/></p>\n", | ||
254 | "annotations": [], | ||
255 | "mimetype": "text/html", | ||
256 | "reading_time": 6, | ||
257 | "domain_name": "wemucs.com", | ||
258 | "tags": [] | ||
259 | }, | ||
260 | { | ||
261 | "is_archived": 1, | ||
262 | "is_starred": 0, | ||
263 | "id": 78, | ||
264 | "title": "The Role of Methylation in Gene Expression", | ||
265 | "url": "http://www.nature.com/scitable/topicpage/the-role-of-methylation-in-gene-expression-1070", | ||
266 | "content": "<p>Today, researchers know that DNA methylation occurs at the cytosine bases of eukaryotic DNA, which are converted to 5-methylcytosine by DNA methyltransferase (DNMT) enzymes. The altered cytosine residues are usually immediately adjacent to a guanine nucleotide, resulting in two methylated cytosine residues sitting diagonally to each other on opposing DNA strands. Different members of the DNMT family of enzymes act either as <em>de novo</em> DNMTs, putting the initial pattern of methyl groups in place on a DNA sequence, or as maintenance DNMTs, copying the methylation from an existing DNA strand to its new partner after replication. Methylation can be observed by staining cells with an immunofluorescently labeled antibody for 5-methylcytosine. In mammals, methylation is found sparsely but globally, distributed in definite CpG sequences throughout the entire genome, with the exception of CpG islands, or certain stretches (approximately 1 kilobase in length) where high CpG contents are found. The methylation of these sequences can lead to inappropriate gene silencing, such as the <a href=\"http://www.nature.com/scitable/topicpage/Tumor-Suppressor-TS-Genes-and-the-Two-887\" onclick=\"return isUDV('/topicpage/Tumor-Suppressor-TS-Genes-and-the-Two-887');\" title=\"silencing of tumor suppressor genes in cancer cells\">silencing of tumor suppressor genes in cancer cells</a>.</p>\n<p>Currently, the mechanism by which <em>de novo</em> DNMT enzymes are directed to the sites that they are meant to silence is not well understood. However, researchers have determined that some of these DNMTs are part of <a href=\"http://www.nature.com/scitable/topicpage/Chromatin-Remodeling-in-Eukaryotes-1082\" onclick=\"return isUDV('/topicpage/Chromatin-Remodeling-in-Eukaryotes-1082');\" title=\"chromatin-remodeling complexes\">chromatin-remodeling complexes</a> and serve to complete the remodeling process by performing on-the-spot DNA methylation to lock the closed shape of the chromatin in place.</p>\n<p>The roles and targets of DNA methylation vary among the kingdoms of organisms. As previously noted, among Animalia, mammals tend to have fairly globally distributed CpG methylation patterns. On the other hand, invertebrate animals generally have a \"mosaic\" pattern of methylation, where regions of heavily methylated DNA are interspersed with nonmethylated regions. The global pattern of methylation in mammals makes it difficult to determine whether methylation is targeted to certain gene sequences or is a default state, but the CpG islands tend to be near transcription start sites, indicating that there is a recognition system in place.</p>\n<p>Plantae are the most highly methylated eukaryotes, with up to 50% of their cytosine residues exhibiting methylation. Interestingly, in Fungi, only repetitive DNA sequences are methylated, and in some species, methylation is absent altogether, or it occurs on the DNA of <a href=\"http://www.nature.com/scitable/topicpage/Transposons-or-Jumping-Genes-Not-Junk-DNA-1211\" onclick=\"return isUDV('/topicpage/Transposons-or-Jumping-Genes-Not-Junk-DNA-1211');\" title=\"Transposons\">transposable elements</a> in the genome. The mechanism by which the transposons are recognized and methylated appears to involve <a href=\"http://www.nature.com/scitable/topicpage/Small-Non-coding-RNA-and-Gene-Expression-1078\" onclick=\"return isUDV('/topicpage/Small-Non-coding-RNA-and-Gene-Expression-1078');\" title=\"siRNA\">small interfering RNA</a> (siRNA). The whole silencing mechanism invoking DNMTs could be a way for these organisms to defend themselves against viral infections, which could generate transposon-like sequences. Such sequences can do less harm to the organism if they are prevented from being expressed, although replicating them can still be a burden (Suzuki & Bird, 2008). In other fungi, such as fission yeast, siRNA is involved in gene silencing, but the targets include structural sequences of the chromosomes, such as the centromeric DNA and the telomeric repeats at the chromosome ends. </p>\n", | ||
267 | "annotations": [], | ||
268 | "mimetype": "text/html", | ||
269 | "language": "en", | ||
270 | "reading_time": 2, | ||
271 | "domain_name": "www.nature.com", | ||
272 | "tags": [] | ||
273 | }, | ||
274 | { | ||
275 | "is_archived": 1, | ||
276 | "is_starred": 0, | ||
277 | "id": 53, | ||
278 | "title": "E-Mail-Adresse kostenlos, FreeMail, De-Mail & Nachrichten", | ||
279 | "url": "http://web.de", | ||
280 | "content": "<div class=\"r2\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"1\" readability=\"12\">\nNPD setzt auf Verzögerungen\n<p>Rechtsextremisten kämpfen vor Verfassungsgericht um ihr Überleben.</p>\n</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"8\">\n<a href=\"http://web.de/magazine/politik/frank-buschmann-schockiert-menschen-geschrieben-31389104\" data-teaser-id=\"31389104\" data-teaser-type=\"DEFAULT\">Schockiert über den Hass</a>\n<p>Kommentator Frank Buschmann spricht über Reaktionen auf sein Merkel-Lob.</p>\n</div>\n</div>\n</div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"2\" readability=\"11\">\nSchlägerei nach One-Night-Stand</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"11\">\nPartei \"Die Rechte\" sorgt für Eklat</div>\n<div class=\"teaser-content\" data-slide-id=\"4\" readability=\"11\">\nScheibe vereist? Das hilft!</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"http://web.de/magazine/wissen/deutscher-weltenbummler-mumifiziert-yacht-gefunden-31382634\" data-teaser-id=\"31382634\" data-teaser-type=\"DEFAULT\" data-reco-teaser=\"1\"><img src=\"http://i1.web.de/image/734/31382734,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Yacht\" width=\"72\" height=\"54\"/></a> Die Yacht des deutschen Weltenbummlers Manfred Fritz Bajorat wurde vor der philippinischen Küste gefunden.</li>\n<li><a href=\"http://web.de/magazine/panorama/one-night-stand-endet-unschoenem-ausgang-31384014\" data-teaser-id=\"31384014\" data-teaser-type=\"DEFAULT\" data-reco-teaser=\"1\"><img src=\"http://i1.web.de/image/078/31384078,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"One-Night-Stand\" width=\"72\" height=\"54\"/></a> Ein One-Night-Stand zweier Teenager endet anders als geplant.</li>\n<li><a href=\"http://web.de/magazine/politik/plakat-partei-rechte-haengen-plakate-31384064\" data-teaser-id=\"31384064\" data-teaser-type=\"DEFAULT\" data-reco-teaser=\"1\"><img src=\"http://i2.web.de/image/088/31384088,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"\" width=\"72\" height=\"54\"/></a> Das Landeskriminalamt in Sachsen-Anhalt prüft den Verdacht der Volksverhetzung wegen eines Wahlplakats der Partei \"Die Rechte\". (Symbolbild)</li>\n<li class=\"last\"><a href=\"http://www.auto-service.de/videos/76198-scheibe-vereist-hilft.html\" data-teaser-id=\"31384058\" data-teaser-type=\"AUTOSERVICE\" target=\"_blank\" data-reco-teaser=\"1\"><img src=\"http://i1.web.de/image/054/31384054,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Life Hack Eiskratzen\" width=\"72\" height=\"54\"/></a> Life Hack Eiskratzen</li>\n</ul></div>\n<div class=\"r1\">\n<div class=\"r1 news-content teaser-content\" readability=\"8\">\n<a href=\"http://web.de/magazine/sport/fussball/bundesliga/fc-bayern-pep-guardiola-wagt-experimente-31385492\" data-teaser-id=\"31385492\" data-teaser-type=\"DEFAULT\" data-reco-teaser=\"1\">Spieler leiden unter Pep</a>\n<p>Guardiola hat Angst vor dem Scheitern und opfert für den Erfolg einiges.</p>\n</div>\n</div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"1\">\n<a href=\"http://www.auto-service.de/news/76208-consumer-reports-besten-automarken-welt.html\" data-teaser-id=\"31383558\" data-teaser-type=\"AUTOSERVICE\" target=\"_blank\">Die besten Automarken der Welt</a></div>\n<div class=\"teaser-content\" data-slide-id=\"2\" readability=\"12\">\nHeidi, zieh das wieder aus!</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"11\">\nDie besten Gebrauchten 2016</div>\n<div class=\"teaser-content\" data-slide-id=\"4\" readability=\"11\">\nOscars: Kate feiert mit ihrem Leo</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"http://www.auto-service.de/news/76208-consumer-reports-besten-automarken-welt.html\" data-teaser-id=\"31383558\" data-teaser-type=\"AUTOSERVICE\" target=\"_blank\"><img src=\"http://i2.web.de/image/554/31383554,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Consumer Reports: Das sind die zehn besten Automarken der Welt!\" width=\"72\" height=\"54\"/></a> Consumer Reports: Das sind die zehn besten Automarken der Welt!</li>\n<li><a href=\"http://web.de/magazine/unterhaltung/tv-film/oscar/oscar-2016-tops-flops-oscar-roben-31382576\" data-teaser-id=\"31382576\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i0.web.de/image/552/31383552,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Heidi Klum (l.) Flop, Charlize Theron Top!\" width=\"72\" height=\"54\"/></a> So nahe beieinander liegen manchmal die Tops und Flops auf dem Roten Teppich: Heidi Klum (l.) Flop, Charlize Theron Top!</li>\n<li><a href=\"http://www.auto-service.de/news/76134-gebrauchtwagenreport-2016-besten-gebrauchten-deutschland.html\" data-teaser-id=\"31379186\" data-teaser-type=\"AUTOSERVICE\" target=\"_blank\"><img src=\"http://i1.web.de/image/182/31379182,pd=4,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Gebrauchtwagenreport 2016: Das sind die besten Gebrauchten in Deutschland\" width=\"72\" height=\"54\"/></a> Gebrauchtwagenreport 2016: Das sind die besten Gebrauchten in Deutschland</li>\n<li class=\"last\"><a href=\"http://web.de/magazine/unterhaltung/tv-film/oscar/oscars-2016-schoensten-bilder-oscar-nacht-31382570\" data-teaser-id=\"31382570\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i1.web.de/image/776/31382776,pd=2,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Kate Winslet, Leonardo DiCaprio, Oscars 2016\" width=\"72\" height=\"54\"/></a> Kate Winslet feiert mit Leonardo DiCaprio.</li>\n</ul></div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"service-content slide-lotto\" data-slide-id=\"1\" readability=\"36\">WEB.DE Lottoservice\n<div class=\"next-draw\" readability=\"7\">Jackpothöhe am Mittwoch, 02.03.16\n<div class=\"next-draw-content\">\n<p class=\"jackpot\">1</p>\n<a href=\"http://lotto.web.de/webshop/product/lottonormal/?partnerId=0WEHOMDISP&advertisementId=0HPMODU000000000JACKPOTHO000LO000000000000\"><img src=\"http://img.ui-portal.de/homepage/img/webde/bg/lotto_button.png\" height=\"22\" width=\"104\" alt=\"Lotto spielen\"/></a> Chance 1:140 Mio.</div>\n</div>\n<div class=\"last-draw\" readability=\"7\">Ziehung vom Samstag, 27.02.16\n<div class=\"winning-numbers\">\n<ol class=\"numbers\"><li>7</li>\n<li>10</li>\n<li>15</li>\n<li>25</li>\n<li>37</li>\n<li>49</li>\n</ol>\nSZ\n<ol class=\"numbers\"><li>7</li>\n</ol></div>\n</div>\nAb 18 Jahren. Suchtgefahr. Hilfe bei www.bzga.de.</div>\n<div class=\"service-content slide-eurojackpot\" data-slide-id=\"2\" readability=\"36\">WEB.DE Lottoservice\n<div class=\"next-draw\" readability=\"7\">Jackpothöhe am Freitag, 04.03.16\n<div class=\"next-draw-content\">\n<p class=\"jackpot\">40</p>\n<a href=\"http://lotto.web.de/webshop/product/eurojackpot/?partnerId=0WEHOM0HOM&advertisementId=0HPMODU000000000EUROJACKPO000EJ000000000000\"><img src=\"http://img.ui-portal.de/homepage/img/webde/bg/eurojackpot_button.png\" height=\"22\" width=\"104\" alt=\"Jetzt spielen\"/></a> Chance 1:95 Mio.</div>\n</div>\n<div class=\"last-draw\" readability=\"7\">Ziehung vom Freitag, 26.02.16\n<div class=\"winning-numbers\">\n<ol class=\"numbers\"><li>9</li>\n<li>11</li>\n<li>19</li>\n<li>42</li>\n<li>45</li>\n</ol>\nEZ\n<ol class=\"numbers\"><li>7</li>\n<li>10</li>\n</ol></div>\n</div>\nAb 18 Jahren. Suchtgefahr. Hilfe bei www.bzga.de.</div>\n</div>\n</div>\n<div class=\"r1 service-content\">Top 5 Artikel\n<a href=\"http://web.de/magazine/news/\">Weitere Nachrichten</a></div>\n<div class=\"r1 service-content\"><a href=\"http://web.de/magazine/unterhaltung/lifestyle/horoskop/\">Horoskop</a>\n</div>\n<div class=\"r2\">\n<div class=\"r1 news-content\"><a href=\"http://web.de/magazine/auto/\">Auto-Service</a>\n<div class=\"teaser-content\" readability=\"8\">\n<a href=\"http://www.auto-service.de/news/genfer-autosalon/76288-panne-audi-show-moderatorin-weichselbraun-bleibt-auto-stehen.html\" data-teaser-id=\"31388878\" data-teaser-type=\"AUTOSERVICE\" target=\"_blank\">Auto-Panne bei Audi-Show</a>\n<p>Moderatorin Mirjam Weichselbraun bleibt in Genf auf der Bühne stehen.</p>\n</div>\n</div>\n<div class=\"r1 news-content teaser-content\" readability=\"8\">\n<a href=\"http://www.auto-service.de/news/genfer-autosalon/76268-bugatti-chiron-uebersportwagen-unfassbaren-1500-ps-vorgestellt.html\" data-teaser-id=\"31385222\" data-teaser-type=\"AUTOSERVICE\" target=\"_blank\">1.500 Bugatti-PS - Wahnsinn!</a>\n<p>Der neue \"Chiron\" feiert auf dem Autosalon in Genf seine Premiere.</p>\n</div>\n<div class=\"r1 news-content teaser-content\" readability=\"7\">\n<a href=\"http://www.auto-service.de/news/genfer-autosalon/76276-mercedes-c-klasse-cabrio-open-air-spass-367-ps.html\" data-teaser-id=\"31385422\" data-teaser-type=\"AUTOSERVICE\" target=\"_blank\">Premiere für die offene C-Klasse</a>\n<p>Das brandneue Mercedes C-Klasse Cabrio rollt nach Genf.</p>\n</div>\n</div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"2\" readability=\"11\">\nRiskante Havarie in der Antarktis</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"11\">\nSchnee sorgt für viele Unfälle</div>\n<div class=\"teaser-content\" data-slide-id=\"4\" readability=\"11\">\nExplosion auf Kraftwerksgelände</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"http://web.de/magazine/politik/fluechtlingskrise-in-europa/dschungel-calais-zerstoerung-fluechtlingslager-gestattet-31377034\" data-teaser-id=\"31377034\" data-teaser-type=\"VIDEO\"><img src=\"http://i2.web.de/image/032/31377032,pd=1,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Zerstörung von Flüchtlingslager bei Calais gestattet\" width=\"72\" height=\"54\"/></a> Frankreichs Innenminister Bernard Cazeneuve begrüßte die Entscheidung und versprach Hilfe.</li>\n<li><a href=\"http://web.de/magazine/panorama/havarie-antarktis-31375668\" data-teaser-id=\"31375668\" data-teaser-type=\"VIDEO\"><img src=\"http://i1.web.de/image/666/31375666,pd=1,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Havarie in der Antarktis\" width=\"72\" height=\"54\"/></a> Der australische Eisbrecher Aurora Australis ist auf dem Weg zu einer Forschungsstation auf Grund gelaufen. Wegen schwieriger Witterungsbedingungen blieb das Ausmaß des dabei entstandenen Schadens zunächst unklar.</li>\n<li><a href=\"http://web.de/magazine/politik/winter-fruehling-schnee-eis-sorgen-unfaelle-31375364\" data-teaser-id=\"31375364\" data-teaser-type=\"VIDEO\"><img src=\"http://i0.web.de/image/362/31375362,pd=1,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Winter zum Frühling: Schnee und Eis sorgen für Unfälle\" width=\"72\" height=\"54\"/></a> Zum meteorologischen Frühlingsbeginn Anfang März stehen die Zeichen auf Schnee. Nach Auskunft der Wetterexperten ist mit einem Temperaturabfall und Glätte zu rechnen. Im Erzgebirge hatten die Autofahrer schon seit Wochenbeginn zu kämpfen.</li>\n<li class=\"last\"><a href=\"http://web.de/magazine/panorama/medien-explosion-britischem-kraftwerksgelaende-31371758\" data-teaser-id=\"31371758\" data-teaser-type=\"VIDEO\"><img src=\"http://i0.web.de/image/756/31371756,pd=1,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Laut Medien Explosion auf britischem Kraftwerksgelände\" width=\"72\" height=\"54\"/></a> Es soll westlich von London Opfer gegeben haben.</li>\n</ul></div>\n<p><a href=\"http://route.web.de/\">Routenplaner</a> Der richtige Weg <a href=\"http://web.de/magazine/video/\">Video</a> Die besten Clips <a href=\"http://tv.web.de\">Fernsehprogramm</a> Die besten Serien, Filme und Sport-Events auf einen Blick <a href=\"https://millionenklick.web.de/#C0101041109010101\" target=\"_blank\">MillionenKlick</a> Jetzt mitmachen!</p>\n<p><a href=\"http://web.de/magazine/unicef/\">Unicef</a> Helfen Sie jetzt! <a href=\"http://www.auto-service.de/staumelder/\" target=\"_blank\">Staumelder</a> Gute Fahrt! <a href=\"http://web.de/magazine/reise/ferientermine/\">Schulferien</a> Urlaub planen <a href=\"http://web.de/magazine/unterhaltung/comic/\">Comics</a> Witzig, witzig</p>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"2\" readability=\"12\">\nVerschollen, aber überlebt</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"11\">\nKorallenriffe sterben im Pazifik</div>\n<div class=\"teaser-content\" data-slide-id=\"4\" readability=\"12\">\nWer hier eine Stunde bleibt, ist tot</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"http://web.de/magazine/digital/laendern-selfie-toten-31341552\" data-teaser-id=\"31341552\" data-teaser-type=\"DEFAULT\"><img src=\"http://i2.web.de/image/578/31341578,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Selfie\" width=\"72\" height=\"54\"/></a> Um sich selbst spektakulär in Szene zu setzen, verhalten sich vor allem junge Menschen extrem.</li>\n<li><a href=\"http://web.de/magazine/wissen/robinson-crusoe-verschollenen-ueberlebt-31322746\" data-teaser-id=\"31322746\" data-teaser-type=\"DEFAULT\"><img src=\"http://i2.web.de/image/428/31332428,pd=4,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Jose Salvador Alvarenga \" width=\"72\" height=\"54\"/></a> Jose Salvador Alvarenga verschwand im November 2012 und tauchte im Januar 2014 wieder auf.</li>\n<li><a href=\"http://web.de/magazine/wissen/satellitenbilder-weltall-9077788\" data-teaser-id=\"9077788\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i1.web.de/image/762/31375762,pd=4,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Fatu Huku Pazifik El Nino\" width=\"72\" height=\"54\"/></a> El Niño, die ungewöhnlichen Strömungen im Pazifischen Ozean, bedroht die Korallenriffe. Die Korallen werden durch die Strömungen ausgebleicht. Es wird befürchtet, dass dieses Jahr Riffe weltweit bedroht sind. Das Bild zeigt die Pazifik-Insel Fatu Huku und wurde vom europäischen Satelliten Sentinel-2 aufgenommen. Es dient zur Überprüfung der Korallen-Schäden.</li>\n<li class=\"last\"><a href=\"http://web.de/magazine/wissen/mystery/karatschai-see-russland-gefaehrlichste-ort-welt-31327140\" data-teaser-id=\"31327140\" data-teaser-type=\"DEFAULT\"><img src=\"http://i1.web.de/image/546/31327546,pd=5,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Mystery\" width=\"72\" height=\"54\"/></a> Der Karatschai-See in Russland gilt als gefährlichster Ort der Welt.</li>\n</ul></div>\n<div class=\"r1 service-content\">WEB.DE Produkte\n<a href=\"https://produkte.web.de/#.hp.int.produktebox\">Weitere Produkte</a></div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"2\">\nDe-Mail</div>\n<div class=\"teaser-content\" data-slide-id=\"3\">\nMail App</div>\n<div class=\"teaser-content\" data-slide-id=\"4\">\nBrowser</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"https://produkte.web.de/mailcheck/#.hp.int.produktebox\" data-teaser-id=\"30017408\" data-teaser-type=\"DEFAULT\"><img src=\"http://i2.web.de/image/402/30017402,pd=17,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"\" width=\"72\" height=\"54\"/></a> WEB.DE Mailcheck</li>\n<li><a href=\"https://produkte.web.de/de-mail/#.hp.int.produktebox\" data-teaser-id=\"30017424\" data-teaser-type=\"DEFAULT\"><img src=\"http://i2.web.de/image/420/30017420,pd=17,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"\" width=\"72\" height=\"54\"/></a></li>\n<li><a href=\"https://produkte.web.de/freemail_mobile_startseite/mail-app/#.hp.int.produktebox\" data-teaser-id=\"30017430\" data-teaser-type=\"DEFAULT\"><img src=\"http://i1.web.de/image/428/30017428,pd=17,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Mobile Apps\" width=\"72\" height=\"54\"/></a></li>\n<li class=\"last\"><a href=\"https://produkte.web.de/browser/#.hp.int.produktebox\" data-teaser-id=\"30017436\" data-teaser-type=\"DEFAULT\"><img src=\"http://i1.web.de/image/434/30017434,pd=17,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Audible\" width=\"72\" height=\"54\"/></a></li>\n</ul></div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"2\" readability=\"11\">\nDie Missen und ihre sexy Tattoos</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"11\">\nSo lief die Wahl der Miss Germany</div>\n<div class=\"teaser-content\" data-slide-id=\"4\" readability=\"11\">\nMissen-Shooting am Strand</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"http://web.de/magazine/unterhaltung/lifestyle/miss-internet/schoen-miss-germany-2016-lena-broeder-31367418\" data-teaser-id=\"31367418\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i0.web.de/image/294/31368294,pd=6,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Lena Bröder Miss Germany 2016\" width=\"72\" height=\"54\"/></a> Lena Bröder (M.) und ihre beiden Stellvertreterinnen Francesca Orru (l.) und Katharina Schubert (r.) nach der Wahl zur Miss Germany 2016.</li>\n<li><a href=\"http://web.de/magazine/unterhaltung/lifestyle/miss-internet/miss-germany-2016-missen-sexy-tattoos-31341074\" data-teaser-id=\"31341074\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i2.web.de/image/014/31341014,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Missen Tattoos Noten\" width=\"72\" height=\"54\"/></a> In diesem Tattoo steckt so einiges: Im \"L\" beim Wort Liebe hat sich ein Unendlichkeitszeichen versteckt, die Blumen erinnern aber daran, dass auch die Liebe welken kann. Und die Noten sind ein kurzer Ausschnitt aus dem Soundtrack von \"Die fabelhafte Welt der Amelie\". Große Körperkunst.</li>\n<li><a href=\"http://web.de/magazine/unterhaltung/lifestyle/miss-internet/miss-germany-2016-religionslehrerin-schoenste-deutschlands-31365694\" data-teaser-id=\"31365694\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i2.web.de/image/686/31365686,pd=4,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Olga Hoffmann und Lena Bröder\" width=\"72\" height=\"54\"/></a> Die Krone bekommt die frischgebackene Miss Germany von ihrer Vorgängerin Olga Hoffmann aufgesetzt.</li>\n<li class=\"last\"><a href=\"http://web.de/magazine/unterhaltung/lifestyle/miss-internet/miss-germany-2016-missen-shooting-strand-31333712\" data-teaser-id=\"31333712\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i1.web.de/image/672/31333672,pd=6,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Missen am Strand\" width=\"72\" height=\"54\"/></a> Sieht ein bisschen so aus, als gäbe es da etwas umsonst. Schuhe vielleicht?</li>\n</ul></div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"2\" readability=\"11\">\nExklusiver Clip: \"Eddie the Eagle\"</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"11\">\nExklusiver Clip: \"Spotlight\"</div>\n<div class=\"teaser-content\" data-slide-id=\"4\" readability=\"11\">\nEinblick in den Film \"Zoomania\"</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"http://web.de/magazine/unterhaltung/tv-film/aktuelle-kinotrailer/exklusiv-trailer-angry-birds-film-31371008\" data-teaser-id=\"31371008\" data-teaser-type=\"VIDEO\"><img src=\"http://i0.web.de/image/006/31371006,pd=2,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"AngryBirds2\" width=\"72\" height=\"54\"/></a> AngryBirds2</li>\n<li><a href=\"http://web.de/magazine/unterhaltung/tv-film/aktuelle-kinotrailer/exklusiver-clip-eddie-the-eagle-31367488\" data-teaser-id=\"31367488\" data-teaser-type=\"VIDEO\"><img src=\"http://i2.web.de/image/486/31367486,pd=2,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"EddieEagleClip\" width=\"72\" height=\"54\"/></a> EddieEagleClip</li>\n<li><a href=\"http://web.de/magazine/unterhaltung/tv-film/aktuelle-kinotrailer/exklusiver-clip-spotlight-31361458\" data-teaser-id=\"31361458\" data-teaser-type=\"VIDEO\"><img src=\"http://i2.web.de/image/456/31361456,pd=2,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"SpotlightClip\" width=\"72\" height=\"54\"/></a> SpotlightClip</li>\n<li class=\"last\"><a href=\"http://web.de/magazine/unterhaltung/tv-film/aktuelle-kinotrailer/exklusiver-clip-zoomania-31359474\" data-teaser-id=\"31359474\" data-teaser-type=\"VIDEO\"><img src=\"http://i1.web.de/image/472/31359472,pd=2,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"ZoomaniaClip\" width=\"72\" height=\"54\"/></a> ZoomaniaClip</li>\n</ul></div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"2\" readability=\"11\">\nPlötzlich Mutter: Ist das möglich?</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"11\">\nTödliche Geißel der Menschheit</div>\n<div class=\"teaser-content\" data-slide-id=\"4\" readability=\"11\">\nMuss ich zur Krebsvorsorge?</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"http://web.de/magazine/gesundheit/500-kalorien-31356692\" data-teaser-id=\"31356692\" data-teaser-type=\"VIDEO\"><img src=\"http://i0.web.de/image/548/31357548,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"\" width=\"72\" height=\"54\"/></a></li>\n<li><a href=\"http://web.de/magazine/gesundheit/gntm-kandidatin-saskia-unbemerkt-schwanger-moeglich-31332426\" data-teaser-id=\"31332426\" data-teaser-type=\"DEFAULT\"><img src=\"http://i2.web.de/image/830/31332830,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Geburt Kind OP\" width=\"72\" height=\"54\"/></a> Normalerweise sendet der Körper während einer Schwangerschaft viele Zeichen. Doch nicht immer werden diese von der werdenden Mutter wahrgenommen. (Symbolbild)</li>\n<li><a href=\"http://web.de/magazine/gesundheit/krebs-unbesiegbare-geissel-menschheit-31291766\" data-teaser-id=\"31291766\" data-teaser-type=\"DEFAULT\"><img src=\"http://i2.web.de/image/422/31311422,pd=4,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Krebs, Patient, Krankenhaus\" width=\"72\" height=\"54\"/></a> Krebs rafft immer mehr Menschen dahin.</li>\n<li class=\"last\"><a href=\"http://web.de/magazine/gesundheit/krebs-fruehzeitig-erkennen-vorsorgeuntersuchungen-brauche-31298136\" data-teaser-id=\"31298136\" data-teaser-type=\"DEFAULT\"><img src=\"http://i2.web.de/image/298/31330298,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Mammographie-Screening\" width=\"72\" height=\"54\"/></a> Das Mammographie-Screening wird Frauen ab 50 alle zwei Jahre empfohlen. Das Verfahren an sich kann jedoch ebenfalls Tumore entstehen lassen.</li>\n</ul></div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"2\" readability=\"11\">\n\"Bachelorette\" macht Schluss ...</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"12\">\nWas, die sind verwandt?</div>\n<div class=\"teaser-content\" data-slide-id=\"4\" readability=\"11\">\nZiemlich dick im Geschäft</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"http://web.de/magazine/unterhaltung/stars/liebesnews-woche-liebt-trennt-31363836\" data-teaser-id=\"31363836\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i2.web.de/image/270/31379270,pd=4,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Jenny Elvers, Steffen von der Beeck\" width=\"72\" height=\"54\"/></a> Jenny Elvers im Glück: Ein ganzes Jahr lang konnten sie und ihr Freund Steffen von der Beeck das Geheimnis für sich behalten. Nun verriet Jenny auf ihrem Facebook-Profil, dass sie und Steffen schon seit über einem Jahr verlobt sind. Der Dschungelcamp-Kandidatin schien es lieber zu sein, selbst mit der schönen Botschaft an die Öffentlichkeit zu gehen. So ist sie den Medien zuvorgekommen.</li>\n<li><a href=\"http://web.de/magazine/unterhaltung/tv-film/bachelorette/bachelorette-alisa-patrick-zusammenziehen-31365706\" data-teaser-id=\"31365706\" data-teaser-type=\"VIDEO\"><img src=\"http://i2.web.de/image/704/31365704,pd=3,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Bachelorette_Paar_zieht_zusammen\" width=\"72\" height=\"54\"/></a> Bachelorette_Paar_zieht_zusammen</li>\n<li><a href=\"http://web.de/magazine/unterhaltung/stars/stars-verwandt-haetten-sies-gewusst-30222388\" data-teaser-id=\"30222388\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i1.web.de/image/970/31362970,pd=5,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Melissa McCarthy Jenny McCarthy\" width=\"72\" height=\"54\"/></a> Dass es sich bei Ulknudel Melissa McCarthy (l.) und Ex-Playmate Jenny McCarthy um Cousinen handelt, ist trotz des Nachnamens nur schwer vorstellbar.</li>\n<li class=\"last\"><a href=\"http://web.de/magazine/unterhaltung/stars/stars-dick-geschaeft-31361072\" data-teaser-id=\"31361072\" data-teaser-type=\"SLIDESHOW\"><img src=\"http://i0.web.de/image/460/31361460,pd=7,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Kevin James und Beth Ditto\" width=\"72\" height=\"54\"/></a> Kevin James und Beth Ditto sind \"dick im Geschäft\".</li>\n</ul></div>\n<div class=\"r1\">\n<div class=\"slider-container slider\" data-active-slide=\"1\">\n<div class=\"teaser-content\" data-slide-id=\"2\" readability=\"11\">\nEine Million Kinder in akuter Gefahr</div>\n<div class=\"teaser-content\" data-slide-id=\"3\" readability=\"11\">\nNächstenliebe als Geschenk</div>\n<div class=\"teaser-content\" data-slide-id=\"4\" readability=\"11\">\nUnsere Stiftung feiert Jubiläum</div>\n</div>\n<ul class=\"news-list\"><li class=\"first active\"><a href=\"http://web.de/magazine/unicef/gewinnspiel-aktion-geschenkte-tag-treffen-mats-hummels-31362846\" data-teaser-id=\"31362846\" data-teaser-type=\"DEFAULT\"><img src=\"http://i0.web.de/image/858/31362858,pd=6,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"UNICEF, United Internet for UNICEF, Mats Hummels, Gewinnspiel\" width=\"72\" height=\"54\"/></a> Anlässlich der Aktion \"Der geschenkte Tag\": Gewinnen Sie ein Treffen mit Mats Hummels.</li>\n<li><a href=\"http://web.de/magazine/unicef/unicef-million-kinder-ost-suedafrika-schwer-unterernaehrt-31356858\" data-teaser-id=\"31356858\" data-teaser-type=\"DEFAULT\"><img src=\"http://i0.web.de/image/286/31358286,pd=2,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"Mangelernährung, UNICEF\" width=\"72\" height=\"54\"/></a> Laut UNICEF sind knapp eine Million Kinder in Afrika schwer unterernährt.</li>\n<li><a href=\"http://web.de/magazine/unicef/valentinstag-2016-naechstenliebe-schoenste-geschenk-31347082\" data-teaser-id=\"31347082\" data-teaser-type=\"DEFAULT\"><img src=\"http://i2.web.de/image/080/31347080,pd=1,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"UNICEF, United Internet for UNICEF\" width=\"72\" height=\"54\"/></a> Zum Valentinstag wollen wir auch an diejenigen denken, denen es nicht so gut geht.</li>\n<li class=\"last\"><a href=\"http://web.de/magazine/unicef/united-internet-unicef-feiert-jubilaeum-unterstuetzer-31192220\" data-teaser-id=\"31192220\" data-teaser-type=\"DEFAULT\"><img src=\"http://i1.web.de/image/234/31192234,pd=7,h=54,mxh=600,mxw=800,w=72.jpg\" alt=\"UNICEF, United Internet for UNICEF\" width=\"72\" height=\"54\"/></a> Die Stiftung United Internet for UNICEF sagt DANKE.</li>\n</ul></div>\n", | ||
281 | "annotations": [], | ||
282 | "mimetype": "text/html", | ||
283 | "language": "de", | ||
284 | "reading_time": 4, | ||
285 | "domain_name": "web.de", | ||
286 | "tags": [] | ||
287 | }, | ||
288 | { | ||
289 | "is_archived": 1, | ||
290 | "is_starred": 0, | ||
291 | "id": 48, | ||
292 | "title": "OpenSSH Server on Arch Linux | DominicM test", | ||
293 | "url": "http://dominicm.com/openssh-server-arch-linux/", | ||
294 | "content": "<p><a href=\"http://dominicm.com/openssh-server-arch-linux/\"><img class=\"aligncenter wp-image-2354 size-medium\" title=\"OpenSSH Server on Arch Linux\" src=\"http://dominicm.com/wp-content/uploads/2016/01/ssh-arch-linux-450x450.png\" alt=\"OpenSSH Server on Arch Linux\" width=\"450\" height=\"450\" srcset=\"http://dominicm.com/wp-content/uploads/2016/01/ssh-arch-linux-150x150.png 150w, http://dominicm.com/wp-content/uploads/2016/01/ssh-arch-linux-450x450.png 450w, http://dominicm.com/wp-content/uploads/2016/01/ssh-arch-linux-768x768.png 768w, http://dominicm.com/wp-content/uploads/2016/01/ssh-arch-linux-1024x1024.png 1024w, http://dominicm.com/wp-content/uploads/2016/01/ssh-arch-linux-60x60.png 60w, http://dominicm.com/wp-content/uploads/2016/01/ssh-arch-linux.png 1200w\" sizes=\"(max-width: 450px) 100vw, 450px\"/></a></p>\n<p>OpenSSH allows powerful and convenient way to remotely access remote systems. However it creates a possible security weakness which is one reason it is not installed by default. With proper configuration it can be secured and allows the administration of headless servers servers or other devices.</p>\n\n<h2>Install OpenSSH</h2>\n<p>Install from the official repository.</p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">\nsudo pacman -S openssh\n</pre>\n\n<h2>Configure OpenSSH</h2>\n<p>Open the configuration file.</p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">\nsudo nano /etc/ssh/sshd_config\n</pre>\n\n<p>Uncomment and or modify the desired lines in the configuration file and save.</p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">\nAllowUsers user1 user2\nAllowGroups group1 group2\nPermitRootLogin no\nPort 22\n</pre>\n<p>Only certain users can be allowed to login by listing them after <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">AllowUsers</code>. Analogously <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">AllowGroups</code> option allows users in listed groups to login. Root login can be controlled with <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">PermitRootLogin</code> option, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">yes</code> to allow, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">no</code> to disallow and <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">without-password</code> to allow only with public key authentication. This should be set to <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">no</code> in almost always for security purposes. Root access can still be gained with the use of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sudo</code> or <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">su</code> commands.</p>\n<p>Default <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Port</code> is set to <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">22</code> which can make it easier for automated bots to attempt to login. In practice changing the default SSH port does not improve security but can reduce attempted logins which can fill the logs with errors. Using ports above <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">1024</code> can actually be detrimental to security as ports below <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">1024</code> are restricted to root access while ports above can be listened to by non-root users.</p>\n\n<p>For improved security and convenience it is also recommended to configure password-less SSH logins. Optionally also configure print Screenfetch on SSH login.</p>\n\n<h2>Run OpenSSH</h2>\n<p>SSH can be started as a daemon with sshd however this is not recommended in most cases. It is better to start SSH on demand. When a socket service is started it will listen for incoming connections and will only then start the daemon process.</p>\n\n<p>Start the socket service.</p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">\nsudo systemctl start sshd.socket\n</pre>\n\n<p>Enable the socket service to run on boot.</p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">\nsudo systemctl enable sshd.socket\n</pre>\n", | ||
295 | "annotations": [], | ||
296 | "mimetype": "text/html", | ||
297 | "language": "en-GB", | ||
298 | "reading_time": 1, | ||
299 | "domain_name": "dominicm.com", | ||
300 | "preview_picture": "http://dominicm.com/wp-content/uploads/2016/01/ssh-arch-linux.png", | ||
301 | "tags": [] | ||
302 | }, | ||
303 | { | ||
304 | "is_archived": 1, | ||
305 | "is_starred": 0, | ||
306 | "id": 39, | ||
307 | "title": "Site Moved | Site Help", | ||
308 | "url": "http://g1.com/help/sitemoved.asp", | ||
309 | "content": "<ul id=\"breadcrumbs\"><li class=\"level1\"><a href=\"http://g1.com/\" rel=\"home\">Home</a></li>\n<li><a href=\"http://g1.com/Support/\">Support</a></li>\n<li><a href=\"http://g1.com/Help/\">Site Help</a></li>\n<li id=\"lastItem\">Site Moved</li>\n</ul>\n<p>The Group 1 Software website has been discontinued and has been replaced by the Pitney Bowes Software website. For support of your Group 1 Software product, visit <a href=\"http://www.g1.com/Support/\" title=\"Group 1 Support website\">http://www.g1.com/Support/</a>. For information about our products, please visit <a href=\"http://www.pb.com/software\" title=\"Pitney Bowes Software website\">http://www.pb.com/software</a>.</p>\n<ul id=\"altPage\"><li><a href=\"http://g1.com/Help/TellAFriend.asp\" class=\"envelope\">Tell a Friend</a></li>\n</ul>\n", | ||
310 | "annotations": [], | ||
311 | "mimetype": "text/html", | ||
312 | "language": "en", | ||
313 | "reading_time": 0, | ||
314 | "domain_name": "g1.com", | ||
315 | "tags": [] | ||
316 | }, | ||
317 | { | ||
318 | "is_archived": 1, | ||
319 | "is_starred": 0, | ||
320 | "id": 38, | ||
321 | "title": "#Maroc : le stylo anti-pédophiles EAGLE d’AMESYS est moins bien configuré que les faux-lowers Twitter du roi Mohammed VI", | ||
322 | "url": "https://reflets.info/maroc-le-stylo-anti-pedophiles-eagle-damesys-est-moins-bien-configure-que-les-faux-lowers-twitter-du-roi-mohammed-vi/", | ||
323 | "content": "<p><a href=\"http://reflets.info/wp-content/uploads/2013/08/pedobear.jpg\" data-rel=\"lightbox-0\" title=\"\"><img class=\"size-medium wp-image-26091 alignright\" alt=\"pedobear\" src=\"http://reflets.info/wp-content/uploads/2013/08/pedobear-350x301.jpg\" width=\"350\" height=\"301\" srcset=\"https://reflets.info/wp-content/uploads/2013/08/pedobear-350x301.jpg 350w, https://reflets.info/wp-content/uploads/2013/08/pedobear-550x473.jpg 550w, https://reflets.info/wp-content/uploads/2013/08/pedobear.jpg 610w\" sizes=\"(max-width: 350px) 100vw, 350px\"/></a>Le EAGLE déployé par Amesys / Bull au Maroc n’y aura rien fait. Quand la justice attrape un pédo-criminel, ce dernier trouve le moyen de se faire gracier. On peut au bas mot parler d’un sérieux dysfonctionnement de l’institution judiciaire et se demander quel genre de bug qui a pu provoquer ce malaise. En attendant, les bots Twitter de Sa Majesté sont bien présents pour tenter de récupérer la boulette. Mais comme d’habitude dans ce genre de cas, c’est tellement mal fait que ça se voit beaucoup.</p>\n<h3 class=\"c3\">Previously in PopCorn</h3>\n<p class=\"c4\">Deux millions d’euros rien qu’en disques durs, des mois de déploiement. Cet EAGLE béta testé par Kadhafi sur sa population est maintenant en production au Maroc. Evidemment Amesys / Bull contribue toujours activement (mais <a title=\"Advanced Middle East Systems, le Amesys nouveau est de retour en Libye\" href=\"http://reflets.info/advanced-middle-east-systems-le-amesys-nouveau-est-de-retour-en-libye/\">plus sous pavillon français</a> depuis un sombre <a title=\"Bull vend Eagle… à un actionnaire de Crescendo, qui est l’actionnaire principal de… Bull\" href=\"http://reflets.info/bull-vend-eagle-a-un-actionnaire-de-crescendo-qui-est-lactionnaire-principal-de-bull/\">tour de passe passe</a>) au paramétrage et à la formation des autorités marocaines pour mettre sur écoute l’ensemble de la population marocaine. Popcorn c’est le petit nom du projet du EAGLE marocain, nous vous en avions déjà assez largement parlé. L’amitié franco-marocaine c’est une bien belle histoire : ses accords de coopération policière, sa lutte contre les pédophiles et les narco trafiquants, et évidemment, la mise sur écoute téléphonique de ses 32 millions d’habitants et l’interception des communications de ses 1,5 millions d’accès Internet et de ses 14 millions d’internautes…</p>\n<p class=\"c4\">Il faut dire qu’EAGLE partait avec de sérieux avantages sur la concurrence, les technologies de BULL ont déjà fait leur preuve en Libye (projet CANDY), au Qatar (projet FINGER), au GABON (projet CROCO) ainsi que dans d’autres pays ou l’amitié bilatérale se traduit également à grand renfort de cyber-matraques.</p>\n<h3 class=\"c3\">Le stylo traqueur de pédophiles</h3>\n<p class=\"c4\">Quand on demandait à Amesys pourquoi et comment Abdallah al Senousi, un terroriste notoire, s’était vu confier un outil comme Eagle en Libye pour surveiller l’ensemble de sa population, la réponse de Bruno Samtmann, directeur commercial d’Amesys, se faisait rassurante, pour lui, <a href=\"http://reflets.info/amesys-la-justice-et-la-morale/\" target=\"_blank\">Amesys avait fourni à Kadhafi un stylo traqueur de pédophiles, de narco trafiquants et terroristes</a>… ça ne s’invente pas. C’est exactement ce même genre de stylo qu’Amesys a fournit aux autorités marocaines qui a donc en toute logique placé l’ensemble de la population du pays sous écoute.</p>\n<iframe src=\"http://player.vimeo.com/video/41977398?title=0&byline=0&portrait=0&color=ffffff\" height=\"400\" width=\"500\" allowfullscreen=\"\" frameborder=\"0\"> </iframe>\n<p class=\"c5\"><a href=\"http://vimeo.com/41977398\" data-rel=\"lightbox-video-0\">Traqué – documentaire de Paul Moreira – Canal+</a> from <a href=\"http://vimeo.com/fhimtcom\">fhimt.com</a> on <a href=\"https://vimeo.com\">Vimeo</a>.</p>\n<p class=\"c4\">Manque de bol, pour une fois que le Maroc arrête un pédophile, voilà que le roi le gracie ! Mais à quoi peut bien servir cet Eagle au juste s’il ne permet même pas aux autorités marocaines de conserver en prison des pédophiles qu’ils ont déjà arrêté, condamné et mis en prison ?</p>\n<h3>Un plugin Eagle à bots Twitter ?</h3>\n<p class=\"c4\">Pour désamorcer la contestation au sujet du Daniel Gate sur les réseaux sociaux, les matraques ne sont pas encore parfaitement au point. Configurer un Eagle, c’est un peu long voyez vous. On utilise donc, tout naturellement, une armée de bots, des faux comptes Twitter pour twitter et retweeter la propagande de Sa Majesté. L’<a href=\"https://fr.lakome.com/index.php/maroc/1234-twitter-les-robots-de-sa-majeste\" target=\"_blank\">excellent site d’information Lakome nous explique la supercherie dans le détail</a>.</p>\n<p class=\"c5\"><a href=\"http://reflets.info/wp-content/uploads/2013/08/tweeter-robot-m6-total.jpg\" data-rel=\"lightbox-1\" title=\"\"><img class=\"aligncenter size-large wp-image-26093\" alt=\"tweeter robot m6 total\" src=\"http://reflets.info/wp-content/uploads/2013/08/tweeter-robot-m6-total-550x386.jpg\" width=\"550\" height=\"386\" srcset=\"https://reflets.info/wp-content/uploads/2013/08/tweeter-robot-m6-total-350x246.jpg 350w, https://reflets.info/wp-content/uploads/2013/08/tweeter-robot-m6-total-550x386.jpg 550w, https://reflets.info/wp-content/uploads/2013/08/tweeter-robot-m6-total.jpg 579w\" sizes=\"(max-width: 550px) 100vw, 550px\"/></a></p>\n<p class=\"c4\">Pour parfaire l’attirail autoritariste et adapter son produit aux challenges de demain, nous suggérons donc à Amesys, si ce n’est déjà fait, un plugin Eagle pour créer des bots à tweeter des âneries de manière grossière, ce afin d’éviter aux contribuables marocains d’avoir à payer grassement des agences de communication pour ce genre de propagande ridicule.</p>\n<p class=\"c5\"><a href=\"http://reflets.info/wp-content/uploads/2013/08/tweeter-robot10-liste.jpg\" data-rel=\"lightbox-2\" title=\"\"><img class=\"aligncenter size-large wp-image-26092\" alt=\"tweeter robot10 liste\" src=\"http://reflets.info/wp-content/uploads/2013/08/tweeter-robot10-liste-550x503.jpg\" width=\"550\" height=\"503\" srcset=\"https://reflets.info/wp-content/uploads/2013/08/tweeter-robot10-liste-350x320.jpg 350w, https://reflets.info/wp-content/uploads/2013/08/tweeter-robot10-liste-550x503.jpg 550w, https://reflets.info/wp-content/uploads/2013/08/tweeter-robot10-liste.jpg 573w\" sizes=\"(max-width: 550px) 100vw, 550px\"/></a></p>\n", | ||
324 | "annotations": [], | ||
325 | "mimetype": "text/html", | ||
326 | "language": "fr-FR", | ||
327 | "reading_time": 3, | ||
328 | "domain_name": "reflets.info", | ||
329 | "preview_picture": "http://reflets.info/wp-content/uploads/2013/08/tweeter-robot10-liste-550x503.jpg", | ||
330 | "tags": [] | ||
331 | }, | ||
332 | { | ||
333 | "is_archived": 1, | ||
334 | "is_starred": 0, | ||
335 | "id": 3, | ||
336 | "title": "Simple Cloud Infrastructure for Developers", | ||
337 | "url": "https://www.digitalocean.com/", | ||
338 | "content": "<div class=\"wrapper-full\">\n<div class=\"container lighter-grey wrap-content\">\n<h3>Simple to Set Up. Flexible to Scale.</h3>\n<ul id=\"simple-setup\"><li readability=\"1\"><img src=\"https://www.digitalocean.com/assets/images/join/deploy-with-ease-ccf9cdee.svg\" alt=\"Deploy with Ease\"/><h4>Easy to Deploy</h4>\n<p>Spin up a Droplet complete with full root access in just a few clicks from our Control Panel.</p>\n</li>\n<li readability=\"3\"><img src=\"https://www.digitalocean.com/assets/images/join/build-to-scale-4d39297b.svg\" alt=\"Build to Scale\"/><h4>Built to Scale</h4>\n<p>Scale your applications with our API and Floating IPs. As you grow, manage your apps with team accounts.</p>\n</li>\n<li readability=\"3\"><img src=\"https://www.digitalocean.com/assets/images/join/select-location-e2a393dc.svg\" alt=\"Select Location\"/><h4>Reliable and Available</h4>\n<p>Select from datacenter regions around the world based on latency, or deploy across regions for redundancy.</p>\n</li>\n</ul></div>\n<div class=\"hide-group container wrap-content\" readability=\"32\">\n<h3 class=\"hasSub\">Straightforward Pricing</h3>\n<ul class=\"pricing-chart\"><li readability=\"2\">\n<p>5/mo $0.007/hour</p>\n<p>512MB / 1 cpu 20GB SSD Disk 1TB Transfer</p>\n</li>\n<li readability=\"2\">\n<p>10/mo $0.015/hour</p>\n<p>1GB / 1 cpu 30GB SSD Disk 2TB Transfer</p>\n</li>\n<li readability=\"2\">\n<p>20/mo $0.03/hour</p>\nMOST POPULAR PLAN\n<p>2GB / 2 cpu 40GB SSD Disk 3TB Transfer</p>\n</li>\n<li readability=\"2\">\n<p>40/mo $0.06/hour</p>\n<p>4GB / 2 cpu 60GB SSD Disk 4TB Transfer</p>\n</li>\n<li readability=\"2\">\n<p>80/mo $0.119/hour</p>\n<p>8GB / 4 cpu 80GB SSD Disk 5TB Transfer</p>\n</li>\n</ul><a href=\"https://cloud.digitalocean.com/registrations/new\" class=\"Button--blue\">Get Started</a></div>\n<div class=\"container wrap-content\" id=\"teams-on-do\" readability=\"29\">\n<h4 class=\"caps\">Teams on DigitalOcean</h4>\n<img class=\"case-study\" src=\"https://www.digitalocean.com/assets/images/ghost-676798cc.svg\"/><p>Blog publishing platform Ghost scaled to support one million customers.</p>\n<a href=\"https://www.digitalocean.com/customers/ghost/\" class=\"Button Button--blue\">Learn how they did it</a> <img class=\"teams-on-do\" src=\"https://www.digitalocean.com/assets/images/companies-944c4b3b.svg\"/></div>\n<div class=\"container wrap-content\" id=\"sales-cta\" readability=\"32\">\n<h3>Scaling or Migrating? Let's talk.</h3>\n<p>Our team is ready to answer your questions and help you get up and running.</p>\n<a class=\"Button Button--white\" href=\"https://www.digitalocean.com/company/contact/sales/\">Get in touch</a></div>\n</div>\n", | ||
339 | "annotations": [], | ||
340 | "mimetype": "text/html", | ||
341 | "reading_time": 0, | ||
342 | "domain_name": "www.digitalocean.com", | ||
343 | "preview_picture": "https://www.digitalocean.com/assets/images/logo-3b02463b.jpg", | ||
344 | "tags": [] | ||
345 | } | ||
346 | ] | ||
diff --git a/tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php b/tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php new file mode 100644 index 00000000..f670c925 --- /dev/null +++ b/tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php | |||
@@ -0,0 +1,84 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\UserBundle\Mailer; | ||
4 | |||
5 | use Wallabag\UserBundle\Entity\User; | ||
6 | use Wallabag\UserBundle\Mailer\AuthCodeMailer; | ||
7 | |||
8 | /** | ||
9 | * @see https://www.pmg.com/blog/integration-testing-swift-mailer/ | ||
10 | */ | ||
11 | final class CountableMemorySpool extends \Swift_MemorySpool implements \Countable | ||
12 | { | ||
13 | public function count() | ||
14 | { | ||
15 | return count($this->messages); | ||
16 | } | ||
17 | |||
18 | public function getMessages() | ||
19 | { | ||
20 | return $this->messages; | ||
21 | } | ||
22 | } | ||
23 | |||
24 | class AuthCodeMailerTest extends \PHPUnit_Framework_TestCase | ||
25 | { | ||
26 | protected $mailer; | ||
27 | protected $spool; | ||
28 | protected $twig; | ||
29 | protected $config; | ||
30 | |||
31 | protected function setUp() | ||
32 | { | ||
33 | $this->spool = new CountableMemorySpool(); | ||
34 | $transport = new \Swift_Transport_SpoolTransport( | ||
35 | new \Swift_Events_SimpleEventDispatcher(), | ||
36 | $this->spool | ||
37 | ); | ||
38 | $this->mailer = new \Swift_Mailer($transport); | ||
39 | |||
40 | $twigTemplate = <<<TWIG | ||
41 | {% block subject %}subject{% endblock %} | ||
42 | {% block body_html %}html body {{ code }}{% endblock %} | ||
43 | {% block body_text %}text body {{ support_url }}{% endblock %} | ||
44 | TWIG; | ||
45 | |||
46 | $this->twig = new \Twig_Environment(new \Twig_Loader_Array(['WallabagUserBundle:TwoFactor:email_auth_code.html.twig' => $twigTemplate])); | ||
47 | |||
48 | $this->config = $this->getMockBuilder('Craue\ConfigBundle\Util\Config') | ||
49 | ->disableOriginalConstructor() | ||
50 | ->getMock(); | ||
51 | |||
52 | $this->config->expects($this->any()) | ||
53 | ->method('get') | ||
54 | ->willReturn('http://0.0.0.0/support'); | ||
55 | } | ||
56 | |||
57 | public function testSendEmail() | ||
58 | { | ||
59 | $user = new User(); | ||
60 | $user->setTwoFactorAuthentication(true); | ||
61 | $user->setEmailAuthCode(666666); | ||
62 | $user->setEmail('test@wallabag.io'); | ||
63 | $user->setName('Bob'); | ||
64 | |||
65 | $authCodeMailer = new AuthCodeMailer( | ||
66 | $this->mailer, | ||
67 | $this->twig, | ||
68 | 'nobody@test.io', | ||
69 | 'wallabag test', | ||
70 | $this->config | ||
71 | ); | ||
72 | |||
73 | $authCodeMailer->sendAuthCode($user); | ||
74 | |||
75 | $this->assertCount(1, $this->spool); | ||
76 | |||
77 | $msg = $this->spool->getMessages()[0]; | ||
78 | $this->assertArrayHasKey('test@wallabag.io', $msg->getTo()); | ||
79 | $this->assertEquals(['nobody@test.io' => 'wallabag test'], $msg->getFrom()); | ||
80 | $this->assertEquals('subject', $msg->getSubject()); | ||
81 | $this->assertContains('text body http://0.0.0.0/support', $msg->toString()); | ||
82 | $this->assertContains('html body 666666', $msg->toString()); | ||
83 | } | ||
84 | } | ||