add chess puzzle book christmas hack - www.codemadness.org - www.codemadness.org saait content files (HTM) git clone git://git.codemadness.org/www.codemadness.org (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 6e80eb2b5cde18de263a210da5bf509757de1f83 (DIR) parent bd956d932c2ade089983a740b33a3b1176959139 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Fri, 2 Feb 2024 13:48:56 +0100 add chess puzzle book christmas hack Diffstat: M config.cfg | 2 +- M output/atom.xml | 14 +++++++++++++- M output/atom_content.xml | 131 ++++++++++++++++++++++++++++++- A output/chess-puzzles.html | 168 +++++++++++++++++++++++++++++++ A output/chess-puzzles.md | 151 +++++++++++++++++++++++++++++++ M output/index | 1 + M output/index.html | 1 + A output/phlog/chess-puzzles | 159 +++++++++++++++++++++++++++++++ M output/rss.xml | 8 ++++++++ M output/rss_content.xml | 124 +++++++++++++++++++++++++++++++ M output/sitemap.xml | 4 ++++ M output/twtxt.txt | 1 + M output/urllist.txt | 1 + M output/xargs.md | 1 - A pages/chess-puzzles.cfg | 6 ++++++ A pages/chess-puzzles.md | 151 +++++++++++++++++++++++++++++++ 16 files changed, 919 insertions(+), 4 deletions(-) --- (DIR) diff --git a/config.cfg b/config.cfg @@ -1,5 +1,5 @@ # last updated the site. -siteupdated = 2023-12-17 +siteupdated = 2024-02-02 sitetitle = Codemadness siteurl = https://www.codemadness.org (DIR) diff --git a/output/atom.xml b/output/atom.xml @@ -2,11 +2,23 @@ <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> <title>Codemadness</title> <subtitle>blog with various projects and articles about computer-related things</subtitle> - <updated>2023-12-17T00:00:00Z</updated> + <updated>2024-02-02T00:00:00Z</updated> <link rel="alternate" type="text/html" href="https://www.codemadness.org" /> <id>https://www.codemadness.org/atom.xml</id> <link rel="self" type="application/atom+xml" href="https://www.codemadness.org/atom.xml" /> <entry> + <title>Chess puzzle book generator</title> + <link rel="alternate" type="text/html" href="https://www.codemadness.org/chess-puzzles.html" /> + <id>https://www.codemadness.org/chess-puzzles.html</id> + <updated>2024-02-02T00:00:00Z</updated> + <published>2024-02-02T00:00:00Z</published> + <author> + <name>Hiltjo</name> + <uri>https://www.codemadness.org</uri> + </author> + <summary>Chess puzzle book generator</summary> +</entry> +<entry> <title>xargs: an example for parallel batch jobs</title> <link rel="alternate" type="text/html" href="https://www.codemadness.org/xargs.html" /> <id>https://www.codemadness.org/xargs.html</id> (DIR) diff --git a/output/atom_content.xml b/output/atom_content.xml @@ -2,11 +2,140 @@ <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> <title>Codemadness</title> <subtitle>blog with various projects and articles about computer-related things</subtitle> - <updated>2023-12-17T00:00:00Z</updated> + <updated>2024-02-02T00:00:00Z</updated> <link rel="alternate" type="text/html" href="https://www.codemadness.org" /> <id>https://www.codemadness.org/atom_content.xml</id> <link rel="self" type="application/atom+xml" href="https://www.codemadness.org/atom_content.xml" /> <entry> + <title>Chess puzzle book generator</title> + <link rel="alternate" type="text/html" href="https://www.codemadness.org/chess-puzzles.html" /> + <id>https://www.codemadness.org/chess-puzzles.html</id> + <updated>2024-02-02T00:00:00Z</updated> + <published>2024-02-02T00:00:00Z</published> + <author> + <name>Hiltjo</name> + <uri>https://www.codemadness.org</uri> + </author> + <summary>Chess puzzle book generator</summary> + <content type="html"><![CDATA[<h1>Chess puzzle book generator</h1> + <p><strong>Last modification on </strong> <time>2024-02-02</time></p> + <p>This was a christmas hack for fun and non-profit. +I wanted to write a chess puzzle book generator. +Inspired by 1001 Deadly Checkmates by John Nunn, ISBN-13: 978-1906454258 and +similar puzzle books.</p> +<h1>Example output</h1> +<ul> +<li>English version: <a href="https://codemadness.org/downloads/puzzles/">https://codemadness.org/downloads/puzzles/</a></li> +<li>Dutch version: <a href="https://hiltjo.nl/puzzles/">https://hiltjo.nl/puzzles/</a></li> +</ul> +<p>Terminal version:</p> +<pre><code>curl -s 'https://codemadness.org/downloads/puzzles/index.vt' | less -R +</code></pre> +<p>I may or may not periodially update this page :)</p> +<p>Time flies (since Christmas), here is a valentine edition with attraction +puzzles (not only checkmates) using the red "love" theme. +It is optimized for his and her pleasure:</p> +<p><a href="https://codemadness.org/downloads/puzzles-valentine/">https://codemadness.org/downloads/puzzles-valentine/</a></p> +<h1>Quick overview of how it works</h1> +<p>The generate.sh shellscript generates the output and files for the puzzles.</p> +<p>The puzzles used are from the lichess.org puzzle database: +<a href="https://database.lichess.org/#puzzles">https://database.lichess.org/#puzzles</a></p> +<p>This database is a big CSV file containing the initial board state in the +Forsyth-Edwards Notation (FEN) format and the moves in Universal Chess +Interface (UCI) format. Each line contains the board state and the initial and +solution moves.</p> +<p>The generated index page is a HTML page, it lists the puzzles. Each puzzle on +this page is an SVG image. This scalable image format looks good in all +resolutions.</p> +<h1>Open puzzle data</h1> +<p>Lichess is an <a href="https://lichess.org/source">open-source</a> and gratis website to play on-line chess. There are +no paid levels to unlock features. All the software hosting Lichess is +open-source and anyone can register and play chess on it for free. Most of the +data about the games played is also open.</p> +<p>However, the website depends on your donations or contributions. If you can, +<a href="https://lichess.org/about">please do so</a>.</p> +<h1>generate.sh</h1> +<p>Read puzzles from the database and shuffle them. Do some sorting based on +difficulty and assign score points.</p> +<p>The random shuffling is done using a hard-coded seed. This means on the same +machine with the same puzzle database it will regenerate the same sequence of +random puzzles in a deterministic manner.</p> +<p>It outputs HTML, with support for dark mode. It also outputs .vt files suitable +directly for the terminal and includes a plain-text listing of the solutions +for the puzzles.</p> +<h1>fen.c</h1> +<p>Read and parse the board state in FEN format and read the UCI moves. It can +output to various formats.</p> +<p>See the man page for detailed usage information.</p> +<p>fen.c supports the following output formats:</p> +<ul> +<li>ascii - very simple ASCII mode.</li> +<li><a href="https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation">fen</a> - output FEN of the board state (from FEN and optional played moves).</li> +<li><a href="https://en.wikipedia.org/wiki/Portable_Game_Notation">pgn</a> - Portable Game Notation.</li> +<li>speak - mode to output a description of the moves in words.</li> +<li><a href="https://en.wikipedia.org/wiki/SVG">SVG</a> - Scalable Vector Graphics image.</li> +<li>tty - Terminal output with some markup using escape codes.</li> +</ul> +<p>fen.c can also run in CGI mode. This can be used on a HTTP server:</p> +<ul> +<li><a href="https://codemadness.org/onlyfens">https://codemadness.org/onlyfens</a></li> +<li><a href="https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg">https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg</a></li> +<li><a href="https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn">https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn</a></li> +<li><a href="https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak">https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak</a></li> +</ul> +<p>Terminal output:</p> +<pre><code>curl -s 'https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=tty' +</code></pre> +<h2>Support for Dutch notated PGN and output</h2> +<p>For pgn and "speak mode" it has an option to output Dutch notated PGN or speech +too.</p> +<p>For example:</p> +<ul> +<li>Queen = Dame (Q -> D), translated: lady.</li> +<li>Rook = Toren (R -> T), translated: tower.</li> +<li>Bishop = Loper (B -> L), translated: walker.</li> +<li>Knight = Paard (N -> P), translated: horse.</li> +</ul> +<h2>Example script to stream games from Lichess</h2> +<p>There is an included example script that can stream Lichess games to the +terminal. It uses the Lichess API. It will display the board using terminal +escape codes. The games are automatically annotated with PGN notation and with +text how a human would say the notation. This can also be piped to a speech +synthesizer like <a href="https://github.com/espeak-ng/espeak-ng/">espeak</a> as audio.</p> +<p>pgn-extract is a useful tool to convert Portable Game Notation (PGN) to +Universal Chess Interface (UCI) moves (or do many other useful chess related +things!).</p> +<h2>Example script to generate an animated gif from PGN.</h2> +<p>Theres also an example script included that can generate an animated gif from +PGN using <a href="https://ffmpeg.org/">ffmpeg</a>.</p> +<p>It creates an optimal color palette from the input images and generates an +optimized animated gif. The last move (typically some checkmate) is displayed +slightly longer.</p> +<h1>References and chess related links</h1> +<ul> +<li><p>Lichess FEN puzzle database:<br /> +<a href="https://database.lichess.org/#puzzles">https://database.lichess.org/#puzzles</a></p> +</li> +<li><p>lichess.org:<br /> +<a href="https://lichess.org/">https://lichess.org/</a></p> +</li> +<li><p>SVG of the individual pieces used for fen.c:<br /> +<a href="https://github.com/lichess-org/lila/tree/master/public/piece/cburnett">https://github.com/lichess-org/lila/tree/master/public/piece/cburnett</a></p> +</li> +<li><p>pgn-extract:<br /> +A great multi-purpose PGN manipulation program with many options:<br /> +<a href="https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/">https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/</a></p> +<p>An example to convert PGN games to UCI moves:<br /> +<code>pgn-extract --notags -Wuc</code></p> +</li> +<li><p>Stockfish:<br /> +Strong open source chess engine and analysis tool:<br /> +<a href="https://stockfishchess.org/">https://stockfishchess.org/</a></p> +</li> +</ul> +]]></content> +</entry> +<entry> <title>xargs: an example for parallel batch jobs</title> <link rel="alternate" type="text/html" href="https://www.codemadness.org/xargs.html" /> <id>https://www.codemadness.org/xargs.html</id> (DIR) diff --git a/output/chess-puzzles.html b/output/chess-puzzles.html @@ -0,0 +1,168 @@ +<!DOCTYPE html> +<html dir="ltr" lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta http-equiv="Content-Language" content="en" /> + <meta name="viewport" content="width=device-width" /> + <meta name="keywords" content="chess, puzzles, lichess" /> + <meta name="description" content="Chess puzzle book generator" /> + <meta name="author" content="Hiltjo" /> + <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" /> + <title>Chess puzzle book generator - Codemadness</title> + <link rel="stylesheet" href="style.css" type="text/css" media="screen" /> + <link rel="stylesheet" href="print.css" type="text/css" media="print" /> + <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" /> + <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" /> + <link rel="icon" href="/favicon.png" type="image/png" /> +</head> +<body> + <nav id="menuwrap"> + <table id="menu" width="100%" border="0"> + <tr> + <td id="links" align="left"> + <a href="index.html">Blog</a> | + <a href="/git/" title="Git repository with some of my projects">Git</a> | + <a href="/releases/">Releases</a> | + <a href="gopher://codemadness.org">Gopherhole</a> + </td> + <td id="links-contact" align="right"> + <span class="hidden"> | </span> + <a href="/donate/">Donate</a> | + <a href="feeds.html">Feeds</a> | + <a href="pgp.asc">PGP</a> | + <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a> + </td> + </tr> + </table> + </nav> + <hr class="hidden" /> + <main id="mainwrap"> + <div id="main"> + <article> +<header> + <h1>Chess puzzle book generator</h1> + <p> + <strong>Last modification on </strong> <time>2024-02-02</time> + </p> +</header> + +<p>This was a christmas hack for fun and non-profit. +I wanted to write a chess puzzle book generator. +Inspired by 1001 Deadly Checkmates by John Nunn, ISBN-13: 978-1906454258 and +similar puzzle books.</p> +<h1>Example output</h1> +<ul> +<li>English version: <a href="https://codemadness.org/downloads/puzzles/">https://codemadness.org/downloads/puzzles/</a></li> +<li>Dutch version: <a href="https://hiltjo.nl/puzzles/">https://hiltjo.nl/puzzles/</a></li> +</ul> +<p>Terminal version:</p> +<pre><code>curl -s 'https://codemadness.org/downloads/puzzles/index.vt' | less -R +</code></pre> +<p>I may or may not periodially update this page :)</p> +<p>Time flies (since Christmas), here is a valentine edition with attraction +puzzles (not only checkmates) using the red "love" theme. +It is optimized for his and her pleasure:</p> +<p><a href="https://codemadness.org/downloads/puzzles-valentine/">https://codemadness.org/downloads/puzzles-valentine/</a></p> +<h1>Quick overview of how it works</h1> +<p>The generate.sh shellscript generates the output and files for the puzzles.</p> +<p>The puzzles used are from the lichess.org puzzle database: +<a href="https://database.lichess.org/#puzzles">https://database.lichess.org/#puzzles</a></p> +<p>This database is a big CSV file containing the initial board state in the +Forsyth-Edwards Notation (FEN) format and the moves in Universal Chess +Interface (UCI) format. Each line contains the board state and the initial and +solution moves.</p> +<p>The generated index page is a HTML page, it lists the puzzles. Each puzzle on +this page is an SVG image. This scalable image format looks good in all +resolutions.</p> +<h1>Open puzzle data</h1> +<p>Lichess is an <a href="https://lichess.org/source">open-source</a> and gratis website to play on-line chess. There are +no paid levels to unlock features. All the software hosting Lichess is +open-source and anyone can register and play chess on it for free. Most of the +data about the games played is also open.</p> +<p>However, the website depends on your donations or contributions. If you can, +<a href="https://lichess.org/about">please do so</a>.</p> +<h1>generate.sh</h1> +<p>Read puzzles from the database and shuffle them. Do some sorting based on +difficulty and assign score points.</p> +<p>The random shuffling is done using a hard-coded seed. This means on the same +machine with the same puzzle database it will regenerate the same sequence of +random puzzles in a deterministic manner.</p> +<p>It outputs HTML, with support for dark mode. It also outputs .vt files suitable +directly for the terminal and includes a plain-text listing of the solutions +for the puzzles.</p> +<h1>fen.c</h1> +<p>Read and parse the board state in FEN format and read the UCI moves. It can +output to various formats.</p> +<p>See the man page for detailed usage information.</p> +<p>fen.c supports the following output formats:</p> +<ul> +<li>ascii - very simple ASCII mode.</li> +<li><a href="https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation">fen</a> - output FEN of the board state (from FEN and optional played moves).</li> +<li><a href="https://en.wikipedia.org/wiki/Portable_Game_Notation">pgn</a> - Portable Game Notation.</li> +<li>speak - mode to output a description of the moves in words.</li> +<li><a href="https://en.wikipedia.org/wiki/SVG">SVG</a> - Scalable Vector Graphics image.</li> +<li>tty - Terminal output with some markup using escape codes.</li> +</ul> +<p>fen.c can also run in CGI mode. This can be used on a HTTP server:</p> +<ul> +<li><a href="https://codemadness.org/onlyfens">https://codemadness.org/onlyfens</a></li> +<li><a href="https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg">https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg</a></li> +<li><a href="https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn">https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn</a></li> +<li><a href="https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak">https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak</a></li> +</ul> +<p>Terminal output:</p> +<pre><code>curl -s 'https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=tty' +</code></pre> +<h2>Support for Dutch notated PGN and output</h2> +<p>For pgn and "speak mode" it has an option to output Dutch notated PGN or speech +too.</p> +<p>For example:</p> +<ul> +<li>Queen = Dame (Q -> D), translated: lady.</li> +<li>Rook = Toren (R -> T), translated: tower.</li> +<li>Bishop = Loper (B -> L), translated: walker.</li> +<li>Knight = Paard (N -> P), translated: horse.</li> +</ul> +<h2>Example script to stream games from Lichess</h2> +<p>There is an included example script that can stream Lichess games to the +terminal. It uses the Lichess API. It will display the board using terminal +escape codes. The games are automatically annotated with PGN notation and with +text how a human would say the notation. This can also be piped to a speech +synthesizer like <a href="https://github.com/espeak-ng/espeak-ng/">espeak</a> as audio.</p> +<p>pgn-extract is a useful tool to convert Portable Game Notation (PGN) to +Universal Chess Interface (UCI) moves (or do many other useful chess related +things!).</p> +<h2>Example script to generate an animated gif from PGN.</h2> +<p>Theres also an example script included that can generate an animated gif from +PGN using <a href="https://ffmpeg.org/">ffmpeg</a>.</p> +<p>It creates an optimal color palette from the input images and generates an +optimized animated gif. The last move (typically some checkmate) is displayed +slightly longer.</p> +<h1>References and chess related links</h1> +<ul> +<li><p>Lichess FEN puzzle database:<br /> +<a href="https://database.lichess.org/#puzzles">https://database.lichess.org/#puzzles</a></p> +</li> +<li><p>lichess.org:<br /> +<a href="https://lichess.org/">https://lichess.org/</a></p> +</li> +<li><p>SVG of the individual pieces used for fen.c:<br /> +<a href="https://github.com/lichess-org/lila/tree/master/public/piece/cburnett">https://github.com/lichess-org/lila/tree/master/public/piece/cburnett</a></p> +</li> +<li><p>pgn-extract:<br /> +A great multi-purpose PGN manipulation program with many options:<br /> +<a href="https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/">https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/</a></p> +<p>An example to convert PGN games to UCI moves:<br /> +<code>pgn-extract --notags -Wuc</code></p> +</li> +<li><p>Stockfish:<br /> +Strong open source chess engine and analysis tool:<br /> +<a href="https://stockfishchess.org/">https://stockfishchess.org/</a></p> +</li> +</ul> + + </article> + </div> + </main> +</body> +</html> (DIR) diff --git a/output/chess-puzzles.md b/output/chess-puzzles.md @@ -0,0 +1,151 @@ +This was a christmas hack for fun and non-profit. +I wanted to write a chess puzzle book generator. +Inspired by 1001 Deadly Checkmates by John Nunn, ISBN-13: 978-1906454258 and +similar puzzle books. + + +# Example output + +* English version: <https://codemadness.org/downloads/puzzles/> +* Dutch version: <https://hiltjo.nl/puzzles/> + +Terminal version: + + curl -s 'https://codemadness.org/downloads/puzzles/index.vt' | less -R + +I may or may not periodially update this page :) + +Time flies (since Christmas), here is a valentine edition with attraction +puzzles (not only checkmates) using the red "love" theme. +It is optimized for his and her pleasure: + +<https://codemadness.org/downloads/puzzles-valentine/> + + +# Quick overview of how it works + +The generate.sh shellscript generates the output and files for the puzzles. + +The puzzles used are from the lichess.org puzzle database: +<https://database.lichess.org/#puzzles> + +This database is a big CSV file containing the initial board state in the +Forsyth-Edwards Notation (FEN) format and the moves in Universal Chess +Interface (UCI) format. Each line contains the board state and the initial and +solution moves. + +The generated index page is a HTML page, it lists the puzzles. Each puzzle on +this page is an SVG image. This scalable image format looks good in all +resolutions. + + +# Open puzzle data + +Lichess is an [open-source](https://lichess.org/source) and gratis website to play on-line chess. There are +no paid levels to unlock features. All the software hosting Lichess is +open-source and anyone can register and play chess on it for free. Most of the +data about the games played is also open. + +However, the website depends on your donations or contributions. If you can, +[please do so](https://lichess.org/about). + + +# generate.sh + +Read puzzles from the database and shuffle them. Do some sorting based on +difficulty and assign score points. + +The random shuffling is done using a hard-coded seed. This means on the same +machine with the same puzzle database it will regenerate the same sequence of +random puzzles in a deterministic manner. + +It outputs HTML, with support for dark mode. It also outputs .vt files suitable +directly for the terminal and includes a plain-text listing of the solutions +for the puzzles. + + +# fen.c + +Read and parse the board state in FEN format and read the UCI moves. It can +output to various formats. + +See the man page for detailed usage information. + +fen.c supports the following output formats: + +* ascii - very simple ASCII mode. +* [fen](https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation) - output FEN of the board state (from FEN and optional played moves). +* [pgn](https://en.wikipedia.org/wiki/Portable_Game_Notation) - Portable Game Notation. +* speak - mode to output a description of the moves in words. +* [SVG](https://en.wikipedia.org/wiki/SVG) - Scalable Vector Graphics image. +* tty - Terminal output with some markup using escape codes. + +fen.c can also run in CGI mode. This can be used on a HTTP server: + +* <https://codemadness.org/onlyfens> +* <https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg> +* <https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn> +* <https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak> + +Terminal output: + + curl -s 'https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=tty' + + +## Support for Dutch notated PGN and output + +For pgn and "speak mode" it has an option to output Dutch notated PGN or speech +too. + +For example: + +* Queen = Dame (Q -> D), translated: lady. +* Rook = Toren (R -> T), translated: tower. +* Bishop = Loper (B -> L), translated: walker. +* Knight = Paard (N -> P), translated: horse. + + +## Example script to stream games from Lichess + +There is an included example script that can stream Lichess games to the +terminal. It uses the Lichess API. It will display the board using terminal +escape codes. The games are automatically annotated with PGN notation and with +text how a human would say the notation. This can also be piped to a speech +synthesizer like [espeak](https://github.com/espeak-ng/espeak-ng/) as audio. + +pgn-extract is a useful tool to convert Portable Game Notation (PGN) to +Universal Chess Interface (UCI) moves (or do many other useful chess related +things!). + + +## Example script to generate an animated gif from PGN. + +Theres also an example script included that can generate an animated gif from +PGN using [ffmpeg](https://ffmpeg.org/). + +It creates an optimal color palette from the input images and generates an +optimized animated gif. The last move (typically some checkmate) is displayed +slightly longer. + + +# References and chess related links + +* Lichess FEN puzzle database: + <https://database.lichess.org/#puzzles> + +* lichess.org: + <https://lichess.org/> + +* SVG of the individual pieces used for fen.c: + <https://github.com/lichess-org/lila/tree/master/public/piece/cburnett> + +* pgn-extract: + A great multi-purpose PGN manipulation program with many options: + <https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/> + + An example to convert PGN games to UCI moves: + `pgn-extract --notags -Wuc` + +* Stockfish: + Strong open source chess engine and analysis tool: + <https://stockfishchess.org/> (DIR) diff --git a/output/index b/output/index @@ -11,6 +11,7 @@ i codemadness.org 70 i codemadness.org 70 iPhlog posts codemadness.org 70 i codemadness.org 70 +12024-02-02 Chess puzzle book generator /phlog/chess-puzzles codemadness.org 70 12023-11-22 xargs: an example for parallel batch jobs /phlog/xargs codemadness.org 70 12023-11-20 Improved Youtube RSS/Atom feed /phlog/youtube-feed codemadness.org 70 12023-10-25 Setup your own mail paste service /phlog/mailservice codemadness.org 70 (DIR) diff --git a/output/index.html b/output/index.html @@ -40,6 +40,7 @@ <div id="main"> <h1>Posts</h1> <table> +<tr><td><time>2024-02-02</time></td><td><a href="chess-puzzles.html">Chess puzzle book generator</a></td></tr> <tr><td><time>2023-11-22</time></td><td><a href="xargs.html">xargs: an example for parallel batch jobs</a></td></tr> <tr><td><time>2023-11-20</time></td><td><a href="youtube-feed.html">Improved Youtube RSS/Atom feed</a></td></tr> <tr><td><time>2023-10-25</time></td><td><a href="mailservice.html">Setup your own mail paste service</a></td></tr> (DIR) diff --git a/output/phlog/chess-puzzles b/output/phlog/chess-puzzles @@ -0,0 +1,159 @@ +1<- Back / codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# Chess puzzle book generator codemadness.org 70 +i codemadness.org 70 +iLast modification on 2024-02-02 codemadness.org 70 +i codemadness.org 70 +iThis was a christmas hack for fun and non-profit. codemadness.org 70 +iI wanted to write a chess puzzle book generator. codemadness.org 70 +iInspired by 1001 Deadly Checkmates by John Nunn, ISBN-13: 978-1906454258 and codemadness.org 70 +isimilar puzzle books. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# Example output codemadness.org 70 +i codemadness.org 70 +h* English version: »https://codemadness.org/downloads/puzzles/« URL:https://codemadness.org/downloads/puzzles/ codemadness.org 70 +h* Dutch version: »https://hiltjo.nl/puzzles/« URL:https://hiltjo.nl/puzzles/ codemadness.org 70 +i codemadness.org 70 +iTerminal version: codemadness.org 70 +i codemadness.org 70 +i curl -s 'https://codemadness.org/downloads/puzzles/index.vt' | less -R codemadness.org 70 +i codemadness.org 70 +iI may or may not periodially update this page :) codemadness.org 70 +i codemadness.org 70 +iTime flies (since Christmas), here is a valentine edition with attraction codemadness.org 70 +ipuzzles (not only checkmates) using the red "love" theme. codemadness.org 70 +iIt is optimized for his and her pleasure: codemadness.org 70 +i codemadness.org 70 +hhttps://codemadness.org/downloads/puzzles-valentine/ URL:https://codemadness.org/downloads/puzzles-valentine/ codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# Quick overview of how it works codemadness.org 70 +i codemadness.org 70 +iThe generate.sh shellscript generates the output and files for the puzzles. codemadness.org 70 +i codemadness.org 70 +iThe puzzles used are from the lichess.org puzzle database: codemadness.org 70 +hhttps://database.lichess.org/#puzzles URL:https://database.lichess.org/#puzzles codemadness.org 70 +i codemadness.org 70 +iThis database is a big CSV file containing the initial board state in the codemadness.org 70 +iForsyth-Edwards Notation (FEN) format and the moves in Universal Chess codemadness.org 70 +iInterface (UCI) format. Each line contains the board state and the initial and codemadness.org 70 +isolution moves. codemadness.org 70 +i codemadness.org 70 +iThe generated index page is a HTML page, it lists the puzzles. Each puzzle on codemadness.org 70 +ithis page is an SVG image. This scalable image format looks good in all codemadness.org 70 +iresolutions. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# Open puzzle data codemadness.org 70 +i codemadness.org 70 +hLichess is an »open-source« and gratis website to play on-line chess. There are URL:https://lichess.org/source codemadness.org 70 +ino paid levels to unlock features. All the software hosting Lichess is codemadness.org 70 +iopen-source and anyone can register and play chess on it for free. Most of the codemadness.org 70 +idata about the games played is also open. codemadness.org 70 +i codemadness.org 70 +iHowever, the website depends on your donations or contributions. If you can, codemadness.org 70 +hplease do so. URL:https://lichess.org/about codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# generate.sh codemadness.org 70 +i codemadness.org 70 +iRead puzzles from the database and shuffle them. Do some sorting based on codemadness.org 70 +idifficulty and assign score points. codemadness.org 70 +i codemadness.org 70 +iThe random shuffling is done using a hard-coded seed. This means on the same codemadness.org 70 +imachine with the same puzzle database it will regenerate the same sequence of codemadness.org 70 +irandom puzzles in a deterministic manner. codemadness.org 70 +i codemadness.org 70 +iIt outputs HTML, with support for dark mode. It also outputs .vt files suitable codemadness.org 70 +idirectly for the terminal and includes a plain-text listing of the solutions codemadness.org 70 +ifor the puzzles. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# fen.c codemadness.org 70 +i codemadness.org 70 +iRead and parse the board state in FEN format and read the UCI moves. It can codemadness.org 70 +ioutput to various formats. codemadness.org 70 +i codemadness.org 70 +iSee the man page for detailed usage information. codemadness.org 70 +i codemadness.org 70 +ifen.c supports the following output formats: codemadness.org 70 +i codemadness.org 70 +i* ascii - very simple ASCII mode. codemadness.org 70 +h* »fen« - output FEN of the board state (from FEN and optional played moves). URL:https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation codemadness.org 70 +h* »pgn« - Portable Game Notation. URL:https://en.wikipedia.org/wiki/Portable_Game_Notation codemadness.org 70 +i* speak - mode to output a description of the moves in words. codemadness.org 70 +h* »SVG« - Scalable Vector Graphics image. URL:https://en.wikipedia.org/wiki/SVG codemadness.org 70 +i* tty - Terminal output with some markup using escape codes. codemadness.org 70 +i codemadness.org 70 +ifen.c can also run in CGI mode. This can be used on a HTTP server: codemadness.org 70 +i codemadness.org 70 +h* https://codemadness.org/onlyfens URL:https://codemadness.org/onlyfens codemadness.org 70 +h* https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg URL:https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg codemadness.org 70 +h* https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn URL:https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn codemadness.org 70 +h* https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak URL:https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak codemadness.org 70 +i codemadness.org 70 +iTerminal output: codemadness.org 70 +i codemadness.org 70 +i curl -s 'https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=tty' codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Support for Dutch notated PGN and output codemadness.org 70 +i codemadness.org 70 +iFor pgn and "speak mode" it has an option to output Dutch notated PGN or speech codemadness.org 70 +itoo. codemadness.org 70 +i codemadness.org 70 +iFor example: codemadness.org 70 +i codemadness.org 70 +i* Queen = Dame (Q -> D), translated: lady. codemadness.org 70 +i* Rook = Toren (R -> T), translated: tower. codemadness.org 70 +i* Bishop = Loper (B -> L), translated: walker. codemadness.org 70 +i* Knight = Paard (N -> P), translated: horse. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Example script to stream games from Lichess codemadness.org 70 +i codemadness.org 70 +iThere is an included example script that can stream Lichess games to the codemadness.org 70 +iterminal. It uses the Lichess API. It will display the board using terminal codemadness.org 70 +iescape codes. The games are automatically annotated with PGN notation and with codemadness.org 70 +itext how a human would say the notation. This can also be piped to a speech codemadness.org 70 +hsynthesizer like »espeak« as audio. URL:https://github.com/espeak-ng/espeak-ng/ codemadness.org 70 +i codemadness.org 70 +ipgn-extract is a useful tool to convert Portable Game Notation (PGN) to codemadness.org 70 +iUniversal Chess Interface (UCI) moves (or do many other useful chess related codemadness.org 70 +ithings!). codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Example script to generate an animated gif from PGN. codemadness.org 70 +i codemadness.org 70 +iTheres also an example script included that can generate an animated gif from codemadness.org 70 +hPGN using »ffmpeg«. URL:https://ffmpeg.org/ codemadness.org 70 +i codemadness.org 70 +iIt creates an optimal color palette from the input images and generates an codemadness.org 70 +ioptimized animated gif. The last move (typically some checkmate) is displayed codemadness.org 70 +islightly longer. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# References and chess related links codemadness.org 70 +i codemadness.org 70 +i* Lichess FEN puzzle database: codemadness.org 70 +h https://database.lichess.org/#puzzles URL:https://database.lichess.org/#puzzles codemadness.org 70 +i codemadness.org 70 +i* lichess.org: codemadness.org 70 +h https://lichess.org/ URL:https://lichess.org/ codemadness.org 70 +i codemadness.org 70 +i* SVG of the individual pieces used for fen.c: codemadness.org 70 +h https://github.com/lichess-org/lila/tree/master/public/piece/cburnett URL:https://github.com/lichess-org/lila/tree/master/public/piece/cburnett codemadness.org 70 +i codemadness.org 70 +i* pgn-extract: codemadness.org 70 +i A great multi-purpose PGN manipulation program with many options: codemadness.org 70 +h https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/ URL:https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/ codemadness.org 70 +i codemadness.org 70 +i An example to convert PGN games to UCI moves: codemadness.org 70 +i `pgn-extract --notags -Wuc` codemadness.org 70 +i codemadness.org 70 +i* Stockfish: codemadness.org 70 +i Strong open source chess engine and analysis tool: codemadness.org 70 +h https://stockfishchess.org/ URL:https://stockfishchess.org/ codemadness.org 70 +. (DIR) diff --git a/output/rss.xml b/output/rss.xml @@ -7,6 +7,14 @@ <description>blog with various projects and articles about computer-related things</description> <link>https://www.codemadness.org</link> <item> + <title>Chess puzzle book generator</title> + <link>https://www.codemadness.org/chess-puzzles.html</link> + <guid>https://www.codemadness.org/chess-puzzles.html</guid> + <dc:date>2024-02-02T00:00:00Z</dc:date> + <author>Hiltjo</author> + <description>Chess puzzle book generator</description> +</item> +<item> <title>xargs: an example for parallel batch jobs</title> <link>https://www.codemadness.org/xargs.html</link> <guid>https://www.codemadness.org/xargs.html</guid> (DIR) diff --git a/output/rss_content.xml b/output/rss_content.xml @@ -7,6 +7,130 @@ <description>blog with various projects and articles about computer-related things</description> <link>https://www.codemadness.org</link> <item> + <title>Chess puzzle book generator</title> + <link>https://www.codemadness.org/chess-puzzles.html</link> + <guid>https://www.codemadness.org/chess-puzzles.html</guid> + <dc:date>2024-02-02T00:00:00Z</dc:date> + <author>Hiltjo</author> + <description><![CDATA[<h1>Chess puzzle book generator</h1> + <p><strong>Last modification on </strong> <time>2024-02-02</time></p> + <p>This was a christmas hack for fun and non-profit. +I wanted to write a chess puzzle book generator. +Inspired by 1001 Deadly Checkmates by John Nunn, ISBN-13: 978-1906454258 and +similar puzzle books.</p> +<h1>Example output</h1> +<ul> +<li>English version: <a href="https://codemadness.org/downloads/puzzles/">https://codemadness.org/downloads/puzzles/</a></li> +<li>Dutch version: <a href="https://hiltjo.nl/puzzles/">https://hiltjo.nl/puzzles/</a></li> +</ul> +<p>Terminal version:</p> +<pre><code>curl -s 'https://codemadness.org/downloads/puzzles/index.vt' | less -R +</code></pre> +<p>I may or may not periodially update this page :)</p> +<p>Time flies (since Christmas), here is a valentine edition with attraction +puzzles (not only checkmates) using the red "love" theme. +It is optimized for his and her pleasure:</p> +<p><a href="https://codemadness.org/downloads/puzzles-valentine/">https://codemadness.org/downloads/puzzles-valentine/</a></p> +<h1>Quick overview of how it works</h1> +<p>The generate.sh shellscript generates the output and files for the puzzles.</p> +<p>The puzzles used are from the lichess.org puzzle database: +<a href="https://database.lichess.org/#puzzles">https://database.lichess.org/#puzzles</a></p> +<p>This database is a big CSV file containing the initial board state in the +Forsyth-Edwards Notation (FEN) format and the moves in Universal Chess +Interface (UCI) format. Each line contains the board state and the initial and +solution moves.</p> +<p>The generated index page is a HTML page, it lists the puzzles. Each puzzle on +this page is an SVG image. This scalable image format looks good in all +resolutions.</p> +<h1>Open puzzle data</h1> +<p>Lichess is an <a href="https://lichess.org/source">open-source</a> and gratis website to play on-line chess. There are +no paid levels to unlock features. All the software hosting Lichess is +open-source and anyone can register and play chess on it for free. Most of the +data about the games played is also open.</p> +<p>However, the website depends on your donations or contributions. If you can, +<a href="https://lichess.org/about">please do so</a>.</p> +<h1>generate.sh</h1> +<p>Read puzzles from the database and shuffle them. Do some sorting based on +difficulty and assign score points.</p> +<p>The random shuffling is done using a hard-coded seed. This means on the same +machine with the same puzzle database it will regenerate the same sequence of +random puzzles in a deterministic manner.</p> +<p>It outputs HTML, with support for dark mode. It also outputs .vt files suitable +directly for the terminal and includes a plain-text listing of the solutions +for the puzzles.</p> +<h1>fen.c</h1> +<p>Read and parse the board state in FEN format and read the UCI moves. It can +output to various formats.</p> +<p>See the man page for detailed usage information.</p> +<p>fen.c supports the following output formats:</p> +<ul> +<li>ascii - very simple ASCII mode.</li> +<li><a href="https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation">fen</a> - output FEN of the board state (from FEN and optional played moves).</li> +<li><a href="https://en.wikipedia.org/wiki/Portable_Game_Notation">pgn</a> - Portable Game Notation.</li> +<li>speak - mode to output a description of the moves in words.</li> +<li><a href="https://en.wikipedia.org/wiki/SVG">SVG</a> - Scalable Vector Graphics image.</li> +<li>tty - Terminal output with some markup using escape codes.</li> +</ul> +<p>fen.c can also run in CGI mode. This can be used on a HTTP server:</p> +<ul> +<li><a href="https://codemadness.org/onlyfens">https://codemadness.org/onlyfens</a></li> +<li><a href="https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg">https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg</a></li> +<li><a href="https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn">https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn</a></li> +<li><a href="https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak">https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak</a></li> +</ul> +<p>Terminal output:</p> +<pre><code>curl -s 'https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=tty' +</code></pre> +<h2>Support for Dutch notated PGN and output</h2> +<p>For pgn and "speak mode" it has an option to output Dutch notated PGN or speech +too.</p> +<p>For example:</p> +<ul> +<li>Queen = Dame (Q -> D), translated: lady.</li> +<li>Rook = Toren (R -> T), translated: tower.</li> +<li>Bishop = Loper (B -> L), translated: walker.</li> +<li>Knight = Paard (N -> P), translated: horse.</li> +</ul> +<h2>Example script to stream games from Lichess</h2> +<p>There is an included example script that can stream Lichess games to the +terminal. It uses the Lichess API. It will display the board using terminal +escape codes. The games are automatically annotated with PGN notation and with +text how a human would say the notation. This can also be piped to a speech +synthesizer like <a href="https://github.com/espeak-ng/espeak-ng/">espeak</a> as audio.</p> +<p>pgn-extract is a useful tool to convert Portable Game Notation (PGN) to +Universal Chess Interface (UCI) moves (or do many other useful chess related +things!).</p> +<h2>Example script to generate an animated gif from PGN.</h2> +<p>Theres also an example script included that can generate an animated gif from +PGN using <a href="https://ffmpeg.org/">ffmpeg</a>.</p> +<p>It creates an optimal color palette from the input images and generates an +optimized animated gif. The last move (typically some checkmate) is displayed +slightly longer.</p> +<h1>References and chess related links</h1> +<ul> +<li><p>Lichess FEN puzzle database:<br /> +<a href="https://database.lichess.org/#puzzles">https://database.lichess.org/#puzzles</a></p> +</li> +<li><p>lichess.org:<br /> +<a href="https://lichess.org/">https://lichess.org/</a></p> +</li> +<li><p>SVG of the individual pieces used for fen.c:<br /> +<a href="https://github.com/lichess-org/lila/tree/master/public/piece/cburnett">https://github.com/lichess-org/lila/tree/master/public/piece/cburnett</a></p> +</li> +<li><p>pgn-extract:<br /> +A great multi-purpose PGN manipulation program with many options:<br /> +<a href="https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/">https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/</a></p> +<p>An example to convert PGN games to UCI moves:<br /> +<code>pgn-extract --notags -Wuc</code></p> +</li> +<li><p>Stockfish:<br /> +Strong open source chess engine and analysis tool:<br /> +<a href="https://stockfishchess.org/">https://stockfishchess.org/</a></p> +</li> +</ul> +]]></description> +</item> +<item> <title>xargs: an example for parallel batch jobs</title> <link>https://www.codemadness.org/xargs.html</link> <guid>https://www.codemadness.org/xargs.html</guid> (DIR) diff --git a/output/sitemap.xml b/output/sitemap.xml @@ -1,6 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> + <loc>https://www.codemadness.org/chess-puzzles.html</loc> + <lastmod>2024-02-02</lastmod> +</url> +<url> <loc>https://www.codemadness.org/xargs.html</loc> <lastmod>2023-12-17</lastmod> </url> (DIR) diff --git a/output/twtxt.txt b/output/twtxt.txt @@ -1,3 +1,4 @@ +2024-02-02T00:00:00Z Chess puzzle book generator: https://www.codemadness.org/chess-puzzles.html 2023-11-22T00:00:00Z xargs: an example for parallel batch jobs: https://www.codemadness.org/xargs.html 2023-11-20T00:00:00Z Improved Youtube RSS/Atom feed: https://www.codemadness.org/youtube-feed.html 2023-10-25T00:00:00Z Setup your own mail paste service: https://www.codemadness.org/mailservice.html (DIR) diff --git a/output/urllist.txt b/output/urllist.txt @@ -1,3 +1,4 @@ +https://www.codemadness.org/chess-puzzles.html https://www.codemadness.org/xargs.html https://www.codemadness.org/youtube-feed.html https://www.codemadness.org/mailservice.html (DIR) diff --git a/output/xargs.md b/output/xargs.md @@ -154,7 +154,6 @@ The child process: xargs stops running also. - # Description of used xargs options From the OpenBSD man page: <https://man.openbsd.org/xargs> (DIR) diff --git a/pages/chess-puzzles.cfg b/pages/chess-puzzles.cfg @@ -0,0 +1,6 @@ +title = Chess puzzle book generator +id = chess-puzzles +description = Chess puzzle book generator +keywords = chess, puzzles, lichess +created = 2024-02-02 +updated = 2024-02-02 (DIR) diff --git a/pages/chess-puzzles.md b/pages/chess-puzzles.md @@ -0,0 +1,151 @@ +This was a christmas hack for fun and non-profit. +I wanted to write a chess puzzle book generator. +Inspired by 1001 Deadly Checkmates by John Nunn, ISBN-13: 978-1906454258 and +similar puzzle books. + + +# Example output + +* English version: <https://codemadness.org/downloads/puzzles/> +* Dutch version: <https://hiltjo.nl/puzzles/> + +Terminal version: + + curl -s 'https://codemadness.org/downloads/puzzles/index.vt' | less -R + +I may or may not periodially update this page :) + +Time flies (since Christmas), here is a valentine edition with attraction +puzzles (not only checkmates) using the red "love" theme. +It is optimized for his and her pleasure: + +<https://codemadness.org/downloads/puzzles-valentine/> + + +# Quick overview of how it works + +The generate.sh shellscript generates the output and files for the puzzles. + +The puzzles used are from the lichess.org puzzle database: +<https://database.lichess.org/#puzzles> + +This database is a big CSV file containing the initial board state in the +Forsyth-Edwards Notation (FEN) format and the moves in Universal Chess +Interface (UCI) format. Each line contains the board state and the initial and +solution moves. + +The generated index page is a HTML page, it lists the puzzles. Each puzzle on +this page is an SVG image. This scalable image format looks good in all +resolutions. + + +# Open puzzle data + +Lichess is an [open-source](https://lichess.org/source) and gratis website to play on-line chess. There are +no paid levels to unlock features. All the software hosting Lichess is +open-source and anyone can register and play chess on it for free. Most of the +data about the games played is also open. + +However, the website depends on your donations or contributions. If you can, +[please do so](https://lichess.org/about). + + +# generate.sh + +Read puzzles from the database and shuffle them. Do some sorting based on +difficulty and assign score points. + +The random shuffling is done using a hard-coded seed. This means on the same +machine with the same puzzle database it will regenerate the same sequence of +random puzzles in a deterministic manner. + +It outputs HTML, with support for dark mode. It also outputs .vt files suitable +directly for the terminal and includes a plain-text listing of the solutions +for the puzzles. + + +# fen.c + +Read and parse the board state in FEN format and read the UCI moves. It can +output to various formats. + +See the man page for detailed usage information. + +fen.c supports the following output formats: + +* ascii - very simple ASCII mode. +* [fen](https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation) - output FEN of the board state (from FEN and optional played moves). +* [pgn](https://en.wikipedia.org/wiki/Portable_Game_Notation) - Portable Game Notation. +* speak - mode to output a description of the moves in words. +* [SVG](https://en.wikipedia.org/wiki/SVG) - Scalable Vector Graphics image. +* tty - Terminal output with some markup using escape codes. + +fen.c can also run in CGI mode. This can be used on a HTTP server: + +* <https://codemadness.org/onlyfens> +* <https://codemadness.org/onlyfens?moves=e2e4%20e7e5&flip=1&theme=green&output=svg> +* <https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=pgn> +* <https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=speak> + +Terminal output: + + curl -s 'https://codemadness.org/onlyfens?moves=e2e4%20e7e5&output=tty' + + +## Support for Dutch notated PGN and output + +For pgn and "speak mode" it has an option to output Dutch notated PGN or speech +too. + +For example: + +* Queen = Dame (Q -> D), translated: lady. +* Rook = Toren (R -> T), translated: tower. +* Bishop = Loper (B -> L), translated: walker. +* Knight = Paard (N -> P), translated: horse. + + +## Example script to stream games from Lichess + +There is an included example script that can stream Lichess games to the +terminal. It uses the Lichess API. It will display the board using terminal +escape codes. The games are automatically annotated with PGN notation and with +text how a human would say the notation. This can also be piped to a speech +synthesizer like [espeak](https://github.com/espeak-ng/espeak-ng/) as audio. + +pgn-extract is a useful tool to convert Portable Game Notation (PGN) to +Universal Chess Interface (UCI) moves (or do many other useful chess related +things!). + + +## Example script to generate an animated gif from PGN. + +Theres also an example script included that can generate an animated gif from +PGN using [ffmpeg](https://ffmpeg.org/). + +It creates an optimal color palette from the input images and generates an +optimized animated gif. The last move (typically some checkmate) is displayed +slightly longer. + + +# References and chess related links + +* Lichess FEN puzzle database: + <https://database.lichess.org/#puzzles> + +* lichess.org: + <https://lichess.org/> + +* SVG of the individual pieces used for fen.c: + <https://github.com/lichess-org/lila/tree/master/public/piece/cburnett> + +* pgn-extract: + A great multi-purpose PGN manipulation program with many options: + <https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/> + + An example to convert PGN games to UCI moves: + `pgn-extract --notags -Wuc` + +* Stockfish: + Strong open source chess engine and analysis tool: + <https://stockfishchess.org/>