<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-19634491</id><updated>2012-01-16T15:31:01.925Z</updated><title type='text'>PlasticBishop.com Blog</title><subtitle type='html'>The inner programming thoughts of the creator of www.plasticbishop.com</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19634491.post-116160472192468871</id><published>2006-10-23T12:32:00.000+01:00</published><updated>2006-10-23T12:58:41.970+01:00</updated><title type='text'>Site Subscriptions</title><content type='html'>I recently anounced on the site's forums that I plan to introduce a large number of new features which would be available to players who pay a subscription fee.  The cost of a subscription would be £10 per year and for that they would get full access to all subscription features.&lt;br /&gt;&lt;br /&gt;The list of new features was quite extensive, and in general everyone was very supportive of the idea saying that they would be wel worth paying for.  Unfortunately there does seem to be the odd one or two rather vocal members who are against the subscription idea, and they tend to have a few arguments as to why I shouldn't do this.  Here are those arguments and my replies:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;PlasticBishop.com has always been free and should always remain free.&lt;/span&gt;  &lt;br /&gt;In an ideal world without money this would be true, but we do have money and the website costs me an increasing amount.  Currently I pay aound £50 per month to keep the site going - that's £600 a year.  But, the server package we're on is reaching the limit of what it can efficiently cope with and if there is much more growth in the site it will become pretty much unusable for everyone.  I estimate that within 6 months this critical point will occur and then what - do I pay out of my own pocket for a considerably more expensive package?&lt;br /&gt;&lt;br /&gt;I've talked to my webhosts about the future of the site and together we've come up with the sort of package that will be needed to keep plasticBishop.com running smoothly for the next couple of years, and it's going to cost me £120 per month, plus advertising costs to keep new members coming, so all in all that is approaching £150 per month, or £1800 per year.  Who would want to pay that much to play on a chess site?  I can't afford it, so unless I start making money from the site we'll all start to suffer from slower performance as time goes on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;By charging a subscription it will no longer be a free site and people won't want to join.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;No one will be forced to pay anything.  If a player doesn't subscribe then that's fair enough, they don't subscribe.  They will get the same features that they get now and it will be free for them.  By subscribing you get extra features, but by not subscribing you lose nothing, so you can still play free chess on the site.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Why don't you just have advertisements on the site to pay for your costs?&lt;/span&gt;&lt;br /&gt;Some chess sites do both - they have advertisements that are removed if you pay a subscription.  Advertisements work best when you have a large volume of unique visitors on a site each day, but we have pretty much the same visitors each day.  Once a person has seen an ad they will ignore it for ever more.  Ads on our site will be totally inneffective, distracting and ugly, and I'm convinced that they are not the way to go.  They will be a downgrade of the service that everyone currently gets and I'm not willing to do that.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;You just want to make a profit.&lt;/span&gt;&lt;br /&gt;Yes and no.  My main concern at the moment is in paying for the site's cost.  Any profit that is made will go straight back into the site in the form of more advertising hence getting more people to join.  In the long term (i.e. a year or more from now) it would be great if looking after the site became my fulltime job, but do we consider that profit?  I have no interest in becoming a chess millionnaire, I'd simply want to be able to turn my hoby into my job and be able to look after the kids during the day while the missus goes to work (modern family, ey?  [we don't have any kids yet, but who knows what will happen in a year or two]).  Anyway, I digress - all proceeds will in one way or another be spent on the site to make it better for everyone.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I hope that this explains my decision to implement subscriptions.  It's not as if I've just spontaneously decided to do it; a lot of thought and discussion has gone into it and I'm convinced that it will result in a better site for everyone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-116160472192468871?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/116160472192468871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=116160472192468871' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/116160472192468871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/116160472192468871'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/10/site-subscriptions.html' title='Site Subscriptions'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-115702587011812041</id><published>2006-08-31T12:34:00.000+01:00</published><updated>2006-08-31T13:04:30.210+01:00</updated><title type='text'>Draw By Repetition</title><content type='html'>A couple of weeks ago a member of the site known as "Student" pointed out to me that he had a game where the same position was repeated 3 times but it wasn't a forced as a draw.  I wasn't surprised by this because there's no code in the site to cater for this situation, but I've known about the shortcoming since the site started but chose to disregard it for the time being.  It wasn't through neglect that I'd ignored this, but due to something fundamentally very difficult with the site's current setup.&lt;br /&gt;&lt;br /&gt;Consider any given chess position - there are many dfferent combinations of legal moves which can lead to that position.  When a player currently makes a move the site stores the coordinates of that move, as well as other things such as the availability of an enpassant capture on the opponent's next move, if the player castled, and so on.  Now, if we need to work out if a given move leads to a position that previously occurred then the site needs to look at every move so far and work out what the position was after that move was made, and then compare that with the current position.  We'd keep a track of how many times the current position had occurred before and then act appropriately once the move was made.&lt;br /&gt;&lt;br /&gt;This is all very complicated and not very efficient.&lt;br /&gt;&lt;br /&gt;Now that Student had asked for this feature to be incorporated into the site I could no longer overlook it, but I was not willing to implement the procedure I just described.  Something new was needed, something that could match board positions quickly and efficiently.&lt;br /&gt;&lt;br /&gt;The solution was to store the entire board position on the same database record for the move that created it.  this might strike you as being a bit obvious, and I had pondered this for a long while but was put off because of the size of the data structure needed to store a chess board.  Multiplied by half a million moves this would be an enormous amount of data.  I managed to use a clever solution to this that I read about somewhere 6 months ago when I was learning about chess AIs.  If we store an encrypted, compressed version of the board then the volume of data can be dramatically reduced.  I say encrypted because then it can be made smaller, and for reasons I'll explain later we don't need to worry about decrypting it.&lt;br /&gt;&lt;br /&gt;To encrypt a board position I first create a series of binary 64 character strings, with one string for white pawns, one for black pawns, white knights, black knights, and so on.  When building one of these strings, I examine every square and if there is a piece I'm interested in on the nth square then the nth character in the string is set to 1, otherwise it is set to 0.  In all we end up with 12 strings, which are then concatenated to make one big 768 byte string.  Now for the clever part - I use the encryption functions MD5 and SHA1 to provide two encrypted versions of this string, 32 and 40 bytes long resectively.  These functions are non-reversible, but the same input string will always give the same output string.  The chances of two different input strings giving the same output are extremely low.  In fact, you are more likely to win the lottery every week for the rest of your life than you are to randomly find two input strings with the same encrypted output on both the MD5 AND SHA1 encryptions.&lt;br /&gt;&lt;br /&gt;So, when a move is made we store the encrypted board position, and now we can look at all other move records in the game and see which ones had the same encryption values.  Same values = same position.  That's why we don't need to be able to reverse the encryption because we only ever compare the encrypted positions, and there's no need to have to extrapolate what that position actually was.&lt;br /&gt;&lt;br /&gt;However, there was still a big problem.  In the moves database there were 450000 moves that never had any encrypted positions stored on them, and for this to work properly they had to.  I wrote a script which looked at all of the moves in a game and worked out the encrypted positions and stored them against that move record.  The script took an hour and a half to run, but early tests show that it worked!&lt;br /&gt;&lt;br /&gt;Now all I need to do is work out the actual chess rules for forcing a draw, but that's not going to be easy - there is a debate raging on the forums as I type!&lt;br /&gt;&lt;br /&gt;More to come...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-115702587011812041?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/115702587011812041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=115702587011812041' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/115702587011812041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/115702587011812041'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/08/draw-by-repetition.html' title='Draw By Repetition'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-115590095151057164</id><published>2006-08-18T12:24:00.000+01:00</published><updated>2006-08-18T12:35:51.536+01:00</updated><title type='text'>A Chess Intelligence</title><content type='html'>Over the last few weeks I have been planning what could become an awesome new feature.  I want to write an online chess AI which players could challenge and play against on my site.  The AI would have a rating like everyone else and this rating would increase or decrease as it wins or loses games.  Obviously it would be imperative that everyone knew that this player was an AI, and the ban on players using an AI to assist their own games would still stand.&lt;br /&gt;&lt;br /&gt;Q: So why do I want to do this?&lt;br /&gt;A: For the challenge of it, and for the boost it could give the site.  Writing a chess AI is very challenging (believe me, I've done it before with limited success) but the rewards make it worth while when you see it come up with a move far better than one you could have come with.  I've never been beaten by one of my own chess AIs before, but the as I get better at writing them then that milestone will come.&lt;br /&gt;&lt;br /&gt;Watch this space in the future... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-115590095151057164?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/115590095151057164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=115590095151057164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/115590095151057164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/115590095151057164'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/08/chess-intelligence.html' title='A Chess Intelligence'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-115586054058211861</id><published>2006-08-18T01:04:00.000+01:00</published><updated>2006-08-18T01:22:20.630+01:00</updated><title type='text'>Sortable Tables</title><content type='html'>Information is such a useful thing, but all to often in the web world you are left at the mercy of whoever publishes it and have to view it in their ored.  Allow me to explain...  In any computer program if you were presented with a grid of data you would expect to be able to easily sort it by column A, or column B, or whatever column you saw fit.  However, people don't seem to expect the same from a grid of data in a web page, and the only reason is because developers just don't do it.&lt;br /&gt;&lt;br /&gt;I decided to break this mold and have started to make the data presented on the site sortable - in REAL TIME!  I don't mean click your sort options and then refresh the page, I actually mean immediately after you click the data is reordered, without any page reloads.&lt;br /&gt;&lt;br /&gt;Here's how I did it.&lt;br /&gt;&lt;br /&gt;I have written a table class for the PHP scripts, and to this clsss I pass an array of data rows.  Each data row is itself an array of cells, and each cell has various properties such as value and sort value (more on tat later).  Now, when calling the table's drawing function the class will create a javascript representation of the table's data, and will then draw the table using DIV elements.&lt;br /&gt;&lt;br /&gt;When a column is clicked a javascript function is invoked which looks through the array that represents this table and works out which order the rows should be in.  It then swaps the contents of row 1 with row 5, row 2 with row 8, and so on until the table is sorted by the column you clicked.  It also stores a flag denoting what order each column in currently in (ascending or descending) so that the next time you click that column it is sorted in the opposite order.&lt;br /&gt;&lt;br /&gt;Remember I mentioned the sortvalue?  Consider the fact that the date "11 Jul 2006" is after "22 May 2006", but "11 Jul 2006" is alphabetically before "22 May 2006".  By using a sortvalue the javascript can see the dates as a number (or whatever I tell it) and so can sort dates in true date order rather than how they alphabetically appear.  The same would be true for images, or whatever else I decide to put in the tables.&lt;br /&gt;&lt;br /&gt;The results are tables that look just like they always did, but are sortable.&lt;br /&gt;&lt;br /&gt;These tables are only in a few places on the site at the moment, but I am slowly converting them all to have this functionality.  As an example, check out the screen shots below to see the same data from the Games Lobby page sorted by different columns.&lt;br /&gt;&lt;br /&gt;Sorted by date:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/pic_date.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/400/pic_date.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sorted by moves:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/pic_moves.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/400/pic_moves.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sorted by username:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/pic_username.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/400/pic_username.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-115586054058211861?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/115586054058211861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=115586054058211861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/115586054058211861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/115586054058211861'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/08/sortable-tables.html' title='Sortable Tables'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-115585938816777034</id><published>2006-08-18T00:54:00.000+01:00</published><updated>2006-08-18T01:03:08.176+01:00</updated><title type='text'>5 Month Update!</title><content type='html'>It's one of those sleepless nights again and suddenly I remembered that I haven't made a blog posting in a long time, in fact for over 5 months!  It's not that I forgot about plasticbishop.com, on the contrary I have been extremely busy with the site.  I simply never got around to blogging about what I've been up to lately with it.  I'm now left with the task of bringing you, my loyal reader(s) up to date with everything that's been going on.  I won't do it all in one post, but will make several posts over the next few days to get everything up to date.&lt;br /&gt;&lt;br /&gt;Let the good times roll...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-115585938816777034?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/115585938816777034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=115585938816777034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/115585938816777034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/115585938816777034'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/08/5-month-update.html' title='5 Month Update!'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-114444326611761805</id><published>2006-04-07T21:48:00.000+01:00</published><updated>2006-04-07T21:58:58.153+01:00</updated><title type='text'>Live Current Games List</title><content type='html'>The side menu that lists your current games is now 'Live' in the sense that it will appear in your list within 10 seconds of a player moving in it.  There are some limitations at the moment, for example it won't show you games where you can promt, have a message, or the game has ended - you'll have to wait until a full page refresh for that.  I will get these limitation sorted once I've come up with a really good, stable and consistent way of doing all of this Ajax stuff.&lt;br /&gt;&lt;br /&gt;In my previous post I talked about the XML file format for an updated game.  Well, here's some text data from my own computer that the server sent when asking for games to add to the side menu:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;games_list_games lastupdate="1144442712"&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;lt;game game_id="159" curplayer_id="2" status="CURRENT" clockticking="1" tournament_id="0"&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;player1 user_id="2" username="Woof"/&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;player2 user_id="7" username="SteRobson"/&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/game&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;lt;game game_id="199" curplayer_id="2" status="CURRENT" clockticking="1" tournament_id="17"&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;player1 user_id="7" username="SteRobson"/&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;player2 user_id="2" username="Woof"/&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/game&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;lt;game game_id="4001" curplayer_id="2" status="CURRENT" clockticking="1" &amp;nbsp;&amp;nbsp;tournament_id="0"&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;player1 user_id="7" &amp;nbsp;&amp;nbsp;username="SteRobson"/&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;player2 user_id="2" username="Woof"/&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/game&amp;gt;&lt;br/&gt;&amp;lt;/games_list_games&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Pretty cool, huh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-114444326611761805?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/114444326611761805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=114444326611761805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114444326611761805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114444326611761805'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/04/live-current-games-list.html' title='Live Current Games List'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-114440904497640900</id><published>2006-04-07T12:07:00.000+01:00</published><updated>2006-04-07T12:24:05.013+01:00</updated><title type='text'>The Fox Trips Over</title><content type='html'>No, I'm not talking in some strange cryptic speak, but I'm actually referring to Firefox and in particular 1.0.7.  Firefox is my web browser of choice because it looks good, has some fantastic extensions, and does a decent job of rendering pages (but not the best though - Opera has that honour in my opinion).  So where does good old Firefox trip over?  Let me explain something about the site to you and then you'll start to understand...&lt;br /&gt;&lt;br /&gt;The new live chess feature polls the server every 5 seconds to say "Hey server, has my opponent moved yet in game 1234?"  The server then says either: "Nope, still nothing" or "Yep, they have indeed".  (obviously these communications are not really in readable English, they are just short numbers).  In the case of the first event the user's browser thinks "Oh well, I'll set a timer so that I can try again in 5 seconds" and that's the end of the story.  However, if the server tells the browser that the opponent has moved then exciting things start to happen.  The browser will immediately send a message to the server saying "Ok server, tell me everything about the last move made in game 1234" and the server replies saying "Ok, here it is." and then gives the browser a piece of XML tag something like:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    &amp;lt;updated_game game_id="1234" lastmoved="11354214"&amp;gt;&lt;br /&gt;        &amp;lt;move x1="1" y1="7" x2="1" y2="5" captured="0" castled="0" check="0"&amp;gt;&lt;br /&gt;    &amp;lt;/updated_game&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The browser then works through this XML and from the current board position can work out what pieces to move and stuff.  Simple, right?  No!  For some reason Firefox 1.0.7 just cannot properly send the second request immediately after receiving the first one.  Version 1.5.1 can, even Internet Explorer can, but this version of Firefox just refuses to ever return a result.  &lt;br /&gt;&lt;br /&gt;Why?  I don't know.  &lt;br /&gt;The solution?  To rewrite the code so it can somehow do it all in one request, maybe the server returns the whole XML if the game has changed, otherwise nothing if it hasn't.  &lt;br /&gt;The result?  For the first time ever Firefox is not playing nice (for me).  &lt;br /&gt;&lt;br /&gt;Grrrrrrr.....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-114440904497640900?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/114440904497640900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=114440904497640900' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114440904497640900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114440904497640900'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/04/fox-trips-over.html' title='The Fox Trips Over'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-114439625631291472</id><published>2006-04-07T08:45:00.000+01:00</published><updated>2006-04-07T08:50:56.330+01:00</updated><title type='text'>The Big Three 0's</title><content type='html'>Soon we'll reach 1000 members.  This is a fantastic milestone and I'm thrilled to bits that's we've almost got there.  This time last year I was thinking that if we can get 100 members then that would be really cool, I certainly didn't expect 1000 within a year.  So what's the next target after that?  10000 games won't be that far off (probably about 6 months from now), half a million moves by the end of 2006, and we should get to 2000 members before the end of the year.&lt;br /&gt;&lt;br /&gt;The annoying thing is, unless we have a massive surge of newbies joining today, I'll be on holiday when the 1000th person signs up so won't get to see it :(  Maybe I should cancel the holiday in honour of this event...?  Nah, the Missus would kill me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-114439625631291472?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/114439625631291472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=114439625631291472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114439625631291472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114439625631291472'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/04/big-three-0s.html' title='The Big Three 0&apos;s'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-114432400057025954</id><published>2006-04-06T12:28:00.000+01:00</published><updated>2006-04-06T12:46:40.996+01:00</updated><title type='text'>Divvy Tables</title><content type='html'>The more web savvy of you will be rolloing around in laughter at the thought of a divvy table because the two are completely different ways of implementing the same thing.  Let me explain:&lt;br /&gt;&lt;br /&gt;A &lt;span style="font-weight:bold;"&gt;table&lt;/span&gt; is just that.  You define rows and columns and what goes in the columns, and then the web broswer does the rest.&lt;br /&gt;&lt;br /&gt;A &lt;span style="font-weight:bold;"&gt;div&lt;/span&gt; is a containing rectangle in HTML.  Pretty boring, except that you can put whatever you want inside the div and then position the div (and hence its contents) wherever you want on the page (or in another div even).&lt;br /&gt;&lt;br /&gt;Divs are much more flexible than tables, render more consistently in all browsers than tables do, and are a much neater way to write your code.  The problem is, PlasticBishop.com was written using tables for pretty much everything because, at the time, I didn't know any better.  Now I'm paying the price for that because of all of this real time fun that I'm writing.  Here's the problem:&lt;br /&gt;&lt;br /&gt;I want to make the list of currently active games in the side menu dynamic, so when someone moves against you in a game that you're not viewing you still find out about it immediately.  Unfortunately the menus are all written as tables which makes using Javascript to update them a failry complicated task.  I'm now rewriting this menu using DIVs, and using Javascript to create one of them is as easy as pie.  In fact, I've got it all working on my home tests now.  Except for the bit that actually reads the new game information of course...  Heh heh, can't have everything I guess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-114432400057025954?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/114432400057025954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=114432400057025954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114432400057025954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114432400057025954'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/04/divvy-tables.html' title='Divvy Tables'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-114415062164215035</id><published>2006-04-04T12:17:00.000+01:00</published><updated>2006-04-04T12:37:02.220+01:00</updated><title type='text'>So This Is Realtime</title><content type='html'>I've been trying to get organised lately and prioritise all of the great suggestions that people give me for the site.  Unfortunately I'm not very good at that sort of thing, but the missus is so she's now my 'boss'.  Ruthie collects all suggestions and makes them into a list and she decides what the priorities should be.  I then go ahead and write what she tells me :)  The results of this have been quite fruitful, and here I'll tell you about them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;On Vacation&lt;/span&gt;&lt;br /&gt;Players can now set their status to 'On Vacation' using the 'My Preferences' page.  This will remove them from the list of available players to invite to new games, it will state in their profile that they're on vacation, and also in any of their games.  Of course, we don't want players to forget that they've given themselve this setting so when a player who's defined as on vacation logs in they will see a reminder at the top of each page telling them as such.  It works well and I'm planning on using it when I go away :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Invite your Friends&lt;/span&gt;&lt;br /&gt;There's now a feature to let a player send out an email to their friends asking them to join the website.  The email can have an additional personal message on it and tells the recipient who has invited them and how they can join.  In the future I'll probably make the ability to automatically start a game with the recipient once they sign up, but that's a fair way off yet.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Forum Thread Order&lt;/span&gt;&lt;br /&gt;You can now view forum threads in order of most recent post across all forums.  This means that to see recent posts you only have to look in one place rather than check across multiple forums.  This will make it easier for the few active members in the forums to keep being active and hopefully will encourage others to join in.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Best Bit&lt;/span&gt;&lt;br /&gt;PlasticBishop.com is now capable of &lt;span style="font-weight:bold;"&gt;REAL TIME CHESS&lt;/span&gt;.  That's right, if you and your opponent are viewing the game at the same time then you will see the move just seconds after they make it.  Best of all it uses Javascript to move only the pieces that have changed rather than refreshing the entire page so not only is it a lot faster, but there'll be a significant bandwidth saving on my server.  &lt;br /&gt;&lt;br /&gt;There system isn't perfect yet.  For example, it doesn't update any of the side windows such as game chat, captured pieces, opponent's move, notes or matching games.  It simply moves the pieces oon the board, but all of these missing features will be coming.  There's also a problem in some versions of Firefox where for some reason it just doesn't work.  I don't know why yet, especially since I developped it with Firefox as the main test browser.  Eventually the lists of current games, active users, site statistics and, well, everything will be updated as and when needed.  It's a very exciting time for the site so stay tuned!  Who knows, one day I'll probably even post an in depth description of how this actually works.  I bet you can't wait ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-114415062164215035?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/114415062164215035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=114415062164215035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114415062164215035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114415062164215035'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/04/so-this-is-realtime.html' title='So This Is Realtime'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-114260099118075206</id><published>2006-03-17T12:36:00.000Z</published><updated>2006-03-17T13:09:51.233Z</updated><title type='text'>Wallowing in Misery At Home, Much To Your Benefit</title><content type='html'>Last Friday I got home from work feeling triumphant in the fact that it was now the weekend.  My triumph turned into defeat when that evening I got a cold.  On Monday I went to work anyway and fought through it and felt mighty pleased with myself that my 100% attendance record was still in tact.  On Tuesday morning I woke up unable to speak.  My throat felt like I'd swallowed a cactus, my nose was stuffy and I felt sick.  Oh dear, time to have a sick day.  I was also off on Wednesday and Thursday and spent the days at home, shivvering and feeling mighty sorry for myself.  The only benefactor of this illness was Plaggy Bishoire and it's members since I had a lot of uninterrupted time to work on it.  Here's what I did:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Getting it Organised&lt;/span&gt;&lt;br /&gt;The tournament lobby page has been getting bigger since it was first written with new features added as the need arose.  I figured it was time to add even more features but this time without clogging things up even more.  The first step was to create a contents list at the top of the page enabling quick navigation.  This was simple enough, except that you need a different list depending on whether you're in the tournament or not, and if it's currently running, waiting to start or ended.  I got there in the end and the result is a very simple yet usable menu.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Highlight of the Tournament&lt;/span&gt;&lt;br /&gt;The next task was to make it easier to see how people are doing in tournaments.  Ok, so we have the league table which is great, but it's hard work to see what games someone is playing in a tournament because you have to first find their seat number and then cross reference that with the (often very large) games grid.  Surely there's a better way?  Yes there is.  Now each player has a "Show" link next to their row in the league table and clicking this will highlight data in the tournament that's relevent to the selected player.  Every list in the tournament lobby is highlighted in this way making things much simpler.  You also get a simple list of al of the highlighted player's current games and their results.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/grid.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/400/grid.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Chat To your heart's Content&lt;/span&gt;&lt;br /&gt;All players in a tournament can now have a discussion amongst themselves.  Only the people in tournament can see the chat so this will be great for idle banter and the odd bit of (good natured) gloating.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Points, Points and More Points&lt;/span&gt;&lt;br /&gt;Tournaments are fun aren't they!  you get 3 points for a win, 1 for a draw and 0 for a loss.  Splendid, simple and easy.  Now the tournament creator can specify a custom scoring system to match their sadistic desires.  For example, you could get 1 point for a win, 0 for a draw and -3 for a loss, or pretty much anything they like (within reason and within certain rules).  The scoring information is available on each tournament's lobby page so you should check this before joining.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;It's a Tie!&lt;/span&gt;&lt;br /&gt;I've talked at length about how the league results are organised when two or more players have the same number of points.  Unfortunately there was a tournament where the top two players had identical points, wins, losses and draws, so the gold was awarded based on their username.  This clearly isn't fair so now the system is even cleverer and in these situations will award 2 golds and a bronze.  It works for all positions (not just the top 3) and has no limit on the number of players who can share a position.  Obviously the person who unfortunately got silver in the past tournament has now had it swapped for gold!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Player's World Ranking&lt;/span&gt;&lt;br /&gt;Well, not quite the world ranking, but in a player's profile you will see their site ranking. This isn't the rating, here the person with the top rating will have a rank of 1, and so on.  The rank calculation excludes anyone with less than 5 completed rated games and players who've been inactive for 4 weeks or more.  I think it's a very good, very fair way of charting your position relative to everyone else.  The best part (by some standards) is when you click the ranking in the profile - it opens up the list of members and highlights that player!  Wonderful!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tournament List&lt;/span&gt;&lt;br /&gt;In a player's profile there's now a list which shows all of the tournament that they are currently playing in.  You can click any of these tournaments to be taken to its lobby where that player is automatically highllighted for you.  See how everything comes together?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Games Lobby Enhancements&lt;/span&gt;&lt;br /&gt;The "Your Current Games" list in the Games Lobby now highlights all games where your opponent is currently online.  This should help you prioritise which moves to make first when times are busy.&lt;br /&gt;&lt;br /&gt;Unfortunately I'm now healthy again so that's it for updatesm, until the weekend of course.  Oh, that starts in 5 hours.  Excellent!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-114260099118075206?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/114260099118075206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=114260099118075206' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114260099118075206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114260099118075206'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/03/wallowing-in-misery-at-home-much-to.html' title='Wallowing in Misery At Home, Much To Your Benefit'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-114139040908246838</id><published>2006-03-03T12:23:00.000Z</published><updated>2006-03-03T12:53:29.103Z</updated><title type='text'>So What's New?</title><content type='html'>As a lot of people will probably now know, the site goes through ups and downs when it comes to new developments.  Currently we're in a bit of a down spot because there's not that much that needs urgently doing.  If I wanted to I could dream up lots of new features and go ahead and write them, but over these last few weeks I've been content to sit back and watch the website run itself.  It's not been completely quiet though, so 'll tell you about a few new features that I've made.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Welcome Email&lt;/span&gt;&lt;br /&gt;When they sign up, new members will now be emailed with a pleasent welcoming message.  The email is also functional as it confirms their name, password, and also tells them how to change their preferences for common things so that they can get up and running as quickly as possible.  Of course, when they sign up they can opt to not receive such an email, because we don't want to be found guilty of spamming people do we?  There was an ulterior motive behind this email though...  retention of more members!  It's a sad truth of most websites that the majority of people who sign up don't actually come back.  Unfortunately I pay for every person who joins, so it's in my best interests for everyone to be active, otherwise what's the point.  This welcome email will help towards that goal.  While we're on the subject of keeping people...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;We Miss You!&lt;/span&gt;&lt;br /&gt;When a member has been inactive for 28 days they will now be sent an email reminding them that they have an account with us and that they are always welcome to come back and play.  It's too early to tell if this is having an effect yet, but in principal it's a good idea.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Faulty Games&lt;/span&gt;&lt;br /&gt;You may remember that occassionally there would be a game where the player just couldn't move, even though there were in fact plenty of legal moves available.  I think I fixed this problem (it's a VERY slippery beast so it's hard to tell) but there's now an automated task which checks all active games every hour to see if they are corrupt or not.  If it finds any corrupt games then it emails me the details so I can look at it and fixed it.  So far it has picked 1 up, and that was before I made the fix, and since then there haven't been any.  That's god news!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Blue is the Colour&lt;/span&gt;&lt;br /&gt;I've made a little style change to the site and now all input controls turn a pleasent shade of blue when they have the focus.  It's a nice touch that makes navigating the forms a little bit easier.  Unfortunately browsers have a nasty habit of caching style sheets so if you don't see this change then pressing CTRL+F5 (or equivellent) should force it to reload the style sheet and you'll be fine for ever more (I really must come up with a solution for this achning problem).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Passworded Tournaments&lt;/span&gt;&lt;br /&gt;There have been a few tournaments now which are not intended for puplic use but are instead for a group of friends to play.  These are fine and undoubtedly even more fun than a standard "prove you're better than this bunch of strangers" tournament because you'll get away with a lot more gloating.  However, no matter how clearly you state in the tournament's title and description "by invitation only", uninvited people still join. This must be a language problem, but it is still a problem.  To get round this there is now an option to create a new tournament with a password attached to it.  Anyone who wants to join the tournament must enter this password first and then they can join.  The tournament's creator can then remove the password at any time, effectively opening it up to the public as normal.  The end result is that if someone creates a private tournament, then unless they tell you the password you can't join. Simple.  Fool Proof.  Yeah, right, never underestimate fools.  Time will tell.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Extended Tournaments&lt;/span&gt;&lt;br /&gt;I've had to extend the running time of a couple of tournaments.  Contrary to popular belief by some trouble stirrers (you know who you are...) I didn't do this to increase my chances of getting a trophy.  In fact, if anything it has decreased my chances because now my nearest rival (good old HISSING SID) will be able to complete all of his games and open up a significant gap from me.  The reason I did this was because when the tournaments were created we didn't know how much time would be appropriate.  It turns out that 60 days is not long enough for a 16 player tournament so I put an extra 15 das on it.  Had the tournament gone stale and there were no active games anymore then fine, I wouldn't have bothered, but there were still a lot of people playing so it felt wrong to just cut them all off.  Of course, new tournaments have a better calculated minimum time so if anyone overruns in them then it's just tough luck I suppose.  Sorry.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Excuses, Excuses&lt;/span&gt;&lt;br /&gt;So, why have I done so little recently?  The honest answer is I've been writing something else!  PlasticBishop has taken up all of my programming time over the last year, but now that it can look after itself (mostly) I thought I'd get started on something that I've wanted to do for a long time now.  That's right, I'm writing my own backup software.  Sound dull?  If so then try spending several weeks studying legal move permutations and how to programmatically verify them, and then a backup program will seem like a breath of fresh air.&lt;br /&gt;&lt;br /&gt;Don't worry though, Plaggy Bishop is still my main concern and it is by no means finished.  I've got an ever increasing list of new features to write into it and I'm determined that I will make them all (or at least have a very good reason why I shouldn't).  Details will follow at the appropriate times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-114139040908246838?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/114139040908246838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=114139040908246838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114139040908246838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/114139040908246838'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/03/so-whats-new.html' title='So What&apos;s New?'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113983447819423367</id><published>2006-02-13T12:21:00.000Z</published><updated>2006-02-13T12:41:18.380Z</updated><title type='text'>Even More Tournament Updates</title><content type='html'>Yesterday I had another good day and implemented some more tournament features to make them a little easier to manage.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Backing Out&lt;/span&gt;&lt;br /&gt;Before a tournament starts, players now have the opportunity to withdraw from it.  I'll be honest, I was prompted to write this code because I was an idiot and accidentally joined a tournament I didn't want to, not to mention the fact that Ruthie had been nagging for such a feature for quite some time.  It makes sense and I think will be used quite a lot, so the result will be tournaments being populated by people who really want to be in them, not those who enthusiastically joined but then regretted it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Disqualified Myself&lt;/span&gt;&lt;br /&gt;I had an error.  When trying to disqualify a non moving player, the code actually disqualified me from the tournanment instead!  I quickly found the coding error &lt;br /&gt;and fixed it, but that didn't help my current situation.  I ended up sifting through the previous day's backup for all records that linked my games to that tournament and then reinserting them.  It took ages, but that's what I get for being stupid :(&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Games Lobby Open Tournaments&lt;/span&gt;&lt;br /&gt;I made a couple of changes to the Games Lobby tables, the first of which was in the list of available tournaments.  You can now see how many seats are still available in that tournament, and also you will get a Javascript confirmation box when you attempt to join the tournament.  This was another measure to prevent me from accidentally joining other tournaments again, and I'm sure other people will find it useful too.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/pic1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/320/pic1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Current Tournaments&lt;/span&gt;&lt;br /&gt;The Games Lobby list of a player's current tournaments now shows the percent complete for each tournament in the form of a little graph.  It looks great and lets you get a quick glimpse of the state of each tournament.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/pic2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/320/pic2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Invited Games&lt;/span&gt;&lt;br /&gt;The Invited Games list in the Games Lobby used to just say "Tournament" in the cancel option, but didn't give any indication as to which tournament the game was for.  Now that text is actually a hyperlink to the tournament, making it simple to tell.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tournament Grid&lt;/span&gt;&lt;br /&gt;The tournament league grid which displays the status and result of all of a tournament's games got a bit of a makeover with the new icon for a disqualified player.  However, I didn't want to stop there, so Ruthie made a few more little icons to make the different bits of information stand out more.  Here's a screenshot of it, I hope you agree that it's certainly very eye catching.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/pic3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/320/pic3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've got more stuff like this planned, but the challenge is getting it all to fit in.  Next weekend is a four day weekend for me, so maybe there'll be a lot more to report on.  Here's hoping!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113983447819423367?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113983447819423367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113983447819423367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113983447819423367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113983447819423367'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/02/even-more-tournament-updates.html' title='Even More Tournament Updates'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113975726249797035</id><published>2006-02-12T11:35:00.000Z</published><updated>2006-02-12T15:14:22.533Z</updated><title type='text'>Much to Report On</title><content type='html'>Greetings!  I haven't written in here for a while because, well, nothing was happening.  I didn't have any particularly exciting projects going on, and all I did each day was make my moves and not a lot else.  However, on Friday everything  kicked off and now there's some great new features to discus.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Site Down Time&lt;/span&gt;&lt;br /&gt;Friday saw the site experience some pretty severe down down time, kind of.  The site was operational but useful features such as the handy games list in the side menu were totally dead.  Before you start to blame me, this wasn't anything I'd done.  Our webhosts had been making changes to all of their big server accounts (which we're on) but Plaggy Bishop did not respond well.  Their changes disabled a lot of database features that we use, and this caused all sorts of permission conflicts and the likes.  Oh dear.  They got it back up and running though, and they were extremely apologetic.  As a result they have given me a rebate of some money, have restructured their internal communication systems and have built a new emergency paging system so I (and other people) can directly contact them at any time of the day or night.  Nice to know that the site has done something :) &lt;span style="font-style:italic;"&gt;(Note: They may have already been in the process of all these communication changes anyway, but I like to think it's really because of us.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;View All Tournaments&lt;/span&gt;&lt;br /&gt;Since tournaments began a couple of months ago (wow, that long?) one of the most common requests has been for a way to monitor the progress of all tournaments, especially the ones that a player's not involved in.  It's a simple enough request.  Afterall, any player can view a tournament's lobby even if they're not involved in it by simply putting the right ID value in the URL.  The problem was, where do I put this list of tournaments?  It can't go in the Games Lobby page because it would take up too much space, and that's supposed to only be for games you're involved in.  &lt;br /&gt;&lt;br /&gt;On Friday night (or very early Saturday morning, I can't remember) it hit me.  Just have a separate page for the tournament lists.  So, that's what I did.  From the Games Lobby or any Tournament Lobby page there's now a link to "View All Tournaments" which takes you to this list.  Here is the list:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/shot1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/400/shot1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, there are 2 lists, one for current tournaments and one for completed tournaments.  The best part are those little graphs that tell you how far along the tournament is.  I think they're extremely effective and look great.  I chose not to display unstarted tournaments because not everyone is able to join every tournament, and it might create some ill will if people want to join a tournament that they're not eligible to.&lt;br /&gt;&lt;br /&gt;Another wonderful feature on this page is a graph of tournament seat availabilities.  It shows two things.  1 - how many tournament seats are currently available to each rating band, 2 - how many tournament seats are filled by each rating band.  Here's the screenshot of it:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/shot1.0.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/400/shot1.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think it looks great!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;New Tournament Rules&lt;/span&gt;&lt;br /&gt;In tournaments people can now be disqualified if they don't play their games.  This will speed up those tournaments where some players just can't be bothered to play.  Disqualifying them will remove all of their points for that tournament and also the points that other players may have picked up off them.  Your existing games with them can still continue, but they are no longer tournament games.&lt;br /&gt;&lt;br /&gt;Disqualifications got me thinking about the tournament league tables.  Obviously a person who's been disqualified so has 0 points needs to be ranked below the person who's tried their hardes in 10 games but lost them all so has 0 points.  My cunning league sorting routine that I made a month or so ago can handle this very nicely.  However, another tweak was required.  Consider this situation:&lt;br /&gt;&lt;br /&gt;Player A plays 10 games but loses them all so has 0 points.&lt;br /&gt;Player B hasn't played any games yet so has 0 points.&lt;br /&gt;Technically player B has played fewer games for the same points so should be higher than player A.  However, common sense dictates that player A should be higher because at least they're playing.  Ah, the old problem of computers and common sense.  Another quick modification to the sorting routine and now players with 0 completed tournament games are given a lower position than those with some games, even though they all have the same rating.&lt;br /&gt;&lt;br /&gt;Another change to thge tournaments will be noticed when a tournament's allotted time expires but all games aren't finished.  Now, if 50% or more of the games have been finished then the trophies will be awarded and the tournament will end.  However, if less than 50% of the tournament is completed then it will end, but without any trophies being given.  I think  that this seems fair.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Advert Boosting&lt;/span&gt;&lt;br /&gt;Most people on the site and those who read here will know of my slight obsession with website statistics, so it will come as no suprise that I've been studying the logs for the Google advertising that I pay for.  I've discovered which particular keywords are the most effective search terms are most likely to get people who click on my add to sign up, and now with any luck I'll have successfully modified it to get the cost per sign up down from £0.22 to £0.13.  That means we may be getting around 60% more signups now, and that makes for a pleased Ste (me). &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;New Chess Set&lt;/span&gt;&lt;br /&gt;Bandgeek2407 on the website has made a new chess set and uploaded it for everyone to use.  The pieces are based on the "3D Type 1" set made for the site by Matthew Howlett, but have some lovely extras added to them.  Here's a screenshot of them:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/shot2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/320/shot2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This prompted me to make a nice bit of javascript that allows you to preview chess sets and chess board in the preferences page before you apply them.  It works quite well, so now all we need is a lot more custom sets.  Keep up the good work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113975726249797035?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113975726249797035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113975726249797035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113975726249797035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113975726249797035'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/02/much-to-report-on.html' title='Much to Report On'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113883038105223724</id><published>2006-02-01T21:36:00.000Z</published><updated>2006-02-01T21:46:21.066Z</updated><title type='text'>IE7</title><content type='html'>Today Microsoft released a beta preview of Internet Explorer 7, scheduled for release later this year.  Since within 12 months I estimate that half of the site's visitors will be using it I thought I'd better give it a try.  The first site I went to was www.plasticbishop.com ofcourse, and sadly I am not impressed.  There are a lot of glitches in it that make the site very hard to use.  Have a look at this screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/7.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/320/7.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1) The "submit move" button is in the wrong place and overlaps the other move options.&lt;br /&gt;&lt;br /&gt;2) My name has been cut off.  It reappears when I hover over it, but then goes again.&lt;br /&gt;&lt;br /&gt;3) The game information is supposed to be in a tooltip style box.  Why doesn't it show here?&lt;br /&gt;&lt;br /&gt;These are all very basic things which work just fine in every other browser I've ever tried (Internet Explorer 6, Firefox (all versions), Netscape 7 and 8, Konquerer).  This annoys me slightly.&lt;br /&gt;&lt;br /&gt;In fairness, this is only a beta, but I really hope that they get these things sorted out.  In the meantime I'm going to have to rewrite bits of my code to ensure that it will all display properly in IE7, just in case they don't fix it.  Annoying.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113883038105223724?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113883038105223724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113883038105223724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113883038105223724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113883038105223724'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/02/ie7.html' title='IE7'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113869789517400113</id><published>2006-01-31T08:49:00.000Z</published><updated>2006-01-31T08:58:15.186Z</updated><title type='text'>Updates Updated But Problems Still Problematic</title><content type='html'>The updates mentioned in my previous post about the code that deals with making chess moves is now running on the site and no one even noticed the transition.  I think the site's working faster now, or at least it doesn't slow down like it sometimes did.  However, we need to monitor this over a longer period than just a few days.  There's undoubtedly further performance tune ups I can do and over the coming months I will do them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;An Old Glitch&lt;/span&gt;&lt;br /&gt;Remember the problem where sometimes a move would be registered twice, causing a piece to dissappear and the moves list to get out of sync?  I do.  I thought I'd fixed it by putting in a check to make sure that the coordinates of this move aren't the same as the coordinates of the last move, so this would prevent duplicate entries.  Well, BigD somehow managed to make two unique moves in one go!  How he did this is a mystery, but obviously the code that checks for a duplicate was useless here because move 2 was completely different to move 1.  I now need to be more cunning in preventing this sort of thing.  I have a plan...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113869789517400113?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113869789517400113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113869789517400113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113869789517400113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113869789517400113'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/updates-updated-but-problems-still.html' title='Updates Updated But Problems Still Problematic'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113835248968291405</id><published>2006-01-27T08:44:00.000Z</published><updated>2006-01-27T09:01:29.696Z</updated><title type='text'>Tournaments Have Backfired!</title><content type='html'>It's been a long week since I last posted, but not a lot has happened really.  The site has been plodding along nicely although last week's 2000 moves per day average has shrunk back down to 1000 moves per day.  I'm not sure what was special about last week, but hopefully it will return soon.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tournaments&lt;/span&gt;&lt;br /&gt;The title of this post may confuse you somewhat, especially since tournaments were like the promised land of the site, so let me explain.  To put it simply, too many people have created tournaments.  This has led to a situation where tournaments are taking several weeks to have their seats filled up and people get fed up with waiting.  Therefore I've implemented a new rule in the site's logic:&lt;br /&gt;&lt;br /&gt;A tournment can only be created if the total number of empty seats is less than a quarter of the total number of members active in the last 7 days, or:&lt;br /&gt;&lt;br /&gt;S &lt; M/4&lt;br /&gt;&lt;br /&gt;where S is the number of empty seats and M is the number of active members.  I may play around with this ratio, but currently this means there needs to be less than 29 empty seats before a new tournament can be created.  Let's just say that we're way over this mark at the moment!  I'm hoping that this will fix this unusual problem :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Performance Boosting&lt;/span&gt;&lt;br /&gt;Last weekend I started rewriting a lot of the code that makes chess moves.  I plan on finishing that work this week and uploading it.  I don't know if there will be a noticeable speed increase, but the server will definately be less stressed during busy times.  The code that makes the moves was almost a year old, and in that year I've learnt a lot more about how to optomise PHP code and database access.  It will be interesting to see what I can do with it a year from now!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Stats Galore!&lt;/span&gt;&lt;br /&gt;Regular readers will no doubt be aware of my fascination with the web site's statistics.  Well, courtesy of Google I can now collect a lot more stats about the site, for example where people exit the site, how many people sign up as a result of a Google ad and so on.  This has led me to optomise the Advertising system I use with Google and will now hopefully get far more members for the same amount of money.  Now, if only I could work out why yesterday Google says I had a 133% sign up rate...!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Volunteers&lt;/span&gt;&lt;br /&gt;One of the other drawbacks of tournaments is that there are far fewer open games created, and thismay mean that less members stick around.  What I'm planning on doing is having some sort of volunteer scheme where reliable members can opt to be in a list that's shown to new members.  The newbies can then click on a player to start a game with them instantly.  It's just so that they can get started with the site pretty quickly and hopefully stick around.  Obviously the definition of a 'reliable member' will be subject to speculation, but I'm thinking along the lines of at least 10 completed games and no losses due to inactivity.  Hopefully this will help keep more new members active.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113835248968291405?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113835248968291405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113835248968291405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113835248968291405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113835248968291405'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/tournaments-have-backfired.html' title='Tournaments Have Backfired!'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113774737235783089</id><published>2006-01-20T08:52:00.000Z</published><updated>2006-01-20T08:56:12.366Z</updated><title type='text'>Potential Problems?</title><content type='html'>Yesterday a couple of strange things happened on the site:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;No Check Mate Detection&lt;/span&gt;&lt;br /&gt;A game that should have been check mate was not registered as such.  There have been over 1000 games since this problem was fixed so I don't know what caused this one.  I replicated the game on my test site and made the final move and it ended perfectly well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;False En-Passant&lt;/span&gt;&lt;br /&gt;A pawn was captured by en-passant - &lt;span style="font-weight:bold;"&gt;by a knight!&lt;/span&gt;  I definately remember fixing this bug so I've no idea why this would have happened.  &lt;br /&gt;&lt;br /&gt;Looks like I've got my work cut out for me this evening :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113774737235783089?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113774737235783089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113774737235783089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113774737235783089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113774737235783089'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/potential-problems.html' title='Potential Problems?'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113757495266204217</id><published>2006-01-18T08:56:00.000Z</published><updated>2006-01-18T09:02:32.676Z</updated><title type='text'>New Calculations</title><content type='html'>I know I might sound like a broken record sometimes, but I really am fascinated about how many moves are being made.  Over the last few days there have consistently been over 2000 moves per day!  That means that if the site stays still we will reach 800000 by Christmas, that's almost double what I originally estimated.  When you take site growth into account then we're more likely to reach a million by autumn (fall).  As with many things, this got me thinking.  How many moves per day could the site currently tolerate?  With 2000 it's doing pretty well, with a move every 43 seconds.  I think that we could manage 5000 a day (1 every 17 seconds) without too much of a struggle, but beyond that I'm going to need to speed things up inside.  Not that I ever turn my nose up at such a challenge though :)  I wonder how many moves per day some of the big sites have?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113757495266204217?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113757495266204217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113757495266204217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113757495266204217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113757495266204217'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/new-calculations.html' title='New Calculations'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113740222488550310</id><published>2006-01-16T08:52:00.000Z</published><updated>2006-01-16T09:03:44.896Z</updated><title type='text'>High Moves Average</title><content type='html'>On Thursday afternoon we finally passed the 100000 moves milestone, and it was Liquid_Crusader who made it.  His mug has been sent to him and should arrive soon.  It is now Monday morning and we are on over 105000 moves, so that's 5000 moves in less than 4 days, so an average of well over 1000 moves per day.  If you consider that there are 365 days in a year, that means at the site's current rate we will reach half a million moves before Christmas.  However, a quick look at the site's graphs shows that it doesn't stay at the same rate but has been consistently growning over the last 35 weeks (since I started logging the statistics).  Therefore, I am fairly confident that by the end of the year we will have actually reached 1000000 (yes, a &lt;span style="font-weight:bold;"&gt;million&lt;/span&gt;) moves.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Lots of Users&lt;/span&gt;&lt;br /&gt;Last night I logged on at about 21:15 and saw that there had been 23 users online just 10 minutes earlier.  That was without Ruthie or myself online, so had we been there it would have been 25 users.  This got me thinking, I used to be amazed to see 5 people online at once and was pleased at how busy things were, but now I consider that to be quiet.  By the end of this year I imagine that seeing 20 people online at once will be a quiet time and it will be common place to see 50+ players at once.  I can't wait :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113740222488550310?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113740222488550310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113740222488550310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113740222488550310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113740222488550310'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/high-moves-average.html' title='High Moves Average'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113701511252569524</id><published>2006-01-11T20:56:00.000Z</published><updated>2006-01-11T21:31:53.263Z</updated><title type='text'>It's All in the Indexes</title><content type='html'>Today I launched a new feature that I'd been thinking about for a few weeks and writing for a few days.  It is an extra side window when viewing the chess board that can show you all games so far on the site that had the position as this game currently has.  It shows every next move that was made in previous games and how many games that move occured in.  You can then click a hyperlink to see a list of those games and then click anyone of those links to view the game.  It really works quite well, and on my mini local site was wonderfully quick.&lt;br /&gt;&lt;br /&gt;In preparation for this I'd done some major work on the moves database (where all chess moves made are stored) to give every row a move number.  This is simply the number of the move as it occured in the game, so black's 2nd move is actually move 4, and so on.  This all sounds straight forward but there 90000 moves in the table and they all needed this number determining.  I managed this with some cunning PHP and a very patient wife who ran the script a few times for me (several hundred times because it did the move number allocations in small chunks so as not to kill the site).  I also created a few extra indexes (indicies?) on the moves table so that finding moves would work fast.  There was an index on the column that links to the move's game, one for the coordinates and also one for the move number column.  Splendid.&lt;br /&gt;&lt;br /&gt;I uploaded all of the necessary files and eagerly loaded an online game to view my handy work.  Hmmmmm, the page is loading slowly.  Hmmmm, it's still loading.  {5 minutes later} Errrmm, it's still loading, my connection is definately live, and no one else I know can get in.  Uh oh.&lt;br /&gt;&lt;br /&gt;My error was two-fold.  First, I hadn't put a limit on the number of moves to match a game to so it was trying to match 30, 40, 100 moves in a game.  MySQL gets a bit annoyed at you when you try to join more than 31 tables so it threw a hissy fit.  Also, when matching just under 30 moves it was still taking an age to run.  Now, if you know anything about chess you'll know that there are more possible chess positions than there are sub-atomic particles in the universe (I'm only counting protons and neutrons, not quarks, neutrinos and other stuff).  After just 10 moves each the game is usually diverse enough to be completely unique, and even after 5 moves each finding a match is pretty rare.  So, I told the code to only match on the first 10 game moves (5 moves per player).&lt;br /&gt;&lt;br /&gt;Still slow.&lt;br /&gt;&lt;br /&gt;Now I did say that my error was two-fold, so here's the second:&lt;br /&gt;I was always told that indexes can make a database query fast.  Well today I learnt that there are different types of index and some are faster than others.  It turns out that if I index the game_id field and the move number field as a combined index a standard query was sped up 40 times, and a combined index on the coordinates also worked wonders.  So, by just tweaking the database structure I managed to get a several hundred times speed increase without any change to my code.  Cool!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What Else Will It Do?&lt;/strong&gt;&lt;br /&gt;That's a good question.  I plan to have it show which were the most successful moves, i.e. what the game win percent was when each move was made.  It will also list named openings and tell you the next move to make for that opening.  I also plan to overcome the 10 moves limit (just in case) - I have a cunning plan for that!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;New Icons&lt;/strong&gt;&lt;br /&gt;One of the more subtle requirements for this moves database thing was the need for another link in the chess board side window.  That's not a problem, except that there was no room without making it double lined.  The solution?  Replace the text links for each window with image links.  Ruthie to the rescue - she drew some little GIF images for me and we uploaded them.  So far they've had a reasonable response, and I think they look great!  There's still room for one more side window icon... (that was a joke, there are no plans yet...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113701511252569524?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113701511252569524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113701511252569524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113701511252569524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113701511252569524'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/its-all-in-indexes.html' title='It&apos;s All in the Indexes'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113667519388720591</id><published>2006-01-07T22:41:00.000Z</published><updated>2006-01-07T23:06:42.656Z</updated><title type='text'>First Wave of Tournament Updates</title><content type='html'>I always new it would happen - as I wrote so much code for the tournaments there would innevitably be some bugs that I didn't manage to find.  Today I found one and also refined a few things.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Incorrect Players&lt;/span&gt;&lt;br /&gt;In the big grid that shows who's played who I found that sometimes it would display the wrong games for a player.  When I hovered over a grid square for that player I found that it listed the wrong player altogether.  It turns out that this was due to a player being in more than one tournament - it was pulling the games for their seat number but from a different tournament.  This may sound silly but it took a good hour or so to track down!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;View All Results&lt;/span&gt;&lt;br /&gt;The results table had a fairly harmless limitation - it only listed the results for players who'd completed at least one game in that tournament.  The technicalities of why this limitation existed are long and a bit boring, but now it is resolved.  All players are listed in the results, so all is fine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Result Ordering&lt;/span&gt;&lt;br /&gt;One thing that had been annoying me about the results table was the way in which it sorted ther players.  The order was, quite obviously, in descending points order, so the player with the most points was at the top.  However, difficulties arose when two or more players had the same points, their order was however the database chose to order them and not by any specific field.  To fix this I've done a lot of work on the sorting and think it's now sorted (punn intended).  Here's the sort order:&lt;br /&gt;&lt;br /&gt;Points Descending&lt;br /&gt;Games Ascending&lt;br /&gt;Wins Descending&lt;br /&gt;Draws Descending&lt;br /&gt;Losses Ascending&lt;br /&gt;&lt;br /&gt;So, if some players have the same points then the one with the least games is top, with the reasoning that they did better per game on average so deserve to be higher.  If they have the same number of games then the one with the most wins is top.  If they have the same wins then the one with the most draws is top.  If they have the same number of draws then the one with the least losses is top.  Hopefully this all makes sense :)&lt;br /&gt;&lt;br /&gt;A side effect of this is that the player who has 9 games and lost them all is rated &lt;span style="font-weight:bold;"&gt;below&lt;/span&gt; the player who has 0 games.  I'm not sure if this is a good thing or not, but we'll see how it works out.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Descriptions&lt;/span&gt;&lt;br /&gt;A tournament can now have a brief description that's viewable in the "Tournament Lobby" page.  It is also easy to see who created a tournament.  These two bits of information are designed to help players better decide whether they fancy joining a tournament or not.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Hidden Extras&lt;/span&gt;&lt;br /&gt;I also wrote into the code a couple of other features but have decided not to implement them for the time being.  The first is to limit the maximum number of games each player can play at once in that tournament.  This would be something that's set up when the tournament is created, but I decided to leave it out for now after the Missus pointed out that players should be responsible for managing their own game loads.  Maybe she's right :)&lt;br /&gt;&lt;br /&gt;The second feature was to define that players can only join a tournament if their in less than n other tournaments already.  I aborted this on the same grounds as the other feature.  This doesn't mean that they're dead in the water though.  The ideas do have some merit so they may resurface some time in the future, but for now I'll let the Missus have her way :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113667519388720591?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113667519388720591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113667519388720591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113667519388720591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113667519388720591'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/first-wave-of-tournament-updates.html' title='First Wave of Tournament Updates'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113637979651487462</id><published>2006-01-04T13:02:00.000Z</published><updated>2006-01-04T13:03:16.526Z</updated><title type='text'>Errors No More</title><content type='html'>Recently I wrote about the error handling features I built into the site.  Although they don't mean a great deal to other members of the site, I'm finding the system incredibly useful.  Each evening I go to the database and see what errors have been logged.  The log tells me the file name, the line number, and even the complete URL that had been typed before it happened.  I then go to the appropriate line in the file and fix whatever the problem is.  Thanks to this process the errors have gone down from several thousand logs a day (yes, really!) to less than ten.  Although these errors were always surpressed anyway, it's highly satisfying knowing that they're been dealt with.  By the end of this week I hope to have virtually all errors fixed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;All Errors Fixed?&lt;/span&gt;&lt;br /&gt;Ok, so some smarty pants is probably chuntering that you can never fix all errors in a program, or at least you can never know that you've fixed all errors because you can't test for every possible input.  What I mean is that if just one or two new errors are logged each month then that's a level I can live with.  Of course, they'll be fixed there and then, but surely another couple will come along in the next month.  Such is the nature of software.&lt;br /&gt;&lt;br /&gt;The error logging wil play a more important role as the site grows.  I have no intention of letting the site's development tail off so there's going to be new features regularly appearing for the foreseeable future.  With new features will obviously come new errors - the logging will find them for me and I can get them sorted straight away.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;No Substitute For Good Testing&lt;/span&gt;&lt;br /&gt;I'm not saying that I don't error test things before making them live.  In fact, the reality is quite the opposite.  I do as much testing as I can before uploading something, but when you consider that I can only test as much as Ruthie and myself can, and the live site has 1000 moves per day, you can see how it's obvious that sometimes there will be problems that slip through the net.  If I tried to test it even more at home first then nothing would ever get done!  The art is finding a happy medium.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113637979651487462?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113637979651487462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113637979651487462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113637979651487462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113637979651487462'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/errors-no-more.html' title='Errors No More'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113629156805149645</id><published>2006-01-03T12:17:00.000Z</published><updated>2006-01-03T12:32:48.063Z</updated><title type='text'>Out-Smarted by The Missus</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Simple Solutions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yesterday I was talking to Ruthie about a slight problem that the site has and in fact always has had.  When displaying captured pieces in order of their value the order is pawn, &lt;span style="font-weight:bold;"&gt;ROOK&lt;/span&gt;, knight, bishop, queen and king.  This dates back to when I first made the site, and in fact the very first database table I made - the &lt;span style="font-weight:bold;"&gt;pieceinfo&lt;/span&gt; table.  In those days I actually thought a rook was worth 2 pawns and would happily sacrifice it in exchange for a knight or bishop.  Oh how foolish I was.  Anyway, from that moment on a rook had an ID of 2 and that ID was written into the tables of game pieces - now totalling over 50000.  So, when it comes to ordering the captured pieces I order by ID, and this is wrong as far as rooks are concerned.&lt;br /&gt;&lt;br /&gt;To cut a long story short, I was telling Ruthie how there's no easy way to fix this problem.  She then said "Why don't you just give the pieces in the pieceinfo table a piecevalue field, and then order by that?"  My mouth dropped!  Instead of having to edit 50000 rows she had come up with a way where I'd only have to edit 12 rows, and what's mre it would only require a minor change to one line of code!  Oh how annoyed I was!  I don't go telling her how to do her job, or how to read books.  However, it was a good idea and I love her dearly for it :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tournaments&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are now 3 tournaments going on the site and I must say, they are working very nicely.  They seem to be very popular and keep a lot of people online for longer.  In fact they are so popular that I'm considering raising the maximum size from 16 to 32.  Some of my grids may need to be redesigned to display everything properly, but it's an interesting thought.  &lt;br /&gt;&lt;br /&gt;Better news is that at the moment I'm joint first in the big tournament (joint with terry).  However, HISSING SID is not far behind and has a higher win percent so far, it just so happens that he's completed fewer games.  Splendid!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113629156805149645?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113629156805149645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113629156805149645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113629156805149645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113629156805149645'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/out-smarted-by-missus.html' title='Out-Smarted by The Missus'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113619691820252477</id><published>2006-01-02T00:55:00.000Z</published><updated>2006-01-02T10:19:50.436Z</updated><title type='text'>Christmas is Over, So I'm Back</title><content type='html'>I've spent the last week hopping between various sets of parents' houses so leaving little time to update the blog.  However, I've been back a few days now and have safely got New Year out the way so it's about time I gave you an update.&lt;br /&gt;&lt;br /&gt;On my visits I was quite cunning and gave myself the means to work on the site from any computer.  So, whenever I got bored I could tinker with some stuff to save work later on.  The main thing I got to work on was error handling.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Error Handling&lt;/span&gt;&lt;br /&gt;You may think that you've never seen an error on the site before, or maybe you did once but that was 2 months ago and was because I was messing around with something.  Well, it turns out that there are infact lots of errors on the site but you never see them.  I know this because I made a custom error handler such that all errors are now logged in a database along with the line and file that the error occured on, the URL being viewed, the user who saw the error and the severity of the error.&lt;br /&gt;&lt;br /&gt;This customer error handling allowed me to define what the user sees in a non-suppressed error.  Instead of the default ugly black text the user will now see a little exclamation icon, gently letting them know that something went wrong.  However, the plan is that they will never see that...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Error Hunting&lt;/span&gt;&lt;br /&gt;With my new error handling tools in place I set about tracking down the source of all of these hidden errors.  The main culprit was a closed database connection, but that was curious since they were always at a point where I hadn't yet closed the connection.  I persevered and got rid of a lot of the errors but without really understanding what caused them in the first place.  Then it hit me...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Header Function&lt;/span&gt;&lt;br /&gt;After any user action is processed on the site the page is reforwarded to a 'clean' version of the page without any of the user's POST data on it.  Whenever I do this I call my own function "forwardheader".  Here's that function:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;php&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#0000FF;"&gt;function&lt;/span&gt; forwardheader($variables&lt;span style="color:#800000;"&gt;,&lt;/span&gt; $page)&lt;span style="color:#800000;"&gt;{&lt;/span&gt;&lt;br /&gt;  header(&lt;span style="color:#808080;"&gt;"Location: http://"&lt;/span&gt; &lt;span style="color:#800000;"&gt;.&lt;/span&gt; Root() &lt;span style="color:#800000;"&gt;.&lt;/span&gt; &lt;span style="color:#808080;"&gt;"/$page"&lt;/span&gt;);&lt;br /&gt;  @mysql_close($variables[&lt;span style="color:#808080;"&gt;'link_id'&lt;/span&gt;]);&lt;br /&gt; &lt;span style="color:#800000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see, it tells the browser to forward on to a new page and then closes the current database connection.  However, what I hadn't realised was that even though the browser is now going to a different page, this script still contiues to execute on the server.  The database connection is closed so there are a lot of errors occurring but since the browser has given up on the original page the user never actually sees them.  The solution was to tell PHP to stop the script after the header is forwarded, like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;php&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#0000FF;"&gt;function&lt;/span&gt; forwardheader($variables&lt;span style="color:#800000;"&gt;,&lt;/span&gt; $page)&lt;span style="color:#800000;"&gt;{&lt;/span&gt;&lt;br /&gt;  header(&lt;span style="color:#808080;"&gt;"Location: http://"&lt;/span&gt; &lt;span style="color:#800000;"&gt;.&lt;/span&gt; Root() &lt;span style="color:#800000;"&gt;.&lt;/span&gt; &lt;span style="color:#808080;"&gt;"/$page"&lt;/span&gt;);&lt;br /&gt;  @mysql_close($variables[&lt;span style="color:#808080;"&gt;'link_id'&lt;/span&gt;]);&lt;br /&gt;  @ob_clean();&lt;br /&gt;  &lt;span style="color:#0000FF;"&gt;exit&lt;/span&gt;; &lt;span style="color:#008000;"&gt;//exit this script&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#800000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The result is no more hidden errors, and hopefully a faster site since we're not getting 2 scripts running at once per user.  That's a pretty good Christmas present for me!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Other Achievemtments&lt;/span&gt;&lt;br /&gt;One thing I'd wanted to do for a while now was clean up the side menu's code.  This has now been done and drawing the side menu is now done by a single function call instead of the whole thing being embedded in the site's header files.  Of course the end user won't notice any difference because it all looks exactly the same, but rest assured that under the hood it's a lot nicer.&lt;br /&gt;&lt;br /&gt;In fact, that goes for most of the site now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113619691820252477?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113619691820252477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113619691820252477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113619691820252477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113619691820252477'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2006/01/christmas-is-over-so-im-back.html' title='Christmas is Over, So I&apos;m Back'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113547135465223975</id><published>2005-12-25T00:29:00.000Z</published><updated>2005-12-25T00:42:34.666Z</updated><title type='text'>Tournaments Are Go!</title><content type='html'>Today was launch day for tournaments!  Well, technically it was yesterday but what's a few hours here and there?  I can't express quite how glad I am that they are finally up and running.  It was about 8 months ago when, during some email correspondence with Rick, that I decided I really wanted tournaments for the site.  Then things kept happening to delay them and the more I thought about them the harder they seemed.  Now, finally after 2 weeks of hard work in just about 75% of my spare time they are finally up and running.  It is a great feeling.&lt;br /&gt;&lt;br /&gt;I created a small tournament immediately with just 4 seats.  As it stands there is still 1 seat remaining to be filled, but given the time of year I'm not surprised that a lot of people haven't got chess on their minds.  I'll check on the site tomorrow, but as it will be Christmas day it's highly unlikely that I'll be on for a great length of time.&lt;br /&gt;&lt;br /&gt;What next?  That was not just a rhetorical question - if anyone has any ideas for the next big site project then please, let me hear them.  There are a few ideas that I have at the moment but nothing quite so significant as tournaments.  I plan on spending a reasonable amount of time tweaking with the tournaments code and adding the odd new feature here and there.  For example, there's no way to see who has played who in a given tournament, and various other little things like that.  No doubt there will also be some issues with (hopefully) minor glitches in the code.  Afterall, the only way I could test everything was for myself and Ruthie to log into our local copy of the site with several user names at once and play some tournaments to completion under various conditions.  Because of the way the code is written, if it works for a 4 player tournament then it will work just the same for 32+ players, but time shall tell.&lt;br /&gt;&lt;br /&gt;Oh, yes, back to my not-so-rhetorical question of what's next.  The "Preferences" page is in dire need of an overhaul (again) as there are so many tweaks that can be done it is becoming quite cumbersome.  There are also a few pages that could do with being streamlined in the code department.  As I look at my old code I sometimes shudder at the way I wrote it.  However, in a year from now I'll probably shudder when I look at today's code.  Funny how you slowly improve.&lt;br /&gt;&lt;br /&gt;On a personal note, I want to wish everybody a very happy Christmas.  Whether you celebrate Christmas or not, I wish you every happiness and hope that 2006 is a great year, both on and offline.&lt;br /&gt;&lt;br /&gt;Merry Christmas!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113547135465223975?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113547135465223975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113547135465223975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113547135465223975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113547135465223975'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/tournaments-are-go.html' title='Tournaments Are Go!'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113538316780773538</id><published>2005-12-24T00:09:00.000Z</published><updated>2005-12-24T00:14:32.363Z</updated><title type='text'>Triangular Numbers</title><content type='html'>I was pondering how many games there will be in a league tournament where every player plays every other player once.  I worked out the following:&lt;br /&gt;&lt;br /&gt;s --- n&lt;br /&gt;2 --&gt; 1&lt;br /&gt;3 --&gt; 3&lt;br /&gt;4 --&gt; 6&lt;br /&gt;5 --&gt; 10&lt;br /&gt;6 --&gt; 15&lt;br /&gt;&lt;br /&gt;Where s is the number of seats in the tournament and n is the number of games that will have to be played.  By this point it became a familiar sequence - they are triangular numbers.  The forumula that links them is:&lt;br /&gt;&lt;br /&gt;n = s*(s-1)/2&lt;br /&gt;&lt;br /&gt;For some reason I wasn't expecting it to be that nice :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113538316780773538?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113538316780773538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113538316780773538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113538316780773538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113538316780773538'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/triangular-numbers.html' title='Triangular Numbers'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113538009813607472</id><published>2005-12-23T23:18:00.000Z</published><updated>2005-12-23T23:21:38.136Z</updated><title type='text'>The Final Countdown</title><content type='html'>It's Friday evening and I don't have to be back at work for 10.5 days - could things be any better?  I've cleared it with the Mrs and I'm allowed to stay up late tonight so will get lots of work done on the tournaments.  Then all of tomorrow is free for me to finish it off so my Christmas Eve deadline should be met.  Brilliant!&lt;br /&gt;&lt;br /&gt;(Note: I don't really need to clear my bedtimes with my wife.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113538009813607472?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113538009813607472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113538009813607472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113538009813607472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113538009813607472'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/final-countdown.html' title='The Final Countdown'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113519816383148124</id><published>2005-12-21T20:37:00.000Z</published><updated>2005-12-21T20:50:05.386Z</updated><title type='text'>Today's Update - Still on Track</title><content type='html'>The trouble with writing something as big as this tournament thing is that each day is fairly similar to the last, and so thinking of ways to make my blog entry interesting gets a bit difficult.  Fortunately the solution is quite simple - don't bother trying to make it interesting!&lt;br /&gt;&lt;br /&gt;Today I've taken on board the suggestions of the extremely knowledgeable and experienced Rick and made it so that a tournament doesn't start until all seats are filled.  The tournament's end date is then calculated by adding the tournament's specified duration to the current date.  Simple.&lt;br /&gt;&lt;br /&gt;Still to do is the tidying up of the tournament creation page - it's a right old mess (see attached picture).  I think apart from that the starting of tournaments is sorted, but the ending of them is still a little bit tricky.  I think there's going to have to be a script that runs every hour or so to check for tournaments that have passed their "end by" dates and sort everything out gracefully.  Tricky but not totally unlike some other features of the site.&lt;br /&gt;&lt;br /&gt;On a slightly happier note, the tournament pages are written with much better code than other pages.  This is simply because I first started with PHP 10 months ago and so still improve all the time.  Eventually the whole site will be gradually rewritten using better and faster code, though it will be one bit at a time I think (that's what I did to the chat system last month).  I'm hopefully getting an excellent book on advanced PHP programming so that should be good!&lt;br /&gt;&lt;br /&gt;Right, goodnight :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/screenshot.0.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/400/screenshot.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113519816383148124?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113519816383148124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113519816383148124' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113519816383148124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113519816383148124'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/todays-update-still-on-track.html' title='Today&apos;s Update - Still on Track'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113511612116934879</id><published>2005-12-20T21:56:00.000Z</published><updated>2005-12-20T22:02:27.943Z</updated><title type='text'>More Progress</title><content type='html'>I've made more progress this evening.  There's been some code fixing, some tidying up and I even did a wee bit on the page presentation.  Since It's just about my bedtime I'll post a little taster of one of the new pages in the form of a screenshot.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3091/1947/1600/screenshot.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3091/1947/400/screenshot.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113511612116934879?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113511612116934879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113511612116934879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113511612116934879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113511612116934879'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/more-progress.html' title='More Progress'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113506917094215748</id><published>2005-12-20T08:51:00.000Z</published><updated>2005-12-20T08:59:30.953Z</updated><title type='text'>Long Time No Ste</title><content type='html'>I was away all weekend so was unable to make any progress on the site (though I did manage to sneak in the odd chess move).&lt;br /&gt;&lt;br /&gt;Well, it's the run up to Christmas and as I announced on the site's forums last night, there'll be a lovely treat in store for everyone.  I'm expecting tournaments to be ready and online by the end of the 24th December, that's just 4 days time.&lt;br /&gt;&lt;br /&gt;The development is going very well and last night I managed to get all of the results tables sorted properly.  There may also be a possibility of a very kind person making some images of trophies for us but I'll not say anymore about that because I don't want the said person to feel pressured into doing it.&lt;br /&gt;&lt;br /&gt;I've still got to sort out the date issues with tournaments, writing something to dictate what happens when games run past the tournament's end date.  Rick also pointed out that usually a tournament doesn't start until all seats have been filled.  It's certainly food for thought but I'm convinced I can make it still all work if people are allowed to join just after it has begun.&lt;br /&gt;&lt;br /&gt;I'm just about to start work now so I'd better finish this post quick sharp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113506917094215748?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113506917094215748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113506917094215748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113506917094215748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113506917094215748'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/long-time-no-ste.html' title='Long Time No Ste'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113472276437308304</id><published>2005-12-16T08:35:00.000Z</published><updated>2005-12-16T08:46:04.380Z</updated><title type='text'>Another Step Closer</title><content type='html'>Last night I had a good 3 hours to work on the tournaments which is rare for a weekday.  I got to a stage where my wife and I could play a min league across our network and all appears to be working pretty well.  She came up with a few suggestions as she always does:&lt;br /&gt;&lt;br /&gt;I need to make it obvious whether any given game is a tournament game or not.  I'm working on a little GIF image to help with that.&lt;br /&gt;&lt;br /&gt;The results table needs to be sorted by player tournament points.  This is pretty obvious really.&lt;br /&gt;&lt;br /&gt;There needs to be a mechanism in place for preventing games running passed the tournament end date.  I have a plan for part of that to prevent players from timing out passed the end of the tournament - prompts will be available in tournament games after 3 days, so you can evict someone after 6 days, and no new games will be able to be created within a week of the tournament end date.  Obviously this idea needs refining, but it could help a lot.&lt;br /&gt;&lt;br /&gt;I need to ensure that a tournament can end before its defined end date if all of its games have ended.&lt;br /&gt;&lt;br /&gt;Another thing that I've implemented due to the necessities of the tournament code is the storing of game end dates.  You would be forgiven for thinking that we already do that but in fact we don't.  The end date is currently defined as the date that the last move was made, but when timing out opponents that's not the case.  Once I put that online it should clear up some confusion in the completed games lists.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113472276437308304?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113472276437308304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113472276437308304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113472276437308304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113472276437308304'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/another-step-closer.html' title='Another Step Closer'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113459345672062241</id><published>2005-12-14T20:45:00.000Z</published><updated>2005-12-14T20:50:56.720Z</updated><title type='text'>More Feedback</title><content type='html'>I was on Microsoft's MSDN site today as Windows programmers often are.  At the bottom of most pages it has a little box where you can rate the page and give a comment about it.  Presumably Microsoft then use the ratings and comments to help the improve the future revisions of the page.  I started thinking - wouldn't it be handy to have such a thing on the chess site!  I'd let people rate the page on a scale of 1 to 10 and let them optionally describe why they voted that way.  Then I could find out which pages confuse people due to bad layout and improve it.  Even if there's just a handful of submissions per week it would still be very useful to me.  Of course I'd have to make it:&lt;br /&gt;&lt;br /&gt;a) discrete so it doesn't interfere with the page&lt;br /&gt;&lt;br /&gt;b) anonymous so people can say whatever they want&lt;br /&gt;&lt;br /&gt;It's certainly a little mini project for me to consider one day soon, though it should only take an hour or so to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113459345672062241?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113459345672062241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113459345672062241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113459345672062241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113459345672062241'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/more-feedback.html' title='More Feedback'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113459309326845412</id><published>2005-12-14T20:29:00.000Z</published><updated>2005-12-14T20:44:53.286Z</updated><title type='text'>A Quick Update</title><content type='html'>Of course I'm going to talk about the tournaments, what else could possibly be on my chessy mind these days?&lt;br /&gt;&lt;br /&gt;I'm getting to the stage where it seems like there's less work in front than there is behind.  The main infrastructure is now complete - we can create tournaments, other players can join them, they can play tournament games and view the league table for that tournament.  There's no theoretical limit on the number of tournaments a player can play in at once and everything seems to be working nicely.&lt;br /&gt;&lt;br /&gt;"Great, now upload it and let us play" I hear you think.  "Not so fast" is my reply.  There's still lots to do.  For example, there's no code to deal with games that run beyond the end of the tournament.  Secondly the pages are ugly.  When coding the aesthetic parts of the code usually come last because they're comparatively easy.  This time though the nicities will be quite hard because the whole lot needs to be integrated with so many existing systems but look as though it was always meant to be there.&lt;br /&gt;&lt;br /&gt;Anyone want to know when it will all be finished?  Some time next week!  I wont be able to work on it on Friday, Saturday nor most of Sunday this week so am losing the main development time.  Shame, but when you consider that my original time frame for tournaments was between Christmas and New Year we're doing ok.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113459309326845412?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113459309326845412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113459309326845412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113459309326845412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113459309326845412'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/quick-update.html' title='A Quick Update'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113447742102691855</id><published>2005-12-13T12:33:00.000Z</published><updated>2005-12-13T12:37:01.026Z</updated><title type='text'>Late Start = Early Start</title><content type='html'>I was lucky enough to be going on a business trip this morning, but the place I was going to is just 15 minutes from my house.  This meant that instead of setting off before 8AM, I set off at 8:45AM.  Ever wondered what you can do with a spare 45 minutes?  You can make good progress with the tournament code and write a good portion of the Games Lobby plugins for it, that's what!&lt;br /&gt;&lt;br /&gt;Tonight will be even better because I'm feeling pretty motivated.  Of course, I'm hoping that the remaining 5 hours at work don't crush my spirit entirely (work is actually pretty good and things are working nicely - the calm before the storm..?)  Well, lunch time is over so I'd better get back to it (sound of whip cracking in the background).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113447742102691855?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113447742102691855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113447742102691855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113447742102691855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113447742102691855'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/late-start-early-start.html' title='Late Start = Early Start'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113447718439407985</id><published>2005-12-13T12:29:00.000Z</published><updated>2005-12-13T12:33:04.400Z</updated><title type='text'>So Many Users, And This Time I Was There</title><content type='html'>Last night saw 18 users simulaneously logged on to the site and unlike last week's record, I was a part of this one.  Very entertaining.  I wonder at what rate the maximum users online figure will grow.  If it was 1 a week, then in 2 weeks we'll get to 20 (nice Christmas present).  By my birthday next year we'll be approaching 50, and this time next year we'll be on 70.  I may end up requiring another upgrade ti cope with that, and so might the server...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113447718439407985?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113447718439407985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113447718439407985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113447718439407985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113447718439407985'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/so-many-users-and-this-time-i-was.html' title='So Many Users, And This Time I Was There'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113442508558623210</id><published>2005-12-12T21:45:00.000Z</published><updated>2005-12-12T22:04:45.593Z</updated><title type='text'>Battles on One Front, Peace on the Other</title><content type='html'>The battles to which I refer to are of course chess battles.  For some reason an uncanny number of my opponents were online tonight meaning that I barely got any time for other things.  The other things are of course tournament programming.  I've progressed a little bit with the page which will allow users to see available games within their tournament and accept them, a bit like a "Games Lobby" for tournaments.  This is of course not that simple but now the underlying code appears to work reliably.  Now I need to plug this in to the existing Games Lobby and then tournaments will be well on their way.  Of course there's still the little matter of results tables, time management and such, but I'm certainly getting there.&lt;br /&gt;&lt;br /&gt;Since there's not a lot of other development to report on I thought I'd explain how I manage to test new additions to the website without causing any disruption.  The answer is quite simple - the PlasticBishop.com that you all play on isn't the only PlasticBishop.com in the world!  On my home computer are all of the site's files and a different copy of the database.  It has about 20 users, 19 of which are me with test accounts and 1 is Ruthie.  When testing new features I apply them to the local site first and Ruthie and I will then play 3 or 4 blitz games simultaneously (across our network) and try to mimic any conditions that will break it.  Once proven successfull I then alter the structure of the online database to match the local database's structure and then upload the new/changes script files.  The result is usually a smooth transition.  In fact, I make up to 10 such changes per week and maybe only once a month will I accidentally break the site, and even then it's never down for more than a minute.&lt;br /&gt;&lt;br /&gt;If anyone is wondering what development tools I use to write the site then you may be suprised at how cheap they are:&lt;br /&gt;Site design and scripting: Source Edit - FREE (basically a glorified version of Notepad)&lt;br /&gt;&lt;br /&gt;Scripting Language: PHP - FREE&lt;br /&gt;Database Engine: MySQL - FREE&lt;br /&gt;Web Server software: Apache - FREE&lt;br /&gt;Site Testing: Firefox - FREE, IE6 - FREE, Netscape - FREE, Opera - FREE (only recently)&lt;br /&gt;Uploading Program: SmartFTP - FREE&lt;br /&gt;Database Management: PHPMyAdmin - FREE&lt;br /&gt;&lt;br /&gt;So, the total cost of writing and maintaining the site is FREE.  All I pay for is the online webspace and Google Ads.  It suprised me when I found out just what's available if you rummage around a bit!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113442508558623210?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113442508558623210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113442508558623210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113442508558623210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113442508558623210'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/battles-on-one-front-peace-on-other.html' title='Battles on One Front, Peace on the Other'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113432991045508377</id><published>2005-12-11T19:20:00.000Z</published><updated>2005-12-11T19:38:30.463Z</updated><title type='text'>Tourna-Mental Progress</title><content type='html'>Since my last post I've been working very hard on enabling site tournaments.  The first thing I did was to make a forum post asking for suggestions on how we'd cope with things such as players not moving, draws and other such things.  I then did a slightly naughty thing and put a link to this forum thread at the top of each page.  It's fairly unobtrusive and I think it's for the greater good (because so many people want the tournament feature) so I can live with myself.  Besides, it paid off!  The thread has had nearly 100 views and 14 replies in just 24 hours.  That in itself is a site record I think.&lt;br /&gt;&lt;br /&gt;For the moment I've decided to limit myself to making league tournaments, so every player in the tournament plays every other player twice and the points add up to give final scores.  The fundamental mechanics of this type of tournament would be the same for a knockout tournament, but this way I don't have to worry about time constraints (yet).  In fact, I designed the database structure with multiple tournament formats in mind.  Here's a description of the database tables so far (for tournaments only, I've left the other tables out because to be honest, it's &lt;span style="font-weight:bold;"&gt;big&lt;/span&gt;):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;chess_tournaments&lt;/span&gt;&lt;br /&gt;tournament_id     (unique for each tournament)&lt;br /&gt;seats             (number of players for this tournament)&lt;br /&gt;minrating         (these next 3 define who can join)&lt;br /&gt;maxrating&lt;br /&gt;mingames&lt;br /&gt;tournamenttype    (the type of tournament)&lt;br /&gt;maxgamelength     (maximum length of each game)&lt;br /&gt;startedby         (the id of the player who started it)&lt;br /&gt;tournamentname    (the name of the tournament)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;chess_tournament_seats&lt;/span&gt;&lt;br /&gt;seat_id&lt;br /&gt;user_id           (the id of the user in this seat)&lt;br /&gt;tournament_id     (the tournament that this seat belongs to)&lt;br /&gt;seatnumber        (the number of this seat)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;chess_tournament_games&lt;/span&gt;&lt;br /&gt;t_item_id&lt;br /&gt;tournament_id     (the tournament that this game is for)&lt;br /&gt;game_id           (the game that this refers to)&lt;br /&gt;round_id          (the round of the tournament)&lt;br /&gt;&lt;br /&gt;I've already written the basic functionality to create and join tournaments so am now dealing with the guts of it, writing things to keep track of all of the games etc.  It's hard work but I'm enjoying it.  I can't wait until I get to the stage where I can see it all working together.  That stage should come before the end of next week in theory.  We shall see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113432991045508377?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113432991045508377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113432991045508377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113432991045508377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113432991045508377'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/tourna-mental-progress.html' title='Tourna-Mental Progress'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113423793084988689</id><published>2005-12-10T17:36:00.000Z</published><updated>2005-12-10T18:05:36.343Z</updated><title type='text'>Biting the Tournament Bullet</title><content type='html'>It's got to be done some time, and probably sooner rather than later.  The site &lt;span style="font-weight:bold;"&gt;needs&lt;/span&gt; tournaments.  Let me justify that statement because it does seem rather bold (and not just the formatting).&lt;br /&gt;&lt;br /&gt;Single games are great for casual players and give you a pretty good idea of where you stand in the grand scheme of things.  However, there are a lot of members who aren't just casual players but like to play multiple games at once and come back each day.  Now, imagine there's a tournament set up for 16 people, and we set a minimum rating for entrance of 1050 and a maximum of 1150.  The 16 that enter will all have pretty similar levels of skill, and in a tournament (either a knockout or league style) it's not certain who'll come out on top overall.  Maybe we can say Player A will finish in the top 3, but it's still all to play for and should give those players something extra to think about, and that in turn will keep them happy (in a chess sense) and keep them coming back to the site for a long time to come.&lt;br /&gt;&lt;br /&gt;The cynical amongst you may be thinking "Why not just let them leave, we don't need them anyway."  My answer to that is "Yes we do need them".  Regular players are the bread and butter of the site.  All members are important, especially those that like to play just one or two games at once since they make up the majority of the membership.  But without the players who like to play more these others wouldn't have  anyone to play most of the time.  The regulars keep the not so regulars coming back.&lt;br /&gt;&lt;br /&gt;The cynical probably still aren't convinced.  "We've managed so far, why not just keep it as we are and save yourself several weeks worth of work?"  I want the site to grow.  However, not content with its current growth, I want the rate of growth to grow (increase d2y/dt2 where y is the number of members and t is time (sorry, I'm still a scientist at heart)), and so make those lines on the graphs page get steeper.  I want PlasticBishop.com to become a big site with thousands of members, but I don't want to wait until 2007 before it gets there - I want it to happen soon.  I want to keep everybody happy and believe me, a lot of people want tournaments.  That's why I'm starting writing the tournament code &lt;span style="font-weight:bold;"&gt;today&lt;/span&gt;.  In fact, as soon as I've had my dinner I'll get on it.  It may take a few weeks for me to get something working, but when I do I really hope it will make for some very happy players.  Here's hoping!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113423793084988689?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113423793084988689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113423793084988689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113423793084988689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113423793084988689'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/biting-tournament-bullet.html' title='Biting the Tournament Bullet'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113423616704985498</id><published>2005-12-10T17:21:00.000Z</published><updated>2005-12-10T17:36:07.056Z</updated><title type='text'>The Site From Someone Else's Perspective</title><content type='html'>My dad came to visit me today which was very pleasant.  We were sat at my computer looking at some steam engine pictures he'd taken this morning and we got to talking about the website.  It was very interesting because for the first time I had a proper two-way face to face discussion about it with someone who's not the missus.  A bit of background on my dad: he's not exactly a computer wizz.  He knows enough to get by and be able to use email, MS Word and a web browser, but doesn't earn his living by doing these things.  For this reason his perspective of the site was very interesting to me and he had some interesting points.&lt;br /&gt;&lt;br /&gt;He didn't like the way some of the pieces looked on the darker squares of the board.  My dad joined the site extremely early in its history (his was the 10th sign up) and in those days you only had one colour scheme and one set of pieces available.  Since then he'd managed to change his pieces but not his board colour scheme and so the black pieces on the dark squares became hard to see and he said he'd lost a few games because of not spotting a piece.  When I showed him how to change the colour scheme he was happy.&lt;br /&gt;&lt;br /&gt;There were things that I take for granted that my dad just didn't know about.  Two such things are the ability to set it so that your pieces are always on the bottom (rather than white always on bottom and black always on top) and also displaying the moves list in descending order.  Both of these things he found pretty useful.&lt;br /&gt;&lt;br /&gt;I'm now wondering how many other members never bother delving into the wonders of the "My Preferences" page.  There really are quite a few settings in there that can help you suit the site to your preferences (hence the name "My Preferences").  I think what I'll do is reorganise that page (again) to make everything super easy to find, and then maybe make a forum post about it.  Perhaps we wouldn't lose as many members if they all knew what you could do.&lt;br /&gt;&lt;br /&gt;I tried explaining to poor old dad the merits of English (and figurine) Algebraic Notation.  He didn't seem to get it :(  Can't win them all I guess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113423616704985498?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113423616704985498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113423616704985498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113423616704985498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113423616704985498'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/site-from-someone-elses-perspective.html' title='The Site From Someone Else&apos;s Perspective'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113415992928577427</id><published>2005-12-09T20:13:00.000Z</published><updated>2005-12-09T20:25:29.300Z</updated><title type='text'>Ratings Peculiarity Fixed</title><content type='html'>So far this evening I've fixed the ratings glitch I mentioned a few days ago, the one where the list of players in rating order was not sorting properly.  It was simply a matter of changing the secondary sorting parameter for ratings to win percent.  While I was at it I tweaked a few other sort parameters, such as win percent has a secondary sort column of number of games.&lt;br /&gt;&lt;br /&gt;You know how sometimes you want to do something and know it will be really easy and useful, yet for some reason you put it off for months?  I've been doing that with the general site stats that are shown at the bottom of each page.  When you want to know how many members the site currently has most people will go to the "Member Lists" page and read the bit at the top that tells you.  Since I'm in the 'know' I just hover over the link to the newest member (in the site stats on EVERY page) and look at the 'view_id' field in that link.  The rule is simple - look at that number and subtract 2, that's the number of members there currently are.  You may wonder why on Earth to we need to subtract 2?  That is a very good question which I will answer in a minute, but first to the original point of this paragraph - why don't I put something that says "There are currently xyz members on this site"?  It would be very simple and would take me about 30 seconds (maybe 45 if I take into account uploading the change).  Maybe I'll do it very soon...&lt;br /&gt;&lt;br /&gt;Now, why do we subract that 2?  Because very early on in the site's history I was testing a couple of new accounts, then I deleted them.  The database's autoindex was already incremented and that's the way it has been since.  If only I'd thought about the consequences of my actions...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113415992928577427?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113415992928577427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113415992928577427' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113415992928577427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113415992928577427'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/ratings-peculiarity-fixed.html' title='Ratings Peculiarity Fixed'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113413113228049801</id><published>2005-12-09T12:13:00.000Z</published><updated>2005-12-09T12:31:38.106Z</updated><title type='text'>So Many Users, and I Missed It!</title><content type='html'>Last night appeared to be the busiest night ever on the site, with a peak of 17 registered users online at once.  Unbelievably I missed this momentous even because I was out watching some live snooker.  Ordinarily I'd rather watch live snooker than sit watching how many people log on to my site, but this was the most boring snooker I've ever witnessed.  The players (who are extremely famous but I shall not name in order to preserve what little dignity they must have left) simply were not on form and it was a huge disappointment.&lt;br /&gt;&lt;br /&gt;Anyway, enough about snooker as this is, afterall, dedicated to a chess website and not the wonders of green table sports.  My point is that while all of these people were online myself, my wife and the player known as BigD were not online when we usually are.  Had we not been sleeping at a snooker match then there would have been 20 people online at once.  Or would there?  Perhaps my blatent skill would have scared people away (I am of course being extremely sarcastic).  Maybe our presence would have encouraged other people to stay online for longer because they had people making moves against them there and then.  Perhaps we could have reach 25 or even 30 members.&lt;br /&gt;&lt;br /&gt;This train of thought has led (lead?) me to wonder if there was a critical link online, a player without whom everyone decided to sign out?  Imagine, say player A logs out.  Players B and C liked playing player A so they both decided to sign out.  players D and E liked B and players F and G liked C so they sign out.  Now we have got 6 other people signed out just because player A did.  You can see how this could lead to lots more people signing out and maybe the whole 17 signed out within a few minutes!  I've seen the number drop by 10 in a short period before so it's very possible.  If anything, my absence last night has taught me one critical thing - I'm not the critical link :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113413113228049801?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113413113228049801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113413113228049801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113413113228049801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113413113228049801'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/so-many-users-and-i-missed-it.html' title='So Many Users, and I Missed It!'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113403256689354479</id><published>2005-12-08T08:55:00.000Z</published><updated>2005-12-08T09:02:46.900Z</updated><title type='text'>Ratings Fun</title><content type='html'>Over the last few weeks I've been watching the ratings table, especially the top 10.  For a few days I was actually in it - at number 10!  Sadly I'm now down to about 15th and it will probably plummet further before it goes up.  The interesting thing to watch has been the top 2 players.  They are both very good players but the number 1 (rick) doesn't play as many games as the number 2 (GL) so GL has been gaining on him.  Today I noticed that the "Top 10" list on the side of each page at long last put GL as number 1, but the members list states that rick is number 1.  The reason for this?  Well it's all in how each list is ordered:&lt;br /&gt;&lt;br /&gt;The top 10 list orders by rating (descending) and then win percent (descending).  The members list orders by rating (descending) then username (descending).  &lt;br /&gt;&lt;br /&gt;Now GL and rick both have the same rating but GL has won a higher percentage of his games than rick.  But, since rick is alphabetically later than GL he is still top in the members list.  Really I need to make the members list order by win percent too when rating is selected as the sort method, but then adding additional sort criteria for this one thing could mean I'll eventually need to do it for everything else too.  Currently everything in the members list has a secondary sort parameter of username - maybe I could just make an exception if the primary parameter is rating.&lt;br /&gt;&lt;br /&gt;Anyway, I thought it was interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113403256689354479?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113403256689354479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113403256689354479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113403256689354479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113403256689354479'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/ratings-fun.html' title='Ratings Fun'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113398867818077944</id><published>2005-12-07T20:38:00.000Z</published><updated>2005-12-07T20:55:58.720Z</updated><title type='text'>Better User HTML Formatting</title><content type='html'>I wrote the feature to preview away messages and and put line breaks in them.  Basically a line break is added by typing in &lt; br/ &gt; (no spaces) which seems simple enough.  Ok, so many people probably won't figure it out or read the forums to find out how to do it, but those that want to will.&lt;br /&gt;&lt;br /&gt;An interesting side effect of the new limited HTML process of away messages is that you can put hyperlinks in the messages.  Hyperlinks have been a feature of the forums and chat pages for a long time but I never actually announced their presence.  That's because I hadn't yet built a wizard to allow easy input of them.  However, I've given in and announced their presence on the forums and wrote a fairly in-depth description of how to use them.&lt;br /&gt;&lt;br /&gt;One of the new link features that I wrote today was the ability to convert the string "$vars" to "user_id=8&amp;key=sWe2d" (or whatever they are for the user who's viewing the link).  This allows the creation of internal links which do not log the user out, but nor do they give away the author's unique user_id and key.&lt;br /&gt;&lt;br /&gt;A nasty problem did arise however - I found you can't have more than 1 link per post.  The cause of this isn't entirely clear yet, though it's probably something to do with the fact that a link's tag is in two parts [ url= ][ /url ] whereas everything else I do is just one tag.  It will be investigated and fixed.&lt;br /&gt;&lt;br /&gt;Funnily enough, I've just realised that my forum announcement for the line breaks in away messages actually neglects to mention anything at all about adding line breaks to away messages!  I'd better go and amend it now!&lt;br /&gt;&lt;br /&gt;In other news, it's quiet on the site tonight.  If I remember correctly my web stats show that Wednesdays tend to be very quiet on the site.  I have no idea why that is though, maybe mid-week blues or something?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113398867818077944?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113398867818077944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113398867818077944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113398867818077944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113398867818077944'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/better-user-html-formatting.html' title='Better User HTML Formatting'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113396121218480447</id><published>2005-12-07T13:03:00.000Z</published><updated>2005-12-07T13:13:32.193Z</updated><title type='text'>Away Message Woes</title><content type='html'>A member wanted to have a line break in their away message (the text that appears in their games if they are offline).  The message was a simple two line rhyme and so there's no harm in that.  I decided to look into how I could let users have multiple lines in their away messages, but there are of course problems.&lt;br /&gt;&lt;br /&gt;The away messages should not be daunting and take over the screen.  They are supposed to be very short pieces of text that make your opponents aware that you are not currently available.  Many people choose to say this in a humorous way and this is fine as it adds to the charm of the site and makes people smile.  However, the worry is that if i multiple lines then some players may abuse it and we'd end up with messages which take up half of the screen.  Whilst the maximum character count is limited a new line only takes a few of these.  For this reason players aren't allowed to enter multiple lines at all.&lt;br /&gt;&lt;br /&gt;What then is the solution?  I think I need allow the entering of multiple lines but then javascript it so that you can't enter more than 3 or 4.  This makes it more difficult to limit the total character count as the textarea control that would be needed doesn't have a maxlength property.  More javascript I suspect.  Did I ever mention that I very much dislike writing javascript?  Well I do.&lt;br /&gt;&lt;br /&gt;I'll also need to make the feature for players to preview their away messages, because current;y there is no way for them to tell that they display correctly.  Maybe this way I could kill two birds with one stone - if they see that their message has been truncated then they need to shorten it.  Super.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113396121218480447?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113396121218480447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113396121218480447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113396121218480447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113396121218480447'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/away-message-woes.html' title='Away Message Woes'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113390169246694364</id><published>2005-12-06T20:14:00.000Z</published><updated>2005-12-06T20:41:32.476Z</updated><title type='text'>Plans for the Future</title><content type='html'>A lot of the site's members often ask me if I will be making such and such a feature and when will this and that be done.  My answers are usually "I'm working on it now", or "Next time I'm off work for a week".  Here I will list a few of my plans for the site, along with a very sketchy timeline (which is subject to a lot of change).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tournaments&lt;/span&gt;&lt;br /&gt;The biggest plans are for tournaments.  I want the site to be able to host various types of tournament of any size.  This will be a big project and will no doubt cause a lot of sweat, blood and tears while writing it, but it will worth it.  I am hoping to have 4 or 5 days spare over Christmas this year and hope to write it then.  However, these plans have been scuppered in the past but hopefully this time will be the one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Recommended Opponents&lt;/span&gt;&lt;br /&gt;I want there to be a section which gives you some recommended opponents.  These will be players who have similar win percentages as you against similar opponents as you.  This will be a very hard thing to determine and at the moment I can't even conceptually figure it out.  What I do know is that once I get it working it will be very useful.  Imagine, you look at this page and are shown people you haven't played before but weho have similar skills to you - you challenge them - you have a very good, enjoyable game.  Splendid!  The time scale for this?  Maybe by the end of January 2006, but if it turns out to be extremely hard then it will be later.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;More Player Statistics&lt;/span&gt;&lt;br /&gt;Some people may think I'm obsessed with statistics, but they are very useful when used to analyse your opponents.  Recently I added player statistics for each colour they play as, but I still want more.  I want average thinking time, average time before logging on to actually make a move, and lot's more.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Site Themes&lt;/span&gt;&lt;br /&gt;There's nothing wrong with the site's theme, but wouldn't it be great if players could choose from a range of themes?  Not everyone will like blue as much as I do!  The difficulty with implementing this will be that each CSS (cascading style sheet) file has be be rewritten for each style.  This is not a trivial thing to do, but perhaps there is a PHP way of doing it?  Store the colours for each theme in a database and just write them to the files as needed.  It's worth thinking about...&lt;br /&gt;The estimated timescale for this is, well, a few months maybe.  It's not urgent that's for sure.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Faster Code&lt;/span&gt;&lt;br /&gt;The code which runs every time a player makes a move is monstrous!  It is a huge beast and took me many days to write.  Since then my coding style has improved and I feel that whilst the exterior of the site has been overhauled and streamlined, the internal engine of the move validation remains the same.  I can do better, I'm sure of it.  The only problem is it's incredibly difficult to do.  There are a lot of things to take into account, such as capturing, castling, promoting, check mating and so on.  It took a long time to iron out all of the bugs and to rewrite it would risk reintroducing some new one.  However, once I have the time it will give a great speed boost, but for now things are fine so I'll leave it.  Estimated timescale: sometime next year :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ok, that's enough for now.  Hopefully I've answered a few questions about what's in store.  There is more, much more, but I'll write about them another time...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113390169246694364?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113390169246694364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113390169246694364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113390169246694364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113390169246694364'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/plans-for-future.html' title='Plans for the Future'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113390005134394994</id><published>2005-12-06T20:09:00.000Z</published><updated>2005-12-06T20:14:11.350Z</updated><title type='text'>Amended Active Users List</title><content type='html'>The footer of each page on the website used to state which users are logged and have been active in the last 20 minutes.  Now it also states the number of users as well as a simple list of them.  The reason for this is that lately there have been more and more people online at once and counting them becomes tedious.  Ok, so most people won't care how many people are online at once, but I do!&lt;br /&gt;&lt;br /&gt;This brings me to something I did yesterday too.  The basic site stats at the bootom of each page now also displays the most users ever online at once and the date and time that this happened.  The only snag is that this information only started being logged yesterday, so the current record is said to be 13 users, even though I know full well that we once had 16 people online a few weeks ago.  Nevertheless, it will be another interesting way to watch the growth and popularity of the site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113390005134394994?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113390005134394994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113390005134394994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113390005134394994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113390005134394994'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/amended-active-users-list.html' title='Amended Active Users List'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19634491.post-113389903538931114</id><published>2005-12-06T19:44:00.000Z</published><updated>2005-12-06T19:57:15.396Z</updated><title type='text'>Welcome</title><content type='html'>Welcome!&lt;br /&gt;&lt;br /&gt;My name is Stephen Robson and I live in York, England.  Now that's enough about me, what this blog is really about is my main website, &lt;a href="http://www.plasticbishop.com/"&gt;www.plasticbishop.com&lt;/a&gt;.  I intend to use it to chart the development of the site so that:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I can keep track of what I did when&lt;/li&gt;&lt;li&gt;The site's members can keep track of what I did when&lt;/li&gt;&lt;li&gt;A few extra people may come through the doors of the site and join the growing community.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;It is quite fitting that I start the blog today because we have just got our 600th member.  Ok, so that's not a great milestone, but it's another big step towards the golden 1000.  Why is 1000 members so important?  Because when I first started the site in February 2005 I realised that for a site like this to become noteworthy it generally needs 1000+ members.  Of course there are exceptions, but it seemed like a good target.&lt;br /&gt;&lt;br /&gt;The big question now is "if I started the site in February, why has it taken me until December to start a blog?".  It is true that there has been a lot of changes on the site that could have been documented, and in a way they have on the site's simple forums.  However now I'm writing new features almost daily so it was about time I started this blog to keep track of it all.&lt;br /&gt;&lt;br /&gt;I think that's a decent enough introductory post, so I shall leave it at that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19634491-113389903538931114?l=plasticbishop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plasticbishop.blogspot.com/feeds/113389903538931114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19634491&amp;postID=113389903538931114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113389903538931114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19634491/posts/default/113389903538931114'/><link rel='alternate' type='text/html' href='http://plasticbishop.blogspot.com/2005/12/welcome.html' title='Welcome'/><author><name>Stephen Robson</name><uri>http://www.blogger.com/profile/15034669348958323045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.plasticbishop.com/images/pieces/2/bishop-w.gif'/></author><thr:total>0</thr:total></entry></feed>
