<?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-30610644</id><updated>2011-07-29T04:58:58.406+02:00</updated><category term='engines'/><category term='fics'/><category term='chess'/><category term='python'/><category term='pychess'/><title type='text'>Thomas' Development Blog</title><subtitle type='html'>Developing PyChess, Wine-Doors and Stuff...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30610644.post-1464369042471968273</id><published>2010-05-28T18:35:00.011+02:00</published><updated>2010-06-25T08:31:43.126+02:00</updated><title type='text'>When Google locked the door</title><content type='html'>&lt;h1 style="display: block; "&gt;When Google locked the door&lt;/h1&gt;
&lt;div id="previewbody" style="display: block; "&gt;&lt;div&gt;&lt;div style="float:right; margin:0 0 10px 10px;"&gt;&lt;img style="display:block; width: 306px; height: 122px;" src="http://www.google.com/logos/election10_uk-hp.gif" border="0" alt=""&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;Google logo with a door (election doodle)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/i&gt;&lt;/div&gt;&lt;i&gt;This is the story of how Google, for a period of three years, locked me out of their groups service, how I eventually found my way back in, and what it cost me.&lt;/i&gt;&lt;/div&gt;&lt;br&gt;Yeah, I guess this is a bit off topic regarding to software development. However these days many of us store important data and value in services like Google's. Services with &lt;a href="http://www.google.com/accounts/TOS"&gt;terms like&lt;/a&gt;: &lt;span style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;"Google may stop providing the Services to you at Google’s sole discretion, without prior notice to you"&lt;/span&gt;&lt;/span&gt;. I guess I never took it too seriously, as the companies would probably get seriously bad PR, if they did something like that. Deleting emails for billions. &lt;i&gt;My error was forgetting the case where you are the only person being locked out&lt;/i&gt;.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;I my case the lock wasn't from email, but from Google Groups. Not &lt;i&gt;as&lt;/i&gt; critical as email would have been, but still, well, rather inconvenient. The lockout meant that I was unable to manage the PyChess mailing list. I was unable to fight the, at that time, increasing spam level; and more importantly I couldn't reply anybody in my community.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;December 2006&lt;/b&gt; I sat up a Google group for the PyChess project. It made it possible to have a dual web/mailing-list forum for the project, and as we already used Google for a lot of things it was an easy choice. It was easy as magic to set up and start using, and so we did, heavily.&lt;/div&gt;&lt;div&gt;After about a years use, I started feeling a problem. When I wrote mails to the list, no one would answer. And when I answered other peoples post, they seamed to ignore them and press for new answers. As I tried to check the online group to see what was happening, I got a 403 Forbidden error. After a short while I realised that this error was given for any page one the groups.google.com sub domain.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt; My first thought was naturally to clear all cookies and history and sign off. The last thing helped, but as soon as I signed in to my group the error was back: Username. Password. Enter. 403.&lt;/div&gt;&lt;div&gt;I tried cookie cleaner tools, other browsers and even other peoples computers, but every single time, the result was the same:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://3.bp.blogspot.com/_lCEpj5TH7-U/TAALi551opI/AAAAAAAAA4k/XqHPAN8hdtc/s400/403.jpeg" border="0" alt="" id="BLOGGER_PHOTO_ID_5476389841169392274" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 285px; "&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Slowly (maybe I was too naive) I began to realize how things were set. I had been locked out. The question was why? and what now? I tried to recall if any action of mine could be linked to the time of the lockout, but no. I hadn't really used other groups than my own, and I had certainly not participated in threads more aggressive than the typical comp.lang.python. I checked my 'recent posts' to see if there had been abuse, but no.&lt;/div&gt;&lt;div&gt;My guess was some kind of database error. If it was an intended ban I hope they'd at least have sent a warning as well as giving a more informative error message. All I saw was the black on white 403.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;What now? I couldn't go to the usual fora. The problem was too specific. I had to get to somebody who could actually help me. (Naivly?) I went to the Google homepage looking for something like 'Support'. The page was easy to scan, and I found nothing. There was however an 'About Google' link, which after a few steps lead me to a page named Help.&lt;/div&gt;&lt;div&gt;The help page has been improved a bit since then, but the result is the same. It is made to keep you away from actual supporters and feed you canned or crowd sourced material. Where ever you click, you are sent to a support paged hosted at - you guessed it - groups.google.com. No go.&lt;/div&gt;&lt;div&gt;After a few hours of finding an actual email adress I gave up and went to sleep.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The next morning problems had found me. A group member wrote to me about a spammer, who I, as the admin, was the only one who could kick. I had banned a spammer once before, and it wasn't hard. Well - if I actually had access to the control panel.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I had to go back to the support. I went through the hassle of creating a new account, so I could post to the help forum. I expressed my problems and asked if anybody knew of a way to get to Google. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_lCEpj5TH7-U/TAAN7xb5GGI/AAAAAAAAA48/B43T4jFgG68/s1600/message.png"&gt;&lt;img src="http://3.bp.blogspot.com/_lCEpj5TH7-U/TAAN7xb5GGI/AAAAAAAAA48/B43T4jFgG68/s400/message.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5476392467416291426" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 216px; "&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;I didn't get the impression that Google were reading the forum, and as I had expected nobody could really help me.&lt;/div&gt;&lt;div&gt;A guy gave me a link to &lt;a href="http://www.google.com/support/accounts/bin/request.py?contact_type=contact_policy"&gt;a help page, that looked a bit different from the others&lt;/a&gt;. The page was mostly for people who had forgotten their passwords, which was clear when I had to specify an alternate write back email address. As the error message expressed it: &lt;span class="Apple-style-span" style="  ;font-family:Verdana;font-size:small;"&gt;"Please enter an email address, that you have access to"&lt;/span&gt;. Sigh. But it was my best shot.&lt;/div&gt;&lt;div&gt;As I was well aware, that they were probably busy, I took care to specify my problem as specific as possible, what I thought caused it, and how they could help me. It should be an easy fix.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;After a year I received an answer:&lt;/div&gt;&lt;div style="text-align: right;"&gt;10/31/09&lt;/div&gt;&lt;div style="border:1px solid black; padding:1em"&gt;&lt;span class="Apple-style-span" style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;Hello,&lt;br&gt;&lt;br&gt;We've received your report that you're having trouble accessing a &lt;span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(187, 218, 253); background-position: initial initial; background-repeat: initial initial; "&gt;Google&lt;/span&gt;&lt;br&gt;product. After completing our investigation, we've found a violation of&lt;br&gt;our Terms of Service: &lt;a href="http://google.com/accounts/TOS" target="_blank" style="color: rgb(7, 77, 143); "&gt;http://&lt;span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(187, 218, 253); background-position: initial initial; background-repeat: initial initial; "&gt;google&lt;/span&gt;.com/accounts/TOS&lt;/a&gt; -OR- product-specific&lt;br&gt;program policies:&lt;br&gt;&lt;a href="http://www.google.com/support/accounts/bin/answer.py?answer=147806" target="_blank" style="color: rgb(7, 77, 143); "&gt;http://www.&lt;span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(187, 218, 253); background-position: initial initial; background-repeat: initial initial; "&gt;google&lt;/span&gt;.com/&lt;span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(187, 218, 253); background-position: initial initial; background-repeat: initial initial; "&gt;support&lt;/span&gt;/&lt;wbr&gt;accounts/bin/answer.py?answer=&lt;wbr&gt;147806&lt;/a&gt;. As a&lt;br&gt;result, we're unable to grant you access to this product.&lt;br&gt;&lt;br&gt;Regards,&lt;br&gt;&lt;span style="color:#888888;"&gt;The &lt;span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(187, 218, 253); background-position: initial initial; background-repeat: initial initial; "&gt;Google&lt;/span&gt; Team&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Arg. This led nowhere. I instantly asked back for more details, and after a month of no reply I tried with a long begging letter, but neither were ever answered.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;At this time I was near the break point. Should I just change to another group service? That would require me to manually migrate any wanted archive material, rebuild the community, and it would take a way some of the nice integration between the services we used.&lt;/div&gt;&lt;div&gt;At that time migration was the only option on&lt;/div&gt;&lt;div&gt;However at that time it was the easiest solution, competing only with one point on my list: Visit the nearest Google office. In Norway.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;My laziness postponed the decision for a couple of months, but then suddently something happened. For a long time I had wanted the pychess.org domain name for the project, but it was controlled by 'Pensylvania Youth Chess'. They never had actually got up a website though, and now they gave up and transfered me the domain.&lt;/div&gt;&lt;div&gt;Being a great Google fan, I sat the domain up with Apps for Domains. When I first logged in I saw this:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/_lCEpj5TH7-U/TAAHqWtMwdI/AAAAAAAAA4c/VtyMolzvgAs/s400/try+apps+for+free.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5476385571113583058" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 89px; "&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;My eyes were flickering for a bit. Then staring right below the 'Try Premier Edition Free' link: '24/7 Phone support'. What I had been looking for for so long was suddently standing in front of me in a nice blue box.&lt;/div&gt;&lt;div&gt;I knew that Premier Edition would give me Google groups directly for my domain, however the project being voluntary work, I couldn't affort paying 50$ a month per member. But did it matter? No! The trail period should give me plenty of support time, so I could go back using my current group.&lt;/div&gt;&lt;div&gt;After staring amazed at nothing for about a minute I clicked the button.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;By an act of magic, the support I had been looking for for 3 years was suddently at my fingertips. All that stood between my and accessing groups.google.com now, was to convince the support team, that unblocking my personal Google account was important for my use of Apps for Domains.&lt;/div&gt;&lt;div&gt;I figured that if I had wanted to switch to the Google groups in Premier Edition, I would've wanted to transfer emails from my old group. For this I would need access. (I don't think there actually is a 'transfer archive to new group' option, but it was the best I could come up with).&lt;/div&gt;&lt;div&gt;At first the support was a bit confused and tried to help me by enabling the groups feature for my domain. (Which was of course already enabled), but after a few mails where I kept insisting, I got a mail from another supporter:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div style="border:1px solid black; padding:1em"&gt;&lt;span class="Apple-style-span" style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;Hello Thomas,&lt;br&gt;&lt;br&gt;&lt;span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(187, 218, 253); background-position: initial initial; background-repeat: initial initial; "&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Thank you for confirming your error message. I've manually reset your &lt;/span&gt;&lt;/span&gt;old admin account, which should resolve this issue.&lt;br&gt;&lt;br&gt;Please let me know if&lt;span&gt;&lt;span&gt; you&lt;/span&gt;&lt;/span&gt;&lt;span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(187, 218, 253); background-position: initial initial; background-repeat: initial initial; "&gt;&lt;/span&gt; still encounter errors, and I will continue troubleshooting.&lt;br&gt;&lt;br&gt;Sincerely,&lt;br&gt;&lt;br&gt;[Name]&lt;br&gt;Enterprise Support&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Bing! This was all the magic I needed. Now it worked.&lt;/div&gt;&lt;div&gt;I suppose it took the second supporter about a minute to reset the account, given it is not something they do too often. For me it had been a three years splinter.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;This concludes the tutorial: How to get access back to Google.&lt;/div&gt;&lt;div&gt;As the services are free of charge, I never really expected any support options. However I also never really expected the need for them. When things failed, I saw no way to buy the missing support, and the friendly facade suddenly seamed like a tall dark wall.&lt;/div&gt;&lt;div&gt;Perhaps the grief of this issue is in its rareness, but how can we know how often this kind of thing happens? If any admin can lock you all out by a sloppy click, and give you no option to defend yourself, then it is bound to happen once in a while.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Postscript:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;A month after my sucess, my bank acc was billed 50$ for a renewal of Premier Apps. This happened regardless of the checked option '&lt;span class="Apple-style-span" style="  border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:Arial, Helvetica, sans-serif;font-size:12px;"&gt;Do not automatically renew my subscription&lt;/span&gt;'. I wrote the support in detailes, and they replied to me, that if I didn't want it to happen again, I should check '&lt;span class="Apple-style-span" style="  border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:Arial, Helvetica, sans-serif;font-size:12px;"&gt;Do not automatically renew my subscription&lt;/span&gt;'. Doh.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Now that I had paied expensively for the support, I also wanted to use it. So I gave it my best show and wrote back. Eventually luck was on my side:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div style="border:1px solid black; padding:1em"&gt;&lt;span class="Apple-style-span" style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;Hello Thomas,&lt;br&gt;&lt;br&gt;Thank you for your message. It is our policy that there is not refunds after a charge has been processed. However, under your special circumstance, I have authorized to issue you a refund of your Premier Renewal charges.&lt;br&gt;&lt;br&gt;You should see the refund in your bank account if a few days. In addition, your account was downgraded to the Standard Edition.&lt;br&gt;&lt;br&gt;I hope this resolves your issue. Please contact me if you required additional assistance.&lt;br&gt;&lt;br&gt;Sincerely,&lt;br&gt;&lt;br&gt;[name]&lt;br&gt;Enterprise Support&lt;/span&gt;&lt;/div&gt;&lt;br&gt;Thank you Google! I never lost trust in you.&lt;br&gt;&lt;br&gt;&lt;h2&gt;Update: Slashdotted&lt;/h2&gt;&lt;br&gt;Thanks for all the great comments at http://yro.slashdot.org/story/10/05/31/0151202/Where-Do-You-Go-When-Google-Locks-You-Out . Especially thanks to IamTheRealMike for his insight into Googles strategy and thoughts on these kinds of things.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-1464369042471968273?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/1464369042471968273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=1464369042471968273' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/1464369042471968273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/1464369042471968273'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2010/05/when-google-locked-door.html' title='When Google locked the door'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lCEpj5TH7-U/TAALi551opI/AAAAAAAAA4k/XqHPAN8hdtc/s72-c/403.jpeg' height='72' width='72'/><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-3331754841096684594</id><published>2008-04-05T18:16:00.002+02:00</published><updated>2008-04-05T18:19:28.687+02:00</updated><title type='text'>PyDock</title><content type='html'>In the last week I've been working on a better dock than gdl. Gdl is unflexible, broken (at least for python) and ugly.
&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/3U2xc9x9nYM"&gt;  &lt;embed src="http://www.youtube.com/v/3U2xc9x9nYM" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;  &lt;/object&gt;
There are still a few problem with widgets having an xwindow, like textviews and treeviews, but I hope to find a way to get it into PyChess Stauton.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-3331754841096684594?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/3331754841096684594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=3331754841096684594' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/3331754841096684594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/3331754841096684594'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2008/04/pydock.html' title='PyDock'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-1138361330040804317</id><published>2007-11-04T11:37:00.000+01:00</published><updated>2007-11-04T11:39:38.050+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pychess'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='fics'/><category scheme='http://www.blogger.com/atom/ns#' term='chess'/><title type='text'>PyChess Philidor beta</title><content type='html'>&lt;div id="wikicontent"&gt;  &lt;p&gt;After the by far longest PyChess development cycle, version Philidor beta, codenamed 0.8 beta, has been released! &lt;/p&gt;&lt;p&gt;Download from: &lt;a href="http://gnomefiles.org/app.php/PyChess" rel="nofollow"&gt;http://gnomefiles.org/app.php/PyChess&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Screenshots: &lt;a href="http://pychess.googlepages.com/screenshots" rel="nofollow"&gt;http://pychess.googlepages.com/screenshots&lt;/a&gt; &lt;/p&gt;&lt;p&gt;The long development time covers a close to total rewrite, the most throughout testing for a PyChess release yet, and a massive new base of features. Many of which users have been screaming since the first alpha of PyChess. &lt;/p&gt;&lt;p&gt;The new features includes, but are not restricted to: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;FICS online Internet play. &lt;/li&gt;&lt;li&gt;Undo and pause functions. &lt;/li&gt;&lt;li&gt;Support for UCI engines like Fruit, Glaurung and Shredder. &lt;/li&gt;&lt;li&gt;Ability to turn analysers on/off, and to decide which engines should be used. &lt;/li&gt;&lt;li&gt;An "Enter game" in pgn dialog. &lt;/li&gt;&lt;li&gt;New fast start greeting screen. &lt;/li&gt;&lt;li&gt;A 30x faster built in python engine. &lt;/li&gt;&lt;li&gt;Internationalized or figure pieces in notation . &lt;/li&gt;&lt;li&gt;Optional sounds. &lt;/li&gt;&lt;li&gt;A comments side panel that helps you understand the moves made. &lt;/li&gt;&lt;li&gt;Pychess now use Launchpad Rosetta for i18n &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;It should be noted, however, that even though the FICS implementation is generally very stable, it hasn't yet got support for chatting and console communication. Thus it should be used with some care. &lt;/p&gt;&lt;p&gt;We encourage everyone to try out the release, and report the bugs (if any) you find. &lt;/p&gt;&lt;p&gt;If you'd like to see PyChess translated into your language, you can help us from the web interface at &lt;a href="https://translations.launchpad.net/pychess/trunk/+pots/pychess" rel="nofollow"&gt;https://translations.launchpad.net/pychess/trunk/+pots/pychess&lt;/a&gt; &lt;/p&gt;&lt;p&gt;And remember: "The Game of Chess is not merely an idle amusement; Several very valuable qualities of the mind, useful in the course of human life, are to be acquired and strengthened by it" - Benjamin Franklin, 1779 &lt;/p&gt;&lt;p&gt;Thanks,  Pychess team &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Homepage: &lt;a href="http://pychess.googlepages.com/" rel="nofollow"&gt;http://pychess.googlepages.com&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Screenshots: &lt;a href="http://pychess.googlepages.com/screenshots" rel="nofollow"&gt;http://pychess.googlepages.com/screenshots&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Project page: &lt;a href="http://code.google.com/p/pychess" rel="nofollow"&gt;http://code.google.com/p/pychess&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Downloads: &lt;a href="http://www.gnomefiles.com/app.php/PyChess" rel="nofollow"&gt;http://www.gnomefiles.com/app.php/PyChess&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Bug list: &lt;a href="http://code.google.com/p/pychess/issues/list" rel="nofollow"&gt;http://code.google.com/p/pychess/issues/list&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Mailing list: &lt;a href="http://groups.google.com/group/pychess-people" rel="nofollow"&gt;http://groups.google.com/group/pychess-people&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-1138361330040804317?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/1138361330040804317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=1138361330040804317' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/1138361330040804317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/1138361330040804317'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/11/pychess-philidor-beta.html' title='PyChess Philidor beta'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-6014687357787804588</id><published>2007-09-03T16:41:00.000+02:00</published><updated>2007-09-03T17:11:57.671+02:00</updated><title type='text'>Update: CSBoard resurected</title><content type='html'>&lt;p&gt;I tried to download the new csboard 0.8 from &lt;a href="http://download.berlios.de/csboard/csboard-0.8.tar.gz"&gt;http://download.berlios.de/csboard/csboard-0.8.tar.gz&lt;/a&gt;.  
It requires quite a lot of mono libraries, and you have to manually edit some "/home/ravi/cvs/csboard" lines to where ever you unpack it, but other than that, its a simple "make; su -c 'make install'; csboard" install.&lt;/p&gt;
&lt;p&gt;After installation it gave me the little unpolished csboard look I remembered. I was also disapointed that even though CSBoard now supports more than one engine, it still has one C# file for each one. I tried looking at them in meld, and they were actually quite different. But I'd watched the movie, and quickly clicked the "Play Online" button. I logged in as a guest, as I wasn't sure how stable it was yet and wanted to save the goodwill on my fics account for testing my own code.&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lCEpj5TH7-U/RtwgGxtUXwI/AAAAAAAAAEg/JiIxH5VOLZw/s1600-h/Sk%C3%A6rmbillede-ICS:+GuestDYQT%40www.freechess.org:5000.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_lCEpj5TH7-U/RtwgGxtUXwI/AAAAAAAAAEg/JiIxH5VOLZw/s200/Sk%C3%A6rmbillede-ICS:+GuestDYQT%40www.freechess.org:5000.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5105991378326019842" /&gt;&lt;/a&gt;&lt;p&gt;FICS also looked a bit unpolished, but it used an interesting multiline, onecolumn approach for gamelists, as opposed to PyChess' oneline, multicolumn. I'm not sure which one is the best, but a mix might be good. I very much liked the way CSBoard easily lets you show only e.g. "rated games with blitz".&lt;/p&gt;
&lt;p&gt;I tried to play a short 2min game, but I forgot the time and ran out. CSBoard displayed "GuestXYZT has fortified by time". I'm not sure if this means CSBoard automatically sent "resign", but it certanly shouldn't kill me before my opponent calls flag.&lt;/p&gt;
&lt;p&gt;Even though CSBoard lets you look at the fics communication, it didn't help much as it was inactive during the game. It didn't let me chat either.&lt;/p&gt;
&lt;p&gt;The last feature I remembered from the film was the "Game Viewer" which is a chess database. It has features for tagging, searching, opening books and printing and generally seams very nice. Sure some of those features could find their way in to PyChess within in a distant future.
All for now though, theming, engine configuration and fics will be the main areas of development.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-6014687357787804588?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/6014687357787804588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=6014687357787804588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/6014687357787804588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/6014687357787804588'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/09/update-csboard-resurected.html' title='Update: CSBoard resurected'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lCEpj5TH7-U/RtwgGxtUXwI/AAAAAAAAAEg/JiIxH5VOLZw/s72-c/Sk%C3%A6rmbillede-ICS:+GuestDYQT%40www.freechess.org:5000.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-2398609982589720232</id><published>2007-09-02T22:36:00.000+02:00</published><updated>2007-09-02T22:51:03.829+02:00</updated><title type='text'>CSBoard resurected</title><content type='html'>&lt;p&gt;Now will you look at this. Just as I was doing some random surfing - looking at other chess clients to "inspire" from - I reached CSBoard at GnomeFiles. The page wasn't updated since 2006, as well as all the other "search:chess" applications on GnomeFiles, so I just thought I'd have a look at the old chess client that inspired me in the first days of PyChess.&lt;/p&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/w0z0XUWdfeI"&gt;
&lt;embed src="http://www.youtube.com/v/w0z0XUWdfeI" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Well, when I clicked the screenshots link, instead of getting to some old image, I was sent to the CSBoard homepage in &lt;a href="http://csboard.berlios.de/#screencasts"&gt;the screencasts section&lt;/a&gt;, and I must say I was extraordinary surprised.
The client I thought of as old, simple and dead had suddenly got its gui multiplied by 10 and support for ICS, Chess Databases, More engines and you name it.&lt;/p&gt;

&lt;p&gt;So definitely something to try out. Tomorrow at least. It looks like they have a pretty good grab on ICS gui.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-2398609982589720232?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/2398609982589720232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=2398609982589720232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/2398609982589720232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/2398609982589720232'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/09/csboard-resurected.html' title='CSBoard resurected'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-7110784799956867003</id><published>2007-04-13T13:39:00.000+02:00</published><updated>2007-04-13T13:45:13.395+02:00</updated><title type='text'>0.6.0.beta5 &gt; 0.6</title><content type='html'>&lt;p&gt;I've always wondered how package managers like yum and apt determines the latest version of a package.&lt;/p&gt;
&lt;p&gt;Inside me I've hoped that they used an alternative version name, which simply adds one up for every small update, but most of the time it works, so you don't care.&lt;/p&gt;
&lt;p&gt;Yesterday when we released PyChess 0.6, I noticed that after installing it, yum updated it back to 0.6.0.beta5. I didn't really think much about it before the debian packager, Varun Hiremath, noticed me about the problem: 0.6.0.beta5 is considered newer than 0.6.. Sigh.&lt;/p&gt;
&lt;p&gt;Now I didn't want to call the new version 0.6.1, so we decided to call it 0.6.0.final, what worked.&lt;/p&gt;
&lt;p&gt;Now I just fear how similar problems could totally crash a system, if you use packages from multiple sources..&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-7110784799956867003?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/7110784799956867003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=7110784799956867003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/7110784799956867003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/7110784799956867003'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/04/060beta5-06.html' title='0.6.0.beta5 &gt; 0.6'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-4875064347319934144</id><published>2007-04-12T20:26:00.000+02:00</published><updated>2007-04-12T20:39:00.532+02:00</updated><title type='text'>Got 0.6 out the door, and still much progress</title><content type='html'>&lt;p&gt;At last we managed to fix the critical problems in 0.6.
It seemed that there was a &lt;a href="http://www.daa.com.au/pipermail/pygtk/2005-October/011246.html"&gt;problem with idle_add on debian/ubuntu kernels&lt;/a&gt;, which could eventually be tracked down to the 2.4 -&gt; 2.6 kernel switch. Luckily an easy workaround was pressent.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lCEpj5TH7-U/Rh58PqL1DCI/AAAAAAAAAEU/6_kZ3oRITvE/s1600-h/newFront.png"&gt;&lt;img style="float:left; margin:0 10px 10px 00px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_lCEpj5TH7-U/Rh58PqL1DCI/AAAAAAAAAEU/6_kZ3oRITvE/s200/newFront.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5052612440420060194" /&gt;&lt;/a&gt;In the meantime lots of work is going on for the upcoming version of PyChess. Atm. I'm just hacking on this replacement for the smoke/stone start up scene.
I hope you like it :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-4875064347319934144?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/4875064347319934144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=4875064347319934144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/4875064347319934144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/4875064347319934144'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/04/got-06-out-door-and-still-much-progress.html' title='Got 0.6 out the door, and still much progress'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_lCEpj5TH7-U/Rh58PqL1DCI/AAAAAAAAAEU/6_kZ3oRITvE/s72-c/newFront.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-5347383119396255547</id><published>2007-03-25T22:02:00.000+02:00</published><updated>2007-03-25T22:10:43.812+02:00</updated><title type='text'>New PyChess Icon?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lCEpj5TH7-U/RgbWloU83VI/AAAAAAAAAEE/agbT1MgId1A/s1600-h/pychess.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_lCEpj5TH7-U/RgbWloU83VI/AAAAAAAAAEE/agbT1MgId1A/s200/pychess.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5045956374484016466" /&gt;&lt;/a&gt;&lt;p&gt;A nice guy calling himself Karlo just filled an &lt;a href="http://code.google.com/p/pychess/issues/detail?id=160"&gt;issue report&lt;/a&gt; attaching an svg for a new PyChess logo.&lt;/p&gt;

&lt;p&gt;Always nice to hear from the artists in the free software community, instead of just all of us boring programmers.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-5347383119396255547?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/5347383119396255547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=5347383119396255547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/5347383119396255547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/5347383119396255547'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/03/new-pychess-icon.html' title='New PyChess Icon?'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lCEpj5TH7-U/RgbWloU83VI/AAAAAAAAAEE/agbT1MgId1A/s72-c/pychess.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-2065266737101586549</id><published>2007-02-27T22:21:00.000+01:00</published><updated>2007-02-27T23:20:05.021+01:00</updated><title type='text'>Flags and ImageMagick</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lCEpj5TH7-U/ReStsW8kgoI/AAAAAAAAADw/ZhHdGNO4YHw/s1600-h/Screenshot-Preferences.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_lCEpj5TH7-U/ReStsW8kgoI/AAAAAAAAADw/ZhHdGNO4YHw/s200/Screenshot-Preferences.png" alt="" id="BLOGGER_PHOTO_ID_5036341260892537474" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;This day I was looking for some flags to use for chess engines. A quick &lt;code&gt;locate flag |grep .png&lt;/code&gt; gave me a lot of lines like &lt;code&gt;/usr/share/locale/
l10n/us/flag.png&lt;/code&gt;. The flags looked like this &lt;img src="http://4.bp.blogspot.com/_lCEpj5TH7-U/ReSnSW8kglI/AAAAAAAAADE/3H9oypJfvB0/s200/dk.png" alt="" id="BLOGGER_PHOTO_ID_5036334217146171986" border="0" /&gt; and were originally created as a part of kdebase.&lt;/p&gt;

&lt;p&gt;I quickly colleckted the files by
&lt;/p&gt;&lt;pre&gt;for i in `ls /usr/share/locale/l10n/`
do
    cp /usr/share/locale/l10n/$i/flag.png $i.png
done&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I found out however, that those flags were boring. They also didn't look enough like computers. I used to use this icon: &lt;img style="width: 24px; height: 24px;" src="http://2.bp.blogspot.com/_lCEpj5TH7-U/ReSjY28kgkI/AAAAAAAAAC8/7B9qgM-2baI/s200/stock_notebook.png" alt="" id="BLOGGER_PHOTO_ID_5036329930768810562" border="0" /&gt; (stock_notebook) for engnines, and I figured that it would be fun to merge the flags and the notebooks.&lt;/p&gt;

&lt;p&gt;I tried out stuff in the gimp, and it worked well. Now the problem was that I had 229 flags for which I had to open in gimp, resize, copy to the notebook image and save. A quick calculation based on the amount of time spent on the first flag, showed me that this would take me 1.9 hours. If of course I ever managed to complete it.&lt;/p&gt;

&lt;p&gt;This brought up &lt;a href="http://www.imagemagick.org/"&gt;ImageMagick&lt;/a&gt; to my mind. ImageMagick which is a command line utility for doing quite a lot of advanced image operations.
I found the "&lt;a href="http://www.imagemagick.org/Usage/"&gt;Usage guide&lt;/a&gt;" and read these two parts of it: &lt;a href="http://www.imagemagick.org/Usage/resize/"&gt;resize&lt;/a&gt;, &lt;a href="http://www.imagemagick.org/Usage/compose/"&gt;composite&lt;/a&gt;, which described exactly the functions I needed: Resizing and merging.&lt;/p&gt;

&lt;p&gt;In the beginning the guide was looking kinda messy, mostly because of the length of the command lines. However it quickly became clear that it was really very well built, with screenshots all over it, white made it easy to find what I was looking for.&lt;/p&gt;

&lt;p&gt;The resize command looked like the following: &lt;code&gt;convert in.png -resize 14x7\! out.png&lt;/code&gt;. The ! told ImageMagick that I didn't care about the original aspect of the image, which is necessary since all flags have different formats.&lt;/p&gt;

&lt;p&gt;Next the scaled image had to be merged on the notebook image. The command for such an operation was: &lt;code&gt;composite -geometry +5+6 2.png stock_notebook.png 3.png&lt;/code&gt;. The geometry option told how much to translate the upper image (2.png) on the lower.&lt;/p&gt;

&lt;p&gt;At this point I already had a nearly perfect image. The only missing part was the border around the screen being too thin.
To help this problem I decided to merge again with a half transparent white rectangle: &lt;img src="http://3.bp.blogspot.com/_lCEpj5TH7-U/ReSngG8kgmI/AAAAAAAAADM/Eq1ACes931Y/s200/light.png" alt="" id="BLOGGER_PHOTO_ID_5036334453369373282" border="0" /&gt;The operation was mostly like the previous, only without the translation as the rectangle image had the same size as the notebook image. &lt;code&gt;composite -geometry +0+0 light.png 3.png 4.png&lt;/code&gt; did its thing.&lt;/p&gt;

&lt;p&gt;In the end I put down everything to these few lines:&lt;/p&gt;&lt;pre&gt;for i in `ls`
do
    echo "doing $i"
    convert $i -resize 14x7\! $i
    composite -geometry +5+6 $i ../stock_notebook.png $i
    composite -geometry +0+0 ../light.png out.png out2.png
done&lt;/pre&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lCEpj5TH7-U/ReSow28kgnI/AAAAAAAAADU/dyi3B6hlrJQ/s1600-h/Screenshots-flags.png"&gt;&lt;img style="margin: 10px 10px 0pt 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_lCEpj5TH7-U/ReSow28kgnI/AAAAAAAAADU/dyi3B6hlrJQ/s200/Screenshots-flags.png" alt="" id="BLOGGER_PHOTO_ID_5036335840643809906" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt; And in 10 seconds, ImageMagick did what would otherwise have taken me hours.
Nice :)&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-2065266737101586549?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/2065266737101586549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=2065266737101586549' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/2065266737101586549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/2065266737101586549'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/02/flags-and-imagemagick.html' title='Flags and ImageMagick'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_lCEpj5TH7-U/ReStsW8kgoI/AAAAAAAAADw/ZhHdGNO4YHw/s72-c/Screenshot-Preferences.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-6085113868199284759</id><published>2007-02-25T14:47:00.000+01:00</published><updated>2007-02-25T15:17:09.948+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pychess'/><category scheme='http://www.blogger.com/atom/ns#' term='engines'/><title type='text'>engines.ini</title><content type='html'>&lt;p&gt;I just found a file in the Arena chess client &lt;a href="http://www.playwitharena.com/directory/user.htm#new%20files"&gt;download section&lt;/a&gt; called engines.ini. The file is in  1264 lines, and contains  a description of an engine for each line.  For CECP engines as well as UCI engines.&lt;/p&gt;

&lt;p&gt;A snip from the cecp part, looks like:&lt;/p&gt;
&lt;pre&gt;Gnuchess4=EMPO
Gnuchess5=EO
Faile=O
&lt;/pre&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lCEpj5TH7-U/ReGVwMVTEzI/AAAAAAAAACo/MHdIq0DhY-Q/s1600-h/Screenshot+-+CECP+configuration.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_lCEpj5TH7-U/ReGVwMVTEzI/AAAAAAAAACo/MHdIq0DhY-Q/s200/Screenshot+-+CECP+configuration.png" alt="" id="BLOGGER_PHOTO_ID_5035470513553740594" border="0" /&gt;&lt;/a&gt;
The letters right to the equal signs are keys to the options in the dialog at the right, which means the gnuchess 4 supports "Edit mode", "Move now", "Ponder" and "Opening Book". Gnuchess 5 on the other hand only supports "Edit mode" and "Opening Book". Faile won't even be able to load a game, as it supports no such feature.&lt;/p&gt;

&lt;p&gt;Of course it is a a weakness that there is no field to tell if the engine supports "protover 2", which means that we still have to base the loading on timeouts.&lt;/p&gt;

&lt;p&gt;But still there are a lot of good things. Now we've actually got _some_ information for those engines which does not support "protover 2", and we will be able to send a proper error message when trying to load a game, playing against Faile or similar.&lt;/p&gt;

&lt;p&gt;Also the file can be used to identify engines at the users PATH. It might however require some smart text comparison algorithms, as I can see no absolute way to tell that the binname of "Gnuchess4" is "gnuchess" and the name of "Shredder Classic" is "ShredderClassicLinux". At least on linux ;)&lt;p&gt;

&lt;p&gt;I plan to convert the file into the &lt;a href="http://code.google.com/p/chess-standards/wiki/ChessEngines"&gt;engine xml format&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-6085113868199284759?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/6085113868199284759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=6085113868199284759' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/6085113868199284759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/6085113868199284759'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/02/enginesini.html' title='engines.ini'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lCEpj5TH7-U/ReGVwMVTEzI/AAAAAAAAACo/MHdIq0DhY-Q/s72-c/Screenshot+-+CECP+configuration.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-8351902073891034800</id><published>2007-02-23T23:04:00.007+01:00</published><updated>2010-05-30T10:35:57.395+02:00</updated><title type='text'>An old post: Engine Managers</title><content type='html'>&lt;span&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;Intro: &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;While working on a more recent post, I stumped upon an old draft from feb 07 that had seemingly never been posted. Perhaps because it describes an engine system for PyChess, that was in fact never implemented.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;I thought it would be nice to post it now, as PyChess Staunton nears final, and work may begin on &lt;/span&gt;&lt;/span&gt;&lt;a href="http://code.google.com/p/pychess/wiki/Vision"&gt;&lt;span class="Apple-style-span" style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;the new vision for PyChess 2&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;. I can ensure you however, that the mockup named 'Final try' in the article, is miles away from what will find its way into PyChess 2 :)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;In the past few days, I've been looking into creating better engine management in PyChess.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_lCEpj5TH7-U/Rd9mEsVTEpI/AAAAAAAAAAw/TwJdVTvw4dQ/s1600-h/Screenshot-Preferences.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_lCEpj5TH7-U/Rd9mEsVTEpI/AAAAAAAAAAw/TwJdVTvw4dQ/s200/Screenshot-Preferences.png" alt="" id="BLOGGER_PHOTO_ID_5034855139229504146" border="0"&gt;&lt;/a&gt;&lt;span&gt;That this comes now, and not after FICS support is complete, i&lt;/span&gt;&lt;span&gt;s mostly due to the debian problems which have been reported  in the last time. I hope that better engine management will make this problem easier to debug.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span&gt;The engine management in preferences (which is still only glade template&lt;/span&gt;&lt;span&gt;), looks like the image on the right.  When the user wants to Add or Edit an engine, another dialog appears.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;a name="old_engine_configuration" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_lCEpj5TH7-U/Rd9nlMVTEqI/AAAAAAAAAA4/R3ObuJB_33k/s1600-h/Screenshot-Add-Modify+Engine.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_lCEpj5TH7-U/Rd9nlMVTEqI/AAAAAAAAAA4/R3ObuJB_33k/s200/Screenshot-Add-Modify+Engine.png" alt="" id="BLOGGER_PHOTO_ID_5034856797086880418" border="0"&gt;&lt;/a&gt;&lt;span&gt;This new dialog is what has been causing troubles.&lt;br&gt;&lt;br&gt;The dialog mainly let you specify&lt;/span&gt;&lt;span&gt; the path of the engine, the (optional custom) name of the engine and the engine protocol.&lt;br&gt;It also lets you specify the engine difficulty at specific levels.&lt;br&gt;&lt;br&gt;In the&lt;/span&gt;&lt;span&gt; good&lt;/span&gt;&lt;span&gt; old CECP days, this was easy: Everything user wanted to change for each level of difficulty was the maximum search level, and wether the engine should be allowed to think in the opponents' time.&lt;br&gt;&lt;br&gt;Now in these UCI times engines has many more configuration parameters. And of cource some people might even want to change additional, engine specific parameters like hashsize.&lt;br&gt;&lt;br&gt;In UCI engine parameters are given, and has to be set, at init time &lt;/span&gt;&lt;span&gt;&lt;a href="http://www.uciengines.de/UCI_Protocol/hauptteil_uci_protocol.html"&gt;Example&lt;/a&gt;&lt;/span&gt;&lt;span&gt;.&lt;br&gt;At first sight these options greatly appears like a target for an IDE/gnome-settings like treeview with the left colum&lt;/span&gt;&lt;span&gt;n used for keys and the right one filled with the&lt;/span&gt; corresponding widget cellrenderer. Like gtk.CellRendererSpin, Combo, Text and Toggle.&lt;br&gt;&lt;br&gt;&lt;span style="font-size:130%;"&gt;First try&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_lCEpj5TH7-U/Rd9t1MVTErI/AAAAAAAAABI/aKuIvgeDiUY/s1600-h/Screenshot-arena.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_lCEpj5TH7-U/Rd9t1MVTErI/AAAAAAAAABI/aKuIvgeDiUY/s200/Screenshot-arena.png" alt="" id="BLOGGER_PHOTO_ID_5034863669034554034" border="0"&gt;&lt;/a&gt;However a closer look at the pygtk specs, and a couple of hours af talking and coding with the great people at the pygtk irc channgel, it bekame clear to me, that I'd have to choose another path. The glade path.&lt;br&gt;&lt;br&gt;I can almost hear people cry: "But the glade approcah looks so ugly!" And sure it does. So I did some research and I found Arena. Arena which seems like a great chess application, but is windows only.&lt;br&gt;&lt;br&gt;I did the screenshot using wine. And I tell you: Don't try this at home - Arena is slow like eclipse when run under wine!&lt;br&gt;&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_lCEpj5TH7-U/Rd9uzsVTEsI/AAAAAAAAABQ/bJOQfq-BmVc/s1600-h/Screenshot-arenamanager.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_lCEpj5TH7-U/Rd9uzsVTEsI/AAAAAAAAABQ/bJOQfq-BmVc/s200/Screenshot-arenamanager.png" alt="" id="BLOGGER_PHOTO_ID_5034864742776378050" border="0"&gt;&lt;/a&gt;Arena has two dialogs for engine management (and some tabs): The one at the left and the UCI property configuration one above.&lt;br&gt;&lt;br&gt;When users want to add an engine they can use the left dialog or a Wizzard. When later the engine is started (like in the analyzing panel) the user can bring up the UCI properties dialog and will afterwards of cource have to restart the engine.&lt;br&gt;&lt;br&gt;As you see, Arena uses a modified glade approach. As in glade they don't use a treeview, but use real widgets. As a change however, they display the data in two columns, which is actually a good idea, when looking at how wide glade streches its property widgets.&lt;br&gt;&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_lCEpj5TH7-U/Rd9x2MVTEuI/AAAAAAAAABg/Si33B9rSEBE/s1600-h/Screenshot-firsttry.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_lCEpj5TH7-U/Rd9x2MVTEuI/AAAAAAAAABg/Si33B9rSEBE/s200/Screenshot-firsttry.png" alt="" id="BLOGGER_PHOTO_ID_5034868084260934370" border="0"&gt;&lt;/a&gt;Based on the Arena screenshot, I crafted the following glade template.&lt;br&gt;While it looks kinda okay, it has to major problems: It is not homogen in width, and more important: It will require 3 of those dialogs to support the three difficulty levels.&lt;br&gt;&lt;br&gt;And what is perhaps most important: I found another interesting approach, and this time even a mac one.&lt;br&gt;&lt;br&gt;&lt;span style="font-size:130%;"&gt;Second try&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_lCEpj5TH7-U/Rd9zPcVTEvI/AAAAAAAAABo/3NMratcl8HA/s1600-h/signmaenginemgr.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_lCEpj5TH7-U/Rd9zPcVTEvI/AAAAAAAAABo/3NMratcl8HA/s200/signmaenginemgr.jpg" alt="" id="BLOGGER_PHOTO_ID_5034869617564259058" border="0"&gt;&lt;/a&gt;This screenshot I found from the &lt;a href="http://www.sigmachess.com/_usersmanual/ManualData/UCI.html"&gt;sigma chess user manual&lt;/a&gt;. And as all good sources of inspiration for gnomeapplications: It's a mac application.&lt;br&gt;&lt;br&gt;The most interesting thing about this dialog is the way the data in the treeview is edited. This is neiter the gconf-editer method nor the glade approach, it is an entirely new one.&lt;br&gt;&lt;br&gt;When an item in the list is selected, the lower label and control changes, to mach the content in the selected row.&lt;br&gt;On the shot a int is selected, and the dialog shows a slider.&lt;br&gt;&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_lCEpj5TH7-U/Rd90lMVTEwI/AAAAAAAAABw/TeZEVUUvO5A/s1600-h/Screenshot-sectry.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right;" src="http://bp0.blogger.com/_lCEpj5TH7-U/Rd90lMVTEwI/AAAAAAAAABw/TeZEVUUvO5A/s200/Screenshot-sectry.png" alt="" id="BLOGGER_PHOTO_ID_5034871090738041602" border="0"&gt;&lt;/a&gt;Based on this new idea, I went to back to gazpacho to craft a new version.&lt;br&gt;&lt;br&gt;Personally I find this version much more pleasing. It is not as crowded, and it takes up less space.&lt;br&gt;&lt;br&gt;However there is still one major issue left to solve: Applying different values for each level of difficulty.&lt;br&gt;&lt;br&gt;&lt;span style="font-size:130%;"&gt;Final Try&lt;/span&gt;&lt;br&gt;&lt;br&gt;Thinking of the different difficulty boxes (I didn't want to use tabs or simmilar) I came to think of those user iterfaces with a lot of lists and arrows to move arround values.&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_lCEpj5TH7-U/Rd93GsVTExI/AAAAAAAAAB4/wLnpk2n8KyA/s1600-h/Screenshot-SelectContacts.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_lCEpj5TH7-U/Rd93GsVTExI/AAAAAAAAAB4/wLnpk2n8KyA/s200/Screenshot-SelectContacts.png" alt="" id="BLOGGER_PHOTO_ID_5034873865286914834" border="0"&gt;&lt;/a&gt;That was when I came to think of  a very well known user interface, which does exatcly the same thing as I need: The adwanced email contact selection dialogs.&lt;br&gt;&lt;br&gt;From the left list you can choose contacts and place them in one of the three receiver boxes. In PyChess gazpacho templates this method, combined with the value editing &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_lCEpj5TH7-U/Rd95dsVTEyI/AAAAAAAAACA/JJh7-9HFOPQ/s1600-h/Screenshot-final.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_lCEpj5TH7-U/Rd95dsVTEyI/AAAAAAAAACA/JJh7-9HFOPQ/s200/Screenshot-final.png" alt="" id="BLOGGER_PHOTO_ID_5034876459447161634" border="0"&gt;&lt;/a&gt;approach from sigma chess, this looks the following:&lt;br&gt;&lt;br&gt;Well, this of cource is to be put into that &lt;a href="http://www2.blogger.com/post-edit.g?blogID=30610644&amp;amp;postID=8351902073891034800#old_engine_configuration"&gt;dialog&lt;/a&gt; from before. Probably in some extender.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-8351902073891034800?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/8351902073891034800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=8351902073891034800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/8351902073891034800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/8351902073891034800'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/02/old-post-engine-managers.html' title='An old post: Engine Managers'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_lCEpj5TH7-U/Rd9mEsVTEpI/AAAAAAAAAAw/TwJdVTvw4dQ/s72-c/Screenshot-Preferences.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-117140470178680602</id><published>2007-02-13T22:44:00.000+01:00</published><updated>2007-02-13T23:33:54.546+01:00</updated><title type='text'>Designing the perfect Internet Chess GUI</title><content type='html'>&lt;p&gt;In the last few days I've spent a lot of time thinking on how the perfect GUI for Internet chess should be made.&lt;/p&gt;&lt;p&gt;I've taken inspiration from eboard, jin and most of all knights on how this could look.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/7820/3286/1600/898366/ConnectDialog.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/7820/3286/200/633777/ConnectDialog.png" border="0" alt="" /&gt;&lt;/a&gt;First for the log on dialog, this is what I've come up with.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Good Points:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="margin-left:1em;"&gt;I like the fact that you have easy access to creating new accounts.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Concerns:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="margin-left:1em;"&gt;Users should probably not need to set the port, as it can be loaded from XML. The server "item" just looks so empty without it.&lt;/li&gt;
&lt;li style="margin-left:1em;"&gt;There are no buttons in the lower right corner. The "Log On" button is in the middle..&lt;/li&gt;
&lt;li style="margin-left:1em;"&gt;You have to open a website to create new accounts. Sadly, as far as I know, no servers offer a web service for this, which would make pychess able to have its own GUI for this.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/7820/3286/1600/476805/FindGameSimple.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/7820/3286/200/989916/FindGameSimple.png" border="0" alt="" /&gt;&lt;/a&gt;Next for the actual game browsing dialog. This is a screenshot of the console hidden.&lt;/p&gt;&lt;p&gt;I'm not yet sure if this should be put inside a pychess game tab, like in knights and eboard, or it should be a window of its own, like the current "new game" dialog.&lt;/p&gt;&lt;p&gt;When you choose to join or observe a/some game(s) we will either replace the current tab (if we chose the tab way) or open a new tab. In both cases with a console sidepanel. This sidepanel can til we get gdl-dock implemented have a "show in window" button, for to view a full 80 column width console.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/7820/3286/1600/709816/FindGameAdvanced.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/7820/3286/200/201865/FindGameAdvanced.png" border="0" alt="" /&gt;&lt;/a&gt;On the right you see the fully expanded edition. In the eventual version, there will be more icons on the buttons.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Good Points:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="margin-left:1em;"&gt;I'm very glad with the current simple look, that should make people able to join a game in one or two clicks.&lt;/li&gt;
&lt;li style="margin-left:1em;"&gt;Power chess gamers still have full console access.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Concerns:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="margin-left:1em;"&gt;Currently when you want to create/seek a new game with a special time setting, you choose -&gt; Advanced -&gt; Time -&gt; Custom, which will bring up a dialog for you. This is perhaps a little to many clicks.&lt;/li&gt;
&lt;li style="margin-left:1em;"&gt;The join button is not in the lower right corner..&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-117140470178680602?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/117140470178680602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=117140470178680602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/117140470178680602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/117140470178680602'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/02/designing-perfect-internet-chess-gui.html' title='Designing the perfect Internet Chess GUI'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-117070333996778127</id><published>2007-02-05T18:28:00.000+01:00</published><updated>2007-02-05T20:24:30.946+01:00</updated><title type='text'>Stupid epd opcodes</title><content type='html'>&lt;p&gt;I've been rather angry at the fen format for a while. As the broadest used format for storing chess positions, it is used in the UCI chess engine protocol, and in the PGN format as a header tag.&lt;/p&gt;

&lt;p&gt;To store a chess position, it takes more than just storing the location of the pieces. You also have to store the castling state, the cord which can be attacked by enpassant, the number of moves since last capture or pawn move (to judge draw on the fifty moves rule) and last, but very importantly, you have to somehow store the position repetition state.&lt;/p&gt;

&lt;p&gt;In chess a game can be declared a draw if the same position has been repeated three times in a row. This rule can sometimes be used to force your opponent, which is in head of the game, to a draw.&lt;/p&gt;

&lt;p&gt;A typical fen string could look like:
&lt;code&gt;nbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2&lt;/code&gt;
which is the board position, the castling state, the enpassant square, the fifty moves counter and the full move number.&lt;/p&gt;

&lt;p&gt;The fen format nicely takes care of the first 4 parts, but it has no way of storing the repetition count. This might not sound as a big deal to most people, but imagine that a certain move will draw a game, and the engine is being told of the position using fen, then, if the move was good, the engine will play it, totally unaware of the draw danger.&lt;/p&gt;

&lt;p&gt;Now, you can perhaps imagine how interested I was when I saw that the epd format, which is very much like the fen format, contains a so called opcode for storing the repetition count.&lt;/p&gt;

&lt;p&gt;An epd string may look something like: &lt;code&gt;r1b1kb1r/pppp1ppp/8/1nN5/1n1p2Pq/5P2/PPPPP2P/R1BQKB1R w KQkq - hmvc 1; fmvn 7; rc 1;&lt;/code&gt; The two last fen fields have been moved to opcodes, and we have added a field called rc.&lt;/p&gt;

&lt;p&gt;The repetition field is good, but it only solves half the problem. Consider this case:&lt;/p&gt;
&lt;pre&gt;Initial position # Repetition count is now 1
1. Nf3 # Repetition count is now 1
... Nf6 # Repetition count is now 1
2. Ng1 # Repetition count is now 1
... Ng8 # Repetition count is now 2
3. Nf3 # Repetition count is now 2
... Nf6 # Repetition count is now 2
4. Ng1 # Repetition count is now 2
... Ng8 # Repetition count is now 3&lt;/pre&gt;

&lt;p&gt;You see, we've got four positions with repetition count 1 and four positions with repetition count 2. How the heck is a software program going to decide whether a move is going to put it in repetition count 3 and there by a draw?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-117070333996778127?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/117070333996778127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=117070333996778127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/117070333996778127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/117070333996778127'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2007/02/stupid-epd-opcodes.html' title='Stupid epd opcodes'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-115817853885372617</id><published>2006-09-13T22:15:00.000+02:00</published><updated>2007-02-05T18:26:35.816+01:00</updated><title type='text'>Pychess 0.2</title><content type='html'>&lt;p&gt;I've released version 0.2 of Pychess, and created a googlepages page for it: http://pychess.googlepages.com/&lt;/p&gt;&lt;p&gt;
From the page:&lt;/p&gt;&lt;p&gt;
I've released version 0.2 of Pychess. It is not 100% bug free, but perhaps 95% :). I'll close anything posted in the issue tracker, but I will now also look forward into some of the purposed features.&lt;/p&gt;&lt;p&gt;
I thought of giving it some kind of cool name, like the big projects, but couldn't think of anything better than "the flying beaver", which google tells me is already taken, so I skipped it.&lt;/p&gt;&lt;p&gt;
Feel very free to post bug reports and to join the project :D&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-115817853885372617?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/115817853885372617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=115817853885372617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115817853885372617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115817853885372617'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2006/09/pychess-02.html' title='Pychess 0.2'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-115548203443505732</id><published>2006-08-13T17:13:00.000+02:00</published><updated>2006-08-15T22:26:04.683+02:00</updated><title type='text'>Svg in python</title><content type='html'>&lt;p&gt;After hours of googling, and finding stuff like &lt;code&gt;import cairo.svg&lt;/code&gt;, &lt;code&gt;import rsvg&lt;/code&gt; and &lt;code&gt;import gtk.librsvg&lt;/code&gt;, I found out, that the newest versions of gdk simply understand svg out of the box.&lt;/p&gt;&lt;p&gt;
&lt;code&gt;pixbuf = gtk.gdk.pixbuf_new_from_file("black-bishop.svg")&lt;/code&gt; will do it all! Sweet.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-115548203443505732?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/115548203443505732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=115548203443505732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115548203443505732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115548203443505732'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2006/08/svg-in-python.html' title='Svg in python'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-115543086761687783</id><published>2006-08-13T03:01:00.000+02:00</published><updated>2007-02-05T20:30:42.090+01:00</updated><title type='text'>Conclusion</title><content type='html'>&lt;p&gt;After I've tried BloGTK, Drivel and gnome-blog-poster, I must say none of them did the job satisfying.&lt;/p&gt;&lt;p&gt;
None of them were able to do a title, and none of them could do English spellchecking.&lt;/p&gt;&lt;p&gt;
Drivel had a nice "edit old post" function, but gnome-blog-poster had a gnome-panel applet, so I find that it might be the best solution of the three.&lt;/p&gt;
&lt;p&gt;However as none of them were able to post titles to posts, they weren't really useful. I guess I have to just use the web interface for now.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-115543086761687783?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/115543086761687783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=115543086761687783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115543086761687783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115543086761687783'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2006/08/conclusion.html' title='Conclusion'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-115543014753539315</id><published>2006-08-13T02:45:00.000+02:00</published><updated>2006-08-13T02:49:07.543+02:00</updated><title type='text'>Print piping in python</title><content type='html'>&lt;code&gt;print &gt; open("file","w"), "File content"
print &gt;&gt; sys.stdout, "Hello world"&lt;/code&gt;
What a nice feature of pythons. Had thought this might be possible for a while, but never got the actual syntax.
Having programmed php for a time, it is good to be back to python, where you haven't even got to put "\n" in the end of the prints :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-115543014753539315?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/115543014753539315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=115543014753539315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115543014753539315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115543014753539315'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2006/08/print-piping-in-python.html' title='Print piping in python'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30610644.post-115196515981217751</id><published>2006-07-04T00:19:00.000+02:00</published><updated>2007-09-12T14:29:40.780+02:00</updated><title type='text'>System colors in gtk</title><content type='html'>&lt;p&gt;I just found out, after an hour of searcing, how to get "system colors" in gtk. Only tried with pygtk, but I guess bindings does it the same.&lt;/p&gt;
&lt;p&gt;First you have to get a GtkStyle object. If you extend GtkWidget you can get it using self.get_style(), else you can get it from e.g. a button: gtk.Button().get_style()&lt;/p&gt;
&lt;p&gt;The GtkStyle object contains a lot of GtkStyleHelper objects. More precisely it has: ['base', 'base_gc', 'bg', 'bg_gc', 'bg_pixmap', 'dark', 'dark_gc', 'fg', 'fg_gc', 'light', 'light_gc', 'mid', 'mid_gc', 'text', 'text_aa', 'text_aa_gc', 'text_gc']&lt;/p&gt;
&lt;p&gt;Each of these has different colors depending on the state. The states are ['STATE_ACTIVE', 'STATE_INSENSITIVE', 'STATE_NORMAL', 'STATE_PRELIGHT', 'STATE_SELECTED']&lt;/p&gt;&lt;p&gt;
When you know that, you should be able to draw with a system color, e.g. with cairo.&lt;/p&gt;
&lt;pre&gt;context = widget.window.cairo_create()
context.rectangle(0,0,10,10)
context.set_source_color(self.get_style().dark[gtk.STATE_NORMAL])
context.fill_preserve()
&lt;/pre&gt;
&lt;p&gt;Some other code:&lt;/p&gt;

&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; [m for m in dir(gtk) if m.startswith("STATE")]
['STATE_ACTIVE', 'STATE_INSENSITIVE', 'STATE_NORMAL', 'STATE_PRELIGHT', 'STATE_SELECTED']
&amp;gt;&amp;gt;&amp;gt; [m for m in dir(gtk.Button().get_style()) if type(getattr(gtk.Button().get_style(), m)) == type(gtk.Button().get_style().light)]
['base', 'base_gc', 'bg', 'bg_gc', 'bg_pixmap', 'dark', 'dark_gc', 'fg', 'fg_gc', 'light', 'light_gc', 'mid', 'mid_gc', 'text', 'text_aa', 'text_aa_gc', 'text_gc']&lt;/pre&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_lCEpj5TH7-U/Rufaai0ca_I/AAAAAAAAAFI/OcfTh3LquKA/s1600-h/shot.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_lCEpj5TH7-U/Rufaai0ca_I/AAAAAAAAAFI/OcfTh3LquKA/s200/shot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5109292451833342962" /&gt;&lt;/a&gt;
&lt;h4&gt;Update:&lt;/h4&gt;
&lt;p&gt;
I've crafted a small pygtk script bringing up a palete of the colors of the current gtktheme.
Code is:
&lt;/p&gt;
&lt;pre style="clear:both"&gt;
#!/usr/bin/python

import pygtk
pygtk.require("2.0")
import gtk, pango

w = gtk.Button()

states = [m for m in dir(gtk) if m.startswith("STATE_")]
styles = [m for m in dir(w.get_style()) if type(getattr(w.get_style(), m)) == type(w.get_style().light)]
styles = [m for m in styles if not m.endswith("_gc")]

class CairoBoard(gtk.DrawingArea):
    def __init__(self):
        gtk.DrawingArea.__init__(self)
        self.connect("expose_event", self.expose)

    def expose(self, widget, event):
        context = widget.window.cairo_create()
        context.rectangle(event.area.x, event.area.y,
                          event.area.width, event.area.height)
        context.clip()
        self.draw(context)
        return False
    
    def draw (self, context):
        for x in range(len(states)):
            for y in range(len(styles)):
                style = getattr(self.get_style(), styles[y])
                state = getattr(gtk, states[x])
                
                color = style[state]
                if color == None or type(color) != gtk.gdk.Color:
                    color = gtk.gdk.Color(0,0,0)
                context.set_source_color(color)
                context.rectangle(x*150,y*50,150,50)
                
                context.fill_preserve()
                context.new_path()
                
                if color.red + color.green + color.blue &lt; 65535:
                    context.set_source_color(gtk.gdk.Color(65535,65535,65535))
                else: context.set_source_color(gtk.gdk.Color(0,0,0))
                
                cstring = "#"
                for col in color.red, color.green, color.blue:
                    h = hex(col/256)[2:]
                    if len(h) == 1:
                        h = "0"+h
                    cstring += h
                    
                layout = self.create_pango_layout ("%s\n%s\n%s" % \
                        (styles[y], states[x][6:], cstring))
                layout.set_font_description(pango.FontDescription("Sans Serif 10"))
                context.move_to(x*150,y*50)
                context.show_layout(layout)

                context.fill_preserve()
                context.new_path()

window = gtk.Window()
window.connect("destroy", gtk.main_quit)
window.add(CairoBoard())
window.set_default_size(len(states)*150, len(styles)*50)
window.show_all()
gtk.main()
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30610644-115196515981217751?l=lobais.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobais.blogspot.com/feeds/115196515981217751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30610644&amp;postID=115196515981217751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115196515981217751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30610644/posts/default/115196515981217751'/><link rel='alternate' type='text/html' href='http://lobais.blogspot.com/2006/07/system-colors-in-gtk.html' title='System colors in gtk'/><author><name>Thomas DA</name><uri>http://www.blogger.com/profile/03696428813548999653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_lCEpj5TH7-U/Rufaai0ca_I/AAAAAAAAAFI/OcfTh3LquKA/s72-c/shot.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
