<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Effluency 2.0</title>
	<atom:link href="http://effluency.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://effluency.net</link>
	<description>assorted musings</description>
	<lastBuildDate>Tue, 15 May 2012 14:41:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Creeping Toward 1.0</title>
		<link>http://effluency.net/2012/05/15/creeping-toward-1-0/</link>
		<comments>http://effluency.net/2012/05/15/creeping-toward-1-0/#comments</comments>
		<pubDate>Tue, 15 May 2012 14:41:41 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[Chess]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=116</guid>
		<description><![CDATA[&#8220;The first 90% of a project takes 90% of the time. The remaining 10% of the project takes the remaining 90% of the time.&#8221; The closer I get to thinking that my Artifex Chess plugin is releasable, the more things I feel are necessary to complete before finishing it. Some of this is testing. I [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;The first 90% of a project takes 90% of the time.  The remaining 10% of the project takes the remaining 90% of the time.&#8221;</p>
<p>The closer I get to thinking that my Artifex Chess plugin is releasable, the more things I feel are necessary to complete before finishing it.  Some of this is testing.  I tried to import a different PGN and it failed on something silly.  That does need to be fixed.  When a project&#8217;s phase gets this close to the finish line, bug fixing must take priority to feature improvements.</p>
<p>There are other nagging things, though.  The ChessECO piece is going to take quite a bit of time to complete.  Some of the openings are many moves deep and I have a hard time writing FEN codes for board positions in my head.  I&#8217;ll need to break out my chessboard and pieces in order to finish.  Things is, the ECO detector is such a minor feature overall.  Is it worth taking the time to pursue this now when I could add it as a 1.1 release?</p>
<p>I want to allow the plugin to be configurable.  While I like the large board, each chessboard position image is roughly 15K  and can appear sluggish.  I could preload the images, but that&#8217;s another refinement.  I could support smaller chessboards, but that&#8217;s another refinement.  I could support a variety of thematic chessboard sets that are blogger-selectable.  That&#8217;s another refinement.  I should allow some kind of stylesheet support so that the plugin would look nice with anyone&#8217;s theme.  Again, refinement.  All of these things could be a 1.0.1 release.</p>
<p>Meanwhile, I did have to add some basic code.  I wrote a check detector so that moves like Bb4+ do actually result in a check.  I also use the check detector so that a move does not put or keep the moving player in check.  I then abstracted the check detector to a &#8220;square being attacked&#8221; function so that intervening squares can be checked for attackers during an attempt to castle; the check detector is now an &#8220;is the king&#8217;s square being attacked&#8221; function.  This has been added and tested.</p>
<p>I now have two final pieces to code.  The first is a checkmate detector.  This is a bit more involved than a simple check detector as it now has to determine if a checking condition can be moved out of, blocked, or if a capture of the checking piece is possible.  The second is a refinement to the castling state logic.  If the king moves, then castling is no longer possible.  If a rook moves, then castling to that side is no longer possible.  I do not detect or mark these conditions yet.</p>
<p>Once these pieces are in place, and tested, then I believe I can release Artifex Chess into the wild.</p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/05/15/creeping-toward-1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ECO</title>
		<link>http://effluency.net/2012/05/14/eco/</link>
		<comments>http://effluency.net/2012/05/14/eco/#comments</comments>
		<pubDate>Mon, 14 May 2012 14:41:37 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[Chess]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=95</guid>
		<description><![CDATA[ECO stands for &#8220;Encyclopedia of Chess Openings&#8221;. It is a collection of opening chess move classifications. For example, one of my favorite openings when playing Black is called the French Defense: Position after 1. e4 e6 2. d4 d5 ChessWorld, where I play most of my on-line chess, does not name the openings in their [...]]]></description>
			<content:encoded><![CDATA[<p>ECO stands for &#8220;Encyclopedia of Chess Openings&#8221;.  It is a collection of opening chess move classifications.  For example, one of my favorite openings when playing Black is called the French Defense:</p>
<p>Position after 1. e4 e6 2. d4 d5<br />
<img class="fen" src="http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqkbnr-ppp2ppp-4p3-3p4-3PP3-8-PPP2PPP-RNBQKBNR.gif" /></p>
<p><a href="http://chessworld.net" title="ChessWorld">ChessWorld</a>, where I play most of my on-line chess, does not name the openings in their game&#8217;s PGN data.  Instead, it is left to an annotator to make that determination.  For my plugin, I decided to embed the defining FEN data for 500 or so chess openings into a ChessECO class.  This class will return the opening code and name by trying to index the game&#8217;s list of FEN notations and going as deeply into the database as possible; some openings have numerous uniquely named variations that go 25 moves deep.</p>
<p>I currently have over 230 openings defined in the class without even touching the queen pawn openings yet.</p>
<p>Correction: ChessWorld does embed ECO data in their PGNs.  However, they simply embed the code, not the name.  Since some individual codes cover several rarely used openings, I&#8217;m deciding to enhance the capability beyond simply doing a code -> generic name look-up.</p>
<p>I now have 271 openings/variations coded.</p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/05/14/eco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Look Inside Artifex Chess</title>
		<link>http://effluency.net/2012/05/10/a-look-inside-artifex-chess/</link>
		<comments>http://effluency.net/2012/05/10/a-look-inside-artifex-chess/#comments</comments>
		<pubDate>Thu, 10 May 2012 16:15:07 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[Chess]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=86</guid>
		<description><![CDATA[The initial design, or redesign as I had written similar code in Ruby for the Barscape forum, for this plugin is to provide support to embed two types of chess information in a blog post: simple chessboard position, via a &#8220;fen&#8221; tag, and full chess game playback, via the &#8220;pgn&#8221; tag. Currently, besides graphics files, [...]]]></description>
			<content:encoded><![CDATA[<p>The initial design, or redesign as I had written similar code in Ruby for the Barscape forum, for this plugin is to provide support to embed two types of chess information in a blog post: simple chessboard position, via a &#8220;fen&#8221; tag, and full chess game playback, via the &#8220;pgn&#8221; tag.</p>
<p>Currently, besides graphics files, the plugin is composed of four PHP source files: artifex-chess.php, chessfen.php, chessboard.php and chessgame.php.  The first file is the plugin&#8217;s &#8220;main&#8221; code.  It includes the other three PHP files, the fen and pgn tag filters and the filter registration code.  The other three source files contain class definition and implementation code for ChessFEN, ChessBoard and ChessGame classes.</p>
<p>ChessFEN is a class that manages the game state information found in Forsyth-Edwards Notation.  It includes fields to manage each individual game property, setter/getter functions, castling status and move clock management functions and an emitter function to convert the property fields into a full FEN string.</p>
<p>ChessGame is a class that is used solely for pgn support.  It is the primary interface for the pgn tag filter function.  It contains the high-level pgn parsing algorithm and code emitter logic.  The emitter will substitute the pgn tag with HTML and Javascript logic to display and manage the user interactions with the game&#8217;s playback.</p>
<p>ChessBoard does most of the dirty work.  It is the primary interface for the fen tag filter function and is used by the ChessGame pgn parsing algorithm.  It manages the chessboard and determines move legality.  Its interface with ChessGame is via its try_move() function, which in turn relies on its private sniff_move() function.  If the attempted move passes the &#8220;sniff test&#8221;, then the move is allowed.  sniff_move() also relies heavily on two other functions: can_move_to() and is_lane_clear().  As of this writing, chessboard.php contains 689 lines of code/comments.  These four functions take up 396 lines of code/comments, or over half.  And there&#8217;s more work to be done as I am not currently handling castling and disambiguative moves (a la Nbd7) and the code is not checking check or checkmate pre- and post-move states.</p>
<p>The implementation of both tag filters will operate using a compile -> object paradigm.  The resulting objects are stored in a &#8220;cache&#8221; subdirectory under the Artifex Chess&#8217;s plugins home directory in the WordPress file system tree.  The fen tag&#8217;s object is a GIF image constructed using the ChessBoard->make_gif() function.  The name of the GIF image corresponds to the &#8220;shortened&#8221; FEN string with &#8216;/&#8217; characters replaced with &#8216;_&#8217;.  When make_gif() is called, if the image already exists in the cache, then a new image it not recreated and the image filename is returned.</p>
<p>PGN&#8217;s cached object is still under development.  Initial designed were going to be raw Javascript, but I don&#8217;t want to have code read in and eval&#8217;d for security reasons.  It would be fast, but it&#8217;s also a dangerous thing to do.  Instead, the cached object will consist of a YAML file representation of a hashed PHP array.  The array in question is a collection of game state data collected by the pgn compiler.</p>
<p>A nice side effect of the pgn compilation is that GIFs will be created for each board position in a successfully processed game.  These GIFs will named according to the same convention as the fen GIFs and the same cache will contain<br />
them.</p>
<p>In either case, cached objects will only be created upon a fully successful compilation step.  Failed compilations will translate the fen/pgn tags with error messages.  This will allow the user to use the Preview feature to determine if the compilation was successful prior to publication.</p>
<p>Update:<br />
Disambiguous moves and castling now supported.  All moves in the test pgn post now compile fully.  On to the next phase.</p>
<p>Update 2:<br />
Chessboard GIFs created upon successful compilation.  Time to add game navigation / Javascript logic.</p>
<p>Update 3:<br />
Basic game navigation is now fully enabled.  The plugin is at the V0.9 stage.</p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/05/10/a-look-inside-artifex-chess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Artifex Chess</title>
		<link>http://effluency.net/2012/05/06/artifex-chess/</link>
		<comments>http://effluency.net/2012/05/06/artifex-chess/#comments</comments>
		<pubDate>Mon, 07 May 2012 02:25:17 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[Chess]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=76</guid>
		<description><![CDATA[After going back into some old Ruby code that I&#8217;d written for chess game operations and after getting a better understanding of the power of WordPress plugins, I decided to consolidate my FEN and PGN plugins into a single Artifex Chess plugin. Artifex Prime is a pseudonym of mine that I used when making code [...]]]></description>
			<content:encoded><![CDATA[<p>After going back into some old Ruby code that I&#8217;d written for chess game operations and after getting a better understanding of the power of WordPress plugins, I decided to consolidate my FEN and PGN plugins into a single Artifex Chess plugin.  Artifex Prime is a pseudonym of mine that I used when making code modifications to the phpBB forum software for the Barscape forum.  I never used this pseudonym in any published code; the publication of the Artifex Chess plugin will mark its first entry into the real world.  After I finish with the PGN game support code, I&#8217;ll publish the plugin to the WordPress site.</p>
<p>Artifex Prime was inspired (or stolen outright) from Neal Stephenson&#8217;s book, <a href="http://en.wikipedia.org/wiki/The_Diamond_Age" title="The Diamond Age" target="_blank">The Diamond Age</a>.</p>
<p>As of this post, the original FEN &#038; PGN plugins have been deactivated and both FEN &#038; PGN tags are now being handled with the Artifex Chess plugin via its ChessBoard and ChessGame classes.</p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/05/06/artifex-chess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PGN Plugin</title>
		<link>http://effluency.net/2012/04/23/pgn-plug-in/</link>
		<comments>http://effluency.net/2012/04/23/pgn-plug-in/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 11:43:49 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[Chess]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=60</guid>
		<description><![CDATA[Now it&#8217;s time to write a PGN (Portable Game Notation) game player. PGN is a way to record chess games, whether finished or in progress. It is not used to play games interactively, but to follow the course of a game and understand how the game unfolded move by move. It is used for learning [...]]]></description>
			<content:encoded><![CDATA[<p>Now it&#8217;s time to write a PGN (<a href="http://en.wikipedia.org/wiki/Portable_Game_Notation" title="Portable Game Notation" target="_blank">Portable Game Notation</a>) game player.</p>
<p>PGN is a way to record chess games, whether finished or in progress.  It is not used to play games interactively, but to follow the course of a game and understand how the game unfolded move by move.  It is used for learning and analysis.  A PGN player will contain a record of all the moves of the game, its result, who played and will allow the user to watch the game unfold, whether automatically or by clicking on next/previous buttons or on individual moves in the record.</p>
<p>Whereas the FEN tag simply converted a coded character string into an image, the PGN player is more involved and will allow user interaction with the game.  This means Javascript, to handle the interaction of user events and board position.</p>
<p>The biggest difficulty is that a post may contain multiple games, and that the main page may contain multiple posts with multiple games.  Managing all of that will be a challenge.</p>
<p>First things first, though.  Let&#8217;s start with one PGN tag in one post.  The following game resulted in the FEN position in my last post.  (And in case you couldn&#8217;t tell, on ChessWorld, I&#8217;m the Feldmarschal.)</p>
<p><script type="text/javascript">
var pgn_imgs_60_0 = new Array();
pgn_imgs_60_0[0] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqkbnr-pppppppp-8-8-8-8-PPPPPPPP-RNBQKBNR.gif";
pgn_imgs_60_0[1] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqkbnr-pppppppp-8-8-4P3-8-PPPP1PPP-RNBQKBNR.gif";
pgn_imgs_60_0[2] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqkbnr-pppp1ppp-4p3-8-4P3-8-PPPP1PPP-RNBQKBNR.gif";
pgn_imgs_60_0[3] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqkbnr-pppp1ppp-4p3-8-3PP3-8-PPP2PPP-RNBQKBNR.gif";
pgn_imgs_60_0[4] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqkbnr-ppp2ppp-4p3-3p4-3PP3-8-PPP2PPP-RNBQKBNR.gif";
pgn_imgs_60_0[5] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqkbnr-ppp2ppp-4p3-3p4-2PPP3-8-PP3PPP-RNBQKBNR.gif";
pgn_imgs_60_0[6] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqk1nr-ppp2ppp-4p3-3p4-1bPPP3-8-PP3PPP-RNBQKBNR.gif";
pgn_imgs_60_0[7] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqk1nr-ppp2ppp-4p3-3p4-1bPPP3-8-PP1B1PPP-RN1QKBNR.gif";
pgn_imgs_60_0[8] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1bqk1nr-ppp2ppp-2n1p3-3p4-1bPPP3-8-PP1B1PPP-RN1QKBNR.gif";
pgn_imgs_60_0[9] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1bqk1nr-ppp2ppp-2n1p3-3p4-1bPPP1Q1-8-PP1B1PPP-RN2KBNR.gif";
pgn_imgs_60_0[10] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-2n1pq2-3p4-1bPPP1Q1-8-PP1B1PPP-RN2KBNR.gif";
pgn_imgs_60_0[11] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-2n1pq2-3pP3-1bPP2Q1-8-PP1B1PPP-RN2KBNR.gif";
pgn_imgs_60_0[12] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-2n1pq2-3pP3-2PP2Q1-8-PP1b1PPP-RN2KBNR.gif";
pgn_imgs_60_0[13] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-2n1pq2-3pP3-2PP2Q1-8-PP1N1PPP-R3KBNR.gif";
pgn_imgs_60_0[14] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-4pq2-3pn3-2PP2Q1-8-PP1N1PPP-R3KBNR.gif";
pgn_imgs_60_0[15] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-4pq2-3pP3-2P3Q1-8-PP1N1PPP-R3KBNR.gif";
pgn_imgs_60_0[16] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-4p3-3pq3-2P3Q1-8-PP1N1PPP-R3KBNR.gif";
pgn_imgs_60_0[17] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-4p3-3pq3-2P3Q1-8-PP1NBPPP-R3K1NR.gif";
pgn_imgs_60_0[18] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-4p3-3p4-2P3Q1-8-Pq1NBPPP-R3K1NR.gif";
pgn_imgs_60_0[19] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-4p3-3p4-2P3Q1-8-Pq1NBPPP-1R2K1NR.gif";
pgn_imgs_60_0[20] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-4pq2-3p4-2P3Q1-8-P2NBPPP-1R2K1NR.gif";
pgn_imgs_60_0[21] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-4pq2-3P4-6Q1-8-P2NBPPP-1R2K1NR.gif";
pgn_imgs_60_0[22] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-5q2-3p4-6Q1-8-P2NBPPP-1R2K1NR.gif";
pgn_imgs_60_0[23] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k1nr-ppp2ppp-5q2-3p4-1Q6-8-P2NBPPP-1R2K1NR.gif";
pgn_imgs_60_0[24] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k2r-ppp1nppp-5q2-3p4-1Q6-8-P2NBPPP-1R2K1NR.gif";
pgn_imgs_60_0[25] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b1k2r-ppp1nppp-5q2-3p4-1Q6-5N2-P2NBPPP-1R2K2R.gif";
pgn_imgs_60_0[26] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b2rk1-ppp1nppp-5q2-3p4-1Q6-5N2-P2NBPPP-1R2K2R.gif";
pgn_imgs_60_0[27] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b2rk1-ppp1nppp-5q2-3p4-1Q6-5N2-P2NBPPP-1R3RK1.gif";
pgn_imgs_60_0[28] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b2rk1-p1p1nppp-1p3q2-3p4-1Q6-5N2-P2NBPPP-1R3RK1.gif";
pgn_imgs_60_0[29] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b2rk1-p1p1nppp-1p3q2-3p4-1Q6-3B1N2-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[30] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b2rk1-p3nppp-1p3q2-2pp4-1Q6-3B1N2-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[31] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r1b2rk1-p3nppp-1p3q2-2pp4-Q7-3B1N2-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[32] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p3nppp-1p3q2-2pp1b2-Q7-3B1N2-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[33] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p3nppp-1p3q2-2pp1B2-Q7-5N2-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[34] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p3nppp-1p6-2pp1q2-Q7-5N2-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[35] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p3nppp-1p6-2pp1q2-Q6N-8-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[36] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p3nppp-1p3q2-2pp4-Q6N-8-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[37] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p3nppp-1p3q2-2pp4-6QN-8-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[38] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p4ppp-1p3qn1-2pp4-6QN-8-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[39] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p4ppp-1p3qN1-2pp4-6Q1-8-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[40] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p4ppp-1p4q1-2pp4-6Q1-8-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[41] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r4rk1-p2Q1ppp-1p4q1-2pp4-8-8-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[42] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p2Q1ppp-1p4q1-2pp4-8-8-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[43] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p4q1-2pp4-8-7Q-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[44] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p4q1-2p5-3p4-7Q-P2N1PPP-1R3RK1.gif";
pgn_imgs_60_0[45] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p4q1-2p5-P2p4-7Q-3N1PPP-1R3RK1.gif";
pgn_imgs_60_0[46] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-2p5-P2p4-7Q-2qN1PPP-1R3RK1.gif";
pgn_imgs_60_0[47] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-2p5-P2p4-5N1Q-2q2PPP-1R3RK1.gif";
pgn_imgs_60_0[48] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-2p5-q2p4-5N1Q-5PPP-1R3RK1.gif";
pgn_imgs_60_0[49] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-2p2Q2-q2p4-5N2-5PPP-1R3RK1.gif";
pgn_imgs_60_0[50] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p2q1ppp-1p6-2p2Q2-3p4-5N2-5PPP-1R3RK1.gif";
pgn_imgs_60_0[51] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p2q1ppp-1p6-2p5-3p4-3Q1N2-5PPP-1R3RK1.gif";
pgn_imgs_60_0[52] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1pq5-2p5-3p4-3Q1N2-5PPP-1R3RK1.gif";
pgn_imgs_60_0[53] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1pq5-2p5-3p4-3Q1N2-5PPP-1R2R1K1.gif";
pgn_imgs_60_0[54] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1pq5-8-2pp4-3Q1N2-5PPP-1R2R1K1.gif";
pgn_imgs_60_0[55] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1pq5-5Q2-2pp4-5N2-5PPP-1R2R1K1.gif";
pgn_imgs_60_0[56] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1pq5-5Q2-2p5-3p1N2-5PPP-1R2R1K1.gif";
pgn_imgs_60_0[57] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1pq5-5QN1-2p5-3p4-5PPP-1R2R1K1.gif";
pgn_imgs_60_0[58] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p4q1-5QN1-2p5-3p4-5PPP-1R2R1K1.gif";
pgn_imgs_60_0[59] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p4q1-6N1-2p2Q2-3p4-5PPP-1R2R1K1.gif";
pgn_imgs_60_0[60] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p4q1-6N1-2p2Q2-8-3p1PPP-1R2R1K1.gif";
pgn_imgs_60_0[61] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p4q1-6N1-2p2Q2-8-3p1PPP-1R1R2K1.gif";
pgn_imgs_60_0[62] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-6N1-2p2Q2-8-3p1PPP-1q1R2K1.gif";
pgn_imgs_60_0[63] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-6N1-2p5-5Q2-3p1PPP-1q1R2K1.gif";
pgn_imgs_60_0[64] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-6N1-2p5-5Q2-3p1PPP-3q2K1.gif";
pgn_imgs_60_0[65] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-6N1-2p5-8-3p1PPP-3Q2K1.gif";
pgn_imgs_60_0[66] = "http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-6N1-8-2p5-3p1PPP-3Q2K1.gif";
pgn_curimg_60_0 = 0;
pgn_maximg_60_0 = 67;
var pgn_notes_60_0 = new Array();
pgn_notes_60_0[66] = "White resigned";
function pgn_first_60_0() {
 return pgn_setnth_60_0(0);
}
function pgn_prev_60_0() {
 var n = pgn_curimg_60_0;
 if (n == 0) return false;
 return pgn_setnth_60_0(n-1);
}
function pgn_next_60_0() {
 var n = pgn_curimg_60_0 + 1;
 if (n == pgn_maximg_60_0) return false;
 if (n > pgn_maximg_60_0) n = pgn_maximg_60_0 - 1;
 return pgn_setnth_60_0(n);
}
function pgn_last_60_0() {
 var n = pgn_maximg_60_0 - 1;
 return pgn_setnth_60_0(n);
}
function pgn_setnth_60_0(nth) {
 if (pgn_curimg_60_0 > 0) {
  var e = document.getElementById("pgn_move_60_0_" + pgn_curimg_60_0);
  if (e != null) {
   e.style.backgroundColor= "transparent";
  }
 }
 var e = document.getElementById("fen_60_0");
 if (e != null) {
  e.src = pgn_imgs_60_0[nth];
  pgn_curimg_60_0 = nth;
 }
 if (nth > 0) {
  var e = document.getElementById("pgn_move_60_0_" + nth);
  if (e != null) {
   e.style.backgroundColor= "#c00";
  }
  var e = document.getElementById("pgn_note_60_0");
  if (e != null) {
   if (pgn_notes_60_0[nth] != undefined) {
    e.innerHTML= pgn_notes_60_0[nth];
   }
   else {
    e.innerHTML= "";
   }
  }
 }
 else {
  var e = document.getElementById("pgn_note_60_0");
  if (e != null) {
   e.innerHTML= "";
  }
 }
 return false;
}
</script><style type="text/css">div.fen span.move { cursor: pointer; }div.fen span.move:hover { text-decoration: underline; }</style><div class="fen" id="60_0" style="background:#222;font-size:0.9em;border: 1px solid black;padding:1em">Event: www.ChessWorld.net server game<br />Date: 2008.8.26<br />White: Capstone (1697)<br />Black: Feldmarschal (1959)<br />Result: 0-1<br /><br /><center><img id="fen_60_0" src="http://effluency.net/wp-content/plugins/artifex-chess/cache/rnbqkbnr-pppppppp-8-8-8-8-PPPPPPPP-RNBQKBNR.gif" /><br /><button onclick="return pgn_first_60_0();">&laquo;&laquo</button><button onclick="return pgn_prev_60_0();">&laquo;</button><button onclick="return pgn_next_60_0();">&raquo;</button><button onclick="return pgn_last_60_0();">&raquo;&raquo</button><br /><br />French Defense (C01)<br /></center><i>1</i>. <span class="move" id="pgn_move_60_0_1" onclick="return pgn_setnth_60_0(1);">e4</span> <span class="move" id="pgn_move_60_0_2" onclick="return pgn_setnth_60_0(2);">e6</span> <i>2</i>. <span class="move" id="pgn_move_60_0_3" onclick="return pgn_setnth_60_0(3);">d4</span> <span class="move" id="pgn_move_60_0_4" onclick="return pgn_setnth_60_0(4);">d5</span> <i>3</i>. <span class="move" id="pgn_move_60_0_5" onclick="return pgn_setnth_60_0(5);">c4</span> <span class="move" id="pgn_move_60_0_6" onclick="return pgn_setnth_60_0(6);">Bb4+</span> <i>4</i>. <span class="move" id="pgn_move_60_0_7" onclick="return pgn_setnth_60_0(7);">Bd2</span> <span class="move" id="pgn_move_60_0_8" onclick="return pgn_setnth_60_0(8);">Nc6</span> <i>5</i>. <span class="move" id="pgn_move_60_0_9" onclick="return pgn_setnth_60_0(9);">Qg4</span> <span class="move" id="pgn_move_60_0_10" onclick="return pgn_setnth_60_0(10);">Qf6</span> <i>6</i>. <span class="move" id="pgn_move_60_0_11" onclick="return pgn_setnth_60_0(11);">e5</span> <span class="move" id="pgn_move_60_0_12" onclick="return pgn_setnth_60_0(12);">Bxd2+</span> <i>7</i>. <span class="move" id="pgn_move_60_0_13" onclick="return pgn_setnth_60_0(13);">Nxd2</span> <span class="move" id="pgn_move_60_0_14" onclick="return pgn_setnth_60_0(14);">Nxe5</span> <i>8</i>. <span class="move" id="pgn_move_60_0_15" onclick="return pgn_setnth_60_0(15);">dxe5</span> <span class="move" id="pgn_move_60_0_16" onclick="return pgn_setnth_60_0(16);">Qxe5+</span> <i>9</i>. <span class="move" id="pgn_move_60_0_17" onclick="return pgn_setnth_60_0(17);">Be2</span> <span class="move" id="pgn_move_60_0_18" onclick="return pgn_setnth_60_0(18);">Qxb2</span> <i>10</i>. <span class="move" id="pgn_move_60_0_19" onclick="return pgn_setnth_60_0(19);">Rb1</span> <span class="move" id="pgn_move_60_0_20" onclick="return pgn_setnth_60_0(20);">Qf6</span> <i>11</i>. <span class="move" id="pgn_move_60_0_21" onclick="return pgn_setnth_60_0(21);">cxd5</span> <span class="move" id="pgn_move_60_0_22" onclick="return pgn_setnth_60_0(22);">exd5</span> <i>12</i>. <span class="move" id="pgn_move_60_0_23" onclick="return pgn_setnth_60_0(23);">Qb4</span> <span class="move" id="pgn_move_60_0_24" onclick="return pgn_setnth_60_0(24);">Ne7</span> <i>13</i>. <span class="move" id="pgn_move_60_0_25" onclick="return pgn_setnth_60_0(25);">Ngf3</span> <span class="move" id="pgn_move_60_0_26" onclick="return pgn_setnth_60_0(26);">O-O</span> <i>14</i>. <span class="move" id="pgn_move_60_0_27" onclick="return pgn_setnth_60_0(27);">O-O</span> <span class="move" id="pgn_move_60_0_28" onclick="return pgn_setnth_60_0(28);">b6</span> <i>15</i>. <span class="move" id="pgn_move_60_0_29" onclick="return pgn_setnth_60_0(29);">Bd3</span> <span class="move" id="pgn_move_60_0_30" onclick="return pgn_setnth_60_0(30);">c5</span> <i>16</i>. <span class="move" id="pgn_move_60_0_31" onclick="return pgn_setnth_60_0(31);">Qa4</span> <span class="move" id="pgn_move_60_0_32" onclick="return pgn_setnth_60_0(32);">Bf5</span> <i>17</i>. <span class="move" id="pgn_move_60_0_33" onclick="return pgn_setnth_60_0(33);">Bxf5</span> <span class="move" id="pgn_move_60_0_34" onclick="return pgn_setnth_60_0(34);">Qxf5</span> <i>18</i>. <span class="move" id="pgn_move_60_0_35" onclick="return pgn_setnth_60_0(35);">Nh4</span> <span class="move" id="pgn_move_60_0_36" onclick="return pgn_setnth_60_0(36);">Qf6</span> <i>19</i>. <span class="move" id="pgn_move_60_0_37" onclick="return pgn_setnth_60_0(37);">Qg4</span> <span class="move" id="pgn_move_60_0_38" onclick="return pgn_setnth_60_0(38);">Ng6</span> <i>20</i>. <span class="move" id="pgn_move_60_0_39" onclick="return pgn_setnth_60_0(39);">Nxg6</span> <span class="move" id="pgn_move_60_0_40" onclick="return pgn_setnth_60_0(40);">Qxg6</span> <i>21</i>. <span class="move" id="pgn_move_60_0_41" onclick="return pgn_setnth_60_0(41);">Qd7</span> <span class="move" id="pgn_move_60_0_42" onclick="return pgn_setnth_60_0(42);">Rfd8</span> <i>22</i>. <span class="move" id="pgn_move_60_0_43" onclick="return pgn_setnth_60_0(43);">Qh3</span> <span class="move" id="pgn_move_60_0_44" onclick="return pgn_setnth_60_0(44);">d4</span> <i>23</i>. <span class="move" id="pgn_move_60_0_45" onclick="return pgn_setnth_60_0(45);">a4</span> <span class="move" id="pgn_move_60_0_46" onclick="return pgn_setnth_60_0(46);">Qc2</span> <i>24</i>. <span class="move" id="pgn_move_60_0_47" onclick="return pgn_setnth_60_0(47);">Nf3</span> <span class="move" id="pgn_move_60_0_48" onclick="return pgn_setnth_60_0(48);">Qxa4</span> <i>25</i>. <span class="move" id="pgn_move_60_0_49" onclick="return pgn_setnth_60_0(49);">Qf5</span> <span class="move" id="pgn_move_60_0_50" onclick="return pgn_setnth_60_0(50);">Qd7</span> <i>26</i>. <span class="move" id="pgn_move_60_0_51" onclick="return pgn_setnth_60_0(51);">Qd3</span> <span class="move" id="pgn_move_60_0_52" onclick="return pgn_setnth_60_0(52);">Qc6</span> <i>27</i>. <span class="move" id="pgn_move_60_0_53" onclick="return pgn_setnth_60_0(53);">Rfe1</span> <span class="move" id="pgn_move_60_0_54" onclick="return pgn_setnth_60_0(54);">c4</span> <i>28</i>. <span class="move" id="pgn_move_60_0_55" onclick="return pgn_setnth_60_0(55);">Qf5</span> <span class="move" id="pgn_move_60_0_56" onclick="return pgn_setnth_60_0(56);">d3</span> <i>29</i>. <span class="move" id="pgn_move_60_0_57" onclick="return pgn_setnth_60_0(57);">Ng5</span> <span class="move" id="pgn_move_60_0_58" onclick="return pgn_setnth_60_0(58);">Qg6</span> <i>30</i>. <span class="move" id="pgn_move_60_0_59" onclick="return pgn_setnth_60_0(59);">Qf4</span> <span class="move" id="pgn_move_60_0_60" onclick="return pgn_setnth_60_0(60);">d2</span> <i>31</i>. <span class="move" id="pgn_move_60_0_61" onclick="return pgn_setnth_60_0(61);">Red1</span> <span class="move" id="pgn_move_60_0_62" onclick="return pgn_setnth_60_0(62);">Qxb1</span> <i>32</i>. <span class="move" id="pgn_move_60_0_63" onclick="return pgn_setnth_60_0(63);">Qf3</span> <span class="move" id="pgn_move_60_0_64" onclick="return pgn_setnth_60_0(64);">Qxd1+</span> <i>33</i>. <span class="move" id="pgn_move_60_0_65" onclick="return pgn_setnth_60_0(65);">Qxd1</span> <span class="move" id="pgn_move_60_0_66" onclick="return pgn_setnth_60_0(66);">c3</span> <br /><span id="pgn_note_60_0"></span><br /></div></p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/04/23/pgn-plug-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My First WordPress Plug-in</title>
		<link>http://effluency.net/2012/04/22/my-first-wordpress-plug-in/</link>
		<comments>http://effluency.net/2012/04/22/my-first-wordpress-plug-in/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 01:03:52 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[Chess]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=52</guid>
		<description><![CDATA[It took me some time, but I was able to port my FEN chessboard support from Barscape to a WordPress plug-in. From ChessWorld.net: White: capstone (1697) Black: Feldmarschal (1953) Result: 0-1 Position after 33. &#8230; c3 This plug-in uses &#8216;fen&#8217; tags with the FEN notation string embedded within. The plug-in filter finds all of the [...]]]></description>
			<content:encoded><![CDATA[<p>It took me some time, but I was able to port my FEN chessboard support from Barscape to a WordPress plug-in.</p>
<p>From ChessWorld.net:<br />
White: capstone (1697)<br />
Black: Feldmarschal (1953)<br />
Result: 0-1</p>
<p>Position after 33. &#8230; c3<br />
<img class="fen" src="http://effluency.net/wp-content/plugins/artifex-chess/cache/r2r2k1-p4ppp-1p6-6N1-8-2p5-3p1PPP-3Q2K1.gif" /></p>
<p>This plug-in uses &#8216;fen&#8217; tags with the FEN notation string embedded within.  The plug-in filter finds all of the embedded FEN strings within the post and processes each one.  If the string is not valid, it will replace the fen tags and embedded string with an error message.  This will help the blogger when previewing his/her post.</p>
<p>If the FEN string is valid, it will build a GIF image file based on the contents of the FEN string.  The image file will be placed in a cache directory off the plug-in&#8217;s installed directory.  The cache will be checked first so that heavy traffic to the blog won&#8217;t bog the server down with repetitive processing.</p>
<p>As the available number of chess positions is quite large, it is possible that the cache&#8217;s entries may fill the server.  At roughly 20K per image, that may not be a problem.  That said, the plug-in should probably cull old entries after some threshold is reached.  Or a technically savvy blogger could set up a cron job to do this, which is how I handled the situation with the Barscape forum.</p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/04/22/my-first-wordpress-plug-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Site Ideas</title>
		<link>http://effluency.net/2012/04/22/site-ideas/</link>
		<comments>http://effluency.net/2012/04/22/site-ideas/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 19:10:05 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=46</guid>
		<description><![CDATA[One of the really cool things about WordPress is the ability to support plug-ins. Plug-ins allow site developers to embed certain types of objects. For example, there&#8217;s a plug-in called Embedded Chess which allows completed games to be replayed and analyzed. I tried to use it, but I thought the board and pieces were too [...]]]></description>
			<content:encoded><![CDATA[<p>One of the really cool things about WordPress is the ability to support plug-ins.  Plug-ins allow site developers to embed certain types of objects.</p>
<p>For example, there&#8217;s a plug-in called Embedded Chess which allows completed games to be replayed and analyzed.  I tried to use it, but I thought the board and pieces were too small.  The background was also white, which was jarring compared to the overall site theme.  I&#8217;m sure there were options in there so that I could tailor it to my site, but I couldn&#8217;t find them after cursory look.</p>
<p>The chess plug-in bothers me somewhat.  I had written a chess game replayer, but I may have deleted it during a recent file housecleaning spurt on my web server.  I can probably rewrite it, but that would be another thing on my ever-present to-do list.</p>
<p>So, random ruminations aside, here are two plug-ins I&#8217;m going to write in the short-term, in between site design work:</p>
<ul>
<li>FEN Display</li>
<li>List</li>
</ul>
<p>FEN stands for <a href="http://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation" title="Forsyth-Edwards Notation" target="_blank">Forsyth-Edwards Notation</a> and is a way to record a chess board position using letters and numbers.  I had written some FEN support code for the Barscape forum and I think it would make a great project with which to learn WordPress plug-ins.</p>
<p>The List plug-ins is just a way to keep track of stuff that you would have in a simple spreadsheet.  Rows and columns with headers with possible color coding.  Yeah, I know.  It&#8217;s an HTML table.  Big whoop.  The heart of the issue is that I want to import/export the list from somewhere and/or have an easy way of editing it.  Ever hand edit an HTML table with more than 48 entries, like say&#8230; a NH 48 4000&#8242;er peakbagging list?</p>
<p>Otoh, maybe I&#8217;m just reinventing the wheel here.  I could just manage the list in Apple Numbers (or M$ Excel), and simply export it.  One possible issue would be the color coding of cells.  I would have to couple the raw spreadsheet data (a la CSV) to a stylesheet.  And maybe that&#8217;s what the plug-in works with.  I certainly don&#8217;t want to roll-my-own spreadsheet.</p>
<p>First up: the FEN plug-in.</p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/04/22/site-ideas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Theme Design</title>
		<link>http://effluency.net/2012/04/22/wordpress-theme-design/</link>
		<comments>http://effluency.net/2012/04/22/wordpress-theme-design/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 14:16:05 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=36</guid>
		<description><![CDATA[The difference between rolling your own software framework and using someone else&#8217;s is that you have to learn to play by their rules (decisions). When you start adding layers on top of that, the learning curve steepens. I don&#8217;t like the basic Choatic Soul theme I picked for Effluency 2.0. Well, I do; I did [...]]]></description>
			<content:encoded><![CDATA[<p>The difference between rolling your own software framework and using someone else&#8217;s is that you have to learn to play by their rules (decisions).  When you start adding layers on top of that, the learning curve steepens.</p>
<p>I don&#8217;t like the basic Choatic Soul theme I picked for Effluency 2.0.  Well, I do; I did select it over others.  But there are things I don&#8217;t like about it, like its 760 pixel hard-coded fixed with.  On my 1440 pixel wide Mac laptop screen, that means that the blog content only fills 53% of the available width of my monitor.  (I tend to run my browser full-screen.)  On my 28&#8243; 1920 pixel wide HD monitor, it&#8217;s even worse.</p>
<p>The narrow width and small font size bothers me enough that I feel that I need to tweak it.  I had modified a theme with the original Effluency blog, but in order to make that old blog&#8217;s theme work, I modified the original theme files.  The effect of this was that I did not install WordPress upgrades in order to prevent redoing the difficult chore of fixing the theme.  The WordPress documentation at the time was dreadful.  The net effect of not doing upgrades, however, lead to the malware attack that brought the original Effluency down and led me to begin work on a secure framework.</p>
<p>In the year(s) since, though, WordPress has made much-needed improvements to both their design and their documentation.  WordPress now supports &#8220;child themes&#8221;, theme behavior overrides that a developer can create without modifying the original theme specification files.  With this capability, I should be able to tweak Chaotic Soul for my own purposes.</p>
<p>Update:  I&#8217;ve decided to switch the theme to Chaos Theory and work from there.  It&#8217;s a minimalist theme with post titles on the left and the sidebar/admin stuff on the bottom.</p>
<p>Update:  After creating a child theme and getting most of the elements to be variable-sized, I decided that I didn&#8217;t like the Chaos Theory theme all that much.  Too minimalist.  I&#8217;m going to start from scratch.</p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/04/22/wordpress-theme-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Return of Effluency</title>
		<link>http://effluency.net/2012/04/21/hello-world/</link>
		<comments>http://effluency.net/2012/04/21/hello-world/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 11:38:10 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=1</guid>
		<description><![CDATA[After much hemming and hawing, my Effluency blog is back on-line.  Hopefully, effluency 2.0 will last longer than the previous version. The delays in bringing this blog back were many. Apart from the usual suspects of a busy work and home life, my problem is that I can&#8217;t stop designing things. Coupled with that is [...]]]></description>
			<content:encoded><![CDATA[<p>After much hemming and hawing, my Effluency blog is back on-line.  Hopefully, effluency 2.0 will last longer than the previous version.</p>
<p>The delays in bringing this blog back were many.  Apart from the usual suspects of a busy work and home life, my problem is that I can&#8217;t stop designing things.  Coupled with that is the fact that I don&#8217;t trust anyone else&#8217;s software, whether it be their intent (aka: ads &#038; data mining) or their skill (aka: bugs &#038; security vulnerabilities).</p>
<p>I&#8217;ve been administering the <a href="http://barscape.net" title="Barscape" target="_blank">Barscape</a> forum for many years now.  When I joined, it was being hosted on a &#8220;free&#8221; forum-hosting server.  I say &#8220;free&#8221; because the forum software had Google Ads coded within it and the ads were being displayed based on people&#8217;s posts.  This annoyed me.  The liberal socialist in me did not like this crass form of capitalism sprinkled throughout our conversations.  So the hard-working conservative DIYer in me took the next step.  I purchased a web hosting account, registered the barscape.net domain, installed the phpBB forum software onto the account, wrote scripts to scour the Barscape site for all posts and user information (since I didn&#8217;t have admin privileges) and ported the entire thing, topics and conversation threads all, onto the new system.  It took about 3 weeks, but I did it.</p>
<p>The process wasn&#8217;t complete though.  The old forum had some features that the new forum didn&#8217;t have.  So I hacked around in the guts of the phpBB software and added many new features.</p>
<p>Knowledge is a Pandora&#8217;s Box.  Now that I knew how to do web coding, I began to experiment with different communication paradigms on my own.  Forums are great for keeping long-term comms available.  However, as we&#8217;ve seen with Facebook and Twitter, some people just want to say Hello.  Those conversations do not need to be kept around.</p>
<p>In my previous blog, I mentioned that I was working on a project called Crucible.  Crucible was going to be the software framework for my next blog/forum/gallery system.  It was going to provide both a server-based API for site coding and export services so that desktop apps and/or portable devices could access these services remotely.  For example, a service called RandomService:RollDice could be accessed via direct function call on the server via PHP and/or Ruby, via browser-side Javascript, and via C and/or Java service access libraries/classes.  And baked within it all from the start, the protocols used were going to be secure.</p>
<p>As you might imagine, Crucible was an ambitious project and the amount of free time that I had available for it kept dwindling.  It finally reached a point where I would have to decide if I wanted to spend the time writing code or spend time interacting with people.  In spite of my self-claimed title of ÜberGeek, I opted to spend time with people.</p>
<p>So after much internal debate on whether I should return to WordPress or brush the dust off Crucible and roll-my-own blog, I decided to return to WordPress.  While reinventing the wheel can be an enjoyable process with a lot of reward, I have many other interests to keep me busy.</p>
<p>As I recently remarked to Claire, my partner, it&#8217;s times like this where I wish I was immortal.  There is so much in life to admire and investigate and just experience, I would never be bored.</p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/04/21/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Series of Catastrophes</title>
		<link>http://effluency.net/2012/04/21/a-series-of-catastrophes/</link>
		<comments>http://effluency.net/2012/04/21/a-series-of-catastrophes/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 13:10:52 +0000</pubDate>
		<dc:creator>Ken</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Wargames]]></category>
		<category><![CDATA[asoc]]></category>

		<guid isPermaLink="false">http://effluency.net/?p=6</guid>
		<description><![CDATA[“War is a series of catastrophes that results in a victory.” &#8211; G. Clemenceau (statement to Woodrow Wilson at the Paris Peace Conference, 12-Jan-1919) While I wait for Michael Resch’s treatment of the Western Front of 1914 to be published, I decided, after spending a recent weekend playtesting a Napoleonic game and discussing aspects of [...]]]></description>
			<content:encoded><![CDATA[<p><center><em>“War is a series of catastrophes that results in a victory.”</em> &#8211; G. Clemenceau<br />
(statement to Woodrow Wilson at the Paris Peace Conference, 12-Jan-1919)</center></p>
<p>While I wait for Michael Resch’s treatment of the Western Front of 1914 to be published, I decided, after spending a recent weekend playtesting a Napoleonic game and discussing aspects of game design with Michael Resch, Mark Hinkle and Milton Janosky at the latter’s house, to take the various components of several WWI games that I had and roll my own.  This blog, over time, will describe that attempt.</p>
<p>Before I get started with this Frankengame, I should describe the goal.  After reading Holger Herwig’s The Marne, 1914 recently, and having read Barbara Tuchman’s The Guns of August quite a few times in the past, I want to figure out a way to recreate the tensions and maneuvers of Aug-Nov 1914 (and beyond) in a way that is plausible.  I do not want to straightjacket the opponents, but I do want the actual events of 1914 to be recreatable w/o resorting to “idiot rules”, at least my definition thereof.  So far, none of the games in my possession do a good job of that, in my humble opinion.  This is not meant to be a criticism of the games or their designers.  For me, they just fell short in one way or another.</p>
<p>These are the Western Front WWI games that I will be borrowing ideas from:</p>
<ul>
<li>Home Before the Leaves Fall (HBtLF)</li>
<li>Drive on Paris (DoP)</li>
<li>Schlieffen Plan / Western Front (WF)</li>
<li>March to Victory / Over There (MtV)</li>
</ul>
<p>Additionally, I will be borrowing quite a few ideas from other games in my possession:</p>
<ul>
<li>Twilight in the East (TitE)</li>
<li>Proud Monster Deluxe (PMD)</li>
<li>June 6 (J6)</li>
</ul>
<p>And, finally, I will be creating (or inadvertently borrowing) some ideas and rules of my own as I see fit.  That said, the above games are not an exhaustive list of inspiration.  I have many, many more games than that in my game closet and I’m sure that various ideas and constructs have burrowed their way into my consciousness.</p>
<p><strong>Getting Started</strong></p>
<p>For ASoC, I will be using the HBtLF map of the Western Front, which is quite nice and fits the level of granularity I’m looking for.  For the Order of Battle, I’m going to use MtV’s orbat and counters.  MtV’s orbat, with its Europa roots, has a very nice detail to it.  In addition to the usual divisions and other suspects, it contains references to several artillery units which were probably factored into other games’ HQ units or barrage factors.  Where the WWII Europa system sought to focus on combined arms / armor tactics by applying die roll mods to combats where armor was involved, the MtV/OT system focuses on WWI’s queen of the battlefield: artillery.  As such, I’m going to use their artillery-heavy orbat with its individual artillery components.</p>
<p><center><div id="attachment_13" class="wp-caption alignnone" style="width: 310px"><a href="http://effluency.net/wp-content/uploads/2012/04/BigBertha.jpg"><img src="http://effluency.net/wp-content/uploads/2012/04/BigBertha.jpg" alt="" title="BigBertha" width="300" height="236" class="size-full wp-image-13" /></a><p class="wp-caption-text">Big Bertha: German 420mm howitzer</p></div></center></p>
<p>Right off the bat, I need to decide how the sequence of play is going to go.  Mixing counters, with their explicit movement rates, onto a map not designed for such will create huge problems if not done properly.</p>
<p><strong>Turns &#038; Impulses</strong></p>
<p>After playing a solitaire game of June 6 recently, I was struck by the effects of its chit-pull mechanism on the battlefield vs. the usual igo/ugo method.  Each formation was an entity unto itself and one formation may move/fight twice in a turn before its immediately opposite enemy formation.  The ability to steal a march or grab the initiative struck me as being a huge plus in that particular game, and it struck me that there were great similarities in how June 6 treated formation initiative and how the Western Front armies took advantage (or squandered) their situations as well.</p>
<p>With that in mind, armies in ASoC will move and fight individually, for the most part.  There will be situations where adjacent armies can and will move and fight in a coordinated manner, but that capability is not automatic nor without risk.</p>
<p><strong>An Aside: Competitive Probabilities</strong></p>
<p>Many years ago, my brother and I designed a dice-based baseball game based on Hall of Fame players and their career statistics.  After several tweaks, I switched from a single roll LUT (Look Up Table) method of generating game events to a competitive dice roll method.  In the latter case, both players roll and the winner of the roll generates the event, mostly, but not always, in their favor.</p>
<p>For example, Team A’s pitcher goes against Team B’s batter.  As both Team’s players are Hall of Fame players, the event generation data on their player cards will mostly benefit the owning Team.  To determine which card will generate the event, both players roll 2d6 and the Team with the highest sum wins the roll and his/her player card will be used to determine the game event.</p>
<p>There are many interesting side effects with using competitive probabilities, which I won’t go into here immediately.  Suffice it to say, that ASoC will be using competitive probabilities using d10 rolls (per player) to generate game events where both player’s units are involved, namely combat.</p>
<p><strong>Setting Priorities</strong></p>
<p>Whereas June 6’s chit-pull system is very random and completely outside the control of the players involved, aside from purchase/placement into the available pool, I wanted ASoC to give each player, in their role as C-in-C, the ability to influence which formations get selected if they get initiative (win the initiative rolls).</p>
<p>Foregoing, for now, the detail as to how formation chits are purchased each turn, a la June 6, each player will have the capability to purchase 2 chits for each offensive army HQ.  (Army HQs can be either offensive-capable or merely logistical/organizational HQs.  Consider the difference between French 5th Army and Groupe D’Amade.)  These chits will be placed face down on a 9-space track numbered: “0/1” and 2 through 9.  More than one chit may be placed on a track space, but not until all other spaces on the track have a chit placed there.  More than two may be placed on a track space, but not until all other spaces have two chits placed there, and so on.</p>
<p>During the turn, formations are selected for movement/combat by having each player roll a d10 for initiative.  (Some modifiers may apply: such as giving Moltke a negative modifier during late August / early September.)  The winner of the roll gets initiative.  The formation which gets to move is picked from the numbered space on the track which is equal to the winning player’s die roll.  For example, if France won initiative with an 8 roll (vs. a 7 roll), the topmost chit on the space labelled 8 is activated for movement/combat.</p>
<p>Due to competitive probability odds, 9 will be the winning roll more often than 8, and so forth.  Therefore, if a player wants a particular unit to (possibly) move first, they should place that formation’s chit in the 9 space.  (There are lots of interesting ways to game this system, which I won’t go into detail with yet.)</p>
<p>If, as will happen later in the turn, the winning roll’s space on the track is empty, add 4 to the roll to determine the next space, wrapping numbers past 9 around to the 0/1 space, treating that latter space as one space.  For example, if the winning roll was 8 and the 8 space was empty, the next space to check would be 3: 8 -> 9 -> 0/1 -> 2 -> 3, or 8 + 4 = 12 &#8211; 9 = 3 for you math wizards out there.  The +4 mod simulates the activation of a secondary theater while the primary theater’s activity is ongoing.</p>
<p><em>Formation Coordination</em></p>
<p>When a formation is selected via a winning initiative roll, the player may activate (move/fight) that unit immediately or they may put it in reserve, hoping for another winning initiative roll and the selection of an adjacent formation.  If an adjacent formation is selected, then the two armies may move/fight in the same impulse in a coordinated manner.  If a non-adjacent formation is selected, the player may do one of the following:<br />
activate the 1st reserved formation and place the 2nd selected formation chit in reserve<br />
keep the 1st reserved formation in reserve and activate the 2nd selected formation</p>
<p>Before any initiative roll, a player with an army in reserve may announce that that army is coming out of reserve.  Once announced, that army will become activated on the next winning initiative roll by that player.</p>
<p><em>Fog of War</em></p>
<p>Note that chits are placed on the track upside-down to hide their identities.  When these chits are placed in reserve, they are kept upside down.  Chits are only revealed when they become active.</p>
<p><em>Last Moves</em></p>
<p>When one player has no more offensive formations to move, the remaining player with formation chits on the initiative track moves the rest of their formations.  However, they still roll to select these formations.  In this case, 2xd10 are rolled with the highest number determining which formation is selected.</p>
<p>When no more offensive formations are left to move, another final initiative roll is rolled and each player takes turns moving their logistical formations with the winner of the initiative roll determining the order.</p>
<p>(to be cont&#8217;d&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://effluency.net/2012/04/21/a-series-of-catastrophes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

