<?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:blogger='http://schemas.google.com/blogger/2008' 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-4103198674734023651</id><updated>2024-09-09T00:12:36.725-07:00</updated><category term="programming"/><category term="python"/><category term="meowBG"/><category term="backgammon"/><category term="geocaching"/><category term="github"/><category term="inform7"/><category term="meowBG python backgammon"/><category term="meowbg python kivy"/><category term="meowbg python memes"/><category term="wxPython"/><title type='text'>Hack &amp;amp; Play</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4103198674734023651.post-1189946181342314996</id><published>2012-10-07T13:51:00.002-07:00</published><updated>2012-10-07T13:51:16.305-07:00</updated><title type='text'>Random AI implemented</title><content type='html'>It&#39;s been a little quiet about meowBG lately, since I haven&#39;t had the time to program a lot. Besides, the meowBG project had reached a state where it&#39;s difficult to continue implementing, because things have grown a little too complicated to just sit down at my desk and hack a few lines of code.&lt;br /&gt;
&lt;br /&gt;
I guess this is a state where a software project may die ... it just takes a little too much thought to get going. And the longer I put the project aside, the more difficult it became to continue coding.&lt;br /&gt;
&lt;br /&gt;
But meowBG made it through that trough, and meanwhile I implemented a very dumb &quot;bot&quot; who will pick random moves from the list of possible moves. I reorganized the match structure, too, so that the game doesn&#39;t always assume a human player on one side of the board, but it is possible to register any two &quot;player&quot;-like objects at the match. This could be, of course, a human player, but might as well we a bot or a player on the other side of an online BG server like FIBS.&lt;br /&gt;
&lt;br /&gt;
So I registered two of my bots to play versus each other. Check it out:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dz4sfRHPv2Z6B015VwxrY_lcyX_vzFhtVGuOKs3SPyLNoo2uKXTAMzn2YoT_sG68C9IgZtfQeql1Wdu6_oM7w&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
An idea that really excites me is to build a neural network using &lt;a href=&quot;http://pybrain.org/&quot;&gt;PyBrain&lt;/a&gt;&amp;nbsp;as an opponent. Should meowbg fail as a FIBS/Tigergammon client, maybe this will become a different project.</content><link rel='replies' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/1189946181342314996/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/10/random-ai-implemented.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/1189946181342314996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/1189946181342314996'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/10/random-ai-implemented.html' title='Random AI implemented'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4103198674734023651.post-7467211422928263506</id><published>2012-08-10T08:58:00.000-07:00</published><updated>2012-08-10T08:58:46.430-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="meowBG python backgammon"/><title type='text'>Clickable dummy finished</title><content type='html'>Things have progressed nicely so far, even though I took a little longer (as usual) to grasp some of the basic concepts of kivy. I managed to finish a clickable backgammon dummy in a few days. Check it out:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dwh5VYvtbd8g53c_ZfsPYZnBo04wBR-eB9vVdbCtNOEZUJ868wQTL6im1zE2edda0uTaDFkCdlAO16OFbOB&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
I made only legal moves in that video, but any move would have worked, like moving backwards, piling up checkers of different colours etc. It&#39;s only a dummy without any logic underneath. That&#39;s the task lying ahead: Connect the existing meowBG logic to the new presentation layer.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/7467211422928263506/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/08/clickable-dummy-finished.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/7467211422928263506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/7467211422928263506'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/08/clickable-dummy-finished.html' title='Clickable dummy finished'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4103198674734023651.post-8560033049528073879</id><published>2012-08-08T02:49:00.000-07:00</published><updated>2012-08-10T08:21:35.950-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="meowbg python kivy"/><title type='text'>meowBG going kivy</title><content type='html'>I&#39;m on holiday right now, and the last days I&#39;ve been diving into the &lt;a href=&quot;http://www.kivy.org/&quot;&gt;kivy framework&lt;/a&gt;. Kivy looks very promising, especially with respect to its multi-platform support. There has even been a kivy app released on Apple&#39;s app store. Hacking for iPhone and iPad in pure python? Me gusta!&lt;br /&gt;
&lt;br /&gt;
So, after I&#39;ve become a little tired of how sluggish my dear meowBG looks in its wxPython based implementation, I&#39;m now planning to move the graphics parts entirely to kivy.&lt;br /&gt;
&lt;br /&gt;
I&#39;m especially looking forward to making the checkers fly smoothly across the board - the part that made my brain hurt in wxPython. It may be my lack of knowledge of wxPython, but animating widgets in kivy is just a walk in the park. Kivy&#39;s approach to animations is interesting: You define the animation independently of the widget it is applied to, and just specify the attributes that the animation will change. For instance, changing the position with an animation could work like this:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
animation = Animation(pos=(100, 100), duration=0.2)&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
animation.start(target_widget)&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
This would move the object behind &lt;i&gt;target_widget&lt;/i&gt;&amp;nbsp;to the position (100, 100) within a fifth of a second. And of course you could specify a callback function to be called when the animation has finished, by setting&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;animation.on_complete = your_callback_func&lt;/blockquote&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/8560033049528073879/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/08/meowbg-going-kivy.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/8560033049528073879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/8560033049528073879'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/08/meowbg-going-kivy.html' title='meowBG going kivy'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4103198674734023651.post-2052581765343094085</id><published>2012-06-30T16:11:00.000-07:00</published><updated>2012-06-30T16:18:15.341-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="meowBG"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>meowBG logo improved</title><content type='html'>I changed the logo colours, since the colour blue just didn&#39;t look natural beside a &quot;wooden&quot; board. Current version:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimFVAtZV9sx5Gk9TYCCcO1Zpdvr1sCChxTymwQ5CjO5tQb7UlgBsltPaPFwFUBOGx2tdy9JJpzInQ9oro1S4wIjzvJjw8Et2baCcsfKqUJ9dv2ytNKWIS6PYwXhWUVA_N8qWUw4yokipI/s1600/logo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;76&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimFVAtZV9sx5Gk9TYCCcO1Zpdvr1sCChxTymwQ5CjO5tQb7UlgBsltPaPFwFUBOGx2tdy9JJpzInQ9oro1S4wIjzvJjw8Et2baCcsfKqUJ9dv2ytNKWIS6PYwXhWUVA_N8qWUw4yokipI/s320/logo.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart from that I&amp;nbsp;&lt;span style=&quot;background-color: white;&quot;&gt;did some actual&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;development&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt; and introduced two dialog windows: One that allows you to choose the target game server and input your credentials. The other one pops up when you invite someone and specify the length of the match. Nothing too exciting.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHU7h-UCWHopwBsERLTsEHSkSsYHdDTCxOLfs_BtIZhkoYDWNXnH6QAfKSaFemL0pSZk9mZsNTixY9v-jzw08tUzbabtbnu4rURw7vpCtNGlZcRXzjz88hEypXAM-ioEGX5YTYkermcGw/s1600/Bildschirmfoto+2012-07-01+um+01.12.54.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHU7h-UCWHopwBsERLTsEHSkSsYHdDTCxOLfs_BtIZhkoYDWNXnH6QAfKSaFemL0pSZk9mZsNTixY9v-jzw08tUzbabtbnu4rURw7vpCtNGlZcRXzjz88hEypXAM-ioEGX5YTYkermcGw/s320/Bildschirmfoto+2012-07-01+um+01.12.54.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/2052581765343094085/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/06/meowbg-logo-improved.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/2052581765343094085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/2052581765343094085'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/06/meowbg-logo-improved.html' title='meowBG logo improved'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimFVAtZV9sx5Gk9TYCCcO1Zpdvr1sCChxTymwQ5CjO5tQb7UlgBsltPaPFwFUBOGx2tdy9JJpzInQ9oro1S4wIjzvJjw8Et2baCcsfKqUJ9dv2ytNKWIS6PYwXhWUVA_N8qWUw4yokipI/s72-c/logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4103198674734023651.post-2642921531321170225</id><published>2012-06-07T14:42:00.000-07:00</published><updated>2012-06-07T14:45:20.122-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="meowbg python memes"/><title type='text'>(me)meowBG</title><content type='html'>The buttons of the meowBG gui seemed a little too heterogeneous, since I downloaded their graphics from different sites. So I decided to try something completely different: Meme buttons.&lt;br /&gt;
&lt;br /&gt;
For the three buttons I have, two choices were pretty obvious: The &lt;a href=&quot;http://knowyourmeme.com/memes/challenge-accepted&quot;&gt;challenge accepted meme&lt;/a&gt; for the accept button and the &lt;a href=&quot;http://knowyourmeme.com/memes/no-rage-face&quot;&gt;&quot;NO&quot; meme&lt;/a&gt; for the reject button. But which one to pick for the undo button? That was a tricky one, and I finally picked the &lt;a href=&quot;http://knowyourmeme.com/memes/neil-degrasse-tyson-reaction&quot;&gt;Neil deGrasse Tyson Reaction meme&lt;/a&gt;, which allows for the alternative interpretation &quot;Oops, I&#39;ll probably take that one back&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC2lXZyc5jLfWnkcjmJFK5EreQB3sbCoQcLxOs5p13svQuqrXJM89ebyp1UwvXNfz6BBXEyLVThDFVuJcOj0_tpOHNvnznacJl4r8j949cESCHtoENGO-MHWXSyrm3tA6BtNs1woi5BVU/s1600/Bildschirmfoto+2012-06-07+um+23.19.12.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;194&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC2lXZyc5jLfWnkcjmJFK5EreQB3sbCoQcLxOs5p13svQuqrXJM89ebyp1UwvXNfz6BBXEyLVThDFVuJcOj0_tpOHNvnznacJl4r8j949cESCHtoENGO-MHWXSyrm3tA6BtNs1woi5BVU/s320/Bildschirmfoto+2012-06-07+um+23.19.12.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I plan to make the memes an optional button layout eventually, since the crowds of people using my program may prefer less distracting icons.&lt;br /&gt;
&lt;br /&gt;
Now how about changing the name of my app to &quot;memeowbg&quot; or &quot;me²owbg&quot; ... or, since the intersection of people loving those memes and people loving backgammon is probably {me}, even &quot;{me}me²owbg&quot; ... ah, never mind.</content><link rel='replies' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/2642921531321170225/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/06/memeowbg.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/2642921531321170225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/2642921531321170225'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/06/memeowbg.html' title='(me)meowBG'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC2lXZyc5jLfWnkcjmJFK5EreQB3sbCoQcLxOs5p13svQuqrXJM89ebyp1UwvXNfz6BBXEyLVThDFVuJcOj0_tpOHNvnznacJl4r8j949cESCHtoENGO-MHWXSyrm3tA6BtNs1woi5BVU/s72-c/Bildschirmfoto+2012-06-07+um+23.19.12.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4103198674734023651.post-5626830016451297209</id><published>2012-05-27T12:45:00.001-07:00</published><updated>2012-05-28T10:08:03.151-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="backgammon"/><category scheme="http://www.blogger.com/atom/ns#" term="meowBG"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="wxPython"/><title type='text'>meowBG, a wxPython based backgammon client</title><content type='html'>&lt;br /&gt;
A friend of mine is currently developing a backgammon server, and the idea of building a client was appealing, so I&#39;ve started to expand my Python GUI programming knowledge a littler further and tried out &lt;a href=&quot;http://wxpython.org/&quot;&gt;wxPython&lt;/a&gt;.&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
A little background first: For reasons unknown to me, the name of the web server under development is &quot;&lt;a href=&quot;http://tigergammon.dyndns-home.com/&quot;&gt;Tiger Gammon&lt;/a&gt;&quot; (German site), and it&#39;s a nice alternative to FIBS, the First Internet Backgammon Server. Both servers communicate with clients over the telnet protocol, which seems odd at first. But when FIBS was born in 1992, that was probably the obvious choice. Tigergammon, on the other hand, strives to be a better FIBS, and thus uses telnet as well. So my client will have to follow that path.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
In the meantime my wxPython client has grown pretty nice, but it&#39;s not ready for being shown off in public. But as of today, the client has its own splash screen, and I like it so much that I wanted to share it here. Since it&#39;s a client for tigergammon, I called it &quot;meowBG&quot;, and when I found an old picture of our cat Alice sitting in a waste-paper basket, the logo just fell into place …&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhAYAU6VZgYuYv1lT9a_8azZe8Qa5XLzrQBm3SO6dIzzXGcJcpIUhkGQsXWApMxqqvEGjrhWfrzsIrnLGxsdiURBRD5mZdcIGiFqHnIznTrlyj1Ok0dWsDqob60DhDviHvcS8xW3KChPU/s1600/splash.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;76&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhAYAU6VZgYuYv1lT9a_8azZe8Qa5XLzrQBm3SO6dIzzXGcJcpIUhkGQsXWApMxqqvEGjrhWfrzsIrnLGxsdiURBRD5mZdcIGiFqHnIznTrlyj1Ok0dWsDqob60DhDviHvcS8xW3KChPU/s320/splash.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
I ought to polish it a little more, but for my limited GIMP skills I guess that&#39;s as good as it gets. Should meowBG ever be released I may need a talented designer.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
Posts about the client itself are soon to follow. Currently it looks like this ...&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEjvR5BK1WRUDwp4xuipnGA-tGhyphenhyphenimL0rrlE0Kt76Bxkhf9Vq_S4LNtZ9rumakw7LKOdg0Zvz5jf_WUcB3XHYGUPW542SwlvKhH-99u3VfQn-cxpBkU5qUo5RlwQTZEh4Z01XnFwtzBPE/s1600/meow_120527.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;197&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEjvR5BK1WRUDwp4xuipnGA-tGhyphenhyphenimL0rrlE0Kt76Bxkhf9Vq_S4LNtZ9rumakw7LKOdg0Zvz5jf_WUcB3XHYGUPW542SwlvKhH-99u3VfQn-cxpBkU5qUo5RlwQTZEh4Z01XnFwtzBPE/s320/meow_120527.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
... which is not perfect but a decent start. Network play over either FIBS or tigergammon is already possible, but the user interface is still far from intuitive. Stay tuned!&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/5626830016451297209/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/05/friend-of-mine-is-currently-developing.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/5626830016451297209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/5626830016451297209'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/2012/05/friend-of-mine-is-currently-developing.html' title='meowBG, a wxPython based backgammon client'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhAYAU6VZgYuYv1lT9a_8azZe8Qa5XLzrQBm3SO6dIzzXGcJcpIUhkGQsXWApMxqqvEGjrhWfrzsIrnLGxsdiURBRD5mZdcIGiFqHnIznTrlyj1Ok0dWsDqob60DhDviHvcS8xW3KChPU/s72-c/splash.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4103198674734023651.post-5399151442467507983</id><published>2011-06-28T11:40:00.000-07:00</published><updated>2012-05-27T12:46:50.664-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="github"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>An Ook! interpreter in Python</title><content type='html'>&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
A recent geocache introduced me to an esoteric language named &quot;Ook!&quot;, which was designed for Orang-Utans to communicate without arousing human suspicion.&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
It&#39;s pretty simple, as the language consists of only three syntax elements:&lt;/div&gt;
&lt;ol style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;li&gt;Ook.&lt;/li&gt;
&lt;li&gt;Ook!&lt;/li&gt;
&lt;li&gt;Ook?&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
That&#39;s it. To make the language a little more powerful, elements are grouped into pairs, e.g. &quot;Ook. Ook!&quot; or &quot;Ook? Ook.&quot;. So we have nine possible pairs and thus nine distinct commands, only eight of which are actually used (&quot;Ook? Ook?&quot; has been supplied with no deeper meaning ... maybe it&#39;s left for the Orang-Utan to express &quot;WTF are you talking about?!&quot;).&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
When I felt an itch to implement an Ook! interpreter, I discovered that Ook! is all but identical to the well-known&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Brainfuck&quot;&gt;Brainfuck&lt;/a&gt;,&amp;nbsp;since both languages have eight commands, and there exists a one-to-one mapping between them.&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
Furthermore, since Brainfuck is already a &quot;minimal&quot; language in that any command consists of one character only, I started off with the BF interpreter.&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;i&gt;(Ok, to be totally honest, I started off implementing the Ook! interpreter, which eventually had bugs I wasn&#39;t able to track down anymore ... :) only then I realized what a stupid plan it was to begin with the Ook! part and started all over again, this time implementing the BF part first)&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
After finishing that, the remaining task was to implement a preprocessor which would turn an Ook! listing into a BF listing, and I was done.&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
If you&#39;re curious about the result, &lt;a href=&quot;https://github.com/JohannesCharra/ook/blob/master/bf.py&quot;&gt;grab the code from github&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
(It&#39;s my first project on github btw, and I absolutely recommend the &lt;a href=&quot;http://mac.github.com/&quot;&gt;github for mac&lt;/a&gt; application)&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/5399151442467507983/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://hackingjohnnz.blogspot.com/2011/06/ook-interpreter-in-python.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/5399151442467507983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/5399151442467507983'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/2011/06/ook-interpreter-in-python.html' title='An Ook! interpreter in Python'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4103198674734023651.post-2982006982279745547</id><published>2011-05-09T13:14:00.000-07:00</published><updated>2012-05-27T12:47:18.309-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="geocaching"/><category scheme="http://www.blogger.com/atom/ns#" term="inform7"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>The marriage of Inform7 and geocaching</title><content type='html'>&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
Recently I stumbled across a terrific idea ... it all began in 1981.  Really, it did. Because that was when my wife was born, inevitably  determining her turning 30 in 2011.&lt;br /&gt;
&lt;br /&gt;
So, faced with the upcoming event, I considered my options as to what I might give her for  her anniversary. Thinking medium-hard for some time I came up with a  medium-brilliant thought: I&#39;d place her her very own &lt;a href=&quot;http://www.geocaching.com/&quot;&gt;geocache&lt;/a&gt;! She&#39;s  pretty fanatical about that stuff, so that was a safe bet. I planned to  build her a multi-staged cache.&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
Nothing too clever so far. Caches like this exist in the hundred-thousands.&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
... BUT ...&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
Two weeks before the actual event, a co-worker of mine introduced me &lt;i&gt;en passant&lt;/i&gt; to something terrific: &lt;a href=&quot;http://inform7.com/&quot;&gt;Inform7&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
Inform7 deserves to be called a programming language. In a way,  at least, as its declarative style combined with predicate logic reminds me of my &lt;a href=&quot;http://en.wikipedia.org/wiki/Prolog&quot;&gt;Prolog&lt;/a&gt; days. On the other hand, its prose-like appearance gives it a fuzzy, yet natural touch. In a nutshell, it allows you to describe an entire world with  all its objects, locations, people, as well as all the &lt;i&gt;rules&lt;/i&gt; that apply in it, without making you feel too geeky. &lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
And as soon as you&#39;re done, Inform &lt;i&gt;compiles&lt;/i&gt; your description, and you get ... AN INTERACTIVE TEXT ADVENTURE! (All ye nerds scream &quot;Yaaaaaaaaay&quot; ...).&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
So, for instance, your source text might be&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;pre style=&quot;background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; 
 Living-room is a room. 
 Kitchen is a room. 
 Kitchen is south of living-room.   

&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
and after compiling you&#39;re ready to play. Ok, not much adventure to experience yet, but add some pizza to the kitchen and a computer to the living-room, and it&#39;s not so far from some people&#39;s actual existence. ;-)&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
So when my colleague told me about that, I suddenly knew what I had to do: A hybrid of an old-school text adventure and a geocache - that was it! Ideas started flooding my mind as soon as the connection of the two concepts was established ... so many, indeed, that it was hard to keep track of all of them. In the same instant it was sort of  exhausting to think of all the stuff I &lt;i&gt;wouldn&#39;t&lt;/i&gt; be able to implement since first of all I wasn&#39;t in the least &quot;fluent&quot; in Inform7, and then there was the time issue: Two weeks only - how many ideas would have to remain unborn? :-)&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw3FCwzivVKOyVlocJWSguDRxekQg9fLgl0Gk4_N0byADiDoRSSXP8x7cle3QHpASJkaCKbDJslfSEvTI04-Xm2FVN4DCSdXY1c-U7d9o92bh8f9V4-c2OZb_RX_12yNdoSvrc8yKggv8/s1600/world.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;243&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw3FCwzivVKOyVlocJWSguDRxekQg9fLgl0Gk4_N0byADiDoRSSXP8x7cle3QHpASJkaCKbDJslfSEvTI04-Xm2FVN4DCSdXY1c-U7d9o92bh8f9V4-c2OZb_RX_12yNdoSvrc8yKggv8/s320/world.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;The game map, as generated by Inform based on the relative positions of the rooms.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
In the end I managed to build a small world consisting of 29 rooms, about half of which correspond to &quot;real&quot; places that the players needs to visit in order to collect clues there. Check out this snippet from the game, played entirely inside the browser:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg20LqsiumJK1jApM3GJEODufkha23qo5mV0S8vn4G8qAJQLu2qV74sM7_8uAUeJLYr0dd6cMcmDXlZcL1YfS9_QNFeSTdE0gj86y_0krZgWSxDCLAGA7IButRVvh4e1YK5QL5HA-E_AxE/s1600/snippet.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;153&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg20LqsiumJK1jApM3GJEODufkha23qo5mV0S8vn4G8qAJQLu2qV74sM7_8uAUeJLYr0dd6cMcmDXlZcL1YfS9_QNFeSTdE0gj86y_0krZgWSxDCLAGA7IButRVvh4e1YK5QL5HA-E_AxE/s320/snippet.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
  Some of the clues were material, some purely virtual. It was a satisfying result after all. There are monsters in it (trolls, dragons ... standard RPG company), hidden places, keys and locks, hilarious jokes, of course, magic barriers and the like. Adventure veterans would certainly criticize its being a little too simple. Beginners will possibly claim the opposite. Who knows ... &lt;a href=&quot;http://static.charra.de/wandrinduck/&quot;&gt;judge for yourself&lt;/a&gt;, but don&#39;t get frustrated! You cannot get past the dragons, as you need a &quot;real&quot; clue for that, so there&#39;s no chance you&#39;ll finish the game successfully. You&#39;ll have to enter the nonvirtual realm for that. :-)&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
The cache was a nice surprise for my unsuspecting wife, and - as of 9th of May - it is published and available under the name &quot;&lt;a href=&quot;http://www.geocaching.com/seek/cache_details.aspx?guid=042d4280-7d5d-43d6-a8ac-b7067e1a7142&quot;&gt;Wandrin&#39; Duck&lt;/a&gt;&quot;. I&#39;m excited what kind of feedback I&#39;ll get from the geocachers&#39; guild.&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;&quot;&gt;
Still there&#39;s a lament in the back of my mind of all those ideas I left out ... maybe some other day.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/2982006982279745547/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://hackingjohnnz.blogspot.com/2011/05/marriage-of-inform7-and-geocaching.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/2982006982279745547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/2982006982279745547'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/2011/05/marriage-of-inform7-and-geocaching.html' title='The marriage of Inform7 and geocaching'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw3FCwzivVKOyVlocJWSguDRxekQg9fLgl0Gk4_N0byADiDoRSSXP8x7cle3QHpASJkaCKbDJslfSEvTI04-Xm2FVN4DCSdXY1c-U7d9o92bh8f9V4-c2OZb_RX_12yNdoSvrc8yKggv8/s72-c/world.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4103198674734023651.post-3489214101810047778</id><published>2011-04-20T13:55:00.001-07:00</published><updated>2012-05-27T12:47:38.502-07:00</updated><title type='text'>__init__</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #222222; font-family: Georgia, Utopia, &#39;Palatino Linotype&#39;, Palatino, serif; line-height: 21px;&quot;&gt;So I have my own blog now. Looking forward to writing again ...&lt;br /&gt;
&lt;br /&gt;
Most of it will definitely be related to programming. My language of choice right now is&amp;nbsp;&lt;a href=&quot;http://www.python.org/&quot; style=&quot;color: #993300; text-decoration: none;&quot;&gt;Python&lt;/a&gt;, which I&#39;ve been cherishing ever since I got my first job, where I applied as a Java programmer but ended up hacking Python instead. In retrospect, I&#39;m pretty happy about how things turned out. Only recently I decided to get back to Java for a while, to have a &quot;major&quot; language under my belt, and boy it felt cumbersome after those pythonic years. But that&#39;s gonna be acceptable.&lt;br /&gt;
&lt;br /&gt;
Still, I think it&#39;s time to try something new, and so I&#39;ve been considering alternatives to my beloved reptilian language. In particular, I&#39;ve grown interested in functional programming and iOS programming.&lt;br /&gt;
&lt;br /&gt;
Hopefully I&#39;ll be able to speak about my favourite instrument, the guitar. I&#39;m not sure yet what a blog post about an instrument might look like. Anyway, as I&#39;ve been playing around with Garage Band lately, and I also have a piano available, there might be some experience or other that the other nerd/musician hybrids out there might appreciate hearing about.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackingjohnnz.blogspot.com/feeds/3489214101810047778/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://hackingjohnnz.blogspot.com/2011/04/init.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/3489214101810047778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4103198674734023651/posts/default/3489214101810047778'/><link rel='alternate' type='text/html' href='http://hackingjohnnz.blogspot.com/2011/04/init.html' title='__init__'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/07473284376631861147</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq435qTGpLSq7eGvlCIJnHlpqxiEBa_8azmQO0o0Cd28wlVmhyovBFPLu-e5vn0I_rxfXVLLlo5-c-3_V0u2Aa3MGEhMQSauEAjUeeqzJ9hzKiclE5X2NiLMuFfmNW5w/s220/profile.jpg'/></author><thr:total>0</thr:total></entry></feed>