<?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-28358787</id><updated>2012-01-31T02:04:34.228-05:00</updated><title type='text'>Arc's Soy Machine</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default?start-index=101&amp;max-results=100'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>159</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-28358787.post-8241363508642992407</id><published>2011-12-16T12:06:00.002-05:00</published><updated>2011-12-16T12:06:28.359-05:00</updated><title type='text'>GCI Low Hanging Fruit</title><content type='html'>&lt;p&gt;I have to admit I'm pretty surprised that at halfway through Google Code-In 2011 only about a quarter of the tasks we posted for the first half have been completed or in-progress.  Further, most of the tasks thus far haven't been coding tasks.&lt;/p&gt;&lt;p&gt;I'm going to publish here a list of what we consider "low hanging fruit"; coding tasks which are fairly easy to get started with.  If you're a student age 13-17 these would be an easy way to earn a Google tshirt and some cash.  All of these tasks deal with OpenGL rendering, usually just arrays for points and lines/triangles which connect the points.  There's a lot of examples in the code already for this and numerous tutorials on the web (such as &lt;a href="http://nehe.gamedev.net/"&gt;NeHe&lt;/a&gt;).&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;Simple Rendering&lt;/dt&gt;&lt;dd&gt;We have 2 new tasks listed for rendering simple models; &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7237313"&gt;Camera&lt;/a&gt; and &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7234264"&gt;Light&lt;/a&gt;.  Camera is very simple, while Light can be as simple or complex as you want to make it.&lt;/dd&gt;&lt;dt&gt;Shapes Rendering&lt;/dt&gt;&lt;dd&gt;We have 3 tasks for rendering shapes, &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7127345"&gt;Box&lt;/a&gt;, &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7229261"&gt;Room&lt;/a&gt;, and &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7116340"&gt;Sphere&lt;/a&gt;.  Any of these could be knocked out in a few hours even without prior OpenGL knowledge.&lt;/dd&gt;&lt;dt&gt;Joints Rendering&lt;/dt&gt;&lt;dd&gt;We have 6 new tasks up for rendering joints; &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7228305"&gt;Ball&lt;/a&gt;, &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7245257"&gt;Fixed&lt;/a&gt;, &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7228304"&gt;Hinge&lt;/a&gt;, &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7238256"&gt;Piston&lt;/a&gt;, &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7230270"&gt;Slider&lt;/a&gt;, and &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7233301"&gt;Universal&lt;/a&gt;.  Joints (soy.joints) connect two bodies such that they can only move in respect to each other in a certain way, such as a door hinge or piston.  These are all &lt;a href="http://opende.sourceforge.net/wiki/index.php/Manual_%28Joint_Types_and_Functions%29#Joint_parameter_setting_functions"&gt;documented&lt;/a&gt; with graphic depictions.  This is slightly more complex than the simple rendering tasks (above) in that there's two pieces to each joint and they can be rendered as either wireframe or solid (with provided materials).&lt;/dd&gt;&lt;/dl&gt;As always, we're on IRC if a student wants to discuss these or other tasks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8241363508642992407?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8241363508642992407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8241363508642992407' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8241363508642992407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8241363508642992407'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/12/gci-low-hanging-fruit.html' title='GCI Low Hanging Fruit'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-1209438369849206793</id><published>2011-12-14T00:27:00.000-05:00</published><updated>2011-12-14T00:27:30.382-05:00</updated><title type='text'>PyTTY 0.3</title><content type='html'>&lt;p&gt;Continuing my annual end-of-year coding sprint, I just released PyTTY 0.3.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pytty.org/"&gt;PyTTY&lt;/a&gt; is a Python serial communication package I started last year after a friend said he couldn't use &lt;a href="http://python.org/"&gt;Python&lt;/a&gt; 3 yet because pyserial wasn't ported.  The point of writing this was to show him that he didn't need an ancient, bloated, poorly-maintained package to do something as simple as serial communication.&lt;/p&gt;&lt;p&gt;What I wrote over an afternoon turned out to be a little over 100 lines of fairly useful code which I've since used in quite a few microcontroller projects (eg, &lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt;).  Its by no means complete, the only setting is baud rate and there's no Windows support, but its done everything I've needed it to over the last year.  The only problem that's been reported is poor documentation which this release aims to fix.  It includes a short code example ("pydoc pytty.TTY") which runs on both legacy Python and Python 3.&lt;/p&gt;&lt;p&gt;PyTTY 0.3 is under 135 lines of pure Python and relies only on the Python standard library.  If there's a feature you need which this doesn't have either email me a patch or a feature request so I can add it.  The &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; repository is &lt;a href="http://hg.pytty.org/pytty"&gt;http://hg.pytty.org/pytty&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/28358787-1209438369849206793?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/1209438369849206793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=1209438369849206793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1209438369849206793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1209438369849206793'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/12/pytty-03.html' title='PyTTY 0.3'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3369351492720751137</id><published>2011-12-08T00:50:00.001-05:00</published><updated>2011-12-08T12:05:03.085-05:00</updated><title type='text'>NodeTree 0.2 Released</title><content type='html'>&lt;p&gt;I just shipped &lt;a href="http://nodetree.org/"&gt;NodeTree&lt;/a&gt; 0.2.&lt;/p&gt;&lt;p&gt;This version will not parse an XML stream.  All it contains are some basic types representing XML nodes such as &lt;code&gt;Comment&lt;/code&gt;, &lt;code&gt;Document&lt;/code&gt;, and &lt;code&gt;Element&lt;/code&gt;.  As promised, text is also handled as a node but uses standard Python strings (UTF-8 strings/bytes and unicode).  These should all be fairly intuitive to use.&lt;/p&gt;&lt;p&gt;The magic is the XML data is being managed in C using a libxml2 DOM tree but accessed through a Pythonic object-oriented API.  For example, in DOM each node may have exactly one parent - in NodeTree a node may be added to any number of parents with a separate DOM node and context for each.&lt;/p&gt;&lt;p&gt;I started this project because the existing XML packages for &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; proved too difficult to use with &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt;.  Fritzy's &lt;a href="https://github.com/fritzy/SleekXMPP/wiki"&gt;SleekXMPP&lt;/a&gt; uses lxml but had to jump through several hoops to get stream parsing to work, looking over his work I certainly didn't want to repeat it with &lt;a href="http://concordance-xmpp.org/"&gt;Concordance-XMPP&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Beyond this the leading XML API for Python, ElementTree, includes several unfortunate design decisions that make it frustrating to use in the best cases and unusable in others.  A full list of why can be left for another time, but the difference to NodeTree can be described in their names - ElementTree is a tree of XML Element nodes with other kinds of nodes either silently dropped, mangled, or made available in bizarre ways (eg, .text and .tail).  In contrast, NodeTree provides XML data as a tree of nodes &lt;i&gt;starting with the Document node&lt;/i&gt; and includes comment and text nodes in its tree.  I plan to provide 100% XML 1.0 support in a future release while maintaining a clean, simple, and intuitive API.&lt;/p&gt;&lt;p&gt;Storing XML data in libxml2 DOM format gives us a few advantages over other XML libraries.  First, we'll have XPath, XInclude, and XSLT available without having to convert the data between formats.  Second, Python objects only need to be created for nodes Python wants a reference to so when we get to parsing data this will happen much faster and with less memory.&lt;/p&gt;&lt;p&gt;At version 0.2 NodeTree is still in its infancy but some of its API can be demonstrated.  Here's a short example:&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;Python 3.2.2 (default, Oct  3 2011, 00:20:58) &lt;br /&gt;[GCC 4.5.2] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; import nodetree&lt;br /&gt;&gt;&gt;&gt; doc = nodetree.Document()&lt;br /&gt;&gt;&gt;&gt; doc.append(nodetree.Comment(' Start '))&lt;br /&gt;&gt;&gt;&gt; doc.append(nodetree.Element('data'))&lt;br /&gt;&gt;&gt;&gt; doc.append(nodetree.Comment(' Fini '))&lt;br /&gt;&gt;&gt;&gt; doc[1].attributes['thing'] = 'normal'&lt;br /&gt;&gt;&gt;&gt; doc[1].append(nodetree.Element('record'))&lt;br /&gt;&gt;&gt;&gt; doc[1][0].append('First') &lt;br /&gt;&gt;&gt;&gt; doc[1].append(nodetree.Element('record'))&lt;br /&gt;&gt;&gt;&gt; doc[1][1].append('Second')&lt;br /&gt;&gt;&gt;&gt; doc&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;!-- Start --&amp;gt;&lt;br /&gt;&amp;lt;data thing="normal"&amp;gt;&lt;br /&gt;  &amp;lt;record&amp;gt;First&amp;lt;/record&amp;gt;&lt;br /&gt;  &amp;lt;record&amp;gt;Second&amp;lt;/record&amp;gt;&lt;br /&gt;&amp;lt;/data&amp;gt;&lt;br /&gt;&amp;lt;!-- Fini --&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;NodeTree 0.2 is tested to work with Python 2.6, 2.7, 3.1, 3.2, and 3.3-pre.  The next release is intended to support basic file and stream parsing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3369351492720751137?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3369351492720751137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3369351492720751137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3369351492720751137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3369351492720751137'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/12/nodetree-02-released.html' title='NodeTree 0.2 Released'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-635684739293847958</id><published>2011-12-03T20:55:00.001-05:00</published><updated>2011-12-03T20:55:59.720-05:00</updated><title type='text'>XMPP on the web</title><content type='html'>&lt;p&gt;A &lt;a href="https://plus.google.com/109741359399131092509/posts/L9zcgcjzVsL"&gt;short thread on G+&lt;/a&gt; has prompted this longer sharing of my vision for &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt; on the web.&lt;/p&gt;&lt;p&gt;For XMPP use on a website we currently have &lt;a href="http://xmpp.org/extensions/xep-0206.html"&gt;BOSH&lt;/a&gt; and, in an extreme-alpha state, &lt;a href="http://tools.ietf.org/html/draft-moffitt-xmpp-over-websocket-00"&gt;XMPP over websockets&lt;/a&gt;.  The advantage of websockets is obvious, BOSH is a high overhead protocol that we'd all rather not have to use, however both have the same problem: you either must share your login credentials (and thus access to your account) with every website you use a single account with, or must create a new account (JID) for every XMPP-based website you use.&lt;/p&gt;&lt;p&gt;&lt;a href="http://oauth.net/2/"&gt;Oauth2&lt;/a&gt; for XMPP might be a partial solution to this by requiring your authorization through a central identity site and using the resulting token for logging in, however, you're still opening yourself up to the 3rd party website accessing your roster, sending spam messages on your behalf, and potentially worse.  All this really gives you is the ability to later disable access to websites who misuse your account.&lt;/p&gt;&lt;p&gt;This is the crux of the issue: when using an Javascript library provided by a website and using a proxy provided by that website, whether BOSH, websockets, or otherwise, you're giving that website unlimited access to your account.  I have not seen a workable proposal to solve this and until this is solved XMPP cannot see widespread use on the web.&lt;/p&gt;&lt;p&gt;I'm proposing that we solve this by putting XMPP in the browser, either directly or through a plugin.  Expose a standard javascript API for allowing websites to use an XMPP connection along with a security model which gives users control as to what a website is allowed to use their connection for.  Ie, if a script on a website wants access to their roster the user will be prompted for it, if they want to join a MUC room display a standard prompt for that.  Browsers can have multiple XMPP sessions at once and allow the user to select which account they'd like to use with an XMPP-enabled site.&lt;/p&gt;&lt;p&gt;This is just some early ideas, I'm nowhere near implementing this though I think the conversation would be useful to get started.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-635684739293847958?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/635684739293847958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=635684739293847958' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/635684739293847958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/635684739293847958'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/12/xmpp-on-web.html' title='XMPP on the web'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-732662806970378169</id><published>2011-11-28T01:56:00.001-05:00</published><updated>2011-11-28T02:04:56.815-05:00</updated><title type='text'>OpenGL ES support complete</title><content type='html'>&lt;p&gt;The experimental branch, where the OpenGL ES migration was being done, has just been closed and merged into the default branch of &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Thanks to Steve Anton, one of our &lt;a href="http://code.google.com/gci"&gt;Google Code-In 2011&lt;/a&gt; students, for some of the last bits of work to complete the merge.  We are now one step closer to mobile support!  If you're a student ages 13-17 and would like to earn a Google tshirt and some cash by helping us with Android support, sign up for Google Code-In and claim &lt;a href="http://www.google-melange.com/gci/task/view/google/gci2011/7129341"&gt;this task&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/28358787-732662806970378169?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/732662806970378169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=732662806970378169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/732662806970378169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/732662806970378169'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/11/opengl-es-support-complete.html' title='OpenGL ES support complete'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3103335143049011759</id><published>2011-11-21T04:45:00.001-05:00</published><updated>2011-11-21T04:49:33.564-05:00</updated><title type='text'>Google Code-In 2011 is Open</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://media.pysoy.org/img/gci_logo_2011.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://media.pysoy.org/img/gci_logo_2011.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Google Code-In has officially begun!&lt;br /&gt;&lt;br /&gt;From today through January 16th students age 13-17 can earn up to &lt;b&gt;$500&lt;/b&gt; working on small tasks for software projects such as &lt;a href="http://www.moinmoin.org/"&gt;MoinMoin&lt;/a&gt;, &lt;span class="proflinkWrapper"&gt;&lt;span class="proflinkPrefix"&gt;&lt;/span&gt;&lt;a class="proflink" href="http://www.sympy.org/"&gt;SymPy&lt;/a&gt;&lt;/span&gt;, and &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Tasks include coding, documentation, graphic design, video production, testing, translation, research, public speaking, and many other kinds of challenges of varying difficulty.&lt;br /&gt;&lt;br /&gt;Completing just one task earns a student a Google tshirt.  Every 3 tasks they complete earns them $100, and the 10 top students worldwide will earn an all-expense paid trip to Mountain View, CA to receive an award at Google.&lt;br /&gt;&lt;br /&gt;PySoy has over 75 tasks offered for the first half of the program and another 75-100 will be made available December 16th.  Our mentors are on &lt;a href="http://www.freenode.net/"&gt;Freenode&lt;/a&gt; channel &lt;a class="ot-hashtag" href="http://www.pysoy.org/"&gt;#PySoy&lt;/a&gt; ready to help students start earning their tshirt and cash today.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google-melange.com/"&gt;Sign up&lt;/a&gt; today and get started!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3103335143049011759?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3103335143049011759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3103335143049011759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3103335143049011759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3103335143049011759'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/11/google-code-in-2011-is-open.html' title='Google Code-In 2011 is Open'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-750959451615879213</id><published>2011-11-09T23:09:00.001-05:00</published><updated>2011-11-10T01:15:57.343-05:00</updated><title type='text'>Rugby season nearly over, getting back to work</title><content type='html'>Wow its been a long time.&lt;p&gt;We wrapped up &lt;a href="http://socghop.appspot.com/gsoc/homepage/google/gsoc2011"&gt;Google's Summer of Code 2011&lt;/a&gt; in August.  The &lt;a href="http://python.org/"&gt;Python Software Foundation&lt;/a&gt; did wonderfully overall, for &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; 6 of our 7 students passed.  A great year overall - thanks to all the mentors and students!&lt;/p&gt;&lt;p&gt;&lt;img src="http://blog.pysoy.org/images/ArcGettingSchooled-small.jpg" align="right" width="200" height="150" alt="Five man scrum vs Warrington"/&gt;Rugby has been a life changer for me.  My first game was in September, after floating in and out of practice for years and training pretty heavily since April.  No serious injuries, but no shortage of pain; I've frequently needed to sleep in a reclining chair to keep blood from pooling in my shoulders and nurse bruised ribs, dislocated fingers and toes, shin splints, and pulled muscles everywhere.  All so worth it.&lt;/p&gt;&lt;p&gt;These guys are like family to me.  I know it sounds sappy, but I've come to trust the men in my pack with my life - in a way we all do every time we bind onto each other a scrum.  Its not that big of an adjustment culturally though due to the large number of programmers, lawyers, and IT professionals on the team.  When you work behind a desk all day its nice to balance it out with a physically intensive training in the evening and games on Saturday.&lt;/p&gt;&lt;p&gt;&lt;br clear="both"/&gt;&lt;img src="http://blog.pysoy.org/images/renegades-hellfest2011.jpg" align="center" width="400" height="250" alt="Renegades Reds at Hellfest 2011"/&gt;&lt;/p&gt;&lt;p&gt;The climax of the season was Hellfest October 29th in Dallas, TX.  &lt;a href="http://dcrugby.com/"&gt;Washington Renegades&lt;/a&gt; brought our B-side to compete and returned with the 1st place trophy.  My teammate &lt;a href="http://www.jimbo.info/weblog/?p=1996"&gt;Jimbo&lt;/a&gt; has more pics on his blog of the tournament, I was wearing #23 as tighthead prop.&lt;/p&gt;&lt;p&gt;We have two more games this season before we settle in for the Winter and indoor off-season training at the gym.  A group of us plan to do a 8-week program run by &lt;a href="http://web.usarugby.org/cgi-bin/viadesto/natteams/mnt/15ProfileDetail.pl?playerId=368"&gt;a professional rugby player&lt;/a&gt; this Winter to get ready for the Spring season and the &lt;a href="http://www.binghamcup.com/"&gt;Bingham Cup 2012&lt;/a&gt; in Manchester UK next June.&lt;/p&gt;&lt;p&gt;Today the PySoy project was accepted to &lt;a href="http://code.google.com/gci"&gt;Google Code-In&lt;/a&gt;.  We've got a number of &lt;a href="http://www.pysoy.org/wiki/CodeIn/2011"&gt;student tasks&lt;/a&gt; lined up, with many more being worked on for the first batch set to release in less than two weeks.  Interested students should hop on &lt;a href="http://www.freenode.net/"&gt;Freenode&lt;/a&gt; (#PySoy) and get oriented before the program starts so they're ready to jump right into their first task!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-750959451615879213?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/750959451615879213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=750959451615879213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/750959451615879213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/750959451615879213'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/11/rugby-season-nearly-over-getting-back.html' title='Rugby season nearly over, getting back to work'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8393596358534702662</id><published>2011-07-21T11:31:00.004-04:00</published><updated>2011-07-21T11:46:50.534-04:00</updated><title type='text'>Transcoding FLAC to Ogg Vorbis</title><content type='html'>Last night I hit a dilemma; a very old CD I ripped to FLAC and now can't find was playable only on certain players, not my Android phone (despite FLAC support) and behaving strange on many desktop players.&lt;br /&gt;&lt;br /&gt;Usually I just use something like &lt;code&gt;oggenc -q 4 *.flac&lt;/code&gt; since vorbis-tools supports FLAC as a source format (and preserves metadata like artist, title, etc).  Strangely, oggenc didn't recognize the files in this album.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gstreamer.freedesktop.org/"&gt;GStreamer&lt;/a&gt; to the rescue; &lt;code&gt;for file in *.flac; do gst-launch-0.10 filesrc location="$file" ! decodebin ! audioconvert ! vorbisenc quality=0.4 ! oggmux ! filesink location="$file.ogg"; done;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Even though its much slower and more complicated, this should have done the trick.  It didn't, and ogginfo showed that the Ogg muxer in GStreamer has some issues;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 218558 to 205632&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 666174 to 655680&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 3150206 to 3142208&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 3605054 to 3597376&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 3828670 to 3822400&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 4741630 to 4733312&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 5636158 to 5630784&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 5858494 to 5854208&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 6096126 to 6090560&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 6317758 to 6314048&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 7668798 to 7665088&lt;br /&gt;WARNING: granulepos in stream 1 decreases from 7902718 to 7898240&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So with GStreamer not an option, I looked at the original FLAC files and found that whatever encoder I used added ID3 tags (which are not part of the FLAC spec).  A quick ID3 removal command stripped these out so oggenc would recognize the files and work;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;find . -name "*.flac" -exec id3v2 --delete-all {} \;&lt;br /&gt;oggenc -q 4 *.flac&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8393596358534702662?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8393596358534702662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8393596358534702662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8393596358534702662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8393596358534702662'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/07/transcoding-flac-to-ogg-vorbis.html' title='Transcoding FLAC to Ogg Vorbis'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3519974206074440404</id><published>2011-06-21T08:41:00.002-04:00</published><updated>2011-06-21T09:41:04.891-04:00</updated><title type='text'>Blowing up the silos (hypothermia)</title><content type='html'>Its a common belief that fat is fat, whether we eat it or whether its stored in our bodies.  Of course this is naive, our bodies are far more complex than skin balloons packed with nutrients.  There are two kinds of fat tissue in our body;&lt;br /&gt;&lt;br /&gt;The "fuel silos" are called &lt;a href="http://en.wikipedia.org/wiki/White_adipose_tissue"&gt;White Adipose Tissue (WAT)&lt;/a&gt; made of simple cells; their membrane has a few receptors on it that trigger the cell to store or release energy, the nucleus is small and pressed against the cell membrane, and inside one big lipid droplet that shrinks or swells as needed.  When dieting your pancreas releases &lt;a href="http://en.wikipedia.org/wiki/Glucagon"&gt;Glucagon&lt;/a&gt; to trigger your fat to release their reserves.  When your body releases insulin (which it does after almost every meal to some degree) your WAT cells swell back up.  This is why its so hard to keep weight off.&lt;br /&gt;&lt;br /&gt;Then there's the factory fat cells, &lt;a href="http://en.wikipedia.org/wiki/Brown_adipose_tissue"&gt;Brown Adipose Tissue (BAT)&lt;/a&gt; which are much more complex; they contain many smaller lipid droplets and the enzimes needed to burn the energy right in them.  They're especially important in infants because they're too small to shiver to get warm, so their "brown fat" burns their fat immediately to keep their body temperature regulated.  Adults maintain a good amount of it in our upper back and neck, though strangely lean adults have more BAT than obese adults.&lt;br /&gt;&lt;br /&gt;When our bodies become hypothermic, say by taking an ice water bath, BAT thermogenesis is activated depleting those cells of stored energy to produce body heat.  Shivering also releases more energy to raise heat.  While the sound of a ice water bath may sound horrifying, its actually not that bad after you've been running, decrease water temp slowly, and can even be meditative.&lt;br /&gt;&lt;br /&gt;The goal is to destroy WAT (White Adipose Tissue) - not just slowly deplete it but leave the cells in a state ready to swell back up every time you eat, but actually reducing the number of white fat cells in your body for permanent weight loss.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3519974206074440404?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3519974206074440404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3519974206074440404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3519974206074440404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3519974206074440404'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/06/blowing-up-silos-hypothermia.html' title='Blowing up the silos (hypothermia)'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3989146409521795271</id><published>2011-06-16T08:55:00.003-04:00</published><updated>2011-06-16T09:35:59.638-04:00</updated><title type='text'>Blowing up the silos (morning)</title><content type='html'>An awesome holiday gift last December was a book, "The 4-Hour Body", a 570 page hardcover hacking guide to the human body.  On Dec 20 I started the "Rapid Fat-Loss" program within with great success - in less than three months I lost nearly 5% body fat, with just with a few changes to my diet and no additional exercise.&lt;br /&gt;&lt;br /&gt;I got looser with the diet as the weather got warmer and I started exercising more, then partially tore my archilles tendon between two different accidents confining me to a reclining chair for two months.  Of course I gained all the fat back; the fuel silos (fat cells) were still there in the same number, just emptied a bit, and all of them sending out messages to adjust insulin and metabolism so that they could refill.&lt;br /&gt;&lt;br /&gt;You can see on my &lt;a href="http://bodyspace.bodybuilding.com/ArcRiley/"&gt;bodybuilding.com profile&lt;/a&gt; the raise starting in mid-March.  However, the experience wasn't a lost cause - I have a better idea of what works and learned a number of new recipes for making it work easier, since the book only mentions veganism and doesn't provide much in the way of meal ideas (I'll share one below).&lt;br /&gt;&lt;br /&gt;I started training June 2nd for Fall Rugby season - something I'm using as a focus point to stay motivated.  I'm calling this program "Blowing up the Silos" - not just slowly using the fuel within, but mushroom clouds on the horizon.  As I sit here at 9am writing this my 640 calorie breakfast burns like napalm through my veins, barely able to sit still long enough to type.  When I finish with this I'm headed out for wind sprints just to burn off the excess energy.&lt;br /&gt;&lt;br /&gt;Upon waking I immediately downed 500mg Phosphatidylserine, 500mg L-Carnitine, 300mg Alpha-Lipoic Acid, 500mg Maca root powder with a tall glass of water with 1tbsp lemon juice in it, then green tea made from 8g whole leaf supplemented with 3 grams of powdered Cissus Quadrangularis.&lt;br /&gt;&lt;br /&gt;From there I have 30 minutes to cook breakfast while drinking the tea and chewing on a handful (24g) of cashews.  Breakfast was 1 tbsp (14g) refined coconut oil in a frying pan and a batter made from 1.5tsp (4 grams) ground cinnimon and 92g gram (chic pea) flour soaked in an airtight container with 1 cup of water the night before.  Makes something not even remotely akin to a pancake, but edible.  Net carbs 50 grams, 26 grams protein, and a whopping 640 calories.&lt;br /&gt;&lt;br /&gt;Along with breakfast was another handful of pills; daily cal-mag-zinc supplement (needed to replenish whats lost from green tea causing you to urinate all day), 500mg chromium, 60mg CoQ 10, and a multivitamin.&lt;br /&gt;&lt;br /&gt;The magic in this combination is how these various elements cascade each other.  I would explain in detail here how each of these do amazing things on their own, but I can't sit any longer.  I'll post more on other meals and adjustments I'm making later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3989146409521795271?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3989146409521795271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3989146409521795271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3989146409521795271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3989146409521795271'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/06/blowing-up-silos-morning.html' title='Blowing up the silos (morning)'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5520703901945885515</id><published>2011-05-31T16:21:00.007-04:00</published><updated>2011-06-02T01:09:39.707-04:00</updated><title type='text'>making an Android/iPhone/iPad home screen icon for your website</title><content type='html'>&lt;a href="http://concordance-xmpp.org/"&gt;&lt;img src="http://concordance-xmpp.org/apple-touch-icon-114x114-precomposed.png" alt="Glossy Concordance Icon" align="right" style="border: 0;" /&gt;&lt;/a&gt;One of the cool features of new phones and tablets is the ability to drop a website bookmark as an icon on the home screen, as if it was a normal App for that device.  Many websites provide icons which are automatically used when a user bookmarks them, however, the tools and resources for doing this are not immediately obvious.  I just spent Memorial Day figuring this out and will share what I found here.&lt;br /&gt;&lt;br /&gt;First, design your logo.  I use &lt;a href="http://inkscape.org/"&gt;Inkscape&lt;/a&gt; so I can later scale the icon for tshirts and printed material, but any tool will do as long as you end up with a square flattened 512x512 PNG.  Open this in &lt;a href="http://gimp.org/"&gt;GIMP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Next download this &lt;a href="http://www.iquatsch.de/achsogehtdas/?p=4"&gt;GIMP template&lt;/a&gt; and open it in GIMP.  Copy/paste your icon into the already selected region of the template, it should "just work".  Anchor your selection and merge visible layers for your 512x512 icon.&lt;br /&gt;&lt;br /&gt;Now that you have your glossy icon with rounded edges, scale and save the image three times for 57x57, 72x72, and 114x114 as follows:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  apple-touch-icon-57x57-precomposed.png&lt;br /&gt;  apple-touch-icon-72x72-precomposed.png&lt;br /&gt;  apple-touch-icon-114x114-precomposed.png&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Also save your original (pre-template) logo at 57x57 as &lt;code&gt;apple-touch-icon.png&lt;/code&gt;.  These four files should cover iPhone, iPad, Android, and Blackberry.  You may also want to save either the original logo or the glossy version at 16x16 for &lt;code&gt;favicon.ico&lt;/code&gt; if you have not done so already.&lt;br /&gt;&lt;br /&gt;Upload these files to your web server saved in the root directory of your website (like &lt;code&gt;robots.txt&lt;/code&gt;) and add the following template to the head of your website:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /&amp;gt;&lt;br /&gt;  &amp;lt;link rel="apple-touch-icon-precomposed" sizes="114x114" href="http://yourdomain.com/apple-touch-icon-114x114-precomposed.png" /&amp;gt;&lt;br /&gt;  &amp;lt;link rel="apple-touch-icon-precomposed" sizes="72x72" href="http://yourdomain.com/apple-touch-icon-72x72-precomposed.png" /&amp;gt;&lt;br /&gt;  &amp;lt;link rel="apple-touch-icon-precomposed" href="http://yourdomain.com/apple-touch-icon-57x57-precomposed.png" /&amp;gt;&lt;br /&gt;  &amp;lt;link rel="apple-touch-icon" href="http://yourdomain.com/apple-touch-icon.png" /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://blog.pysoy.org/screenshots/mobile_bookmark_bubble.png" alt="Mobile Bookmark Bubble Screenshot" align="right" width="207" height="385" style="border: 0;" /&gt;That should take care of virtually every device that supports this feature.  Test it out on your Android phone and, if you have any friends in the &lt;a href="http://crave.cnet.co.uk/gadgets/apple-stimulates-brains-religious-responses-claims-bbc-50003807/"&gt;Cult of Mac&lt;/a&gt;, ask if you can check this on the half dozen iOS devices they own.&lt;br /&gt;&lt;br /&gt;If you want to really encourage iPhone/iPad users to take advantage of your new, shiny icon to bookmark your webapp on their Home screen, check out this javascript library called &lt;a href="http://code.google.com/p/mobile-bookmark-bubble/"&gt;Mobile Bookmark Bubble&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Of course you should also make sure your site works well on handheld devices, but that's a topic for another time.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5520703901945885515?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5520703901945885515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5520703901945885515' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5520703901945885515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5520703901945885515'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/05/making-androidiphoneipad-home-screen.html' title='making an Android/iPhone/iPad home screen icon for your website'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8232473058914459835</id><published>2011-05-24T02:02:00.002-04:00</published><updated>2011-05-24T02:13:28.589-04:00</updated><title type='text'>Nodetree has Document and root Element</title><content type='html'>I think an example will explain the emerging API far better than I can.&lt;br /&gt;&lt;br /&gt;You can replicate this with the code from &lt;a href="http://hg.concordance-xmpp.org/nodetree"&gt;http://hg.concordance-xmpp.org/nodetree&lt;/a&gt;, though its still very early the code is completely documented in its current state.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Python 3.2 (r32:88445, Feb 28 2011, 00:50:14) &lt;br /&gt;[GCC 4.5.2] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; import nodetree&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; doc = nodetree.Document()&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; foo = nodetree.Element('foo')&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; doc.root = foo&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; len(doc)&lt;br /&gt;1&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; print(doc)&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;foo/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; bar = nodetree.Element('bar')&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; doc.root = bar&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; print(doc)&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;bar/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; print(foo)&lt;br /&gt;&amp;lt;foo/&amp;gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; print(bar)&lt;br /&gt;&amp;lt;bar/&amp;gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; print(doc[0])&lt;br /&gt;&amp;lt;bar/&amp;gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; &lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8232473058914459835?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8232473058914459835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8232473058914459835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8232473058914459835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8232473058914459835'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/05/nodetree-has-document-and-root-element.html' title='Nodetree has Document and root Element'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6432183961690259846</id><published>2011-05-21T15:48:00.003-04:00</published><updated>2011-05-21T16:31:16.604-04:00</updated><title type='text'>Nodetree design</title><content type='html'>I've spent the last two weeks charting out &lt;a href="http://ohloh.net/p/nodetree"&gt;Nodetree&lt;/a&gt;, a &lt;a href="http://en.wikipedia.org/wiki/XML_data_binding"&gt;XML data binding&lt;/a&gt; package for Python 3.&lt;br /&gt;&lt;br /&gt;I'd rather not reiterate the multitude of reasons for this, but since they always get asked, I'll summarize this with needing a stream parser that supports xpath/xslt and passing chunks of an XML stream in Python, something that ElementTree and lxml do not support. &lt;a href="https://github.com/fritzy/SleekXMPP/wiki"&gt;SleekXMPP&lt;/a&gt; employs a fairly ingenious hack on lxml to achieve this, but I'd rather spend some time doing it right from the start for &lt;a href="http://concordance-xmpp.org/"&gt;Concordance&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since &lt;a href="http://en.wikipedia.org/wiki/XPath_1.0"&gt;XPath&lt;/a&gt; and &lt;a href=" http://en.wikipedia.org/wiki/XSLT"&gt;XSLT&lt;/a&gt; are best supported by &lt;a href="http://xmlsoft.org/"&gt;libxml2&lt;/a&gt; than any other free software library, and I'd rather not spend the next few months writing an implementation from scratch, the data must exist as a libxml2 DOM tree at the point of processing.&lt;br /&gt;&lt;br /&gt;You can get a libxml2 DOM tree either by parsing a file (which gives you little control, it parses the entire file one-shot) or build the tree node by node.  libxml2 also supports processing an XML stream through its &lt;a href="http://en.wikipedia.org/wiki/Simple_API_for_XML"&gt;SAX&lt;/a&gt; interface, node by node, which gives us the flexibility needed to pop and/or parse nodes from the stream as its being parsed while still having all the other tools we need by generating a DOM tree of the segments as we process them.&lt;br /&gt;&lt;br /&gt;The problem here is that Nodetree isn't a &lt;a href="http://en.wikipedia.org/wiki/Document_Object_Model"&gt;DOM interface&lt;/a&gt;, its a Pythonic XML data binding interface, so such things as adding the same element to two documents (or being able to create a new document using a piece of another document while both are in memory) is a challenge.  Even if we were not using libxml2/DOM, for XPath to work correctly every node must have a clear hierarchy which falls apart when your context is a node used in the same document three times and in two different documents.&lt;br /&gt;&lt;br /&gt;One of the benefits of working on a wide variety of projects is reusing clever solutions used on one project for something completely different.  For example, I recently implemented &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;'s atomic API whereas Python objects are created on the fly for underlying data structures and could be attached to multiple points of data (see &lt;a href="http://hg.pysoy.org/pysoy/file/0b9bcf356f2b/examples/ColorCanvas.py"&gt;ColorCanvas.py&lt;/a&gt; for example).  This allows multiple data points to be updated with one step, and saves us from doing silly things like storing (ie) an object for every pixel in an image.&lt;br /&gt;&lt;br /&gt;I'm implementing almost exactly the same mechanism for Nodetree, it'll limit XPath searches run from Python somewhat but should be fully XML compliant and Pythonic, something (IMHO) nobody has managed to do yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6432183961690259846?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6432183961690259846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6432183961690259846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6432183961690259846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6432183961690259846'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/05/nodetree-design.html' title='Nodetree design'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5592618479929304323</id><published>2011-04-29T06:52:00.003-04:00</published><updated>2011-04-29T08:08:25.660-04:00</updated><title type='text'>Rocket Fuel</title><content type='html'>The gym I went to up in Manchester, NH was next door to an asian market.  I knew that coconut oil is about half Lauric Acid, which is an extremely digestible medium chain saturated fat which burns body fat as part of its metabolism, and the asian market had it in water bottles that looked like they were packed with crisco.  I was desperate for more energy for workout, so a disgusting squirt in the mouth meant a shot of energy lasting about 45 minutes for weight lifting.&lt;br /&gt;&lt;br /&gt;This evolved over time into what I call Rocket Fuel which I still use for workouts, both far more effective than coconut oil alone and much better tasting.  Here's the recipe;&lt;ul&gt;&lt;li&gt;4 whole dates&lt;/li&gt;&lt;li&gt;3 tbsp coconut oil&lt;/li&gt;&lt;li&gt;2 tbsp agave nectar&lt;/li&gt;&lt;li&gt;half a lemon of zest&lt;/li&gt;&lt;li&gt;1 tsp lemon juice&lt;/li&gt;&lt;li&gt;1/4 tsp sea salt&lt;/li&gt;&lt;li&gt;24 grams powdered gunpowder tea&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Start out by warming all ingredients to room temperature, especially the coconut oil which melts at around 25C (77F) to a clearish yellow liquid.  Melting temp will depend on whether its refined or unrefined, use unrefined if you like coconut flavor but it shouldn't change the recipe otherwise.&lt;br /&gt;&lt;br /&gt;Grind whole leaf green tea in a coffee blender and filter out any sticks/etc with a wire mesh.  Blend the rest of the ingredients with a stick blender until consistent, then add powdered green tea.  It'll be a spinach color and tastes like candy.&lt;br /&gt;&lt;br /&gt;For a workout gel you can keep rocket fuel in this state or freeze it in an ice cube tray if you prefer it as solid candy.  I wouldn't recommend taking more than a third of this a day, but should last a few days.  It takes about 5 minutes for my heart to start racing and lasts anywhere from 45 minutes to an hour, its great for sprinting, weight lifting, and pilates.&lt;br /&gt;&lt;br /&gt;I recently learned through &lt;a href="http://dcrugby.com/"&gt;Rugby practice&lt;/a&gt; that taking this with exercise before a night of heavy drinking eliminates hangovers completely. This is counter-intuitive considering sugar, coconut oil, and green tea should dehydrate if anything, so I'd like to get feedback on if this works for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5592618479929304323?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5592618479929304323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5592618479929304323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5592618479929304323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5592618479929304323'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/04/rocket-fuel.html' title='Rocket Fuel'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5632682008700250452</id><published>2011-03-26T11:30:00.006-04:00</published><updated>2011-03-26T14:07:03.727-04:00</updated><title type='text'>The Soy-Powered Mind</title><content type='html'>A few weeks ago I started taking a soy-derived drug called &lt;a href="http://en.wikipedia.org/wiki/Phosphatidylserine"&gt;Phosphatidylserine&lt;/a&gt; to help combat stress-induced high blood pressure.  The results have been remarkable enough to forfeit some medical privacy to share.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;First an important disclaimer&lt;/b&gt;; I am not a doctor, nothing in this post represents medical advice, and my experiences with this drug may be largely due to having an existing adrenal disorder, acute &lt;a href="http://en.wikipedia.org/wiki/Synesthesia"&gt;synesthesia&lt;/a&gt;, and engaging in rough sporting activities that have led to multiple concussions.  As this drug is considered a dietary supplement in the US its not heavily regulated and is available in many forms which may be dangerous, such as combined with high amounts of caffeine in a diet pill.  &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Caveat_emptor"&gt;Caveat emptor&lt;/a&gt;, especially with things you put in your body.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;My source was Vitamin Shoppe brand "Phosphatidylserine Complex", each capsule containing primarily 100mg &lt;a href="http://en.wikipedia.org/wiki/Phosphatidylserine"&gt;Phosphatidylserine&lt;/a&gt;, 25mg &lt;a href="http://en.wikipedia.org/wiki/Phosphatidylcholine"&gt;Phosphatidylcholine&lt;/a&gt;, and a grab bag of other &lt;a href="http://en.wikipedia.org/wiki/Phospholipid"&gt;phosphatolipids&lt;/a&gt; extracted from soy lecithin.  I've been taking 4 capsules a day, between meals, the first of the day with 500mg &lt;a href="http://en.wikipedia.org/wiki/Carnitine"&gt;L-Carnitine&lt;/a&gt; before breakfast and the last of the day with 10mg &lt;a href="http://en.wikipedia.org/wiki/Policosanol"&gt;Policosanol&lt;/a&gt; just before bed.&lt;br /&gt;&lt;br /&gt;For the first three days the experience was shocking; colors became brighter, music richer, tastes bolder.. all of my senses increased as if I've been living in a monochromatic world and suddenly I'm in OZ surrounded by singing midgets.&lt;br /&gt;&lt;br /&gt;On the second day I started noticing strange radial rainbow patterns around sharp contrasts of light such as my hand in front of my netbook screen.  By day four I had either become accustomed to this experience or my brain compensated for it.  I started noticing that I was remembering words that I had lost through repeated concussions and accidental electrocutions, as if the drug was triggering a mass repair effort on my &lt;a href="http://en.wikipedia.org/wiki/White_matter"&gt;white matter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My mood has changed even more dramatically; in contrast it feels like I've been in a constant state of fight or flight for as long as I can remember and suddenly.. its gone.  I'm calmer, happier, can concentrate better, get angry far less and have become generally nicer to everyone.  Many of my friends and family have remarked about this.&lt;br /&gt;&lt;br /&gt;The period of time I've been on this (less than a month) would have normally been extremely stressful; I've been sprinting on &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;, went to &lt;a href="http://www.pycon.org/"&gt;PyCon&lt;/a&gt;, organizing &lt;a href="http://wiki.python.org/moin/SummerOfCode/2011"&gt;Summer of Code&lt;/a&gt;, getting married (last Sunday), &lt;i&gt;and&lt;/i&gt; working as treasurer for a local non-profit getting their bi-annual tax filings together since 2007.&lt;br /&gt;&lt;br /&gt;Through it all my blood pressure has actually gone down, perhaps the most scientific measurement of stress, and lost 6kg of body fat while my diet has actually been fairly bad considering all the travel.  As an herbalist I've seen what belief in a drug can do by itself, the changes from this drug have been far beyond what would be reasonable for a placebo effect.&lt;br /&gt;&lt;br /&gt;While I hate the idea of being dependent on a drug, the changes to my mind, body, happiness and productivity is well worth it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5632682008700250452?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5632682008700250452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5632682008700250452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5632682008700250452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5632682008700250452'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/03/soy-powered-mind.html' title='The Soy-Powered Mind'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5058878078063693166</id><published>2011-03-17T14:31:00.002-04:00</published><updated>2011-03-17T15:04:44.976-04:00</updated><title type='text'>PyCon 2011 wrapup</title><content type='html'>This has been an awesome week at PyCon, though I'm completely exhausted.&lt;br /&gt;&lt;br /&gt;The most notable outcome of several meetings with &lt;a href="http://www.python.org/psf/members/"&gt;Python leadership&lt;/a&gt; about increasing diversity in the Python community.  In my role with PSF's educational outreach programs I'm calling on 3rd party projects working with us to help work to increase gender balance in our community, and as &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;'s project maintainer I'm committing us to working seriously on this issue over the next year as an example.&lt;br /&gt;&lt;br /&gt;Several college-aged women at PyCon knew about &lt;a href="http://socghop.appspot.com/"&gt;Google's Summer of Code&lt;/a&gt; but believed it was only for "geniuses who've been programming since they were 13" or that they were unqualified for other reasons, even though they're clearly more skilled (and moreso, have a better attitude) than some of the male students we get.&lt;br /&gt;&lt;br /&gt;To address this, my first step is &lt;a href="http://www.pysoy.org/wiki/SummerOfCode/Diversity"&gt;outreach to women&lt;/a&gt; for applying to us for Google's Summer of Code in hopes of resolving any miscommunication over required experience and what we're looking for.  This is being sent out over the next week so potential applicants leverage of early involvement with mentors that many students have already started on.&lt;br /&gt;&lt;br /&gt;Once Summer of Code is underway I plan to continue this an internship program in attempt to get more women involved in our community in ways not supported by GSoC such as through QA testing, documentation, video tutorials, and artwork.  This program will be for women ages 18+ with no college requirement, though we're still working out many of the other details.&lt;br /&gt;&lt;br /&gt;For the PyCon sprints I worked on the new "packaging" package for Python 3.3, formerly known as distutils2.  My primary interest in this is a packaging.backport module based on &lt;a href="http://pypi.python.org/pypi/3to2/1.0"&gt;3to2&lt;/a&gt; (which backports code from 3.2 to 2.7) extended with further fixers for 2.7 to 2.6, 2.5, and 2.4.  This module will work for packages written for Python 3.3 and above to maintain Python 2 compatibility, and also to backport "packaging" to the standalone distutils2 package for previous Python versions.&lt;br /&gt;&lt;br /&gt;We managed to get distutils2 largely upgraded for Python 3.3 syntax and the non-PyPI tests running cleanly, though much more work is needed.  We have a few months given than Python 3.2 was just released and we're working on a roughly 18 month release cycle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5058878078063693166?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5058878078063693166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5058878078063693166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5058878078063693166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5058878078063693166'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/03/pycon-2011-wrapup.html' title='PyCon 2011 wrapup'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8592951700452938289</id><published>2011-02-28T10:48:00.002-05:00</published><updated>2011-02-28T11:17:10.078-05:00</updated><title type='text'>Sprinting toward Beta-3</title><content type='html'>We've made some massive headway in the last two weeks;&lt;br /&gt;&lt;br /&gt;First, we have physics processing back.  We're using &lt;a href="http://www.ode.org/"&gt;ODE&lt;/a&gt; for now just to get us through the next release cycle or two, but we've modified its headers (ABI-compatible) to work better with libsoy.  Done are the days when we stress over API compatibility, since we've decided to write our own fully integrated (and scaled down) physics processing with &lt;a href="http://code.entropywave.com/projects/orc/"&gt;Orc&lt;/a&gt; we have a certain freedom to throw their conventions to the wind.&lt;br /&gt;&lt;br /&gt;How this is going to play out is a slow migration of values to arrays.  Body data, for example, will be stored an array inside a scene so SIMD processing can be used more efficiently.  The Soy Body class will represent a pointer to that array and include properties and methods for working with its data.  The actual storage of that data will be governed by the Scene, giving it the freedom to sort bodies per "island" (groups of bodies connected by group).  This is similar to how ODE processes bodies already and we'll be likely using their code as a starting place.&lt;br /&gt;&lt;br /&gt;Second, we have the basic types for rendering.  At the moment this is just a rotating cube, but that involved roughly 6 classes operating in both GObject and Python domains.  The next step is soy.models.Mesh for rendering more complex shapes.&lt;br /&gt;&lt;br /&gt;Third and most exciting, our humble &lt;a href="http://www.pysoy.org/"&gt;game engine&lt;/a&gt; can now run as a &lt;a href="http://getfirefox.org/"&gt;Firefox&lt;/a&gt; plugin!  There's some bugs to be worked out still, but "embedded" support has been added to our soy.widgets.Window class that allows it to run inside virtually any application.&lt;br /&gt;&lt;br /&gt;With luck and determination we'll have the next release out by the end of the month.  I've dialed back our goals considerably given that its a rewrite from our last beta release but our release cycle will be much shorter now that the rewrite is finishing up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8592951700452938289?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8592951700452938289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8592951700452938289' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8592951700452938289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8592951700452938289'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/02/sprinting-toward-beta-3.html' title='Sprinting toward Beta-3'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-1733250695956101065</id><published>2011-02-19T15:54:00.003-05:00</published><updated>2011-02-19T16:23:04.165-05:00</updated><title type='text'>New import (and export) mechanism</title><content type='html'>I've started writing a new import mechanism for &lt;a href="http://www.pysoy.org/wiki/Formats/soy"&gt;.soy&lt;/a&gt; files, replacing the old &lt;code&gt;soy.transports&lt;/code&gt; module with a &lt;a href="http://docs.python.org/dev/library/sys.html#sys.path_hooks"&gt;importer&lt;/a&gt; that allows .soy files to be loaded as modules with the standard Python &lt;code&gt;import&lt;/code&gt; command.&lt;br /&gt;&lt;br /&gt;With the old method, "transport" objects acted as dicts of objects in the .soy files and could be loaded and saved as such.  The resulting code looked like this:&lt;code&gt;&lt;br /&gt;import soy&lt;br /&gt;MyGame = soy.transports.File('data/MyGame.soy')&lt;br /&gt;window = MyGame['window']&lt;br /&gt;redblock = MyGame['redblock']&lt;br /&gt;&lt;/code&gt;(etc)&lt;br /&gt;&lt;br /&gt;Now, the new .soy importer is added to sys.path_hooks when PySoy is first initialized and applys to any directory added after.  When finished, the above code could be rewritten as:&lt;code&gt;&lt;br /&gt;import soy&lt;br /&gt;sys.path.append('data/')&lt;br /&gt;import MyGame&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;No "etc" needed because in that one import command data/MyGame.soy is loaded and made available directly in a module called MyGame.  Much more pythonic, IMHO.&lt;br /&gt;&lt;br /&gt;A separate class will be written next called &lt;code&gt;soy.Exporter&lt;/code&gt; which &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; objects can be added and removed from, then saved to a file such as this example which modifies the previously imported MyGame module:&lt;code&gt;&lt;br /&gt;archive = soy.Exporter(MyGame)&lt;br /&gt;archive.grasstex = grass_texture&lt;br /&gt;del(archive.bricktex)&lt;br /&gt;archive('data/MyGame2.soy')&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Similarly, two archives could be combined like this:&lt;code&gt;&lt;br /&gt;archive = soy.Exporter(MyGame)&lt;br /&gt;archive2 = soy.Exporter(CharacterFoo)&lt;br /&gt;archive += archive2&lt;br /&gt;archive('data/MyGame3.soy')&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The reasoning behind this is in most cases .soy files will be written by &lt;a href="http://www.gimp.org/"&gt;GIMP&lt;/a&gt; or &lt;a href="http://www.blender.org/"&gt;Blender&lt;/a&gt;, so the most common use case for the &lt;code&gt;soy.Exporter&lt;/code&gt; class is for combining and pruning the .soy files created by these tools.&lt;br /&gt;&lt;br /&gt;As always, constructive/critical feedback welcome and appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-1733250695956101065?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/1733250695956101065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=1733250695956101065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1733250695956101065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1733250695956101065'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/02/new-import-and-export-mechanism.html' title='New import (and export) mechanism'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-1371996426291681841</id><published>2011-02-05T19:39:00.002-05:00</published><updated>2011-02-05T19:52:44.500-05:00</updated><title type='text'>libsoy migration milestone</title><content type='html'>After a great deal of time (I'd rather not admit how long) we've finally managed to link the new &lt;a href="http://hg.pysoy.org/libsoy"&gt;libsoy code&lt;/a&gt; in with &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This afternoon (around 4:30) the following code opened a PySoy window on the screen:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;arc@khonsu ~/work/pysoy $ python3&lt;br /&gt;Python 3.1.3 (r313:86834, Dec  5 2010, 09:55:24) &lt;br /&gt;[GCC 4.5.1] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; import soy.widgets&lt;br /&gt;&gt;&gt;&gt; w = soy.widgets.Window()&lt;br /&gt;&gt;&gt;&gt; &lt;br /&gt;(soy:16042): Gdk-CRITICAL **: IA__gdk_window_set_title: assertion `title != NULL' failed&lt;br /&gt;IRQ's not enabled, falling back to busy waits: 2 0&lt;br /&gt;OpenGL version 2.1 Mesa 7.10&lt;br /&gt;GL_ARB_vertex_buffer_object: Yes&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;While incomplete and, well, its only a window, this is the first time we've gotten the two pieces to work together.  &lt;a href="https://www.ohloh.net/accounts/kapace"&gt;David Czech&lt;/a&gt; and I have spent the rest of the evening fixing both build systems (libsoy and &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;) and getting ready to copy the window binding code for the rest of the engine.&lt;br /&gt;&lt;br /&gt;Our largest failure in this has been diverting so much energy into &lt;a href="http://live.gnome.org/GObjectIntrospection"&gt;GObject Introspection&lt;/a&gt;.  While its a really great idea and I'd love to see it evolve, its still so deep alpha that I can't imagine anyone but Gnome developers getting much practical use out of it.  I would like to finish up &lt;a href="http://gtypes.org/"&gt;GTypes&lt;/a&gt; at some point, but either the XML format for .gir or any level of documentation on typelib needs to be written first.  I've wasted far too much time already trying to reverse engineer these from examples and their source that should have been put into my own projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-1371996426291681841?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/1371996426291681841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=1371996426291681841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1371996426291681841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1371996426291681841'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2011/02/libsoy-migration-milestone.html' title='libsoy migration milestone'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5207876712961553979</id><published>2010-12-30T05:02:00.003-05:00</published><updated>2010-12-30T05:19:32.957-05:00</updated><title type='text'>common Orc opcodes</title><content type='html'>I've been going through &lt;a href="http://liboil.freedesktop.org/wiki/"&gt;liboil&lt;/a&gt;'s 0.3 source to rewrite the &lt;a href="http://liboil.freedesktop.org/documentation/liboil-liboilfuncs-pixel.html#oil-yuv2rgbx-sub2-u8"&gt;oil_yuv2rgbx_sub2_u8 function&lt;/a&gt; we use for &lt;a href="http://theora.org/"&gt;Theora&lt;/a&gt; decoding to Orc pseudo-assembly code.&lt;br /&gt;&lt;br /&gt;Because the &lt;a href="http://code.entropywave.com/projects/orc/"&gt;Orc&lt;/a&gt; &lt;a href="http://code.entropywave.com/documentation/orc/orc-opcodes.html"&gt;opcode documentation&lt;/a&gt; splits opcode description and processor support between two tables, for reference I wrote a quick Python script to build a table of Orc opcodes common to &lt;a href="http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions"&gt;SSE&lt;/a&gt; (x86), &lt;a href="http://en.wikipedia.org/wiki/AltiVec"&gt;Altivec&lt;/a&gt; (PPC/Cell), and &lt;a href="http://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_.28NEON.29"&gt;NEON&lt;/a&gt; (Arm Cortex) processors.&lt;br /&gt;&lt;br /&gt;Here's that table for reference, at least until I put the time to format it for a wiki:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;opcode&lt;/th&gt;&lt;th&gt;dst&lt;/th&gt;&lt;th&gt;src1&lt;/th&gt;&lt;th&gt;src2&lt;/th&gt;&lt;th&gt;description&lt;/th&gt;&lt;th&gt;pseudo code&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;absb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;absolute value &lt;/td&gt;&lt;td&gt;(a &lt; 0) ? -a : a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;add &lt;/td&gt;&lt;td&gt;a + b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addssb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;add with signed saturate &lt;/td&gt;&lt;td&gt;clamp(a + b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addusb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;add with unsigned saturate &lt;/td&gt;&lt;td&gt;clamp(a + b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;andb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;bitwise AND &lt;/td&gt;&lt;td&gt;a &amp; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;andnb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;bitwise AND NOT &lt;/td&gt;&lt;td&gt;a &amp; (~b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;avgsb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;signed average &lt;/td&gt;&lt;td&gt;(a + b + 1)&gt;&gt;1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;avgub&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;unsigned average &lt;/td&gt;&lt;td&gt;(a + b + 1)&gt;&gt;1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cmpeqb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;compare equal &lt;/td&gt;&lt;td&gt;(a == b) ? (~0) : 0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cmpgtsb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;compare greater than &lt;/td&gt;&lt;td&gt;(a &gt; b) ? (~0) : 0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;copyb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;copy &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;loadb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;load from memory &lt;/td&gt;&lt;td&gt;array[i]&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;loadpb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;load parameter or constant &lt;/td&gt;&lt;td&gt;scalar&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;maxsb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;signed maximum &lt;/td&gt;&lt;td&gt;(a &gt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;maxub&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;unsigned maximum &lt;/td&gt;&lt;td&gt;(a &gt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;minsb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;signed minimum &lt;/td&gt;&lt;td&gt;(a &lt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;minub&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;unsigned minimum &lt;/td&gt;&lt;td&gt;(a &lt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mullb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;low bits of multiply &lt;/td&gt;&lt;td&gt;a * b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mulhsb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;high bits of signed multiply &lt;/td&gt;&lt;td&gt;(a * b) &gt;&gt; 8&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mulhub&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;high bits of unsigned multiply &lt;/td&gt;&lt;td&gt;(a * b) &gt;&gt; 8&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;orb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;bitwise or &lt;/td&gt;&lt;td&gt;a | b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;shlb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1S &lt;/td&gt;&lt;td&gt;shift left &lt;/td&gt;&lt;td&gt;a &lt;&lt; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;shrsb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1S &lt;/td&gt;&lt;td&gt;signed shift right &lt;/td&gt;&lt;td&gt;a &gt;&gt; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;shrub&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1S &lt;/td&gt;&lt;td&gt;unsigned shift right &lt;/td&gt;&lt;td&gt;a &gt;&gt; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;signb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;sign &lt;/td&gt;&lt;td&gt;sign(a)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;storeb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;store to memory &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;subtract &lt;/td&gt;&lt;td&gt;a - b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subssb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;subtract with signed saturate &lt;/td&gt;&lt;td&gt;clamp(a - b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subusb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;subtract with unsigned saturate &lt;/td&gt;&lt;td&gt;clamp(a - b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;xorb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;bitwise XOR &lt;/td&gt;&lt;td&gt;a ^ b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;absw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;absolute value &lt;/td&gt;&lt;td&gt;(a &lt; 0) ? -a : a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;add &lt;/td&gt;&lt;td&gt;a + b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addssw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;add with signed saturate &lt;/td&gt;&lt;td&gt;clamp(a + b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addusw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;add with unsigned saturate &lt;/td&gt;&lt;td&gt;clamp(a + b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;andw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;bitwise AND &lt;/td&gt;&lt;td&gt;a &amp; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;andnw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;bitwise AND NOT &lt;/td&gt;&lt;td&gt;a &amp; (~b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;avgsw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;signed average &lt;/td&gt;&lt;td&gt;(a + b + 1)&gt;&gt;1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;avguw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;unsigned average &lt;/td&gt;&lt;td&gt;(a + b + 1)&gt;&gt;1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cmpeqw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;compare equal &lt;/td&gt;&lt;td&gt;(a == b) ? (~0) : 0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cmpgtsw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;compare greater than &lt;/td&gt;&lt;td&gt;(a &gt; b) ? (~0) : 0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;copyw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;copy &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;div255w&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;divide by 255 &lt;/td&gt;&lt;td&gt;a/255&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;loadw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;load from memory &lt;/td&gt;&lt;td&gt;array[i]&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;loadpw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;load parameter or constant &lt;/td&gt;&lt;td&gt;scalar&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;maxsw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;signed maximum &lt;/td&gt;&lt;td&gt;(a &gt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;maxuw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;unsigned maximum &lt;/td&gt;&lt;td&gt;(a &gt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;minsw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;signed minimum &lt;/td&gt;&lt;td&gt;(a &lt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;minuw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;unsigned minimum &lt;/td&gt;&lt;td&gt;(a &lt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mullw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;low bits of multiply &lt;/td&gt;&lt;td&gt;a * b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mulhsw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;high bits of signed multiply &lt;/td&gt;&lt;td&gt;(a * b) &gt;&gt; 8&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mulhuw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;high bits of unsigned multiply &lt;/td&gt;&lt;td&gt;(a * b) &gt;&gt; 8&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;orw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;bitwise or &lt;/td&gt;&lt;td&gt;a | b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;shlw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2S &lt;/td&gt;&lt;td&gt;shift left &lt;/td&gt;&lt;td&gt;a &lt;&lt; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;shrsw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2S &lt;/td&gt;&lt;td&gt;signed shift right &lt;/td&gt;&lt;td&gt;a &gt;&gt; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;shruw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2S &lt;/td&gt;&lt;td&gt;unsigned shift right &lt;/td&gt;&lt;td&gt;a &gt;&gt; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;signw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;sign &lt;/td&gt;&lt;td&gt;sign(a)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;storew&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;store to memory &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;subtract &lt;/td&gt;&lt;td&gt;a - b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subssw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;subtract with signed saturate &lt;/td&gt;&lt;td&gt;clamp(a - b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subusw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;subtract with unsigned saturate &lt;/td&gt;&lt;td&gt;clamp(a - b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;xorw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;bitwise XOR &lt;/td&gt;&lt;td&gt;a ^ b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;absl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;absolute value &lt;/td&gt;&lt;td&gt;(a &lt; 0) ? -a : a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;add &lt;/td&gt;&lt;td&gt;a + b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addssl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;add with signed saturate &lt;/td&gt;&lt;td&gt;clamp(a + b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addusl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;add with unsigned saturate &lt;/td&gt;&lt;td&gt;clamp(a + b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;andl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;bitwise AND &lt;/td&gt;&lt;td&gt;a &amp; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;andnl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;bitwise AND NOT &lt;/td&gt;&lt;td&gt;a &amp; (~b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;avgsl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;signed average &lt;/td&gt;&lt;td&gt;(a + b + 1)&gt;&gt;1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;avgul&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;unsigned average &lt;/td&gt;&lt;td&gt;(a + b + 1)&gt;&gt;1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cmpeql&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;compare equal &lt;/td&gt;&lt;td&gt;(a == b) ? (~0) : 0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cmpgtsl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;compare greater than &lt;/td&gt;&lt;td&gt;(a &gt; b) ? (~0) : 0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;copyl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;copy &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;loadl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;load from memory &lt;/td&gt;&lt;td&gt;array[i]&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;loadpl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;load parameter or constant &lt;/td&gt;&lt;td&gt;scalar&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;maxsl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;signed maximum &lt;/td&gt;&lt;td&gt;(a &gt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;maxul&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;unsigned maximum &lt;/td&gt;&lt;td&gt;(a &gt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;minsl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;signed minimum &lt;/td&gt;&lt;td&gt;(a &lt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;minul&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;unsigned minimum &lt;/td&gt;&lt;td&gt;(a &lt; b) ? a : b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;orl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;bitwise or &lt;/td&gt;&lt;td&gt;a | b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;shll&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4S &lt;/td&gt;&lt;td&gt;shift left &lt;/td&gt;&lt;td&gt;a &lt;&lt; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;shrsl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4S &lt;/td&gt;&lt;td&gt;signed shift right &lt;/td&gt;&lt;td&gt;a &gt;&gt; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;shrul&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4S &lt;/td&gt;&lt;td&gt;unsigned shift right &lt;/td&gt;&lt;td&gt;a &gt;&gt; b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;signl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;sign &lt;/td&gt;&lt;td&gt;sign(a)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;storel&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;store to memory &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;subtract &lt;/td&gt;&lt;td&gt;a - b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subssl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;subtract with signed saturate &lt;/td&gt;&lt;td&gt;clamp(a - b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subusl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;subtract with unsigned saturate &lt;/td&gt;&lt;td&gt;clamp(a - b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;xorl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;bitwise XOR &lt;/td&gt;&lt;td&gt;a ^ b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;loadq&lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;load from memory &lt;/td&gt;&lt;td&gt;array[i]&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;storeq&lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;store to memory &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;splatw3q&lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;duplicates high 16-bits to lower 48 bits &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convsbw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert signed &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convubw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert unsigned &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;splatbw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;duplicates 8 bits to both halfs of 16 bits &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;splatbl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;duplicates 8 bits to all parts of 32 bits &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convswl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert signed &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convuwl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert unsigned &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convslq&lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;signed convert &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convulq&lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;unsigned convert &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convwb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convhwb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;shift and convert &lt;/td&gt;&lt;td&gt;a&gt;&gt;8&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convssswb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert signed to signed with saturation &lt;/td&gt;&lt;td&gt;clamp(a)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convsuswb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert signed to unsigned with saturation &lt;/td&gt;&lt;td&gt;clamp(a)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convuuswb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert unsigned to unsigned with saturation &lt;/td&gt;&lt;td&gt;clamp(a)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convlw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convhlw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;shift and convert &lt;/td&gt;&lt;td&gt;a&gt;&gt;16&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convssslw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert signed to signed with saturation &lt;/td&gt;&lt;td&gt;clamp(a)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convql&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mulsbw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;multiply signed &lt;/td&gt;&lt;td&gt;a * b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mulubw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;multiply unsigned &lt;/td&gt;&lt;td&gt;a * b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mulswl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;multiply signed &lt;/td&gt;&lt;td&gt;a * b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;muluwl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;multiply unsigned &lt;/td&gt;&lt;td&gt;a * b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;accl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;accumulate &lt;/td&gt;&lt;td&gt;+= a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;swapw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;endianness swap &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;swapl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;endianness swap &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select0wb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;select first half &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select1wb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;select second half &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select0lw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;select first half &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select1lw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;select second half &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mergewl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;merge halves &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mergebw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;merge halves &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;splitlw&lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;split first/second words &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;splitwb&lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;split first/second bytes &lt;/td&gt;&lt;td&gt;special&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addf&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;add &lt;/td&gt;&lt;td&gt;a + b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subf&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;subtract &lt;/td&gt;&lt;td&gt;a - b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mulf&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;multiply &lt;/td&gt;&lt;td&gt;a * b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;maxf&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;maximum &lt;/td&gt;&lt;td&gt;max(a,b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;minf&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;minimum &lt;/td&gt;&lt;td&gt;min(a,b)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cmpeqf&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;compare equal &lt;/td&gt;&lt;td&gt;(a == b) ? (~0) : 0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convfl&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert float point to integer &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;convlf&lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;  &lt;/td&gt;&lt;td&gt;convert integer to floating point &lt;/td&gt;&lt;td&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5207876712961553979?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5207876712961553979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5207876712961553979' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5207876712961553979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5207876712961553979'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/12/common-orc-opcodes.html' title='common Orc opcodes'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3318588287352287782</id><published>2010-12-29T04:17:00.003-05:00</published><updated>2010-12-29T22:57:43.597-05:00</updated><title type='text'>stuck, back to PySoy</title><content type='html'>I've been working on a streaming XML parser for Python, but need a break.  At this point there's no way Concordance is getting out Jan 1st, but certainly by the end of Winter.&lt;br /&gt;&lt;br /&gt;Our libsoy migration process &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; got pretty far.  We were migrating from Pyrex to &lt;a href="http://live.gnome.org/Genie"&gt;Genie&lt;/a&gt;, essentially moving the core engine from PyObject to GObject to remove Python dependency in game clients and enable further multicore processing on both client and servers.  Much of the rendering area of the engine has been migrated, but the process has been held up in two areas;&lt;br /&gt;&lt;br /&gt;First, while libsoy is in pretty good shape, we still lack &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; bindings - aka PySoy itself, which is what we intend games to be written and run with.  Our original plan to use GObject Introspection failed in a horrible mess that I've documented in previous postings, we've looked at using SWIG and even building our own bindings generation with little measurable success.  In order to get us moving forward again I'm going to just drop out some .c templates and write the custom wrapper classes by hand.  The time it'd take to write and maintain these cannot possibly be greater than the time we've wasted talking about a more elegant solution that only exists conceptually.&lt;br /&gt;&lt;br /&gt;When GObject Introspection reaches a state of even remote maturity, where it can offer a Pythonic API, we'll look at it again.  We'd even help get it there if the current GIR developers would just document the .gir XML schema or typelib format so we wouldn't have to refer to their source code as the sole definition of these.&lt;br /&gt;&lt;br /&gt;Second is our physics code.  As I've posted, &lt;a href="http://www.ode.org/"&gt;ODE&lt;/a&gt; worked for us in the past but has numerous issues with packaging for various Linux distros (and poor features, slow, and extremely difficult to port to mobile devices).  We attempted to migrate to Bullet but this burned us out - virtually no work has gone into that in the past 6 months.  We're all pretty frustrated with Bullet's haphazard API (whereas ODE is fairly clean) and the C++ only API doesn't play well with GObject (or anything other than c++ for that matter).  Bullet's C API is minimal at best.&lt;br /&gt;&lt;br /&gt;When it comes right down to it, the biggest barrier we face with physics is processing power on mobile devices, an issue that using Bullet would not solve.  Most of the devices we're interested in include ARM6/7 processors from Qualcomm or TI.  Many do not include a FPU (floating point unit), but they all seem to offer a fairly powerful DSP used extensively for processing multimedia.  We do not, however, want to rewrite and maintain our physics processing for each platform.&lt;br /&gt;&lt;br /&gt;A solution I've come up with is to write our physics, greatly simplified from even what ODE offers, using &lt;a href="http://code.entropywave.com/projects/orc/"&gt;Orc&lt;/a&gt;.  It's yet another metalanguage (first Pyrex, then Vala/Genie, now this..), but the successor to liboil (which we and much of the Gnome community use) and already supports many interesting platforms.&lt;br /&gt;&lt;br /&gt;My plan is to first migrate our liboil-based YUV-RGB conversion code to Orc to get my feet wet, then implement a greatly simplified collision system using it, and expect the next release (or two) to still use ODE for at least rigid body physics with the plan to eventually replace even that with our own physics solver.  It should be much faster, and the same Orc code we write now should be able to compile to DSP code for Android handsets and other mobile devices in the future.&lt;br /&gt;&lt;br /&gt;Orc already supports ARM Cortex (NEON), so if we were to finish this work today we'd be able to run PySoy clients on more modern Android handsets without touching DSP code.  DSP support in Orc would also be very useful for future hardware for PySoy game servers.&lt;br /&gt;&lt;br /&gt;While we'd all really like to get the next PySoy release out ASAP, we'd also like to avoid rewriting the engine again down the road.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3318588287352287782?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3318588287352287782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3318588287352287782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3318588287352287782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3318588287352287782'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/12/stuck-back-to-pysoy.html' title='stuck, back to PySoy'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3890822440752448992</id><published>2010-12-08T06:37:00.003-05:00</published><updated>2010-12-08T07:14:30.141-05:00</updated><title type='text'>XML parsing in Python</title><content type='html'>Its been a couple months, so I'm going to give a brief update on what I've been working on.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://concordance-xmpp.org/"&gt;Concordance&lt;/a&gt; is getting close to release, I plan to have the first release (0.1) out January 1st.  More on this toward the end of December.&lt;br /&gt;&lt;br /&gt;One of the roadblocks I've hit (again and again) is the lack of a decent XML parsing package for &lt;a href="http://python.org/"&gt;Python&lt;/a&gt;.  The standard library is a shame when it comes to XML; at least four different modules (expat, sax, dom, etree) to choose from and none of them support even &lt;a href="http://en.wikipedia.org/wiki/XPath"&gt;XPath&lt;/a&gt;.  The most popular option, etree (or &lt;a href="http://effbot.org/zone/element-index.htm"&gt;ElementTree&lt;/a&gt;), cannot even process an XML file with the namespace prefix intact.&lt;br /&gt;&lt;br /&gt;There's &lt;a href="http://codespeak.net/lxml/"&gt;lxml&lt;/a&gt;, which offers an etree-compatible API and fixes many of ElementTree's major faults (namespace prefix preservation, xpath/xslt support) but still cannot handle stream processing and, due to ElementTree's API, does not expose multiple text nodes broken up by a child element such as "&amp;lt;div&amp;gt;first string &amp;lt;br/&amp;gt; second string&amp;lt;/div&amp;gt;".&lt;br /&gt;&lt;br /&gt;To support &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt; streams we need to use expat or sax to handle the stream event-by-event, since the full XML document is only available once the root element closes at the end of the stream, but the direct children of the root element (what we call "stanzas" in XMPP) need to be processed as complete objects.  While we may be able to hack something together using lxml, it would likely be less work than to implement a new XML parsing package.  As long as the resulting API doesn't diverge very greatly etree the work necessary to switch should be minimal.&lt;br /&gt;&lt;br /&gt;Beside this I've been working on a host of different packages around Concordance, from getting a javascript BOSH/XMPP library together to getting distutils2 ready for Python 3.  I've even managed to ship a pitiful little serial library for Python 3, &lt;a href="http://pypi.python.org/pypi/PyTTY"&gt;PyTTY&lt;/a&gt; that we're using to interface with some &lt;a href="http://arduino.cc/"&gt;Arduino&lt;/a&gt;s.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3890822440752448992?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3890822440752448992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3890822440752448992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3890822440752448992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3890822440752448992'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/12/xml-parsing-in-python.html' title='XML parsing in Python'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8654934743871277324</id><published>2010-07-02T15:13:00.003-04:00</published><updated>2010-07-02T15:48:47.055-04:00</updated><title type='text'>Diaspora: the $200k scam on free software</title><content type='html'>After a month of work, its bluntly clear the community &lt;a href="http://www.kickstarter.com/projects/196017994/diaspora-the-personally-controlled-do-it-all-distr"&gt;has been scammed for $200k&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Four NYU students posted a video and solicited funding on the &lt;a href="http://www.kickstarter.com/"&gt;kickstarter&lt;/a&gt; website, promising to build an open source, pro-privacy alternative to Facebook.  The community response was astonishing.  Its too bad the people pledging didn't research these students, for example, checking to see if they have &lt;a href="http://www.ohloh.net/"&gt;Ohloh&lt;/a&gt; pages with their past contributions to other projects.&lt;br /&gt;&lt;br /&gt;The first and most severe, after a month of work, they have posted that they have running code but will not allow the community (including the people who paid for it) to view until its "complete".  This is commonly referred to as the &lt;a href="http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar"&gt;Cathedral model&lt;/a&gt;.  People have invested a great deal of trust in them to develop the code they have promised to, the least they could offer is read only access to their VCS.  Instead they posted a video demonstrating it, which poses the second problem.&lt;br /&gt;&lt;br /&gt;Their claim to use the "latest and greatest in web standards" fell flat on its face in their choice of method to post their video.  Instead of using HTML/5 &amp;lt;video&amp;gt;, which they could have even used Ogg with the &lt;a href="http://www.theora.org/cortado/"&gt;Cortado&lt;/a&gt; java player as fallback for MSIE and Safari, they used a flash player.  Perhaps they don't realize Flash is not a web standard, or that HTML/5 has built-in video support, in either case its a really bad sign.&lt;br /&gt;&lt;br /&gt;The most blunt demonstration of their lack of skill and commitment is in their use of &lt;a href=" http://hacks.mozilla.org/2010/04/websockets-in-firefox/"&gt;websockets&lt;/a&gt;.  At this point, websockets is still in heavy draft state with the few browsers/servers implementing it all running a slightly different, incompatible variants, none of which will be the final draft which is (at least) months off.  Moreso, they propose to implement chat and gaming over their own websockets-based protocol rather than using existing standards such as &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;XMPP is being used by a wide number of social network services already including Google, Livejournal, and Facebook.  Its an established, widely implemented standard recognized by the IETF and the community at large for federated, real-time exchange of chat and presence (status).  Beyond chat, XMPP has support for &lt;a href="http://xmpp.org/extensions/xep-0060.html"&gt;PubSub&lt;/a&gt;, &lt;a href="http://xmpp.org/extensions/xep-0004.html"&gt;Data Forms&lt;/a&gt;, and &lt;a href="http://xmpp.org/extensions/xep-0050.html"&gt;Ad-Hoc Commands&lt;/a&gt;.  There is virtually nothing Facebook, or Diaspora, aims to accomplish that cannot be implemented using these existing standards.&lt;br /&gt;&lt;br /&gt;What these four students are building is lock-in, if they finish at all.  Instead of replacing the walled gardens of Facebook and other proprietary social network sites, they aim to build a network of little sites running the same software, only able to federate with each other, and only able to be extended with their custom APIs.  These sites will not federate with other distributed social network efforts being built such as &lt;a href="http://www.movim.eu/"&gt;movim&lt;/a&gt; and &lt;a href="http://concordance-xmpp.org/"&gt;concordance&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hopefully the community will learn a lesson from this.  Pledge money to experienced developers with demonstratable code, not charismatic students pledging to work on free software only if they're paid to do it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8654934743871277324?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8654934743871277324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8654934743871277324' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8654934743871277324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8654934743871277324'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/07/diaspora-200k-scam-on-free-software.html' title='Diaspora: the $200k scam on free software'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-2647298699918350573</id><published>2010-06-28T00:01:00.002-04:00</published><updated>2010-06-28T00:38:35.987-04:00</updated><title type='text'>Using Android without Google (part 1)</title><content type='html'>As &lt;a href="http://identi.ca/magicfab"&gt;magicfab&lt;/a&gt; on &lt;a href="http://identi.ca/"&gt;identi.ca&lt;/a&gt; &lt;a href="http://identi.ca/conversation/38114077#notice-38455526"&gt;requested&lt;/a&gt;, I'm starting a journal of my experience using &lt;a href="http://www.android.com/"&gt;Android&lt;/a&gt; without Google's proprietary apps.&lt;br /&gt;&lt;br /&gt;I own an &lt;a href="http://www.htc.com/us/products/droid-eris-verizon"&gt;HTC Eris&lt;/a&gt; phone which originally came with Android 1.5.  A few months ago a firmware was released by a 3rd party which allows users to gain root on their phone (about time) and I've been experimenting with this since.  My primary interests were removing HTC's "Sense" UI so I could use a different &lt;a href="http://code.google.com/p/softkeyboard/"&gt;soft keyboard&lt;/a&gt; and removing the backdoors HTC, Verizon, and Google installed in the phone.&lt;br /&gt;&lt;br /&gt;After some &lt;a href="http://arcriley.blogspot.com/2010/05/killer-android-app.html"&gt;disturbing problems&lt;/a&gt; with the VanillaDroid firmware, I switched to CyanogenEris 3.0 last week.  Not only did this new build not come with HTC's Sense, thanks to Google hitting them with a threatening DMCA letter, the firmware came without Google's apps either.  This includes GMail, GTalk, Google Maps and Market.&lt;br /&gt;&lt;br /&gt;Everything works on the firmware except for USB tethering (which is a feature of the firmware).  I started by using the browser to download the &lt;a href="http://code.google.com/p/zxing/"&gt;Barcode Scanner&lt;/a&gt; and then used that to install other apps via QR code:&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/android-wifi-tether/"&gt;wifi tether for root&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/k9mail/"&gt;k9 mail&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/connectbot/"&gt;connectbot (ssh client)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mustard.macno.org/"&gt;mustard (identi.ca client)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The &lt;a href="http://code.google.com/p/foursquared/"&gt;Foursquare app&lt;/a&gt; I was previously using refuses to install (likely because it depends on Google Maps app) and I haven't figured out how to install the dvorak keyboard add-on to &lt;a href="http://code.google.com/p/softkeyboard/"&gt;soft keyboard&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have the standard Android Contacts app, but without Google it does not sync to my Google contacts.  I plan to remove my contacts from Google and write a small app that provides ContactsProvider2 via &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt; in an effort to decentralize and federate contact syncing.&lt;br /&gt;&lt;br /&gt;I found the web version of GMail superior to the old app, though I do miss the Google Maps app (there are various OpenStreetMaps alternatives but they don't have the same features).  The biggest thing I miss is the GTalk app, though its pitiful as far as XMPP clients go and we should be able to do a lot better.&lt;br /&gt;&lt;br /&gt;Most importantly, my phone is now 99% &lt;a href="http://softwarefreedom.org/"&gt;free software&lt;/a&gt; with only a few of HTC's drivers left to be reverse engineered.  Even for an advertising company Google is really stretching the truth when they call Android "open source" - but it should be an attainable goal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-2647298699918350573?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/2647298699918350573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=2647298699918350573' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2647298699918350573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2647298699918350573'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/06/using-android-without-google-part-1.html' title='Using Android without Google (part 1)'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6382779756700393453</id><published>2010-06-27T02:08:00.002-04:00</published><updated>2010-06-27T02:17:34.475-04:00</updated><title type='text'>concordance progress</title><content type='html'>While dredging through framework API design, its sometimes difficult to sense how close you are to finish.  Tonight the &lt;a href="http://concordance-xmpp.org/"&gt;Concordance&lt;/a&gt; "pure Python" redesign reached a critical point - being able to add an extension and respond to an &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt; &amp;lt;iq&amp;gt; stanza:&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; import concordance&lt;br /&gt;&gt;&gt;&gt; import concordance.extensions.ping&lt;br /&gt;&gt;&gt;&gt; s = concordance.Service('host')&lt;br /&gt;&gt;&gt;&gt; s.append(concordance.extensions.ping.Ping)&lt;br /&gt;&gt;&gt;&gt; import xml.etree.ElementTree as et&lt;br /&gt;&gt;&gt;&gt; st = et.fromstring('&amp;lt;iq from="arc@host" id="f00" to="host" type="get"&amp;gt;&amp;lt;ping xmlns="urn:xmpp:ping" /&amp;gt;&amp;lt;/iq&amp;gt;')&lt;br /&gt;&gt;&gt;&gt; s.stream(st)&lt;br /&gt;&amp;lt;iq from="host" id="f00" to="arc@host" type="result" /&amp;gt;&lt;br /&gt;&gt;&gt;&gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That's a correct response to an &lt;a href="http://xmpp.org/extensions/xep-0199.html"&gt;XMPP Ping&lt;/a&gt; request, one of the simplest XMPP extensions.  Many of these basic extensions will be combined into a single extension module and a ready-made Service class, this is just proof that it works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6382779756700393453?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6382779756700393453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6382779756700393453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6382779756700393453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6382779756700393453'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/06/concordance-progress.html' title='concordance progress'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8826218311890811345</id><published>2010-06-16T21:50:00.002-04:00</published><updated>2010-06-16T21:59:27.894-04:00</updated><title type='text'>Concordance stickers ordered</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://media.pysoy.org/img/concordance-xmpp-192.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 192px; height: 192px;" src="http://media.pysoy.org/img/concordance-xmpp-192.png" border="0" alt="Concordance-XMPP Logo" /&gt;&lt;/a&gt;&lt;br /&gt;I just ordered 1000 2" x 2" vinyl laptop stickers with the Concordance logo on white.  They should arrive by the end of the month.  Contributors can send me their mailing address to receive one along with one of the new Python 3 stickers from the PSF.&lt;br /&gt;&lt;br /&gt;New PySoy stickers will be made as soon as we have a new logo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8826218311890811345?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8826218311890811345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8826218311890811345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8826218311890811345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8826218311890811345'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/06/concordance-stickers-ordered.html' title='Concordance stickers ordered'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4793859865571734832</id><published>2010-06-06T04:40:00.002-04:00</published><updated>2010-06-06T04:53:57.031-04:00</updated><title type='text'>Happy 4th Birthday, PySoy</title><content type='html'>On this day, June 6th 2006, the &lt;a href="http://www.pysoy.org/"&gt;PySoy Project&lt;/a&gt; was born.&lt;br /&gt;&lt;br /&gt;We've come a long way from the small homebrew &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/"&gt;Pyrex&lt;/a&gt;-based game engine we started from.  We've built a solid development team, spun off numerous related projects, contributed hundreds of bug reports and patches for libraries and applications, and grown close to the &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;, &lt;a href="http://www.gnome.org/"&gt;Gnome&lt;/a&gt;, and &lt;a href="http://www.xmpp.org/"&gt;XMPP&lt;/a&gt; communities.&lt;br /&gt;&lt;br /&gt;Currently halfway through our most ambitious endeavour yet, moving our codebase to the GObject model and preparing the engine and related projects for cloud gaming, there's a bright future ahead for this tiny project.  While its sometimes frustrating that we're still not to 1.0 release, looking back to what we started from four years ago its clear we've made tremendous progress.&lt;br /&gt;&lt;br /&gt;Here's to another exciting year!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4793859865571734832?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4793859865571734832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4793859865571734832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4793859865571734832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4793859865571734832'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/06/happy-4th-birthday-pysoy.html' title='Happy 4th Birthday, PySoy'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-2090951605597166227</id><published>2010-05-27T03:13:00.002-04:00</published><updated>2010-05-27T03:32:18.166-04:00</updated><title type='text'>A killer Android app</title><content type='html'>I've been running the Vanilladroid firmware for my HTC Eris for a few weeks now.  Beside the phone spontaneously rebooting itself every few hours, its run great, and with built in wifi tethering.&lt;br /&gt;&lt;br /&gt;Tonight it proved potentially fatal for one young man.  While walking home it appeared like I interupted a mugging near &lt;a href="http://hacdc.org/"&gt;HacDC&lt;/a&gt;.  The victim was being kicked by a man who ran away as I got closer.  He was laying sprawled out on the concrete, face right on the sidewalk and shirt ripped off.  I pulled out my phone, hit the icon for Dialer One (which comes with Vanilladroid), dialed 911, dial key, and... nothing.  Dial key again, nothing.  Checked, it says 911 in the number box, but the app isn't dialing it.  I closed the app and tried again, notta.  I can't believe it would refuse to dial 911 so I hard reset the phone and try again, still the dialer just sits there as I press the dial key.&lt;br /&gt;&lt;br /&gt;I finally had to go on the web, look up the number for Dc Police, and have them transfer me to 911.&lt;br /&gt;&lt;br /&gt;I take partial blame for not looking into this app and switching it out sooner.  Hopefully Google removes it before someone dies while trying to call for help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-2090951605597166227?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/2090951605597166227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=2090951605597166227' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2090951605597166227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2090951605597166227'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/05/killer-android-app.html' title='A killer Android app'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5193968098412844336</id><published>2010-05-21T17:39:00.002-04:00</published><updated>2010-05-21T18:03:31.046-04:00</updated><title type='text'>praise for Gnome's GIO</title><content type='html'>We've been (finally) getting &lt;a href="http://concordance-xmpp.org/"&gt;Concordance&lt;/a&gt;'s C code refactored into a standalone &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt; server called &lt;a href="http://gnation.org/"&gt;GNation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Concordance used a good deal of &lt;a href="http://library.gnome.org/devel/glib/2.22/"&gt;GLib&lt;/a&gt; code already, but we've gone a bit further in using the &lt;a href="http://library.gnome.org/devel/gio/2.22/"&gt;GIO&lt;/a&gt; library for managing sockets and connections.  In doing so, we were able to reduce roughly 160 lines of code for opening and monitoring listening sockets into 12 and I suspect further reductions as we continue.  All of the IPv4 vs IPv6 support was cleanly abstracted, adding a socket listener to the MainLoop was done automatically, and the GIO documentation was of the same high quality we've come to expect from GLib.&lt;br /&gt;&lt;br /&gt;Major thanks to the hard work that has gone into this!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5193968098412844336?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5193968098412844336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5193968098412844336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5193968098412844336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5193968098412844336'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/05/praise-for-gnomes-gio.html' title='praise for Gnome&apos;s GIO'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-2156445446496347967</id><published>2010-05-19T15:57:00.005-04:00</published><updated>2010-05-19T16:45:33.640-04:00</updated><title type='text'>How free is Google's VP8 (WebM)?</title><content type='html'>Thank you Google for using your wealth to purchase &lt;a href="http://on2.com/"&gt;On2&lt;/a&gt; corporation and release &lt;a href="http://www.webmproject.org/license/bitstream/"&gt;VP8&lt;/a&gt; to the world.  However, there appears to be one glaring flaw in the patent license you offer which makes it incompatible with free software licensing: it appears to only cover the VP8 bitstream itself, not improvements to it made by the community.&lt;br /&gt;&lt;br /&gt;When On2 previously released VP3.2 to the &lt;a href="http://xiph.org/"&gt;Xiph foundation&lt;/a&gt; and the world, the patent license explicitly included derivatives (improvements) to VP3.2 including &lt;a href="http://theora.org/"&gt;Ogg Theora&lt;/a&gt;.  This was a critical step in transitioning the proprietary VP3.2 codec to the open codec Theora is today.&lt;br /&gt;&lt;br /&gt;On2's "VP" codecs included little extensibility, why should they as On2's revenue stream depended on releasing (and offering a new license for) a new improved codec version every year or two.  You cannot use their VP5 codec to decode VP6, you need to get a VP6 codec for that.  In contrast, Vorbis is ten years old now and is still being improved on.&lt;br /&gt;&lt;br /&gt;The large body of work undertaken primarily by Tim and Ralph at Xiph before Theora 1.0 could be released was extending the bitstream in a losslessly upgradable manner from VP3.2 to include the fields necessary to continually improve Theora over the next decade and beyond.  You can see this by playing a VP3.2 video next to a Theora 1.1 video, and even more so in the &lt;a href="http://people.xiph.org/~xiphmont/demo/theora/demo9.html"&gt;Theora 1.2-beta9&lt;/a&gt; comparisons, and they've barely scratched the surface still.&lt;br /&gt;&lt;br /&gt;For comparison, On2 corporation's patent license for VP3.2 can be found in the &lt;a href="http://svn.xiph.org/trunk/theora/LICENSE"&gt;Theora license file&lt;/a&gt; vs Google's &lt;a href="http://www.webmproject.org/license/bitstream/"&gt;VP8 bitstream license&lt;/a&gt;.  As I'm not a lawyer, I would love to hear &lt;a href="http://softwarefreedom.org/"&gt;SFLC&lt;/a&gt;'s evaluation of this in their next &lt;a href="http://www.softwarefreedom.org/podcast/"&gt;Oggcast&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-2156445446496347967?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/2156445446496347967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=2156445446496347967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2156445446496347967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2156445446496347967'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/05/how-free-is-googles-vp8-webm.html' title='How free is Google&apos;s VP8 (WebM)?'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6750243042869105749</id><published>2010-05-18T05:53:00.002-04:00</published><updated>2010-05-18T06:12:44.558-04:00</updated><title type='text'>stability, always a few versions behind</title><content type='html'>Several of our projects use &lt;a href="http://code.google.com/p/waf"&gt;waf&lt;/a&gt; and &lt;a href="live.gnome.org/Vala"&gt;Vala&lt;/a&gt;, which I normally have nothing but good things to say about, but this is an exception.  At the moment, we're stuck working with outdated versions of both.&lt;br /&gt;&lt;br /&gt;Tonight I tried upgrading from Waf 1.5.10 to 1.5.16 and was unable to get any of our packages to build with it.  As it turns out, it doesn't seem to like glib (maybe the "-" or number in the package name?) and fails to record its cflags and libs to pass to gcc during building.  If 1.5.10 didn't have a few annoying bugs of its own or if we could patch and "compile" 1.5.10 we'd be fine, but even this version we had to use the "binary" (compressed Python script) from their website as we couldn't get a &lt;a href="http://www.python.org/"&gt;Python 3&lt;/a&gt; version to build from source.&lt;br /&gt;&lt;br /&gt;Despite all this, it is very nice to have a small, clean build system that both supports &lt;a href="http://live.gnome.org/Genie"&gt;Genie&lt;/a&gt; and runs on Python 3.  The small workarounds we've had to do are worth the savings in headache and frustration autotools/scons/etc would cause us.&lt;br /&gt;&lt;br /&gt;With Vala, apparently nobody did even a casual check to ensure the &lt;a href="http://live.gnome.org/Genie"&gt;Genie&lt;/a&gt; parser was still working properly before releasing valac 0.8.0 (now up to 0.8.1), and a basic example from the language's frontpage (command line argument parsing) compiles but fails to link.  For now, we're all forced to stick with valac 0.7.10 until &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=618890"&gt;the problem is solved&lt;/a&gt; or someone suggests a workaround.  Its unfortunate a few of our devs run &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; 10.04 which doesn't offer valac 0.7.x as a package.&lt;br /&gt;&lt;br /&gt;Good news is I'm almost finished debugging &lt;code&gt;expat.vapi&lt;/code&gt; (Expat bindings for Vala/Genie) and David is sprinting ahead with xml config file parsing with it.  By this weekend we could have &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt; routing with the new server being branched off from &lt;a href="http://www.concordance-xmpp.org/"&gt;Concordance-XMPP&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6750243042869105749?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6750243042869105749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6750243042869105749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6750243042869105749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6750243042869105749'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/05/stability-always-few-versions-behind.html' title='stability, always a few versions behind'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4563030730571350712</id><published>2010-05-15T03:11:00.003-04:00</published><updated>2010-05-15T03:24:13.059-04:00</updated><title type='text'>dusting off pyogg2</title><content type='html'>I've started work on updating an old CMS I worked on between 2002-2005 that includes a non-linear &lt;a href="http://xiph.org/"&gt;Ogg&lt;/a&gt; editor and Icecast stream queue management.  Part of this is updating the CMS to &lt;a href="http://python.org/"&gt;Python 3&lt;/a&gt;, including pyogg2 which it uses.&lt;br /&gt;&lt;br /&gt;Since I no longer have working ssh keys for committing to &lt;a href="http://svn.xiph.org/trunk/py-ogg2/"&gt;svn.xiph.org&lt;/a&gt;, I copied the pyogg2 repository to &lt;a href="http://hg.concordance-xmpp.org/pyogg2"&gt;hg.concordance-xmpp.org&lt;/a&gt; and resumed the work I left off in 2005.  Pyogg2 was in fairly stable shape but lacked documentation, utilities for working with common codecs, and only had a few examples to learn it with.  I'm already given its build system a major cleanup (now just "setup.py build" like any other Python package) and almost finished the Python 3 PyModule code.&lt;br /&gt;&lt;br /&gt;I have a lot more work to do on this; the CMS needs to be updated for modern web standards (HTML/5), the homebrew MySQL &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;ORM&lt;/a&gt; with &lt;a href="http://www.sqlalchemy.org/"&gt;SQLAlchemy&lt;/a&gt;, and changing from the old CGI &lt;a href="http://apache.org/"&gt;Apache&lt;/a&gt; configuration setup to &lt;a href="http://cherrypy.org/"&gt;CherryPy&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4563030730571350712?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4563030730571350712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4563030730571350712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4563030730571350712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4563030730571350712'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/05/dusting-off-pyogg2.html' title='dusting off pyogg2'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-561043287091629542</id><published>2010-05-12T03:30:00.002-04:00</published><updated>2010-05-12T03:55:38.330-04:00</updated><title type='text'>Leaving the Ubuntu project</title><content type='html'>In response to the recent news that &lt;a href="http://www.canonical.com/"&gt;Canonical&lt;/a&gt; has stated peddling &lt;a href="http://www.mpegla.com/"&gt;MPEG-4&lt;/a&gt; patent licenses to Ubuntu OEMs, I am resigning as member of the &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While I find this latest move completely unethical, I have been previously disturbed by Canonical misusing the Ubuntu trademark with their proprietary &lt;a href="https://one.ubuntu.com/"&gt;Ubuntu One&lt;/a&gt; service, which they have recently added a proprietary music store to for MP3-only downloads fully integrated with Ubuntu's version of &lt;a href="http://projects.gnome.org/rhythmbox/"&gt;Rhythmbox&lt;/a&gt;, and bundling an ever-increasing amount of proprietary drivers with Ubuntu.&lt;br /&gt;&lt;br /&gt;While I find Ubuntu's parent company ethically repugnant and have always detested the developer-unfriendly packaging system Ubuntu (Debian) uses, I still find the Ubuntu community an outstanding model for how the free software community should organize.  I'm certain that if put to a vote, the Ubuntu community would release the Ubuntu One server code as &lt;a href="http://www.gnu.org/licenses/agpl-3.0.html"&gt;AGPLv3&lt;/a&gt; and discontinue unethical business practices conducted in its name, but the only way we can vote against Canonical is &lt;a href="http://en.wikipedia.org/wiki/Foot_voting"&gt;with our feet&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As I serve in a leadership position in a local community team, I'll be upholding my agreement with the Ubuntu Code of Conduct by gracefully stepping down after finding another team member to take my place and migrating any remaining accounts off my @ubuntu.com email address.&lt;br /&gt;&lt;br /&gt;I've started celebrating by getting back into &lt;a href="http://gentoo.org/"&gt;Gentoo&lt;/a&gt; packaging, starting with a &lt;a href="http://cherrypy.org/"&gt;CherryPy&lt;/a&gt; &lt;a href="http://bugs.gentoo.org/show_bug.cgi?id=319037"&gt;ebuild&lt;/a&gt; which supports both &lt;a href="http://python.org/"&gt;Python&lt;/a&gt; 2 and 3.  My final Ubuntu workstation is slated for a Gentoo install this coming weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-561043287091629542?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/561043287091629542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=561043287091629542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/561043287091629542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/561043287091629542'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/05/leaving-ubuntu-project.html' title='Leaving the Ubuntu project'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7703181421622620283</id><published>2010-05-12T02:20:00.004-04:00</published><updated>2010-05-12T03:27:49.240-04:00</updated><title type='text'>server migration complete</title><content type='html'>I have finished migrating all the websites I host from maat (at ServerBeach) to nut (at &lt;a href="http://he.net/"&gt;Hurricane Electric&lt;/a&gt;).  Tonight I finished wiping all the passwords, ssl certs, and other private data from the old server before its shut down tomorrow.&lt;br /&gt;&lt;br /&gt;Maat was an Athlon XP 2200+ server with 1gig ram, 80gig HD, 10meg up/down, 2TB/month transfer, and 1 IPv4 address.  Nut is a Atom 330 (1.6ghz 64-bit dual core) with 2gig ram, 500gig HD, 100meg up/down, unlimited bandwidth, 6 usable IPv4 addresses and a /64 IPv6 subnet - and costs less.&lt;br /&gt;&lt;br /&gt;I shed a tear working through maat's filesystem checking for any remaining files to be copied and finding the original Gentoo stage3 tarball used to install it: &lt;code&gt; /stage3-i686-2007.0.tar&lt;/code&gt;.  Tomorrow ServerBeach will likely disconnect maat and retire it as after 3 years the server is out of maintainability.&lt;br /&gt;&lt;br /&gt;My experience so far with Hurricane Electric is that their remote admin tools are limited to "remote hands" (call a technician 24/7 to reboot a server, type in commands, etc), where ServerBeach offered a really nice web portal for rebooting, accessing a rescue image, etc without having to call anyone.  Of course, those tools haven't been working correctly since December.  The technicians at Hurricane Electric have demonstrated a far higher level of expertise than anyone I've spoken to at ServerBeach.&lt;br /&gt;&lt;br /&gt;Unlimited 100meg bandwidth, IPv6, and 10x bandwidth (HTML/5 Ogg audio/video hosting) is the real seller.  In retrospect, I'm really glad ServerBeach had the FUBAR downtime in December prompting me to look for alternatives, this is a &lt;i&gt;much&lt;/i&gt; better deal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7703181421622620283?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7703181421622620283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7703181421622620283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7703181421622620283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7703181421622620283'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/05/server-migration-complete.html' title='server migration complete'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-1613023220246269856</id><published>2010-02-20T22:46:00.002-05:00</published><updated>2010-02-20T23:03:30.070-05:00</updated><title type='text'>working on gtypes</title><content type='html'>We've been moving forward on the &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; rewrite using &lt;a href="http://live.gnome.org/Genie"&gt;Genie&lt;/a&gt; in faith that a &lt;a href="http://www.python.org/"&gt;Python 3&lt;/a&gt; binding for &lt;a href="http://en.wikipedia.org/wiki/GObject"&gt;GObject&lt;/a&gt; would come about.&lt;br /&gt;&lt;br /&gt;At &lt;a href="http://us.pycon.org/"&gt;PyCon&lt;/a&gt; this weekend I've brainstormed with &lt;a href="http://kirkmcdonald.blogspot.com/"&gt;Kirk McDonald&lt;/a&gt;, author of &lt;a href="http://pyd.dsource.org/"&gt;PyD&lt;/a&gt; which serves a similar role to use &lt;a href="http://digitalmars.com/d/"&gt;D&lt;/a&gt; types/objects in Python, and several other authors of &lt;a href="http://en.wikipedia.org/wiki/Foreign_function_interface"&gt;FFIs&lt;/a&gt; for Python.  A rough strategy is coming together to solve this in a dynamic manner.&lt;br /&gt;&lt;br /&gt;The first part of the solution is &lt;a href="http://live.gnome.org/Vala"&gt;libvala&lt;/a&gt;; using a small part of its functionality to parse .vapi and .gir files for existing GObject libraries such as GTK and Cairo as well as any library written in Vala or Genie.  This gets us the C API for the library in all it's object oriented goodness, and with that we can dynamically generate bindings using Python's ctypes.&lt;br /&gt;&lt;br /&gt;The second part is a GObject type in Python which supports subclassing in Python.  Kirk detailed how this is done in PyD; each generated GObject type gets a subtype with all of its virtual methods all running Python methods which call the superclass's C method by default.  When a Python subclass of a GObject class is made this GObject subclass is used allowing Python to override any of its methods and pass objects of the subclass back to GObject where they'll perform as expected.  Not simple or easy, but its a strategy.&lt;br /&gt;&lt;br /&gt;The end result is dynamic Python 3 bindings for GTK as well as PySoy and all the other tools we work on.&lt;br /&gt;&lt;br /&gt;I'm organizing a sprint for this at PyCon.  If anyone has ideas on this please comment, or if you'd like to help (whether at PyCon 2010 or not) get in touch with me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-1613023220246269856?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/1613023220246269856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=1613023220246269856' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1613023220246269856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1613023220246269856'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/02/working-on-gtypes.html' title='working on gtypes'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5329256361187965070</id><published>2010-01-13T15:00:00.002-05:00</published><updated>2010-01-13T15:27:16.611-05:00</updated><title type='text'>Epson Artisan 810 on Linux (Ubuntu)</title><content type='html'>We purchased a new printer for the house last night to replace the windows-only Dell printer that ran out of ink (and would cost almost as much as a new printer for replacements).&lt;br /&gt;&lt;br /&gt;First, some advice: plan ahead, order online, don't buy from Staples.  We paid $170 for this when Epson is offering them &lt;a href="http://www.epson.com/cgi-bin/Store/consumer/consDetail.jsp?oid=63082419&amp;ref=r03032FbKV&amp;s_kwcid=TC|6812|epson%20artisan||S||4450464972&amp;gclid=CP6iiL2Uop8CFcNM5QodEzQ1Iw"&gt;direct for $130&lt;/a&gt; with free shipping.  If we were not in need of immediate replacement we could have saved $40 and waited a week.  Further, the rep at the store lied when he told us the printer was going to the back to get a unit "fresh off the truck", it was a unit another customer had returned with ink spilled and dried on the inside and some of the packaging torn open.  Buyer beware.  Otherwise, they seemed to clean it up and repackaged it well.  I have half a mind to order the printer online and return this one within 14 days for refund to save the $40.&lt;br /&gt;&lt;br /&gt;The printer itself is fairly impressive.  Two paper trays (letter/legal plus photo/cardstock) and a built-in CD printing tray that slides out when you select CD printing, scanner with auto-document feeder, and built in 10/100 and wifi so we don't need to depend on any computer in the house to properly "share" the printer.  All I had to do is select our access point on the front controls and give it a static IP on our router.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 9.10&lt;/a&gt; detects the printer over the network in seconds and I was printing the Ubuntu test page in under a minute, so more than half the systems in the house were easy.  Windows setup was not hard, but time consuming as loads of bundled software installed from the CD.  The only complaint I have is the color seems a little off; printing the same image in both Linux and Windows shows a fairly radical difference in quality.  The prints from Linux are still much better than printing from Windows to our older printer.&lt;br /&gt;&lt;br /&gt;Next I tried to use the scanner function.  Using &lt;a href="http://gimp.org/"&gt;GIMP&lt;/a&gt; to launch &lt;a href="http://www.sane-project.org/"&gt;SANE&lt;/a&gt; (Scanner Access Now Easy), the printer was automatically detected and let me select either the flatbed or auto-document feeder.  Both options work fine &lt;a href="https://bugs.launchpad.net/ubuntu/+source/sane-backends/+bug/507153"&gt;until I start the scan, at which point the Epson Artisan 810 locks up&lt;/a&gt; and needs to be rebooted.&lt;br /&gt;&lt;br /&gt;There is a scan function from the front panel, not supporting anywhere near the scanner's full resolution and storing in JPEG format with obvious artifacts around text/etc, but at least we don't need to use a Windows system for basic scans until SANE is fixed.  Since I have a stand-alone Epson scanner that works beautifully this isn't a huge issue for me, though it would be great to be able to use the auto-document feeder from Linux and be able to put this older scanner into storage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5329256361187965070?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5329256361187965070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5329256361187965070' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5329256361187965070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5329256361187965070'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/01/epson-artisan-810-on-linux-ubuntu.html' title='Epson Artisan 810 on Linux (Ubuntu)'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7219111041636082268</id><published>2010-01-10T22:09:00.006-05:00</published><updated>2010-01-11T01:00:46.631-05:00</updated><title type='text'>soy.windows.Window rendering, GLEW headache</title><content type='html'>I'm seeing "red" now with our Windows, in more ways than one.  The rendering code for soy.windows.Windows is to the point that, by changing the glClear color, we're seeing red in the window rather than black.  This is a big step forward given that porting to use &lt;a href="http://library.gnome.org/devel/gdk/unstable/"&gt;GDK&lt;/a&gt; is a big part of the libsoy migration.&lt;br /&gt;&lt;br /&gt;On the other side of "red" is anger over GLEW.  I really wish I knew of a decent, mature alternative to &lt;a href="http://glew.sourceforge.net/"&gt;GLEW&lt;/a&gt;.  The project is so immature that, though one of the maintainers is a &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt; developer, they do not provide the pkgconfig file for it.  Without this file, which provides Waf with the location of the library and it's headers, we would have to write a search script to verify that it's installed and find it's location.  None of the major distros I looked at provide the pkgconfig on their own.&lt;br /&gt;&lt;br /&gt;It's also at least partially redundant with the functionality of &lt;a href="http://projects.gnome.org/gtkglext/"&gt;gtkglext&lt;/a&gt; which I believe should be able to replace GLEW entirely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7219111041636082268?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7219111041636082268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7219111041636082268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7219111041636082268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7219111041636082268'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/01/soywindowswindow-rendering-glew.html' title='soy.windows.Window rendering, GLEW headache'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6143470934648720845</id><published>2010-01-08T03:16:00.003-05:00</published><updated>2010-01-08T03:33:05.413-05:00</updated><title type='text'>libsoy running on OSX - briefly</title><content type='html'>For the first time in 3.5 years, we had &lt;a href="http://www.pysoy.org/wiki/Window"&gt;soy.windows.Window&lt;/a&gt; running on OSX.  Just the basics; opening, (re)setting the title, resizing - but it worked.  This is thanks to &lt;a href="http://library.gnome.org/devel/gdk/unstable/"&gt;GDK&lt;/a&gt;, the windowing and event backend to &lt;a href="http://www.gtk.org/"&gt;GTK+&lt;/a&gt;, &lt;a href="http://www.gtk-osx.org/"&gt;running on Mac OSX&lt;/a&gt; via native Quartz backend (not X11).&lt;br /&gt;&lt;br /&gt;Shortly after we moved the window code to a &lt;a href="http://www.pysoy.org/wiki/Threading"&gt;background thread&lt;/a&gt; and it broke.  The code runs fine on GNU/Linux and Windows, but on OSX all we get are white rectangles where the windows would normally be rendered.  The rectangles even resize properly, and window events are getting processed by our code, just nothing rendered inside (not even the window title or buttons).  I &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=606378"&gt;filed this bug&lt;/a&gt; and hope the problem to be solved quickly.&lt;br /&gt;&lt;br /&gt;The problem could be as simple as a missing &lt;a href="http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSGraphicsContext_Class/Reference/Reference.html#//apple_ref/doc/uid/20000336-flushGraphics"&gt;NSGraphicsContext.flushGraphics&lt;/a&gt; call (which is only needed when rendering is done in a non-main thread).  If the bug hasn't been fixed by our next release I'll look into patching this myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6143470934648720845?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6143470934648720845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6143470934648720845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6143470934648720845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6143470934648720845'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/01/libsoy-running-on-osx-briefly.html' title='libsoy running on OSX - briefly'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6466994339826667990</id><published>2010-01-05T17:07:00.003-05:00</published><updated>2010-01-05T17:45:58.094-05:00</updated><title type='text'>language mixing</title><content type='html'>After some work to update our &lt;a href="http://ode.org/"&gt;ODE&lt;/a&gt; bindings for &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt;, we discussed &lt;a href="http://bulletphysics.org/"&gt;Bullet&lt;/a&gt; again last night and returned to the conclusion to drop further work on ODE and focus on Bullet for the next release.&lt;br /&gt;&lt;br /&gt;It quickly became clear that the C bindings for Bullet are utter horse crap; praise for the effort for whoever wrote them, and I by no means intend to disparage your ability or intentions, but they're horribly incomplete and usable for little more than the two demo apps included in the source.  Moreso, the C bindings are "higher level" than the C++ library, performing several steps automatically (such as calculating body inertia from mass and shape) which our &lt;a href="http://www.pysoy.org/"&gt;3d game engine&lt;/a&gt; needs more direct control over.  I first wrote an alternative (ABI compatible) C header for it, and then started to rewrite it entirely.&lt;br /&gt;&lt;br /&gt;I decided that if we're going to write our own Bullet compatibility layer, we may as well go all the way in wrapping it with &lt;a href="http://en.wikipedia.org/wiki/GObject"&gt;GObject&lt;/a&gt;.  The code is simple enough, but defining GObject in C involves &lt;a href="http://library.gnome.org/devel/gobject/stable/howto-gobject.html"&gt;a lot of boilerplate&lt;/a&gt; - in some cases more than the code itself.  To get through this and retain my sanity, I started work this morning on a C++ code generator that takes the relevant functions and wraps them in the standard boilerplate.&lt;br /&gt;&lt;br /&gt;The format I'm using is &lt;a href="http://live.gnome.org/Genie"&gt;Genie&lt;/a&gt;-like for class and method definition, then C++ within dumped directly to the target .cpp.  The code generator will generate the .vapi as it works and compile our wrapper as a static library which &lt;a href="http://hg.pysoy.org/libsoy"&gt;libsoy&lt;/a&gt; can link to directly.&lt;br /&gt;&lt;br /&gt;Kudos again to &lt;a href="http://code.google.com/p/waf/"&gt;Waf&lt;/a&gt; for making this rather eccentric use of their build system dead simple and clean.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6466994339826667990?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6466994339826667990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6466994339826667990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6466994339826667990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6466994339826667990'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/01/language-mixing.html' title='language mixing'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3660226876858635215</id><published>2010-01-04T16:43:00.002-05:00</published><updated>2010-01-04T17:30:15.609-05:00</updated><title type='text'>libsoy building separately now</title><content type='html'>We've been working on the "libsoy" branch of &lt;a hef="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; for some time, a split of the compiled code to a &lt;a href="http://en.wikipedia.org/wiki/GObject"&gt;GObject&lt;/a&gt;-based C library with Python bindings plus the pure Python code constituting PySoy itself.&lt;br /&gt;&lt;br /&gt;Previously we were struggling to build this with &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;'s distutils system, which didn't support building system-wide C libraries nor using valac to do so.  &lt;a href="http://www.ohloh.net/accounts/reportingsjr"&gt;Jon&lt;/a&gt; and I started looking into &lt;a href="http://code.google.com/p/waf/"&gt;Waf&lt;/a&gt; last week.  It's pretty impressive; Python based (and works with Python 3), simple, intuitive, does everything we need with only a few dozen lines of script.  Last night we setup &lt;a href="http://hg.pysoy.org/libsoy"&gt;libsoy in it's own repository&lt;/a&gt; and building (just a very basic soy.windows for now) on it's own.&lt;br /&gt;&lt;br /&gt;I think we're settled to work with &lt;a href="http://live.gnome.org/Genie"&gt;Genie&lt;/a&gt;, a comparison between the syntax of soy.windows &lt;a href="http://hg.pysoy.org/pysoy/file/fc0d72456e59/lib/windows.vala"&gt;in Vala&lt;/a&gt; vs &lt;a href="http://hg.pysoy.org/libsoy/file/363e16cbfca8/src/windows.gs"&gt;in Genie&lt;/a&gt; makes that choice simple.  The only complaint I have with Genie is needing to escape newlines inside struct {}'s (ie, &lt;a href="http://hg.pysoy.org/libsoy/file/363e16cbfca8/src/windows.gs"&gt;line 32-35&lt;/a&gt;), but reportedly this is being fixed in an upcoming release to be more Python-like (ignoring newlines while inside () or {}).&lt;br /&gt;&lt;br /&gt;After a bit of searching (through source code, I wish Waf had better API reference in it's docs) I found the gir= option for Vala building, and another hour later both soy-1.0.gir and soy-1.0.typelib were being generated, except both were empty save the "soy" namespace:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;repository version=&amp;quot;1.0&amp;quot; xmlns=&amp;quot;&lt;a href="http://www.gtk.org/introspection/core/1.0"&gt;http://www.gtk.org/introspection/core/1.0&lt;/a&gt;&amp;quot; xmlns:c=&amp;quot;&lt;a href="http://www.gtk.org/introspection/c/1.0"&gt;http://www.gtk.org/introspection/c/1.0&lt;/a&gt;&amp;quot; xmlns:glib=&amp;quot;&lt;a href="http://www.gtk.org/introspection/glib/1.0"&gt;http://www.gtk.org/introspection/glib/1.0&lt;/a&gt;&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;package name=&amp;quot;soy&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;namespace name=&amp;quot;soy&amp;quot; version=&amp;quot;1.0&amp;quot; c:prefix=&amp;quot;soy&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/namespace&amp;gt;&lt;br /&gt;&amp;lt;/repository&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I've hit this before with trying to generate &lt;a href="http://live.gnome.org/GObjectIntrospection"&gt;GObject Introspection&lt;/a&gt; from distutils but chalked it up to not building it correctly.  As it turns out, this is a known &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=576327"&gt;bug in GIR&lt;/a&gt; and a previously unknown bug in &lt;a href="http://live.gnome.org/Vala"&gt;valac&lt;/a&gt; to fail silently.&lt;br /&gt;&lt;br /&gt;I'm still hoping the GIR developers will come to their senses and support nested namespaces, but given that they've stubbornly rejected this for months already I'm afraid we'll have to build a cross-language bindings builder based on Vala/Genie instead of helping to update &lt;a href="http://live.gnome.org/PyGI"&gt;PyGI&lt;/a&gt; for Python 3.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3660226876858635215?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3660226876858635215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3660226876858635215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3660226876858635215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3660226876858635215'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/01/libsoy-building-separately-now.html' title='libsoy building separately now'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4402517190645634828</id><published>2010-01-02T00:27:00.002-05:00</published><updated>2010-01-02T00:46:23.986-05:00</updated><title type='text'>state of Vala IDEs</title><content type='html'>Wasted quite a few hours today trying to get a &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt;/&lt;a href="http://live.gnome.org/Genie"&gt;Genie&lt;/a&gt; IDE working.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://vtg.googlecode.com/"&gt;VTG&lt;/a&gt; is basically broken, crashing at random.  It had problems before this; having a fairly rigid concept of a "project", not supporting non-autotools build systems or libraries very easily, not supporting Genie, and the symbol mapping having odd quirks, so this is not a huge loss.&lt;br /&gt;&lt;br /&gt;A newer Vala plugin for gEdit, &lt;a href="http://yorba.org/valencia"&gt;Valencia&lt;/a&gt;, looks promising but doesn't support recent Vala versions and attempting to build it raised pages of errors.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://live.gnome.org/Anjuta"&gt;Anjuta&lt;/a&gt; has always looked interesting, but I've never managed to get the &lt;a href="http://abderrahim.arablug.org/blog/"&gt;Anjuta Vala plugin&lt;/a&gt; to compile.  At present, it doesn't appear to work with Gnome 2.28.&lt;br /&gt;&lt;br /&gt;I don't use Eclipse or Mono, so the final option is &lt;a href="http://www.valaide.org/"&gt;Valide&lt;/a&gt;.  To my surprise, it's been packaged for &lt;a href="http://ubuntu.com/"&gt;Ubuntu&lt;/a&gt; and works out of the box.  It supports Genie, it seems to have features on-par with VTG and the other IDEs, and works with the latest version of Vala.&lt;br /&gt;&lt;br /&gt;My only complaint so far is the new project wizard doesn't list the &lt;a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html"&gt;AGPLv3&lt;/a&gt; as a license option, but then none of the Vala IDE options do yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4402517190645634828?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4402517190645634828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4402517190645634828' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4402517190645634828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4402517190645634828'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2010/01/state-of-vala-ides.html' title='state of Vala IDEs'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7652816143110574896</id><published>2009-12-29T15:54:00.000-05:00</published><updated>2009-12-29T15:55:14.726-05:00</updated><title type='text'>Python meme 2009</title><content type='html'>Here’s a short, 5 questions, 2009 Python meme. Copy-paste the questions, and blog your answers !&lt;br /&gt;&lt;br /&gt;1. What’s the coolest Python application, framework or library you have discovered in 2009 ?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sqlalchemy.org/"&gt;SQLAlchemy&lt;/a&gt;, not only does it fully (properly) abstract the SQL database for you, but provides a full &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;Object Relational Mapping&lt;/a&gt;.  What's more, it's Python 3 ready.&lt;br /&gt;&lt;br /&gt;2. What new programming technique did you learn in 2009 ?&lt;br /&gt;&lt;br /&gt;Using &lt;a href="http://live.gnome.org/GObjectIntrospection"&gt;GObject Introspection&lt;/a&gt; to mix several languages (ie, Python and Javascript) in the same application.&lt;br /&gt;&lt;br /&gt;3. What’s the name of the open source project you contributed the most in 2009 ? What did you do ?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://concordance-xmpp.org/"&gt;Concordance XMPP&lt;/a&gt;, an XMPP service framework for Python I started January 1st 2009.  &lt;br /&gt;&lt;br /&gt;4. What was the Python blog or website you read the most in 2009 ?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://planet.python.org/"&gt;Python Planet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. What are the three top things you want to learn in 2010 ?&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.analog.com/en/embedded-processing-dsp/sharc/products/index.html"&gt;SHARC DSPs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Arc_welding"&gt;Welding&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Aikido"&gt;Aikido&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7652816143110574896?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7652816143110574896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7652816143110574896' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7652816143110574896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7652816143110574896'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/12/python-meme-2009.html' title='Python meme 2009'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-607215358281632416</id><published>2009-12-07T13:19:00.003-05:00</published><updated>2009-12-07T13:36:07.925-05:00</updated><title type='text'>peer1/serverbeach severe failure</title><content type='html'>We've seen a greater than average share of service outages at &lt;a href="http://www.serverbeach.com/"&gt;Serverbeach&lt;/a&gt;; incompetent electricians blowing out the battery backup system causing an evening of downtime, network failures taking the server down for hours at a time, other random outages without explanation.&lt;br /&gt;&lt;br /&gt;Of course these outages affect large numbers of customers so you get 500 errors when trying to access the customer portal or put on hold for up to an hour waiting to talk to someone only able to enter a ticket into the system on your behalf.&lt;br /&gt;&lt;br /&gt;This latest outage tops them all, however.  Yesterday afternoon they attempted to merge the &lt;a href="http://peer1.com/"&gt;Peer1&lt;/a&gt; and Serverbeach customer portals which knocked out DNS for a "large number" of customers.  They sent out an email to everyone and I fully expected it to be a short outage.&lt;br /&gt;&lt;br /&gt;Last night at around 8pm all of our domains were still down.  I attempted to log into the customer portal to find my old password not working, and after a lengthy process to recover it I found myself locked out of it unless I agreed to a lengthy new service agreement which I certainly don't have time to read through in the middle of an outage.&lt;br /&gt;&lt;br /&gt;After sitting on hold with customer service a ticket was filed.  Which I replied to, and replied to, and have only received blanket emails asking to reply again if we're still out.  More than 24 hours later we are still down.&lt;br /&gt;&lt;br /&gt;Serverbeach claims they refund customers for outages, but I have yet to receive a dime credited for any past issues and I fully expect them to make getting credit for this difficult as well.  At this point I don't think it's fair to myself or the communities which rely on this server to continue hosting with them.&lt;br /&gt;&lt;br /&gt;I've found a really decent deal with &lt;a href="http://he.com/"&gt;Hurricane Electric&lt;/a&gt; with the added perks of IPV6, more bandwidth, and newer hardware for less than I'm paying now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-607215358281632416?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/607215358281632416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=607215358281632416' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/607215358281632416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/607215358281632416'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/12/peer1serverbeach-severe-failure.html' title='peer1/serverbeach severe failure'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-1870979962198199384</id><published>2009-12-01T04:28:00.002-05:00</published><updated>2009-12-01T04:42:51.737-05:00</updated><title type='text'>Gentoo wins again with Python 3</title><content type='html'>Despite being heavily involved in &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; advocacy and promotion, being a member of the Ubuntu project, and using it on my personal systems, I've had to keep my servers and development machines running &lt;a href="http://gentoo.org/"&gt;Gentoo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;When developing software, we need to work on what will be "mainstream" in 6 to 12 months, not what's already mainstream.  When a new version of our physics library is released, it may depreciate certain methods or include new features we'll really want in our release, but that version won't be packaged until 2-8 months after the new library was released, given the typical release cycles and "feature freeze" stopping new packages from being included too close to release time.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; 3 is a great example of this; &lt;a href="www.gnome.org/"&gt;Gnome 3&lt;/a&gt; will apparently use Python 3 for many applets, and Gnome 3's release schedule sets it for inclusion in Ubuntu 10.10 (next Fall), but at present Python 3.1 is packaged but none of the 3rd party packages are available for it - even those which explicitly support Python 3 already.&lt;br /&gt;&lt;br /&gt;While doing my periodic Gentoo upgrade, I just noticed that Portage, the package system for Gentoo, can now be built to run on Python 3 directly.  When you have both Python 2 and 3 installed on your system, packages wich support both will build and install for both, and their packaged versions are often available just days after release.  From what I've seen, Gentoo is one of the best distributions for Python developers right now.&lt;br /&gt;&lt;br /&gt;I wouldn't recommend that my family run Gentoo, many of whom happily run Ubuntu, but it's lack of support for developers is concerning to me.  I do not believe it should be difficult to both support new Linux users and experienced developers with the same distribution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-1870979962198199384?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/1870979962198199384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=1870979962198199384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1870979962198199384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1870979962198199384'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/12/gentoo-wins-again-with-python-3.html' title='Gentoo wins again with Python 3'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8815005589635926260</id><published>2009-11-30T14:00:00.002-05:00</published><updated>2009-11-30T14:21:14.970-05:00</updated><title type='text'>Dell employee discounts a joke</title><content type='html'>I just learned that the Dell employee discount, which is offered to employees of numerous Dell partners, does not apply to their &lt;a href="http://www.dell.com/ubuntu"&gt;N-series&lt;/a&gt; laptops, even though many people only have this discount because of their work with Ubuntu.&lt;br /&gt;&lt;br /&gt;The irony continues to drip as the models I compared between the employee purchase price and the Ubuntu versions of the same, such as the Inspiron 15 and Inspiron 15n, roughly discounted the added cost of Windows 7 only.  It appears that the employee discount equates to free Windows 7.&lt;br /&gt;&lt;br /&gt;The current Dell Ubuntu offerings lack in many other areas, such as not offering gigabit ethernet or 802.11n as options.  While I would love to support Dell in working with the Ubuntu community more, I really can't justify buying a sub-par laptop at the prices they're offering them at.&lt;br /&gt;&lt;br /&gt;My friend &lt;a href="http://ubuntulinuxtipstricks.blogspot.com/"&gt;Mackenzie&lt;/a&gt; showed off her &lt;a href="http://system76.com/"&gt;System76&lt;/a&gt; laptop at the 9.10 release party a few weeks ago.  All of their laptops include gigabit ethernet, 802.11agn wireless, and many other options Dell doesn't offer.  They're a bit more pricey, but according to Mackenzie their service is significantly better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8815005589635926260?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8815005589635926260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8815005589635926260' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8815005589635926260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8815005589635926260'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/11/dell-employee-discounts-joke.html' title='Dell employee discounts a joke'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8432161361074213244</id><published>2009-11-19T15:22:00.002-05:00</published><updated>2009-11-19T15:41:46.620-05:00</updated><title type='text'>moving to Bullet</title><content type='html'>&lt;a href="http://bulletphysics.org/"&gt;Bullet&lt;/a&gt; has some really great features over &lt;a href="http://ode.org/"&gt;ODE&lt;/a&gt;; soft body physics, particle physics, and hardware acceleration among the top.&lt;br /&gt;&lt;br /&gt;After talking with a &lt;a href="http://crystalspace3d.org/"&gt;Crystal Space&lt;/a&gt; developer about this, I put it on my list of things to look into when &lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt; is a bit more mature.  However, a &lt;a href="http://debian.org/"&gt;Debian&lt;/a&gt; packager's decision has accelerated these plans.&lt;br /&gt;&lt;br /&gt;ODE is not designed to be installed as a single shared library, it has many build-time options which radically change it's behaviour - such as whether the library uses single or double precision, or whether to calculate gyroscopic force.  As a general rule, distributions stick to the defaults when packaging as much as possible, but Debian (and thus &lt;a href="http://ubuntu.com/"&gt;Ubuntu&lt;/a&gt; and other Debian-based distros) ship a single system-wide library with non-default compile flags (Double precision) that would result in sub-par performance, network sync issues, and in some cases bugs in games.&lt;br /&gt;&lt;br /&gt;Debian could have shipped four or eight different versions of the ODE library, such that games could be linked against the one it was designed for and work as expected, or ODE could have been designed to build both a single and double precision library with the other options as runtime flags, but instead we game developers are caught in the middle.&lt;br /&gt;&lt;br /&gt;We fought this battle before with Soya, for some time actually, and in the end Soya had to ship their own version of ODE embedded in the source and statically linked to get around the problem.  Even then it was an issue to get the package including a static ODE included.  It's a battle not worth fighting.&lt;br /&gt;&lt;br /&gt;While Bullet also supports building as double precision, it's an option so rarely used that no distro builds with it (&lt;a href="http://gentoo.org/"&gt;Gentoo&lt;/a&gt; doesn't even have a USE flag to switch it), and given that Bullet is currently not packaged for Debian it'd be easier to add it as a new proper package than fight Debian packages to improve their build of ODE.&lt;br /&gt;&lt;br /&gt;I am not looking forward to working with Bullet's incomplete C-API, likely having to fill in some gaps as we work on it, nor writing the &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt; bindings for Bullet, but it'd be a lot faster and fun - not to mention resulting in new features.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8432161361074213244?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8432161361074213244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8432161361074213244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8432161361074213244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8432161361074213244'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/11/moving-to-bullet.html' title='moving to Bullet'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7473409357017143391</id><published>2009-11-05T16:45:00.002-05:00</published><updated>2009-11-05T16:50:16.400-05:00</updated><title type='text'>beta-3 roadmap updated</title><content type='html'>I updated the &lt;a href="http://www.pysoy.org/milestone/beta3"&gt;Roadmap for 1.0-beta3&lt;/a&gt; today.&lt;br /&gt;&lt;br /&gt;In short, we're dropping ambitions for audio support in this release.  Once our migration to &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt; is complete and the related changes implemented we'll release without further delay.  After that we'll begin work on the newer features like audio, networking, and browser embedding for &lt;a href="http://www.pysoy.org/milestone/beta4"&gt;beta4&lt;/a&gt; while the community tests and gives feedback on beta3.&lt;br /&gt;&lt;br /&gt;There are a lot of new features already compared to the beta2 release.  We're aiming for a beta3 release by January 1st 2010, 2 years from the beta2 release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7473409357017143391?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7473409357017143391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7473409357017143391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7473409357017143391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7473409357017143391'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/11/beta-3-roadmap-updated.html' title='beta-3 roadmap updated'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4168532926777273558</id><published>2009-10-27T13:16:00.003-04:00</published><updated>2009-10-27T13:26:50.828-04:00</updated><title type='text'>Kudos for Mercurial going GPLv2+</title><content type='html'>The largest problem with integrating &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; with our new web framework is being resolved; they are upgrading Mercurial's license to &lt;a href="http://mercurial.selenic.com/wiki/Relicensing"&gt;GPLv2 or later&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Thanks to this, our favoured dVCS will be available for integrating into &lt;a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html"&gt;GPLv3&lt;/a&gt; and &lt;a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html"&gt;AGPLv3&lt;/a&gt; licensed projects without any weird hacks or work-arounds.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4168532926777273558?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4168532926777273558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4168532926777273558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4168532926777273558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4168532926777273558'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/10/kudos-for-mercurial-going-gplv2.html' title='Kudos for Mercurial going GPLv2+'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-2235736427437219154</id><published>2009-06-29T12:05:00.000-04:00</published><updated>2009-06-29T12:13:52.194-04:00</updated><title type='text'>adding full Python support to Vala</title><content type='html'>We've found a way to finish full &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; support for &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt;;  plugin support will be added to valac soon and a &lt;a href="http://docs.python.org/3.1/c-api/object.html"&gt;PyObject&lt;/a&gt; plugin added to our distutils extension for handling Vala and &lt;a href="http://live.gnome.org/Genie"&gt;Genie&lt;/a&gt; extension source files.&lt;br /&gt;&lt;br /&gt;I'll be focusing on this over the next two weeks, with a target on &lt;a href="http://www.python.org/download/releases/3.1/"&gt;Python 3.1&lt;/a&gt;.  We're going with 3.1 as baseline for &lt;a href="http://docs.python.org/3.1/c-api/capsule.html"&gt;PyCapsule&lt;/a&gt;, which will help ensure type safety when passing &lt;a href="http://library.gnome.org/devel/gobject/unstable/"&gt;GType objects&lt;/a&gt; through Python.&lt;br /&gt;&lt;br /&gt;In the meantime work on &lt;a href="http://arcriley.blogspot.com/2009/06/vala-migration-continues.html"&gt;libsoy&lt;/a&gt; can continue by the rest of the team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-2235736427437219154?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/2235736427437219154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=2235736427437219154' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2235736427437219154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2235736427437219154'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/06/adding-full-python-support-to-vala.html' title='adding full Python support to Vala'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7579882828578680479</id><published>2009-06-27T08:56:00.002-04:00</published><updated>2009-06-27T09:05:03.048-04:00</updated><title type='text'>vala support beyond python-3.0.vapi</title><content type='html'>While the &lt;a href="http://live.gnome.org/Vala/ExternalBindings"&gt;vapi&lt;/a&gt; is still a primary need, we also need PyObject and PyTypeObject support in &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt; itself to generate the correct code.&lt;br /&gt;&lt;br /&gt;This will result in both cleaner .vala source and more readable generated .c code, so this time investment will pay off in &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; development in the long run.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7579882828578680479?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7579882828578680479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7579882828578680479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7579882828578680479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7579882828578680479'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/06/vala-support-beyond-python-30vapi.html' title='vala support beyond python-3.0.vapi'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4273291293376656151</id><published>2009-06-24T11:09:00.005-04:00</published><updated>2009-06-24T12:27:39.945-04:00</updated><title type='text'>the sad state of domain registrars</title><content type='html'>My first business, started when I was 17, was an ISP - run out of my bedroom with a Portmaster and &lt;a href="http://www.redhat.com/"&gt;Redhat&lt;/a&gt; servers.  I offered some unused bandwidth for a &lt;a href="http://www.tucows.com/"&gt;Tucows&lt;/a&gt; mirror and was later offered to join their pilot &lt;a href="http://opensrs.com/"&gt;OpenSRS&lt;/a&gt; program.&lt;br /&gt;&lt;br /&gt;Of course, there's many OpenSRS resellers today.  Anyone paying a nominal fee can get setup to sell $10/year domain names purchased as bulk domain credits from OpenSRS.  It's a great service that has really opened up hosting and registration for small businesses.&lt;br /&gt;&lt;br /&gt;When &lt;a href="http://www.pysoy.org/"&gt;pysoy.org&lt;/a&gt; was registered, I went with an OpenSRS reseller called &lt;a href="http://www.ipower.com/"&gt;IPower&lt;/a&gt; who was advertising domain registration at only a small margin above cost.  The first trouble we ran into was, while the credit card was charged and control panel access granted, the registrations didn't actually get done on OpenSRS.  It took 3+ hours on the phone with a tech support rep who finally had to re-create the accounts to get the registrations through their flaky system.&lt;br /&gt;&lt;br /&gt;Their control panel was made of a series of icons, appearing to have been made using Windows Paint, with almost all of them not working because I wasn't getting hosting from them.  After quite awhile of clicking into poorly named icons I found that it would not allow me to update the nameservers, but would allow me to setup custom zone files on their nameservers - with a limited number of subdomains.&lt;br /&gt;&lt;br /&gt;Now I will say, this has been working mostly trouble-free since 2006.  Last year my former partner, who was paying for these domains on his credit card, elected to remove his card from the account and we disabled auto-renewal.  This year their notices for renewal ended up in my spam folder, and they ignored or reset the auto-renew settings, charging his card once again.  He calls them, where they set &lt;i&gt;him&lt;/i&gt; up as the authorized contact (note, his name only appears as the credit card owner which was removed a year prior, he is none of the domain contacts) in the agreement that he chooses not to challenge their illegal charges to his card and they agree to remove his card from the accounts.  In short, it wasn't worth $30 to fight it.&lt;br /&gt;&lt;br /&gt;Now, everything is amicable between us, but their willingness to add someone to my account without contacting me is a bit frightening.  In checking my spam folder this morning I noticed some new emails from them stating that they would now also be charging $8.99 per domain for &lt;b&gt;domain privacy&lt;/b&gt;, which was previously free and which payment was never agreed to, unless I opted-out by &lt;i&gt;tomorrow&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Of course, calling them wouldn't be so easy, after three attempts to contact billing only to get put on hold for ~10 minutes each only to get dead air and a "click".  After speaking to several reps, who all demanded the security code set by my former partner when he called (which I don't have) and over an hour struggling to get their control panel to give me new passwords, I finally get a security code set for one of the reps to speak to me.  His tells me "a specialist" will get back to me about removing domain privacy.&lt;br /&gt;&lt;br /&gt;I am very tired of this, and the truth is this only slightly worse than my experience with most domain registrars.  I'm going to do what I should have done in 2006, near the end of the registration periods of all my domains I'm just going to transfer them to my own OpenSRS reseller account and pay the flat $10/year.&lt;br /&gt;&lt;br /&gt;I'll extend this to any other free software project managers out there, if you're tired of dealing with crap like what I've gone through with IPower, I'll give you at-cost pricing on your domains.  If your site is &lt;a href="http://python.org/"&gt;Python&lt;/a&gt;-powered (&lt;a href="http://wsgi.org/"&gt;WSGI&lt;/a&gt;) I'll throw in hosting for a beer next time you see me.&lt;br /&gt;&lt;br /&gt;My email address is my full name @&lt;a href="http://ubuntu.com/"&gt;ubuntu.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4273291293376656151?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4273291293376656151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4273291293376656151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4273291293376656151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4273291293376656151'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/06/sad-state-of-domain-registrars.html' title='the sad state of domain registrars'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7396024767114747042</id><published>2009-06-15T17:15:00.002-04:00</published><updated>2009-06-15T17:29:32.419-04:00</updated><title type='text'>pysoy.org website upgrades</title><content type='html'>As some have noted, we recently added an ad to &lt;a href="http://www.pysoy.org"&gt;PySoy's website&lt;/a&gt;.  This is actually only one of the many changes to prepare for the beta3 release.&lt;br /&gt;&lt;br /&gt;I'll be putting in a good deal of work over the next few weeks upgrading the website for HTML/5 and &lt;a href="http://www.xmpp.org/"&gt;XMPP&lt;/a&gt;, better separation of functionality to subdomains and standardizing the templates between these subdomains and &lt;a href="http://hg.pysoy.org/"&gt;hg.pysoy.org&lt;/a&gt; and &lt;a href="http://planet.pysoy.org/"&gt;planet.pysoy.org/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Help is, of course, always sought and welcome!  If you're good with CSS or want some experience working with HTML/5 drop me a line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7396024767114747042?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7396024767114747042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7396024767114747042' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7396024767114747042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7396024767114747042'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/06/pysoyorg-website-upgrades.html' title='pysoy.org website upgrades'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8013766164372224992</id><published>2009-06-13T17:23:00.002-04:00</published><updated>2009-06-13T17:36:37.787-04:00</updated><title type='text'>Vala migration continues</title><content type='html'>We're pretty far into the big Vala migration now, enough to talk about where we're going with it.&lt;br /&gt;&lt;br /&gt;The most notable new component is &lt;b&gt;libsoy&lt;/b&gt;, a glib-based library written in Vala that integrates all our dependencies to provide the non-Python functionality of &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This abstraction ensures that all PySoy's background threads remain GIL-free and will be useful for many implementations of "cloud gaming", which I'll go into more detail on later.&lt;br /&gt;&lt;br /&gt;The largest task remaining is python-3.0.vapi, which will allow us to write the Python extension modules for libsoy.  These will not be simple Python bindings which could be provided with &lt;a href="http://live.gnome.org/PyBank"&gt;PyBank&lt;/a&gt; as PySoy includes many complex Python datatypes which the gobject model cannot provide.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8013766164372224992?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8013766164372224992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8013766164372224992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8013766164372224992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8013766164372224992'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/06/vala-migration-continues.html' title='Vala migration continues'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6154902661896852279</id><published>2009-04-21T01:34:00.002-04:00</published><updated>2009-04-21T01:53:24.383-04:00</updated><title type='text'>summer of code students announced</title><content type='html'>It's been a stressful few weeks, but we've selected 30 students to work with the &lt;a href="http://python.org/"&gt;Python Software Foundation&lt;/a&gt; for &lt;a href="http://code.google.com/soc/"&gt;Google's Summer of Code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I don't know what I was thinking in volunteering to be the PSF's admin this year, but I'm happy to have had the opportunity.  I believe we have more students working on core Python projects this year than all previous years and certainly a good start with getting students involved in our community.&lt;br /&gt;&lt;br /&gt;There's a lot more work to be done; getting students setup on the &lt;a href="http://soc.python.org/"&gt;SoC Python planet&lt;/a&gt;, getting all the backup mentors and coordinators organized, making sure students are taking advantage of the community bonding period, etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt; ended up with one student, Jo Yo (aka Lucas Westine) working on &lt;a href="http://socghop.appspot.com/student_project/show/google/gsoc2009/python/t124024626152"&gt;character animation&lt;/a&gt;.  He worked with the &lt;a href="http://www.ogre3d.org/"&gt;Ogre3d&lt;/a&gt; team last year on a &lt;a href="http://code.google.com/soc/2008/ogre/appinfo.html?csaid=A8B4C83C0B55B326"&gt;similar project&lt;/a&gt;.  He's being mentored by Eric Stein (aka Toba) who wrote &lt;a href="http://code.google.com/soc/2007/psf/appinfo.html?csaid=DBE9407AFCF658C4"&gt;PySoy's soy.fields module&lt;/a&gt; as a Summer of Code student in 2007.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6154902661896852279?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6154902661896852279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6154902661896852279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6154902661896852279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6154902661896852279'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/04/summer-of-code-students-announced.html' title='summer of code students announced'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-1908561696541007613</id><published>2009-04-01T21:47:00.003-04:00</published><updated>2009-04-01T22:48:17.915-04:00</updated><title type='text'>Building a better Pyrex - part 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/a/a2/ValaMalDoran.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 272px; height: 407px;" src="http://upload.wikimedia.org/wikipedia/en/a/a2/ValaMalDoran.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt;, the C#'ish language from the &lt;a href="http://www.gnome.org/"&gt;Gnome project&lt;/a&gt; for building &lt;a href="http://en.wikipedia.org/wiki/GObject"&gt;GObject&lt;/a&gt;-based applications, may not seem like the most intuitive choice for building Python extension modules.&lt;br /&gt;&lt;br /&gt;For &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;, she may be our &lt;a href="http://arcriley.blogspot.com/2008/05/building-better-pyrex-part-1.html"&gt;long-sought salvation&lt;/a&gt; from Pyrex.&lt;br /&gt;&lt;br /&gt;First to note, PySoy is based heavily on &lt;a href="http://library.gnome.org/devel/glib/unstable/"&gt;GLib&lt;/a&gt;.  While much of GLib is redundant to types and functions available with Python's c-api, the GLib functions don't require Python's &lt;a href="http://en.wikipedia.org/wiki/Global_Interpreter_Lock"&gt;GIL&lt;/a&gt; to be used.  This is what allows PySoy to take full advantage of multiple cores and run Python code in parallel with rendering and physics processing.&lt;br /&gt;&lt;br /&gt;Second of note, as I wrote in my &lt;a href="http://arcriley.blogspot.com/2009/03/so-long-pyrex.html"&gt;last post&lt;/a&gt;, Pyrex/Cython are not appropriate for PySoy as an overwhelming majority of our code is inside &lt;code&gt;with nogil:&lt;/code&gt;.  Many Pyrex/Cython language features, what makes them easy to work with, are thus unavailable to us.  The language becomes a burden and "GIL minefield" that makes working with it difficult.&lt;br /&gt;&lt;br /&gt;Like Pyrex, Vala "compiles" clean object-oriented code to C, unlike Pyrex we have full and direct access to all datatypes and classes without the GIL.  Like Pyrex, Vala needs pseudo-headers to instruct it how to use C libraries, unlike Pyrex the .vapi files give us an OO API for working with those libraries.&lt;br /&gt;&lt;br /&gt;This was the real deal maker though; Vala is flexible enough to use PyObject and family directly.  Not only do we get GObject access but with python.vapi, full OO access to Python's c-api with automatic incref/decref and easy Python/C type conversion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-1908561696541007613?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/1908561696541007613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=1908561696541007613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1908561696541007613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1908561696541007613'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/04/building-better-pyrex-part-2.html' title='Building a better Pyrex - part 2'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6947328993958066825</id><published>2009-03-21T20:46:00.003-04:00</published><updated>2009-03-21T21:22:02.646-04:00</updated><title type='text'>so long, Pyrex!</title><content type='html'>Almost four years ago &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; started as a fork of a homebrew game engine called Soya3D.  Despite being rewritten four times we were unable to find a suitable replacement for &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/"&gt;Pyrex&lt;/a&gt;, the meta-language Soya3D was written in.&lt;br /&gt;&lt;br /&gt;Pyrex is alright for many purposes, but not for what we were using it for.  &lt;a href="http://cython.org/"&gt;Cython&lt;/a&gt; (a fork of Pyrex) has improved many things but not in the areas we need.  Our "development" has ground into a series of tracking down bugs generated automatically in .c code because we didn't tell Pyrex not to do something, or because Pyrex's author didn't consider a certain use case when he wrote it.&lt;br /&gt;&lt;br /&gt;After almost four years I've found a viable escape plan all thanks glib's &lt;a href="http://library.gnome.org/devel/gobject/unstable/"&gt;GObjects&lt;/a&gt; and &lt;a href="http://www.pygtk.org/docs/pygobject/"&gt;PyGObject&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The challenge that we've always faced is threading in PySoy without using the GIL (Global Interpreter Lock).  90%+ of the code in PySoy is only run in threads which never hold the GIL to ensure each background thread will only ever block on it's own functionality; rendering thread blocks on the GPU, physics thread blocks on rendering a scene, IO thread blocks in poll(), audio thread blocks on the sound card, etc.  We've used glib's AsyncQueue to use Python callbacks from these no-GIL threads without that callback code interrupting what they're doing.&lt;br /&gt;&lt;br /&gt;We used to believe that Pyrex made this all easy since the nogil C code that operated on a Python object could be written in a class-like manner with C attributes accessed like Python class attributes, ie:&lt;pre&gt;&lt;br /&gt;cdef class Foo :&lt;br /&gt;  cdef int alpha&lt;br /&gt;  def __init__(self, value) :&lt;br /&gt;    self.alpha = value&lt;br /&gt;  def __call__(self) :&lt;br /&gt;    return alpha&lt;/pre&gt;&lt;br /&gt;Like Soya3D, Pyrex's simplicity and elegance lures you in and so long as you don't try to, say, build a multithreaded game engine with it, it works great.  Please don't misunderstand me, Pyrex is great for most applications that use it, we just out-grew it years ago and have wasted far too much time trying to make it work.&lt;br /&gt;&lt;br /&gt;GObjects provides an even more elegant solution, write the C code in C, and write the interface code (import soy) in Python using PyGObject.  The C code never includes Python.h and thus can never have any issues with the GIL.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;So here begins our 5th revision of PySoy;&lt;/b&gt; function by function, type by type, extension by extension, refactored into C as GObjects.  It'll take a bit to shift the code over in pieces without breaking everything as we do, but when this is done we can replace all the Pyrex source files with a Python package.&lt;br /&gt;&lt;br /&gt;No custom languages for developers to learn, no more "with nogil:" everywhere, or having to refactor every C header we want to use to a .pxd file, or having to search through the C sources Pyrex generates for bugs.&lt;br /&gt;&lt;br /&gt;so long, Pyrex!  You made PySoy possible, but also caused us all countless hours of extra work and frustration.  In retrospect, I wish we never met you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6947328993958066825?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6947328993958066825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6947328993958066825' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6947328993958066825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6947328993958066825'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/03/so-long-pyrex.html' title='so long, Pyrex!'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-429885524977190973</id><published>2009-03-18T08:56:00.003-04:00</published><updated>2009-03-18T09:33:11.331-04:00</updated><title type='text'>sqlite and postgres support in Python 3 - today</title><content type='html'>I've been working with the &lt;a href="http://www.sqlalchemy.org/"&gt;SQLAlchemy&lt;/a&gt; package in Python 3, their &lt;a href="http://svn.sqlalchemy.org/sqlalchemy/branches/rel_0_6/"&gt;pre-0.6 branch&lt;/a&gt; anyway.&lt;br /&gt;&lt;br /&gt;Currently it offers sqlite (&lt;a href="http://docs.python.org/dev/3.0/library/sqlite3.html"&gt;included with Py3&lt;/a&gt;) and postgres (via &lt;a href="http://pybrary.net/pg8000/"&gt;py8000&lt;/a&gt;) with their &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;Object Relational Mapper&lt;/a&gt; and lower-level SQL Expression Language.&lt;br /&gt;&lt;br /&gt;My needs are covered given that sqlite and postgres are the only two databases I find myself normally using.  Of course there are those who will balk, "but it doesn't support {'MySQL', 'Oracle', 'MSSQL'} yet!".  To the people who need those databases, it's easier to spend a few days helping to port the appropriate dbapi package than wasting energy with complaints.&lt;br /&gt;&lt;br /&gt;For web frameworks, where the multi-db abstraction SQLAlchemy provides is vital, it's available to develop on today (svn checkout, python3 sa2to3.py).  They'll provide a separate -py3 tarball with the 0.6 release planned for after &lt;a href="http://us.pycon.org/2009/about/"&gt;PyCon&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-429885524977190973?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/429885524977190973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=429885524977190973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/429885524977190973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/429885524977190973'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/03/sqlite-and-postgres-support-in-python-3.html' title='sqlite and postgres support in Python 3 - today'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3483622484740253859</id><published>2009-03-08T14:51:00.002-04:00</published><updated>2009-03-08T15:16:44.186-04:00</updated><title type='text'>git vs mercurial</title><content type='html'>In the past we've stuck with &lt;a href="http://svn.pysoy.org/"&gt;subversion for PySoy&lt;/a&gt; over git because about half our team are Windows devs and git has very poor Windows support.  Some of us have been using git-svn to use git locally while not making life difficult for the other half.&lt;br /&gt;&lt;br /&gt;Last night I migrated the &lt;a href="https://www.ohloh.net/p/concordance-xmpp"&gt;Concordance-XMPP project&lt;/a&gt; to &lt;a href="http://hg.pysoy.org/"&gt;mercurial&lt;/a&gt; as a trial.&lt;br /&gt;&lt;br /&gt;First, I have to say that Mercurial's subversion migration tools need work - simple things like author lookup tables (svn username -&gt; Full Name &amp;lt;email&amp;gt;), option to turn off auto-tagging, and a template for modifying commit messages so we can turn off marking the history up with "[rXXX]".&lt;br /&gt;&lt;br /&gt;These things were easy enough given that &lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;Mercurial&lt;/a&gt; is &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;-based.  Two hours later I had a proper migration.&lt;br /&gt;&lt;br /&gt;In contrast with my earlier attempts at migrating to git, mercurial was actually a joy to setup on the server.  WSGI, using our existing .htusers file from Trac, a small config script, done.  This contrast to git which would require some funky SSH sandboxing and/or PAM setup - yes it can be done, but such hacks shouldn't be needed.&lt;br /&gt;&lt;br /&gt;To all our surprise "hg clone" was &lt;i&gt;extremely&lt;/i&gt; fast even compared to subversion and especially in comparison to git.  One development commented that it seemed "instant". Even for the small commit history (2 months, about 130 commits) git could take several minutes to clone and process Concordance's history.&lt;br /&gt;&lt;br /&gt;I'm disappointed to see GPLv2-only on Mercurial as we won't be able to use it directly in any GPLv3 or AGPLv3 projects.  Upward license compatability good, anti-FSF paranoia bad.&lt;br /&gt;&lt;br /&gt;Thankfully hg's protocol is easily derived and can be implemented by other Python software without having to actually import any part of hg.  Hopefully the Mercurial's license situation will be solved at some point to minimize redundant work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3483622484740253859?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3483622484740253859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3483622484740253859' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3483622484740253859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3483622484740253859'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/03/git-vs-mercurial.html' title='git vs mercurial'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4055450627011530140</id><published>2009-01-23T17:46:00.003-05:00</published><updated>2009-01-23T18:12:34.560-05:00</updated><title type='text'>Avahi to be considered harmful</title><content type='html'>Let me paint a picture as it's come into focus for me recently.  Apple develops a protocol called mDNS for &lt;a href="http://en.wikipedia.org/wiki/Zeroconf"&gt;zeroconf&lt;/a&gt; via multicast DNS.  They call it &lt;a href="http://www.apple.com/macosx/technology/bonjour.html"&gt;Bonjour&lt;/a&gt; and are serious enough about making it a standard they release a free software library called mDNSResponder to support it which runs on GNU/Linux, OSX, and Windows.&lt;br /&gt;&lt;br /&gt;A community project, &lt;a href="http://avahi.org"&gt;Avahi&lt;/a&gt;, implements their own mDNS suite for GNU/Linux.  Avahi adds some nice features, such as &lt;a href="http://dbus.freedesktop.org/"&gt;dbus&lt;/a&gt; support.  To help apps use either option they support compatibility with mDNSResponder's API.&lt;br /&gt;&lt;br /&gt;It's great to have this sort of cooperative-competition, but they took this a bit too far by printing a &lt;a href="http://0pointer.de/avahi-compat?s=libdns_sd&amp;e=foo"&gt;nag warning&lt;/a&gt; when their mDNSResponder compatibility API is used by an application and otherwise pressuring mDNS-using apps to drop support for mDNSResponder.&lt;br /&gt;&lt;br /&gt;I sincerely hope Python projects aiming to implement mDNS build against the mDNSResponder API, for cross platform support if nothing else, and encourage their users to avoid using Avahi when questions about this nag page come up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4055450627011530140?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4055450627011530140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4055450627011530140' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4055450627011530140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4055450627011530140'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/01/avahi-to-be-considered-harmful.html' title='Avahi to be considered harmful'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4088894090689177722</id><published>2009-01-10T00:15:00.002-05:00</published><updated>2009-01-10T00:34:22.079-05:00</updated><title type='text'>Concordance register.py</title><content type='html'>&lt;img src="http://planet.pysoy.org/screenshots/xmpp-register.png" width="320" height="325" align="right" alt="Pidgin using examples/register.py"&gt;I have the main Python callback in &lt;a href="https://www.ohloh.net/p/concordance-xmpp"&gt;Concordance&lt;/a&gt; working now to handle &lt;code&gt;&amp;lt;iq/&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;message/&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;presence/&amp;gt;&lt;/code&gt; elements.  Eventually it'll only handle these elements when they're directed to the server, otherwise the server will route the message to it's destination without Python needing to process it first.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;examples/register.py&lt;/code&gt; demonstrates &lt;a href="http://xmpp.org/extensions/xep-0077.html"&gt;user registration&lt;/a&gt; handling using &lt;a href="http://docs.python.org/3.0/library/xml.etree.elementtree.html"&gt;ElementTree&lt;/a&gt; (or at least the start of the process for now).  The result is shown here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4088894090689177722?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4088894090689177722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4088894090689177722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4088894090689177722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4088894090689177722'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/01/concordance-registerpy.html' title='Concordance register.py'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5933020433703165766</id><published>2009-01-07T12:09:00.002-05:00</published><updated>2009-01-07T12:21:41.717-05:00</updated><title type='text'>Concordance lives</title><content type='html'>&lt;a href="https://www.ohloh.net/p/concordance-xmpp"&gt;Concordance-XMPP&lt;/a&gt; now listens and responds to new &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt; connections with basic XML parsing via &lt;a href="http://expat.sourceforge.net/"&gt;expat&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.ohloh.net/accounts/kapace"&gt;David&lt;/a&gt; has been working with me to maintain Windows compatability.  I'm working on &lt;a href="http://www.apps.ietf.org/rfc/rfc2222.html"&gt;SASL&lt;/a&gt; support and the Python callback API.&lt;br /&gt;&lt;br /&gt;With luck the first (very early) release will be ready this weekend which can handle logging in and intra-server routing between users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5933020433703165766?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5933020433703165766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5933020433703165766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5933020433703165766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5933020433703165766'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/01/concordance-lives.html' title='Concordance lives'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4569559173503959261</id><published>2009-01-02T00:36:00.002-05:00</published><updated>2009-01-02T00:39:04.247-05:00</updated><title type='text'>Python 3.0 - first extension module</title><content type='html'>After hours of hunting down docs and debugging my build environment (turns out I had a 3.0-alpha5 lurking around mucking up setup.py)..&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Python 3.0 (r30:67503, Jan  2 2009, 00:20:15) &lt;br /&gt;[GCC 4.3.1] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; import concordance&lt;br /&gt;&gt;&gt;&gt; concordance.__file__&lt;br /&gt;'/usr/lib/python3.0/site-packages/concordance.so'&lt;br /&gt;&gt;&gt;&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4569559173503959261?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4569559173503959261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4569559173503959261' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4569559173503959261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4569559173503959261'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/01/python-30-first-extension-module.html' title='Python 3.0 - first extension module'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-2384582394837466569</id><published>2009-01-01T17:22:00.003-05:00</published><updated>2009-01-01T18:11:31.979-05:00</updated><title type='text'>New Year, New Project</title><content type='html'>The first day of 2009, &lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt;'s copyright notices updated and a few tickets closed, I hit a point where I really need a decent &lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt; server.&lt;br /&gt;&lt;br /&gt;I've started a new project called Concordance, a XMPP/&lt;a href="http://xmpp.org/extensions/xep-0166.html"&gt;Jingle&lt;/a&gt; server written in C (message routing and RTP mixing) and Python 3.0 (authentication, login, MUC handling, etc).&lt;br /&gt;&lt;br /&gt;The goal is a framework giving Python full control over the server, for nearly unlimited configurability, while having the speed to serve a large user base with a minimal of CPU use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-2384582394837466569?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/2384582394837466569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=2384582394837466569' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2384582394837466569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2384582394837466569'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2009/01/new-year-new-project.html' title='New Year, New Project'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7788340962178621954</id><published>2008-12-30T18:25:00.002-05:00</published><updated>2008-12-30T18:29:53.921-05:00</updated><title type='text'>great cheese frustration</title><content type='html'>I overall like Gnome, but the guys working on &lt;a href="http://projects.gnome.org/cheese/"&gt;Cheese&lt;/a&gt; appear to be making some horrible design choices.&lt;br /&gt;&lt;br /&gt;Such as, they've removed any possible way to set the video input device, either via &lt;a href="http://gstreamer.freedesktop.org/"&gt;gstreamer&lt;/a&gt;'s properties, or command line, or within the cheese app itself.&lt;br /&gt;&lt;br /&gt;Now I'm hunting for another app that does video capture from a video4linux device, or possibly writing one using &lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7788340962178621954?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7788340962178621954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7788340962178621954' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7788340962178621954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7788340962178621954'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/12/great-cheese-frustration.html' title='great cheese frustration'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4957634449723960321</id><published>2008-09-13T11:03:00.002-04:00</published><updated>2008-09-13T11:08:29.357-04:00</updated><title type='text'>Beta3, new features on Ohloh</title><content type='html'>So we're trying to get Beta3 out the door.  No date yet, there's still a lot of cleanup work to do.&lt;br /&gt;&lt;br /&gt;For smaller updates, &lt;a href="http://www.ohloh.net/"&gt;Ohloh&lt;/a&gt; has a new "Journal" feature that resembles Twitter.  What's really cool is once you associate your XMPP id with your Ohloh account you can use XMPP (via your normal IM client) to post to your journal.&lt;br /&gt;&lt;br /&gt;Check &lt;a href="http://www.ohloh.net/projects/pysoy/messages"&gt;PySoy's journal&lt;/a&gt; for smaller, more frequent updates on what we're doing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4957634449723960321?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4957634449723960321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4957634449723960321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4957634449723960321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4957634449723960321'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/09/beta3-new-features-on-ohloh.html' title='Beta3, new features on Ohloh'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-14198627049200436</id><published>2008-05-22T14:19:00.002-04:00</published><updated>2008-05-22T14:30:34.581-04:00</updated><title type='text'>bike accident</title><content type='html'>I got side-swiped by a car Tuesday.  Only injuries are some scraped skin and sprained wrist (I'm either really lucky or all too experienced in surviving bike accidents), but the latter has dramatically slowed by dev pace due to having to type with only one hand.&lt;br /&gt;&lt;br /&gt;The sprain is mending well and i should be able to do light stuff (like typing) with it this weekend, provided I keep it immobile.&lt;br /&gt;&lt;br /&gt;In other news, bump mapping is working again, but our &lt;code&gt;&lt;a href="http://www.pysoy.org/browser/trunk/pysoy/examples/blocks.py"&gt;blocks.py&lt;/a&gt;&lt;/code&gt; lacks proper normals, texcoords, and tangents.  If anyone is willing to spend an hour or two working out the calcs for these please get in touch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-14198627049200436?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/14198627049200436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=14198627049200436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/14198627049200436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/14198627049200436'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/bike-accident.html' title='bike accident'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5827685786329047382</id><published>2008-05-20T03:35:00.003-04:00</published><updated>2008-05-20T03:49:06.256-04:00</updated><title type='text'>hacking at 3am, seeing rainbows</title><content type='html'>&lt;img src="http://planet.pysoy.org/screenshots/texblocks-3am.png" width="328" height="271" alt="screenshot" align="right" /&gt;&lt;br /&gt;There are some real advantages to hacking into the wee hours of the morning, this gem of a screenshot is one of the best of late.&lt;br /&gt;&lt;br /&gt;Thing is, I'm sitting here after refactoring several hundred lines of code and fixing &lt;a href="http://www.pysoy.org/changeset/1285"&gt;two typos&lt;/a&gt; that was causing our normalisation cubemaps to be bugged, staring at this window, and unable to understand &lt;i&gt;why&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The rainbow effect is obviously from the &lt;a href="http://paulsprojects.net/tutorials/simplebump/simplebump.html"&gt;normalisation cubemap&lt;/a&gt;, a data construct that maps tangent-space bumpmaps to object-space on the video card (without shaders).  I just can't determine at this late hour why it's showing up instead of rendering the bumpmap as it used to.&lt;br /&gt;&lt;br /&gt;I'm sure it'll make much more sense after 8 hours sleep.  In the meantime, enjoy the screenshot, or compile &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; from subversion and run &lt;code&gt;TexBlocks.py&lt;/code&gt; yourself!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5827685786329047382?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5827685786329047382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5827685786329047382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5827685786329047382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5827685786329047382'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/hacking-at-3am-seeing-rainbows.html' title='hacking at 3am, seeing rainbows'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7131798686823370587</id><published>2008-05-17T02:26:00.002-04:00</published><updated>2008-05-17T02:45:56.160-04:00</updated><title type='text'>Mesh code refactoring</title><content type='html'>I spent most of the day fixing, shifting, folding, documenting, and otherwise refactoring &lt;a href="http://www.pysoy.org/browser/trunk/pysoy/src/models/Mesh.pym"&gt;soy.models.Mesh&lt;/a&gt; and it's related datatypes and atoms.  I'll likely spend most of tomorrow finishing this up.&lt;br /&gt;&lt;br /&gt;In short, the render process we used was crude, lacked some really easy features, looped through 6 different classes for each Mesh (Mesh, MaterialList, Material, Texture, FaceList, VertexList) and had data management code in these plus the two related atom classes (Face and Vertex).&lt;br /&gt;&lt;br /&gt;In short, not only was the code difficult to grok (even for me and I wrote much of it) but was slower that need be and increasingly difficult to expand.  &lt;a href="http://www.pysoy.org/"&gt;Game engines&lt;/a&gt; need both rendering speed (fps) and easy expandability, so this is a high priority ticket.&lt;br /&gt;&lt;br /&gt;The new structure moves all of the actual Mesh data into the Mesh objects themselves; MaterialList is gone (to be replaced by MaterialDict later), FaceList and VertexList will now only store a reference to their parent Mesh to draw data from.&lt;br /&gt;&lt;br /&gt;I'm going to be centralizing data management functions in Mesh as well, so the atoms can be much simpler and we can actually talk about optimizing the VBO layout.  We'll also be doing dynamic passes, based on how many textures/pass a &lt;a href="http://www.opengl.org/"&gt;GL&lt;/a&gt; implementation supports, and supporting more textures targets (ie, specularity, emissive)&lt;br /&gt;&lt;br /&gt;Again, sprint via IRC this weekend complete with remote peer programming via Gobby.  Join us in &lt;b&gt;#PySoy&lt;/b&gt; on &lt;b&gt;irc.freenode.net&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7131798686823370587?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7131798686823370587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7131798686823370587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7131798686823370587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7131798686823370587'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/mesh-code-refactoring.html' title='Mesh code refactoring'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3787218090761997158</id><published>2008-05-17T00:39:00.002-04:00</published><updated>2008-05-17T00:46:46.051-04:00</updated><title type='text'>why can't XMPP keep their website up?</title><content type='html'>Several times this month I've found &lt;a href="http://www.xmpp.org/"&gt;www.xmpp.org/&lt;/a&gt;, the organization responsible for the Jabber protocol and it's many extensions, non-responsive.  Their site has been down for at least 7 hours tonight, the longest yet (to my knowledge).&lt;br /&gt;&lt;br /&gt;For our purposes I'll be mirroring their XEP's on &lt;a href="http://www.pysoy.org/"&gt;pysoy.org&lt;/a&gt; as soon as they're back up.  It's seriously frustrating to be working on this when the documents you need are often unavailable.&lt;br /&gt;&lt;br /&gt;If anyone knows of an existing mirror we could use, please reply to this posting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3787218090761997158?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3787218090761997158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3787218090761997158' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3787218090761997158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3787218090761997158'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/why-cant-xmpp-keep-their-website-up.html' title='why can&apos;t XMPP keep their website up?'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3590447742642234516</id><published>2008-05-16T02:07:00.003-04:00</published><updated>2008-05-16T02:42:58.535-04:00</updated><title type='text'>some real progress toward beta-3</title><content type='html'>With &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/"&gt;Pyrex&lt;/a&gt; 0.9.8 released yesterday, including a number of key changes we needed to move forward, we're back in action for &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; belated Beta-3 release.&lt;br /&gt;&lt;br /&gt;The new &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/Manual/sharing.html#CircularCImports"&gt;forward declarations&lt;/a&gt; are a bit kludgy (&lt;a href="http://www.pysoy.org/browser/trunk/pysoy/include/soy.bodies.pxd#L24"&gt;example&lt;/a&gt;), and I don't think it'll be very maintainable in the long term.  I think changing a class's inheritance should require editing &lt;b&gt;one&lt;/b&gt; file, not two (the .pxd) &lt;i&gt;or more&lt;/i&gt; (every .pxd that uses it).&lt;br /&gt;&lt;br /&gt;It works for now, until we can wipe out the entire &lt;a href="http://www.pysoy.org/browser/trunk/pysoy/include/"&gt;&lt;code&gt;include/&lt;/code&gt;&lt;/a&gt; directory, and to be fair it's only so cumbersome due to &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;'s size and how the classes are interconnected.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/Manual/external.html#Acquiring_and_Releasing_the_GIL"&gt;nogil&lt;/a&gt; allowance for cdef methods is a massive step toward stomping out the multicore race conditions.  One of the developers testing just the fixes to &lt;code&gt;&lt;a href="http://www.pysoy.org/browser/trunk/pysoy/src/bodies"&gt;soy.bodies&lt;/a&gt;&lt;/code&gt; noticed the examples often running longer than before, though there's a lot more cleanup to be done before this is package-wide.&lt;br /&gt;&lt;br /&gt;One of the roadblocks I hit is the nogil fix can't be used with our &lt;a href="http://www.pysoy.org/browser/trunk/pysoy/src/_internals/Children.pym"&gt;&lt;code&gt;Children&lt;/code&gt; class&lt;/a&gt;, which stores pointers to Python objects of the same type and &lt;a href="http://www.pysoy.org/browser/trunk/pysoy/src/scenes/Scene.pym#L147"&gt;uses those pointers&lt;/a&gt; (through a typecast) to access their cdef methods in a &lt;code&gt;for&lt;/code&gt; loop.&lt;br /&gt;&lt;br /&gt;While our usage is GIL-safe, the current version of Pyrex still wants to throw in an &lt;code&gt;INCREF&lt;/code&gt; just to be extra-cautious, which makes it not.  I've let Greg know about this, we'll see if it can't be fixed soon.&lt;br /&gt;&lt;br /&gt;In the meantime, I've called for an IRC sprint this weekend for the pending cleanup, refactoring, documentation, and testing that needs doing before beta-3.  Join &lt;code&gt;&lt;b&gt;#PySoy&lt;/b&gt;&lt;/code&gt; on &lt;code&gt;irc.&lt;a href="http://www.freenode.net/"&gt;freenode.net&lt;/a&gt;&lt;/code&gt; if you want to pitch-in!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3590447742642234516?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3590447742642234516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3590447742642234516' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3590447742642234516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3590447742642234516'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/some-real-progress-toward-beta-3.html' title='some real progress toward beta-3'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-1015802921656347344</id><published>2008-05-13T23:30:00.004-04:00</published><updated>2008-05-14T00:46:05.158-04:00</updated><title type='text'>Building a better Pyrex - part 1</title><content type='html'>With our recent decision to drop the &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/"&gt;Pyrex&lt;/a&gt; codebase and start from scratch, we find ourselves repeating a process from 2 years ago;&lt;br /&gt;&lt;br /&gt;When &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; first forked off of Soya, we had a small list of things that needed to be fixed based on our negative experiences working with that project.  The API needed to be cleaned up, pydocs added, Shape needed to be mutable and implemented with vertex arrays or VBOs rather than display lists, etc.&lt;br /&gt;&lt;br /&gt;As we worked on it, that list grew longer, including rewriting large parts of the codebase, until we found ourselves at a point where starting over would be more expedient.  Of course now there's little doubt that was a good move, learning from both Soya's mistakes and our own failed early attempts we now have a pretty rocking architecture.&lt;br /&gt;&lt;br /&gt;The first and most foundational change we're making from Pyrex, as previously stated, is in the lexical scanner and parser.  Both Pyrex and &lt;a href="http://www.cython.org/"&gt;Cython&lt;/a&gt; are based on &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Plex"&gt;Plex&lt;/a&gt;, which was Greg's answer to processing a Python-like language.  &lt;br /&gt;&lt;br /&gt;In contrast, we'll be using &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;'s own &lt;code&gt;&lt;a href="http://docs.python.org/dev/3.0/library/tokenize.html"&gt;tokenize&lt;/a&gt;&lt;/code&gt; module for our lexical scanner and an &lt;a href="http://asdl.sourceforge.net/"&gt;ASDL&lt;/a&gt;-based parser akin to the &lt;a href="http://www.python.org/dev/peps/pep-0339/"&gt;parser used in Python 3.0&lt;/a&gt;.  We're extending &lt;a href="http://svn.python.org/projects/python/branches/py3k/Parser/Python.asdl"&gt;&lt;code&gt;Python.asdl&lt;/code&gt;&lt;/a&gt; with &lt;code&gt;cdef&lt;/code&gt;, &lt;code&gt;ctypedef&lt;/code&gt;, &lt;code&gt;cimport&lt;/code&gt;, &lt;code&gt;cinclude&lt;/code&gt;, etc.&lt;br /&gt;&lt;br /&gt;This way we have less code to debug and a solid foundation to start with.  With lexing and parsing almost "for free" we'll be able to focus on the important bits and get the platform able to support the kind of features we need quickly.&lt;br /&gt;&lt;br /&gt;We've also reached a rough consensus on the following syntax changes from Pyrex:&lt;ul&gt;&lt;li&gt;unicode, generators, decorators, etc &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/Manual/Limitations.html"&gt;will be supported&lt;/a&gt;&lt;/li&gt;&lt;li&gt;all custom &lt;code&gt;for&lt;/code&gt; syntaxes dropped in favor of Python's standard&lt;/li&gt;&lt;li&gt;&lt;code&gt;&lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/Manual/external.html#Acquiring_and_Releasing_the_GIL"&gt;with nogil:&lt;/a&gt;&lt;/code&gt; replaced with full &lt;code&gt;&lt;a href="http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-with-statement"&gt;with&lt;/a&gt;&lt;/code&gt; support&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/Manual/special_methods.html"&gt;special methods&lt;/a&gt; will always have &lt;code&gt;self&lt;/code&gt; as first argument (ie, both __sub__ and __rsub__ used)&lt;/li&gt;&lt;li&gt;&lt;code&gt;cinclude&lt;/code&gt; added for direct C header parsing&lt;/ul&gt;&lt;br /&gt;There's more to come, which I'll post in additional installments as work progresses on this project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-1015802921656347344?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/1015802921656347344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=1015802921656347344' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1015802921656347344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1015802921656347344'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/building-better-pyrex-part-1.html' title='Building a better Pyrex - part 1'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4451164897378968758</id><published>2008-05-13T23:22:00.002-04:00</published><updated>2008-05-13T23:29:55.522-04:00</updated><title type='text'>setup-pyrex.py works with 0.9.7.2</title><content type='html'>&lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing"&gt;Greg&lt;/a&gt; fixed the latest bug that caused &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; to raise a dict assignment error on import with 0.9.7.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/"&gt;Pyrex&lt;/a&gt; 0.9.7.2 was released a few hours ago with this fix, and I've updated &lt;code&gt;setup-pyrex.py&lt;/code&gt; to work with either 0.9.6.4 or &gt;=0.9.7.2.&lt;br /&gt;&lt;br /&gt;Beta-3 is still blocked by the multicore race condition caused by redundant incref/decref calls on Python arguments to class methods in this latest version of Pyrex.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4451164897378968758?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4451164897378968758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4451164897378968758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4451164897378968758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4451164897378968758'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/setup-pyrexpy-works-with-0972.html' title='setup-pyrex.py works with 0.9.7.2'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6892189467804432229</id><published>2008-05-12T16:16:00.002-04:00</published><updated>2008-05-12T16:27:10.549-04:00</updated><title type='text'>setup-pyrex.py now requires EXACTLY Pyrex 0.9.6.4</title><content type='html'>&lt;pre&gt;&lt;br /&gt;16:02 &lt; maacl&gt; import soy&lt;br /&gt;16:02 &lt; maacl&gt; File "LoopThread.pym", line 51, in &lt;br /&gt;               soy._internals.LoopThread.__cinit__&lt;br /&gt;16:02 &lt; maacl&gt; TypeError: 'dict' object does not support item assignment&lt;br /&gt;16:03 &lt; Arc&gt;     from threading import _active, _active_limbo_lock&lt;br /&gt;16:03 &lt; Arc&gt;     self._active = _active&lt;br /&gt;16:03 &lt; Arc&gt; [...] and line 51:&lt;br /&gt;16:03 &lt; Arc&gt;     self._active[self._threadID] = self&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I'm not going to even look into this further.  Pyrex 0.9.7, for a reason I'm not going to even contemplate, raises an error about dict item assignment on the last line.  None of us use it due to it's barfing of depreciated lines for all our &lt;code&gt;for&lt;/code&gt; statements, but this brave tested did and reported the problem today.&lt;br /&gt;&lt;br /&gt;I just committed an update to &lt;code&gt;setup-pyrex.py&lt;/code&gt; that fails when any Pyrex version besides 0.9.6.4 is used.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6892189467804432229?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6892189467804432229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6892189467804432229' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6892189467804432229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6892189467804432229'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/setup-pyrexpy-now-requires-exactly.html' title='setup-pyrex.py now requires EXACTLY Pyrex 0.9.6.4'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6539319503090788255</id><published>2008-05-11T11:59:00.002-04:00</published><updated>2008-05-11T12:15:03.071-04:00</updated><title type='text'>subversion vs git</title><content type='html'>I stayed up late last night working to install a shared git repository for the Pyrex replacement project.  First of all, copious thanks to &lt;code&gt;johnw&lt;/code&gt; and &lt;code&gt;Ilari&lt;/code&gt; on &lt;code&gt;#git&lt;/code&gt; for their help on this.&lt;br /&gt;&lt;br /&gt;I'm very much an enthusiast of &lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;, it's an excellent engine for project websites and has all the essential tools, builtin and via &lt;a href="http://trac-hacks.org/"&gt;plugins&lt;/a&gt;, that any project should need.  Ok, so there's a few things a project could need that isn't already written, but new plugins are easy enough (it's all Python, after all).&lt;br /&gt;&lt;br /&gt;As such, I like to leave user administration to Trac, and it maintains a .htusers and .access file local to each project for that purpose.  Likewise, for SVN, we use WebDAV on Apache, whereas the ssh+svn method would require adding those users to the local system or PAM hacking.&lt;br /&gt;&lt;br /&gt;Thus, the most direct path would seem to install GIT via WebDAV and run it from there.  As &lt;code&gt;Ilari&lt;/code&gt; pointed out, GIT's DAV has many problems over SVN, from lockups to a failed push sometimes corrupting the shared repository.  I tried anyway, with hours of help from &lt;code&gt;joshw&lt;/code&gt;, and at 5am I had to throw in the towel.  I'm sure it's possible, but not with my current lack of GIT knowledge.&lt;br /&gt;&lt;br /&gt;The other available solutions could work, but first I'd want to write some new Trac plugins for accepting developer ssh keys and using these on the backend to govern access or figure out the PAM configuration for .htusers to have restricted SSH access for GIT pushes.&lt;br /&gt;&lt;br /&gt;There are certainly advantages to GIT, but server setup difficulty and added complications for Windows developers leads me to sticking with subversion servers with &lt;code&gt;git-svn&lt;/code&gt; client-side for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6539319503090788255?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6539319503090788255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6539319503090788255' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6539319503090788255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6539319503090788255'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/subversion-vs-git.html' title='subversion vs git'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4781389813960477177</id><published>2008-05-10T19:28:00.002-04:00</published><updated>2008-05-10T19:53:24.519-04:00</updated><title type='text'>a radical redirection</title><content type='html'>We've been at a deadlock for a few weeks now, our previous coding pace has turned into a lot of contemplation and side discussions about the greater issues with the &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; codebase.&lt;br /&gt;&lt;br /&gt;I think we have a roadmap forward, or enough of one to post these in a blog entry:&lt;br /&gt;&lt;br /&gt;First, PySoy 1.0 will not be released until after &lt;a href="http://docs.python.org/dev/3.0/"&gt;Python 3.0&lt;/a&gt; this Fall, and it would be pointless to continue developing with 2.x in target.  Python 3.0 also has a large number of useful changes for our project.  Our target platform should therefore be 3.0 (and it's alpha/beta's for now).&lt;br /&gt;&lt;br /&gt;Second, with the release of &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/"&gt;Pyrex&lt;/a&gt; 0.9.7 Greg has, once again, introduced a major language change (the "for" statement) without even soliciting input from the community.  This has sealed the deal for us, even if our immediate issues are fixed we cannot continue to subject ourselves to a language that changes in incompatible ways between 2 &lt;i&gt;micro&lt;/i&gt; versions (0.9.6 -&gt; 0.9.8, when the old syntax will not be supported).&lt;br /&gt;&lt;br /&gt;We earlier started a &lt;a href="http://www.cython.org/"&gt;Cython&lt;/a&gt; variant to support PySoy's codebase, but given recent developments in their community, the timelines of our projects, and their choice to stick with Python 2.x for now, we're moving forward on a Pyrex replacement written from scratch and targeting Python 3.0.&lt;br /&gt;&lt;br /&gt;We're going to use a similar language style to Pyrex, &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/"&gt;Greg&lt;/a&gt; certainly had some good ideas, and will keep language porting in mind, but there will be changes.  We will also not be using any of his code including his Plex module, Pyrex and Cython's lexical analyzer which is the core of those packages.&lt;br /&gt;&lt;br /&gt;PySoy Beta3, earlier aimed for release in "early Spring", has been indefinably postponed as we work on that.  The subversion repository is of course open, and development can and will continue, but we cannot release until the new build system is complete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4781389813960477177?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4781389813960477177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4781389813960477177' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4781389813960477177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4781389813960477177'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/radical-redirection.html' title='a radical redirection'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6765585037105820765</id><published>2008-05-02T13:26:00.002-04:00</published><updated>2008-05-02T13:46:48.360-04:00</updated><title type='text'>initial impressions of Trac 0.11</title><content type='html'>&lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt; 0.11rc1 was released this week, marking a feature freeze for 0.11.&lt;br /&gt;&lt;br /&gt;One of the major improvements over 0.10.4 is the &lt;a href="http://genshi.edgewall.org/"&gt;Genshi&lt;/a&gt; template system allowing complete control over a site's HTML.  For example, you can copy the default &lt;code&gt;layout.html&lt;/code&gt; to your site's &lt;code&gt;templates/&lt;/code&gt; directory to remove the obnoxious "Trac" string at the end of every page's title and the other &lt;a href="http://www.edgewall.org/"&gt;Edgewall&lt;/a&gt; advertising splayed all over a default Trac site.&lt;br /&gt;&lt;br /&gt;Of course, this is also means a Trac site can be radically redesigned in structure without editing the source code.  Hopefully this leads to a greater diversity in project site design.&lt;br /&gt;&lt;br /&gt;Another major feature is ticket workflows are now customizable, allowing projects using Trac to decide how their tickets will be processed.  For example, a "testing" state could be added to signify a ticket as "though to be complete, but waiting for verification".&lt;br /&gt;&lt;br /&gt;I plan on upgrading &lt;a href="http://www.pysoy.org/"&gt;pysoy.org&lt;/a&gt; this weekend along with a few new Trac plugins and a minor site redesign.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6765585037105820765?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6765585037105820765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6765585037105820765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6765585037105820765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6765585037105820765'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/05/initial-impressions-of-trac-011.html' title='initial impressions of Trac 0.11'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-59390343959182115</id><published>2008-04-02T02:01:00.002-04:00</published><updated>2008-04-02T02:14:05.866-04:00</updated><title type='text'>some race conditions found</title><content type='html'>Well after many weeks we found the source of the race conditions on multicore CPUs; they were not in &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; at all but in the &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/"&gt;Pyrex&lt;/a&gt; compiler.&lt;br /&gt;&lt;br /&gt;Throughout the generated .c we found INCREF/DECREF where it didn't belong, namely in every cdef method for __pyx_v_self.  In other words, even though the calling function must already hold a reference to instance in order to access it's C methods, thus preventing the instance from being garbage collected during method execution, the Pyrex.Compiler inserts redundant INCREF/DECREF calls.&lt;br /&gt;&lt;br /&gt;These would normally just waste CPU cycles, but since our &lt;a href="http://www.pysoy.org/"&gt;3d engine&lt;/a&gt; has non-GIL background threads these refcount adjusting calls are accessed in a thread-unsafe manner and will inevitably cause either a segfault or a memory leak.&lt;br /&gt;&lt;br /&gt;The solution is to not consider "self" a normal Python argument, which would also allow these C methods to be called with &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/Manual/external.html#Acquiring_and_Releasing_the_GIL"&gt;nogil:&lt;/a&gt; set, provided checking is done to ensure no Python methods, properties, or variables of self are accessed.&lt;br /&gt;&lt;br /&gt;We'll be fixing this problem with our new source compiler, to be announced soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-59390343959182115?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/59390343959182115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=59390343959182115' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/59390343959182115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/59390343959182115'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/04/some-race-conditions-found.html' title='some race conditions found'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4109318492213129605</id><published>2008-03-21T03:43:00.000-04:00</published><updated>2008-03-21T03:45:32.757-04:00</updated><title type='text'>1.0_beta3 release and a Sprint this weekend</title><content type='html'>There is a rumor going around that because our &lt;a href="http://www.pysoy.org/milestone/beta3"&gt;1.0_beta3&lt;/a&gt; milestone is marked as due today (3/21) we're planning a release today.  This is false, we'll be releasing sometime in early spring as advertised - the due dates marked for our milestones are our preferred date only.&lt;br /&gt;&lt;br /&gt;We're still tracking down one or more nasty &lt;a href="http://en.wikipedia.org/wiki/Race_condition"&gt;race conditions&lt;/a&gt; which only show up on multicore systems, we still have a bit more work to do before the next release, and a good deal more testing is needed after these bugs are found to demonstrate stability.  If you're experience with debugging we could use some help - some of our tests seem to indicate &lt;a href="http://en.wikipedia.org/wiki/Mutual_exclusion"&gt;mutex locks&lt;/a&gt; being ignored.&lt;br /&gt;&lt;br /&gt;This weekend is a good time, too.  Starting today (Friday) we're running a pre-Beta3 online sprint.  In our IRC channel (#PySoy on irc.&lt;a href="http://www.freenode.net/"&gt;freenode.net&lt;/a&gt;) you can find a good number of developers working almost around the clock on various parts of the &lt;a href="http://www.pysoy.org/"&gt;3D engine&lt;/a&gt; and a few working in &lt;a href="http://gobby.0x539.de/trac/"&gt;Gobby&lt;/a&gt; for &lt;a href="http://en.wikipedia.org/wiki/Pair_programming#Remote_pair_programming"&gt;remote pair programming&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you're not into debugging, or don't have a multicore system, there are &lt;a href="http://www.pysoy.org/query?status=new&amp;status=assigned&amp;status=reopened&amp;milestone=beta3"&gt;many other tasks&lt;/a&gt; - &lt;a href="http://www.pysoy.org/ticket/929"&gt;large&lt;/a&gt; and &lt;a href="http://www.pysoy.org/ticket/950"&gt;small&lt;/a&gt; - that need doing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4109318492213129605?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4109318492213129605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4109318492213129605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4109318492213129605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4109318492213129605'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/03/10beta3-release-and-sprint-this-weekend.html' title='1.0_beta3 release and a Sprint this weekend'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5931074700227782891</id><published>2008-02-27T06:59:00.002-05:00</published><updated>2008-02-27T08:15:48.296-05:00</updated><title type='text'>State of the Soy @ r1000</title><content type='html'>Last night our humble 3D game engine reached &lt;a href="http://www.pysoy.org/changeset/1000"&gt;1000&lt;/a&gt; commits to it's &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; repository.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; has been contributed to by 20 developers, 7 of which are currently active.  The project's &lt;a href="http://ln-s.net/_lC"&gt;IRC channel&lt;/a&gt; is in nearly constant use by developers working on different tasks.&lt;br /&gt;&lt;br /&gt;The external API has drawn considerable praise by users, despite it's state as beta, and the constructive feedback we've received has led many of the post-Beta2 API changes.&lt;br /&gt;&lt;br /&gt;The internal API, while having some rough edges, has been commented on by several new developers as remarkably clean.  We've passed the point which the &lt;a href="http://www.pysoy.org/query?status=closed&amp;order=priority"&gt;COMPLETED&lt;/a&gt; list exceeds the &lt;a href="http://www.pysoy.org/query?status=new&amp;status=assigned&amp;status=reopened&amp;order=priority"&gt;TODO&lt;/a&gt; list, despite the latter constantly growing, and focus has largely shifted toward debugging, documentation, and polish.&lt;br /&gt;&lt;br /&gt;Most notably, we've reached the point of needing a legal entity for the project.  Using the &lt;a href="http://conservancy.softwarefreedom.org/"&gt;Software Freedom Conservancy&lt;/a&gt; as a rough template, we've started the process to form a non-profit corporation with a focus on copyleft game projects.  An announcement about this will be posted as more details are firmed up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5931074700227782891?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5931074700227782891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5931074700227782891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5931074700227782891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5931074700227782891'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/02/state-of-soy-r1000.html' title='State of the Soy @ r1000'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-2834319503237886529</id><published>2008-02-26T09:11:00.005-05:00</published><updated>2008-02-26T11:09:50.393-05:00</updated><title type='text'>PySoy goes from 3 threads to 5</title><content type='html'>We're doing the final work now to replace &lt;a href="http://www.pysoy.org/wiki/CoreLoop"&gt;CoreLoop&lt;/a&gt; with &lt;a href="http://www.pysoy.org/wiki/TransportLoop"&gt;TransportLoop&lt;/a&gt;, &lt;a href="http://www.pysoy.org/wiki/WindowLoop"&gt;WindowLoop&lt;/a&gt;, and &lt;a href="http://www.pysoy.org/wiki/SceneLoop"&gt;SceneLoop&lt;/a&gt;.  All three are instances of soy._internals.LoopThread which (should) play well with Python's threading system and should never hold the GIL.&lt;br /&gt;&lt;br /&gt;The increased performance this has brought for multi-core users is amazing, some have reported more than twice the framerate!&lt;br /&gt;&lt;br /&gt;To be fair, an equal number of &lt;a href="http://pypi.python.org/pypi/PySoy/Trunk"&gt;subversion Trunk&lt;/a&gt; users are experiencing frequent segfaults since we've not finished adding mutexes and rearranging the internal API post-move.  Obviously these issues are being resolved prior to the &lt;a href="http://www.pysoy.org/milestone/beta3"&gt;Beta-3&lt;/a&gt; release next month.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-2834319503237886529?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/2834319503237886529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=2834319503237886529' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2834319503237886529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2834319503237886529'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/02/pysoy-goes-from-3-threads-to-5.html' title='PySoy goes from 3 threads to 5'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7609394403259282697</id><published>2008-02-20T14:43:00.003-05:00</published><updated>2008-02-20T15:51:18.186-05:00</updated><title type='text'>why we're blocking Microsoft Live</title><content type='html'>While going through server logs I noticed something funny, Microsoft Live has surpassed Google in the number of hits we've received.  Weird, eh?  I didn't think anyone actually used it.&lt;br /&gt;&lt;br /&gt;The terms people arriving at our site through search.live.com are just... weird, though.  Most are outright vulgar, searching for obscure pornography or celebrity names, drugs, sex aids...  Here's an few examples:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;65.55.165.36 http://search.live.com/result.aspx?q=valtrex&amp;mrt=en-us&amp;FORM=LVSP&lt;br /&gt;/log/trunk Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR&lt;br /&gt;1.1.4322)&lt;br /&gt;131.107.0.95 http://search.live.com/result.aspx?q=breast+enhancement&amp;mrt=en-us&amp;FORM=LVSP /&lt;br /&gt;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Win64; x64; SV1)&lt;br /&gt;65.55.165.122 http://search.live.com/result.aspx?q=ferarri&amp;mrt=en-us&amp;FORM=LVSP&lt;br /&gt;/browser/media/tutorials Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2;&lt;br /&gt;.NET CLR 1.1.4322)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;These hits were to small obscure pages on our site, such as svn changelogs, and then I noticed the source IP addresses were in just a few IP ranges, so I ran a whois to see if one ISP tied connected them all;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;arc@sobek ~/work/pysoy $ whois 65.55.165.83&lt;br /&gt;&lt;br /&gt;OrgName:    Microsoft Corp&lt;br /&gt;OrgID:      MSFT&lt;br /&gt;Address:    One Microsoft Way&lt;br /&gt;City:       Redmond&lt;br /&gt;StateProv:  WA&lt;br /&gt;PostalCode: 98052&lt;br /&gt;Country:    US&lt;br /&gt;&lt;br /&gt;NetRange:   65.52.0.0 - 65.55.255.255&lt;br /&gt;CIDR:       65.52.0.0/14&lt;br /&gt;NetName:    MICROSOFT-1BLK&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You read that correctly.  Microsoft, in a desperate attempt to make themselves seem more important, or perhaps just to flood free software project's websites with unwanted traffic, is running bots which act like normal web crawlers.  Indeed, over 97% of the hits we got from search.live.com were from Microsoft's own IP subnets.  Searching Google, I found this story was &lt;a href="http://www.bitworm.com/search/2007/msn-comes-clean-on-fake-search-traffic/"&gt;previously covered&lt;/a&gt; by others more observant of their logs.&lt;br /&gt;&lt;br /&gt;In response, I'm adding a special rule to block all future traffic from the offending netblocks, including MICROSOFT 131.107.0.0 - 131.107.255.255 and MICROSOFT-1BLK 65.52.0.0 - 65.55.255.255.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7609394403259282697?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7609394403259282697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7609394403259282697' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7609394403259282697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7609394403259282697'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/02/why-were-blocking-microsoft-live.html' title='why we&apos;re blocking Microsoft Live'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3894485542633738360</id><published>2008-02-14T20:23:00.002-05:00</published><updated>2008-02-14T20:45:49.940-05:00</updated><title type='text'>libjingle disappointments</title><content type='html'>Last year we chalked &lt;a href="http://code.google.com/p/libjingle/"&gt;libjingle&lt;/a&gt; as our choice for a &lt;a href="http://www.xmpp.org/"&gt;XMPP&lt;/a&gt; library, since it handled all the networking we needed (&lt;a href="http://www.xmpp.org/extensions/xep-0176.html"&gt;ICE-UDP&lt;/a&gt;, HTTP, etc) tightly integrated with XMPP through a standard protocol.&lt;br /&gt;&lt;br /&gt;On closer inspection, we found why libjingle hasn't really been adopted by the community yet.  For starters it requires patches to build the latest release with &lt;a href="http://gcc.gnu.org/"&gt;GCC 4&lt;/a&gt;, and no release has been made to include these patches in months.  Not a good sign.&lt;br /&gt;&lt;br /&gt;Next we find there are no dynamic libjingle libraries, it builds as static only, and doesn't build for C programs (only C++).  Unless we transformed our project to build as C++ this isn't an immediate option.&lt;br /&gt;&lt;br /&gt;Looking over the libjingle code structure, it's in a severe state of poor maintenance.  The internal name for it appears to be "libcricket", with naming confusion all over the place, code format inconsistencies, and extremely poorly documented.  &lt;br /&gt;&lt;br /&gt;Thus, libjingle integration is unlikely until after &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt;'s Beta-3 release when we'll have time to write the C shim code as a dynamic library.&lt;br /&gt;&lt;br /&gt;All this said, libjingle appears to have great potential for us and the entire free software community, it's just in need of attention from a few detail-oriented developers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3894485542633738360?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3894485542633738360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3894485542633738360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3894485542633738360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3894485542633738360'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/02/libjingle-disappointments.html' title='libjingle disappointments'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3947231556061871512</id><published>2008-02-11T02:19:00.000-05:00</published><updated>2008-02-11T02:32:19.754-05:00</updated><title type='text'>consolidated _core-*/ to _core/</title><content type='html'>Last year Pyrex, then version 0.9.5.1a, did not support compile-time conditions for things such as platform specific code.  To work around this used different _core directories, one for each platform, and a platform test in setup.py would determine which directory soy._core was compiled from.&lt;br /&gt;&lt;br /&gt;While functional, this created duplicated work and a fairly messy source tree with four different _core-* directories.  With Pyrex 0.9.6 release came support for code such as this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;IF UNAME_SYSNAME == "Windows":&lt;br /&gt;  include "icky_definitions.pxi"&lt;br /&gt;ELIF UNAME_SYSNAME == "Darwin":&lt;br /&gt;  include "nice_definitions.pxi"&lt;br /&gt;ELIF UNAME_SYSNAME == "Linux":&lt;br /&gt;include "penguin_definitions.pxi"&lt;br /&gt;ELSE:&lt;br /&gt;    include "other_definitions.pxi"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;... and, thus, we could finally merge those _core-* directories into src/_core and remove kludge from setup.py.  Tonight that's exactly what I did.  Behold, &lt;a href="http://www.pysoy.org/browser/trunk/pysoy/src"&gt;http://svn.pysoy.org/trunk/pysoy/src&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3947231556061871512?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3947231556061871512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3947231556061871512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3947231556061871512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3947231556061871512'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/02/consolidated-core-to-core.html' title='consolidated _core-*/ to _core/'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7507605627888561169</id><published>2008-02-06T01:58:00.000-05:00</published><updated>2008-02-06T02:01:07.059-05:00</updated><title type='text'>website makeover and new logo</title><content type='html'>We've been working with the same website design (&lt;a href="http://www.pysoy.org/"&gt;www.pysoy.org&lt;/a&gt;) for a year now.  While it got the job done, we're in need of a makeover - and that's exactly what's going on.  The basic layout from &lt;a href="http://planet.pysoy.org/"&gt;Planet PySoy&lt;/a&gt; is going site-wide with a new docs section, info on how to get involved with development, separate bug and task/idea/etc filing forms, and a ton of new features that will make the site more community-oriented.&lt;br /&gt;&lt;br /&gt;In the spirit of community inclusion, I'm also opening the new logo for collaboration and competition for.  Draft logos can be worked on in &lt;a href="http://www.pysoy.org/browser/media/logos"&gt;http://svn.pysoy.org/media/logos&lt;/a&gt; with the final designs voted on by all active developers near the end of this month.  We'll aim to include this in the beta-3 release next month as a special mesh and texture.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7507605627888561169?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7507605627888561169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7507605627888561169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7507605627888561169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7507605627888561169'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/02/weve-been-working-with-same-website.html' title='website makeover and new logo'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-978155936837111659</id><published>2008-02-01T22:39:00.000-05:00</published><updated>2008-02-01T23:07:23.076-05:00</updated><title type='text'>normals (dot3) texture</title><content type='html'>&lt;img src="http://planet.pysoy.org/screenshots/pysoy-dot3.png" width="320" height="240" alt="PySoy Dot3 Bump Mapping" align="right"/&gt;With a few minor bugs left to be worked out, we now have normals mapping.  This was written by Jaroslaw Tworek, a high school student in Poland who also added recently volumetric fog and billboards.  These features and more will be included in the Beta-3 release next month.&lt;br /&gt;&lt;br /&gt;Bump Mapping; yet another feature &lt;a href="http://www.pysoy.org/"&gt;PySoy&lt;/a&gt; has over it's &lt;a href="http://www.soya3d.org/"&gt;predecessor&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-978155936837111659?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/978155936837111659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=978155936837111659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/978155936837111659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/978155936837111659'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/02/normals-dot3-texture.html' title='normals (dot3) texture'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-53055482644679465</id><published>2008-02-01T05:27:00.000-05:00</published><updated>2008-02-01T05:51:16.213-05:00</updated><title type='text'>downtime and new server</title><content type='html'>As many people have noticed, *.pysoy.org was down yesterday. Since our former server is still offline (thanks, Verizon) I've paid out of pocket for a new colocated server hosted at ServerBeach.                      &lt;br /&gt;&lt;br /&gt;After an all-nighter getting it setup, &lt;a href="http://www.pysoy.org/"&gt;www.pysoy.org&lt;/a&gt; is back up, as is svn, and hopefully everything else.  I'll resolve any problems tomorrow, as I'm in serious need of sleep now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-53055482644679465?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/53055482644679465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=53055482644679465' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/53055482644679465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/53055482644679465'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/02/downtime-and-new-server.html' title='downtime and new server'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-396961203924657452</id><published>2008-01-02T15:11:00.000-05:00</published><updated>2008-01-02T15:18:16.139-05:00</updated><title type='text'>PySoy Beta-2 response!</title><content type='html'>12 hours after the &lt;a href="http://www.pysoy.org/"&gt;PySoy Beta2&lt;/a&gt; release we've had over 120 &lt;a href="http://www.pysoy.org/wiki/Download"&gt;downloads&lt;/a&gt;, about half of which for Windows.&lt;br /&gt;&lt;br /&gt;Some users were quick to point out we forgot three dll's in the installer; glew, iconv, and zlib1.  We're rebuilding the installers for Windows to include these and testing to ensure we didn't forget anything else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-396961203924657452?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/396961203924657452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=396961203924657452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/396961203924657452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/396961203924657452'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/01/pysoy-beta-2-response.html' title='PySoy Beta-2 response!'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5016226956239518274</id><published>2008-01-02T04:30:00.000-05:00</published><updated>2008-01-02T05:54:09.300-05:00</updated><title type='text'>PySoy Beta-2 Released!</title><content type='html'>We finished up the &lt;a href="http://www.pysoy.org/milestone/beta2"&gt;spit-n-polish work&lt;/a&gt; tonight and &lt;a href="http://pypi.python.org/pypi/PySoy/1.0-beta2"&gt;shipped&lt;/a&gt; the second "beta" of our &lt;a href="http://www.pysoy.org/"&gt;3D game engine&lt;/a&gt; for Python!&lt;br /&gt;&lt;br /&gt;Included is support for Microsoft Windows (with nice bdist graphical installer), keyboard input and an early draft of the controller-action system, text rendering thanks to &lt;a href="http://cairographics.org/"&gt;Cairo&lt;/a&gt;, support for Joints, and other enhancements and fixes too numerous to list.&lt;br /&gt;&lt;br /&gt;While over a dozen developers contributed to this release I'd like to especially thank &lt;a href="http://kirkmcdonald.blogspot.com/"&gt;Kirk McDonald&lt;/a&gt; for porting the engine to Windows API, Derek Rhodes for getting the Cairo support in, &lt;a href="http://www.pysoy.org/wiki/EricStein"&gt;Eric Stein&lt;/a&gt; for his work from Summer of Code and since, and Piet Delport who provided countless hours of help to all of us with Pyrex-related issues.&lt;br /&gt;&lt;br /&gt;We're far from done so please &lt;a href="http://www.pysoy.org/wiki/Download"&gt;download&lt;/a&gt;, enjoy, give feedback, and if so inspired help us reach 1.0!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5016226956239518274?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5016226956239518274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5016226956239518274' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5016226956239518274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5016226956239518274'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2008/01/pysoy-beta-2-released.html' title='PySoy Beta-2 Released!'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8782347770467573047</id><published>2007-12-29T00:07:00.000-05:00</published><updated>2007-12-29T00:12:49.561-05:00</updated><title type='text'>r600</title><content type='html'>A quick update to INSTALL (dependencies list) brings us up to r600.  This makes about 50 commits in the past month.&lt;br /&gt;&lt;br /&gt;... of course with the sprint ongoing we're likely to reach r750 by &lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt;'s Beta-2 release next week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8782347770467573047?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8782347770467573047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8782347770467573047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8782347770467573047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8782347770467573047'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/12/r600.html' title='r600'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6056215239987443660</id><published>2007-12-27T14:18:00.000-05:00</published><updated>2007-12-27T14:37:52.921-05:00</updated><title type='text'>fresh soymilk!</title><content type='html'>While this is a blog about &lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt;, a 3d engine for &lt;a href="http://python.org/"&gt;Python&lt;/a&gt;, this post is about a soy related product I recently fell in love with.&lt;br /&gt;&lt;br /&gt;It's called the &lt;a href="http://www.soymilkquick.com"&gt;SoyQuick soymilk machine&lt;/a&gt;.  Basically a pitcher, heating element, grinder, filter screen, and some sensors in one package.&lt;br /&gt;&lt;br /&gt;You throw in 2/3 cup of soaked soy beans, fill water to a line in the pitcher, plug in a standard power chord (same as computers use), press the start button, and 15 minutes later fresh &lt;a href="http://en.wikipedia.org/wiki/Soymilk"&gt;soymilk&lt;/a&gt; in the pitcher and &lt;a href="http://en.wikipedia.org/wiki/Okara_%28food%29"&gt;okara&lt;/a&gt; in the filter basket.&lt;br /&gt;&lt;br /&gt;This awesome machine plus an ample supply of &lt;a href="http://en.wikipedia.org/wiki/Gunpowder_tea"&gt;Special Gunpowder Green Tea&lt;/a&gt; is what's fueling me through the &lt;a href="http://www.pysoy.org/milestone/beta2?by=owner"&gt;PySoy Beta-2&lt;/a&gt; release process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6056215239987443660?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6056215239987443660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6056215239987443660' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6056215239987443660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6056215239987443660'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/12/fresh-soymilk.html' title='fresh soymilk!'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-7083529999879348928</id><published>2007-12-25T21:09:00.000-05:00</published><updated>2007-12-26T09:27:12.080-05:00</updated><title type='text'>Beta-2 task assignments</title><content type='html'>Looking at &lt;a href="http://www.pysoy.org/milestone/beta2?by=owner"&gt;beta2 tickets&lt;/a&gt; there's an extremely disproportionate number of tickets being handled by yours truly.&lt;br /&gt;&lt;br /&gt;If you can participate later this week or as part of the sprint, please take a look through &lt;a href="http://tinyurl.com/32gdo3"&gt;what needs to be done&lt;/a&gt; and volunteer yourself for some of the workload.  Many of these unassigned tickets almost anyone can do without previous experience with &lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-7083529999879348928?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/7083529999879348928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=7083529999879348928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7083529999879348928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/7083529999879348928'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/12/beta-2-task-assignments.html' title='Beta-2 task assignments'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-888769232818252043</id><published>2007-12-20T14:59:00.000-05:00</published><updated>2007-12-20T15:30:58.266-05:00</updated><title type='text'>Sprinting to Beta-2</title><content type='html'>What a better way to kick off 2008 than with the long-awaited Beta-2 release of &lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;We've been lazy though, very little has been committed since Beta-1's release a few months ago.  To play catchup and get us focused enough to reach this goal a sprint has been scheduled for the last weekend of 2007 (Dec 28-30).&lt;br /&gt;&lt;br /&gt;The physical site for the sprint is in Manchester, NH.  A bank of public IPs (no NAT), caffeine, desktop space, and inflatable crash mats await those able to make it.  RSVP for the address.&lt;br /&gt;&lt;br /&gt;For those working from home we'll have IRC and video conferencing throughout the weekend.  If you're planning to participate join #PySoy or get your webcam working with &lt;a href="http://ekiga.org/"&gt;Ekiga&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Even if you have no experience with C programming or OpenGL we need people for documentation, writing examples, and unit testing.  Being inexperienced is an advantage for locating inadequately documented classes and filling in the gaps!&lt;br /&gt;&lt;br /&gt;Every serious participant will be mailed a silk-screened "PySoy Sprint 2007" patch.  Sews easily to a backpack, jacket, etc to let the world know that you helped make the PySoy revolution!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-888769232818252043?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/888769232818252043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=888769232818252043' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/888769232818252043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/888769232818252043'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/12/sprinting-to-beta-2.html' title='Sprinting to Beta-2'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8469538163869173528</id><published>2007-11-09T22:08:00.000-05:00</published><updated>2007-11-09T22:37:13.942-05:00</updated><title type='text'>dependencies upgraded</title><content type='html'>&lt;h2&gt;Pyrex 0.9.6&lt;/h2&gt;There's a few &lt;a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/changes-0.9.6.html"&gt;API changes&lt;/a&gt; which result in warnings, we're going to keep things the way they are now until Ubuntu and a few other distributions have this version available, or 0.9.7 is released, whichever comes soonest.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;h2&gt;ODE 0.9&lt;/h2&gt;&lt;a href="http://ode.org/"&gt;ODE&lt;/a&gt;'s new version comes without an updated changelog, however, a diff on the include directories shows very few API changes from 0.8.&lt;br /&gt;&lt;br /&gt;Because Ubuntu 7.10 just came out with ODE 0.8 we're going to stick with ODE 0.8 compatibility for the time being.  Those previously trying to install &lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt; on Ubuntu may remember having to manually install ODE 0.8 as the last packaged version available for Ubuntu was 0.5.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;h2&gt;Theora&lt;/h2&gt;We may need to update for libtheora beta2 since there were numerous changes since alpha7, however, beta2 is not packaged for most distros yet (ie, both Gentoo and Ubuntu only run alpha7).  It would seem prudent to stick with alpha7 for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8469538163869173528?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8469538163869173528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8469538163869173528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8469538163869173528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8469538163869173528'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/11/dependencies-upgraded.html' title='dependencies upgraded'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-1634781129622998689</id><published>2007-11-04T02:39:00.000-05:00</published><updated>2007-11-04T02:44:16.716-05:00</updated><title type='text'>Server move</title><content type='html'>The server hosting *.pysoy.org has been moved from Ithaca, NY to my new home in Manchester, NH.&lt;br /&gt;&lt;br /&gt;It's now on a much faster connection (I've clocked over 850k up) and a decent UPS to reduce downtime to near-zero.  I used the switchover time to upgrade the software and tighten security a bit, too.&lt;br /&gt;&lt;br /&gt;Sorry for the downtime, it'll be worth it in the long run.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-1634781129622998689?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/1634781129622998689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=1634781129622998689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1634781129622998689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/1634781129622998689'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/11/server-move.html' title='Server move'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-6769294875059506907</id><published>2007-10-02T15:46:00.000-04:00</published><updated>2007-10-02T15:54:11.182-04:00</updated><title type='text'>Maintainer's Update</title><content type='html'>It's been awhile since I've posted so a quick update;&lt;br /&gt;&lt;br /&gt;We've got two new developers, &lt;a href="http://pysoy.org/wiki/KirkMcDonald"&gt;KirkMcDonald&lt;/a&gt; and &lt;a href="http://pysoy.org/wiki/DerekRhodes"&gt;DerekRhodes&lt;/a&gt;.  Kirk has taken over the Win32 porting and Derek is working on materials/textures.&lt;br /&gt;&lt;br /&gt;Toba has remained active after Summer of Code.  He's also the only student to complete his SoC project and thus receive full payment.&lt;br /&gt;&lt;br /&gt;I've been in the process of moving so my free time for &lt;a href="http://pysoy.org/"&gt;PySoy&lt;/a&gt; has been limited.  I'm generally available via IRC for questions and, now living in Manchester NH, will be able to pound out some code again once part of my studio is setup here.  It's going to take me months more to move it all.&lt;br /&gt;&lt;br /&gt;We'll have Beta-2 out by the end of the year at the current rate with Win32 compatibility, input handling, and model+texture loading/saving.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-6769294875059506907?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/6769294875059506907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=6769294875059506907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6769294875059506907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/6769294875059506907'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/10/maintainers-update.html' title='Maintainer&apos;s Update'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-3905626968214610445</id><published>2007-07-13T14:17:00.000-04:00</published><updated>2008-12-12T19:26:05.266-05:00</updated><title type='text'>beautiful mistakes</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OiANIGzqG6k/RpfC3aHLJeI/AAAAAAAAAEo/VZHjCU3MkpE/s1600-h/blocks3.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OiANIGzqG6k/RpfC3aHLJeI/AAAAAAAAAEo/VZHjCU3MkpE/s400/blocks3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5086748561296270818" /&gt;&lt;/a&gt;&lt;a href="http://www.pysoy.org/ticket/250"&gt;Fullscreen&lt;/a&gt; and splash window (ie borderless) support is in.  I ran several systems overnight with a script which flips between fullscreen and windowed every second to ensure there's no threading issues with the new code.&lt;br /&gt;&lt;br /&gt;In the process I generated this great mistake, basically what happens when you don't clear the background while rendering the collision blocks.  We're going to have to do more complicated mojo to make splash windows "transparent".&lt;br /&gt;&lt;br /&gt;Overall work on the &lt;a href="http://www.pysoy.org/"&gt;engine&lt;/a&gt; is on-track for Beta-2.&lt;br /&gt;&lt;br /&gt;Now on to &lt;a href="http://www.pysoy.org/ticket/266"&gt;dynamic text textures&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-3905626968214610445?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/3905626968214610445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=3905626968214610445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3905626968214610445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/3905626968214610445'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/07/beautiful-mistakes.html' title='beautiful mistakes'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OiANIGzqG6k/RpfC3aHLJeI/AAAAAAAAAEo/VZHjCU3MkpE/s72-c/blocks3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-2691405199223102740</id><published>2007-07-12T02:23:00.000-04:00</published><updated>2008-12-12T19:26:05.564-05:00</updated><title type='text'>Beta-1 Success &amp; Bugs</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OiANIGzqG6k/RpXLaKHLJdI/AAAAAAAAAEg/5gXk0McPVzU/s1600-h/blocks2.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OiANIGzqG6k/RpXLaKHLJdI/AAAAAAAAAEg/5gXk0McPVzU/s400/blocks2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5086195004436325842" /&gt;&lt;/a&gt;A mere hours after Beta-1's release bugs started getting found.  This was entirely expected.&lt;br /&gt;&lt;br /&gt;The largest problem people have had is with installing &lt;a href="http://www.ode.org/"&gt;ODE&lt;/a&gt; 0.8 on Ubuntu.  For whatever reason the last packaged version available to Ubuntu users is 5.  Installing from source means editing /etc/ld.so.conf to add /usr/local/lib and running ldconfig, something a bit scary to new users. &lt;br /&gt;&lt;br /&gt;Overall positive comments from testers though.  It's great to get this sort of confirmation even with the &lt;a href="http://www.pysoy.org/"&gt;engine&lt;/a&gt; so incomplete.  Of course Beta-2 with input support and mesh loading will be much better.&lt;br /&gt;&lt;br /&gt;A month off from that point, here's another screenshot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-2691405199223102740?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/2691405199223102740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=2691405199223102740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2691405199223102740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/2691405199223102740'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/07/beta-1-success-bugs.html' title='Beta-1 Success &amp; Bugs'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OiANIGzqG6k/RpXLaKHLJdI/AAAAAAAAAEg/5gXk0McPVzU/s72-c/blocks2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-8842613341102069191</id><published>2007-07-10T01:45:00.000-04:00</published><updated>2007-07-10T01:47:36.575-04:00</updated><title type='text'>power outage</title><content type='html'>Ack.  Thanks to a long term power outage the svn + website server was down for several hours today delaying work.  With luck we should have that release out tomorrow (7/10).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-8842613341102069191?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/8842613341102069191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=8842613341102069191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8842613341102069191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/8842613341102069191'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/07/power-outage.html' title='power outage'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-4293258219562816799</id><published>2007-07-09T12:33:00.000-04:00</published><updated>2007-07-09T12:35:53.875-04:00</updated><title type='text'>Three tickets remain</title><content type='html'>The last of the beta-1 tickets have been delegated.  Hopefully they're easy ones.&lt;br /&gt;&lt;br /&gt;Then we start with the final check to make sure nothing obvious segfaults.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-4293258219562816799?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/4293258219562816799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=4293258219562816799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4293258219562816799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/4293258219562816799'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/07/three-tickets-remain.html' title='Three tickets remain'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28358787.post-5957529940065088505</id><published>2007-07-09T04:41:00.000-04:00</published><updated>2008-12-12T19:26:05.816-05:00</updated><title type='text'>the day before beta-1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OiANIGzqG6k/RpH1wPa1nxI/AAAAAAAAAEY/dKHgj93iJDA/s1600-h/blocks1.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_OiANIGzqG6k/RpH1wPa1nxI/AAAAAAAAAEY/dKHgj93iJDA/s400/blocks1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5085115663399624466" /&gt;&lt;/a&gt;Today we saw one of the largest recent API changes come to pass, "mesh" is now something that can be applied to a Body, not a type of Body itself.&lt;br /&gt;&lt;br /&gt;soy.bodies.Pyramid is gone, there is now a pyramid.py in tests/ which provides it for the test scripts.  I also copied over the blocks.py file from Blockdropper (one of my old Soya games) and updated it's API for &lt;a href="http://www.pysoy.org/"&gt;our engine&lt;/a&gt;.  That is the screenshot I included here.&lt;br /&gt;&lt;br /&gt;There are a few tickets remaining for Beta-1, but barring some last minute critical bug discovery we should be set in the next 16 hours.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28358787-5957529940065088505?l=arcriley.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcriley.blogspot.com/feeds/5957529940065088505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28358787&amp;postID=5957529940065088505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5957529940065088505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28358787/posts/default/5957529940065088505'/><link rel='alternate' type='text/html' href='http://arcriley.blogspot.com/2007/07/day-before-beta-1.html' title='the day before beta-1'/><author><name>Arc Riley</name><uri>http://www.blogger.com/profile/17200801866043907681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_OiANIGzqG6k/SN0JjhLitII/AAAAAAAAAF8/X7cClp59cic/S220/arc-dreamer-512x512.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OiANIGzqG6k/RpH1wPa1nxI/AAAAAAAAAEY/dKHgj93iJDA/s72-c/blocks1.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
