<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://planet.jython.org/">
	<title>Planet Jython</title>
	<link>http://planet.jython.org/</link>
	<description>Planet Jython - http://planet.jython.org/</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=683" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=678" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=675" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=671" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=667" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-1772927538588141564.post-2634392538156730138" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-1772927538588141564.post-3920833324528504343" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=659" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=657" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=648" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=642" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=638" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=635" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=632" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=630" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=623" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=618" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=610" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=611" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=607" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=605" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=601" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=597" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=594" />
			<rdf:li rdf:resource="http://www.fishandcross.com/blog/?p=583" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420749544/">
	<title>Ed Taekema: Firefox 3.1 - Beta 1 Love the Tab Switching View</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420749544/</link>
	<content:encoded>&lt;p&gt;Take a quick peek at whats coming in Firefox 3.1 over at &lt;a href=&quot;http://lifehacker.com/5063202/firefox-31-beta-1-now-available-for-download-first-look&quot;&gt;Lifehacker&lt;/a&gt;.  The tab switching view is pretty awesome, although from the comments, it appears it isn&amp;#8217;t quite all there yet.  In the meantime, you can install the &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/1810&quot; target=&quot;_blank&quot;&gt;Showcase Firefox plugin&lt;/a&gt;.  It isn&amp;#8217;t nearly as nice looking but accomplishes the same thing, allowing you to visually select the tab you want to switch to by selecting thumbnail pictures of the contents of each tab.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=JJyIM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=JJyIM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=jaAVm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=jaAVm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=R18HM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=R18HM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=TpFim&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=TpFim&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=yXj5m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=yXj5m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=szFlM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=szFlM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=9RvXM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=9RvXM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=vnmlm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=vnmlm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/420749544&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-14T17:47:24+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420705303/">
	<title>Ed Taekema: I don’t get Twitter … but I’m trying</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420705303/</link>
	<content:encoded>&lt;p&gt;Ok, so I&amp;#8217;m late to the party and am having to play catchup with &lt;a href=&quot;http://twitter.com/home&quot; target=&quot;_blank&quot;&gt;twitter&lt;/a&gt;.  I don&amp;#8217;t quite think I get it entirely yet, but will give it a go.  I&amp;#8217;ve setup a twitter account (fishandcross) and twitting(?) about topics similar to this blog and who knows what else. Does anyone have tips for a twitter noob?&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=xICUM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=xICUM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=1o3qm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=1o3qm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=AV4tM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=AV4tM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=RPD9m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=RPD9m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=5Vl7m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=5Vl7m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=nvHhM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=nvHhM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=yV36M&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=yV36M&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=tHHBm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=tHHBm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/420705303&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-14T17:00:44+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420691442/">
	<title>Ed Taekema: Recycled Comment Spam</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420691442/</link>
	<content:encoded>&lt;p&gt;Here is recycling I am not in favour of.  I&amp;#8217;m starting to see weird, almost-not-spam comments.  The comment is good english and makes sense. They use some words in common with the post, and if it weren&amp;#8217;t  for the off-topic site linked to (only 1 per comment) and the age of the post it responded to, I probably wouldn&amp;#8217;t have thought twice.  It seems someone / something is grabbing legit comments from somewhere and reposting them to other sites. Askimet caught it and held it, but it didn&amp;#8217;t catch it as spam.  Seems someone is pretty set on destroying blog comments &amp;#8230; Has anyone else seen this?  Any ideas of how to catch these automatically with WordPress?&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=aBHfM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=aBHfM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=UnHpm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=UnHpm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=3mV3M&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=3mV3M&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=vKAIm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=vKAIm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=3X65m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=3X65m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=bSJGM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=bSJGM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=VdDlM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=VdDlM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=E4jqm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=E4jqm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/420691442&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-14T16:38:54+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420639725/">
	<title>Ed Taekema: 4 Great Windows File Copy Tools</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420639725/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.fishandcross.com/blog/?p=630&quot;&gt;Readers of this blog&lt;/a&gt; suggested some great tools for helping windows file copies (especially network file copies).  To make sure these don&amp;#8217;t get lost down in the comments, I thought it would make a good blog post &amp;#8230; and help me find this again when I need it. So here are the reader suggested tools:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ruahine.com/ycopy-file-copy-utility.html&quot; target=&quot;_blank&quot;&gt;Ycopy &lt;/a&gt;- This is a great tool for moving lots of data from one disk to another.  Its main intended use is for copying files from an old disk to a new target disk without stopping when an error occurs.  The errors are added to a log file.  At the end of copy you get a report of was not copied for further investigation.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.codesector.com/teracopy.php&quot; target=&quot;_blank&quot;&gt;Terracopy &lt;/a&gt;- This is a free for home users tool that promises fast file copies, retries copies upon failure, along with the ability to pause and resume copies.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&amp;amp;displaylang=en&quot; target=&quot;_blank&quot;&gt;Robocopy &lt;/a&gt;- Stands for Robust File Copy and is known for being able to handle network outages, resume incomplete / failed file transfers and an ability to copy a larger number of files than xcopy without crashing.  Oh, and this is a Microsoft utility included in the Windows Resource kit and in Vista.  There is also a gui available for it from &lt;a href=&quot;http://download.microsoft.com/download/f/d/0/fd05def7-68a1-4f71-8546-25c359cc0842/UtilitySpotlight2006_11.exe&quot; target=&quot;_blank&quot;&gt;Microsoft Technet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cygwin.com/&quot;&gt;cygwin + rsync&lt;/a&gt; - This is the old reliable solution from unix &amp;#8230; but moved to windows.  Rsync lets you synchronize individual files or entire directories.  Its claim to fame is that it uses specially delta handling to ensure that file copies use a minimal amount of network.  This is handy if you are continually copying a set of files, as only the deltas will go over the net.  In order to use this, you will need to install cygwin, so this is the heavy weight of the 4 tools.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thanks for the great tool suggestions.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=Do2RM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=Do2RM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=xjGBm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=xjGBm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=AhuXM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=AhuXM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=04PQm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=04PQm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=CPMIm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=CPMIm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=qArCM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=qArCM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=E6ClM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=E6ClM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=VcBEm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=VcBEm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/420639725&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-14T15:29:04+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420546849/">
	<title>Ed Taekema: Open Office 3.0 Officially Released</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/420546849/</link>
	<content:encoded>&lt;p&gt;The latest version of Open Office is &lt;a href=&quot;http://www.openoffice.org/&quot; target=&quot;_blank&quot;&gt;now officially released&lt;/a&gt;.  This is what we run on all our home computers, so I&amp;#8217;ll e upgrading things later this week &amp;#8230; the open office servers are struggling with the demand.  Here are the things I am looking forward to in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Office 2007 File format support&lt;/li&gt;
&lt;li&gt;View Multiple Pages in Layout View for Writer&lt;/li&gt;
&lt;li&gt;Margin Notes for review comments&lt;/li&gt;
&lt;li&gt;Its faster than my current open office install&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They had planned to add Google Docs like multiple user edit capability.  Not sure if that made it in, but it would be pretty cool for those homework review sessions when I am on the road.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=8KzgM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=8KzgM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=u1Bbm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=u1Bbm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=KvqGM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=KvqGM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=BxTMm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=BxTMm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=PyvQm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=PyvQm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=C3dJM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=C3dJM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=YDegM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=YDegM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=V9ATm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=V9ATm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/420546849&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-14T13:39:59+00:00</dc:date>
</item>
<item rdf:about="http://dunderboss.blogspot.com/2008/10/debugging-jython-compiler.html">
	<title>Philip Jenvey: Debugging the Jython compiler</title>
	<link>http://dunderboss.blogspot.com/2008/10/debugging-jython-compiler.html</link>
	<content:encoded>Debugging the Jython compiler (or most compilers for that matter) isn't the most straightforward process, so here I'll describe the typical steps I go through to figure it out.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;The Problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've found a bug while trying out the &lt;a href=&quot;http://code.google.com/p/sympy/&quot;&gt;SymPy&lt;/a&gt;  project:&lt;br /&gt;&lt;br /&gt;(jython)pjenvey@golgo13:~/src/python/sympy$ jython -c &quot;import sympy&quot;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;Traceback&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;most&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;recent&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;last&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;File&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&amp;lt;string&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;File&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;sympy/__init__.py&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;polys&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;File&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;sympy/polys/__init__.py&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;polynomial&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Poly&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PolynomialError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SymbolsError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; \&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;VerifyError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sympy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;polys&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;polynomial&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;py&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__mul__&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;52&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;signature&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Lorg&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;python&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;core&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PyFrame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Lorg&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;python&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;core&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PyObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Accessing&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;uninitialized&lt;/span&gt;&lt;span class=&quot;err&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;err&quot;&gt; 9&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;java.lang.VerifyError means the JVM's bytecode verifier found a problem in the bytecode you've attempted to load. In this case the __mul__ method defined in the sympy.polys.polynomial module is the culprit. My blog may cut off some of the VerifyError's error message, it was: &quot;(class: sympy/polys/polynomial$py, method: __mul__$52 signature: (Lorg/python/core/PyFrame;)Lorg/python/core/PyObject;) Accessing value from uninitialized register 9&quot;.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Steps&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First I open up the polynomial Python module to see what this __mul__ function is doing. Luckily there is only one __mul__ defined. Unluckily it's a large method, almost 100 lines. Usually I'd take a good look at the Python code to flag likely problematic areas in the Jython compiler (like all the brand new 2.4 and 2.5 features we've been working on). Since this is a larger method I do a very quick skim and nothing catches my eye -- no funky with statements or generator expressions.&lt;br /&gt;&lt;br /&gt;Then I take a quick look at the bytecode the compiler generated via javap, the JDK's bundled java class disassembler. Just to double check that I'm dealing with the same method the verifier is talking about. This 100 lines of Python code is translated to about 2000 lines of javap output.&lt;br /&gt;&lt;br /&gt;So next I narrow down the test case: copy and paste the __mul__ function into its own module and cut it down until I have the smallest piece possible that reproduces the problem. Bisect, bisect, remove that and dedent, bisect, etc. Turns out to be this line of code:&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;zip&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;monom&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;degs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;])]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;coeff&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;Interesting -- this is an old list comprehension call inside of an old method call inside of an old item assignment? Old as in the compiler has handled these expressions for a long time now, and they likely haven't been touched lately.&lt;br /&gt;&lt;br /&gt;I can probably narrow this statement down even further, for example I doubt the method call to zip has any relevance. Finally I'm down to this:&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;Removing the lisp comp or even the tuple unpack won't reproduce the bug. I've renamed the variables to make them easily identifiable to me in the bytecode.&lt;br /&gt;&lt;br /&gt;This one line of code translates to roughly this javap output:&lt;br /&gt;&lt;pre&gt;Compiled from &quot;bad2.py&quot;&lt;br /&gt;public class bad2$py extends org.python.core.PyFunctionTable implements org.python.core.PyRunnable{&lt;br /&gt;static final bad2$py self;&lt;br /&gt;&lt;br /&gt;static final org.python.core.PyString _0;&lt;br /&gt;&lt;br /&gt;static final org.python.core.PyCode f$0;&lt;br /&gt;&lt;br /&gt;public org.python.core.PyObject f$0(org.python.core.PyFrame);&lt;br /&gt;Code:&lt;br /&gt;0:    aload_1&lt;br /&gt;1:    ldc    #4; //String __file__&lt;br /&gt;3:    getstatic    #10; //Field _0:Lorg/python/core/PyString;&lt;br /&gt;6:    invokevirtual    #16; //Method org/python/core/PyFrame.setglobal:(Ljava/lang/String;Lorg/python/core/PyObject;)V&lt;br /&gt;9:    aload_1&lt;br /&gt;10:    iconst_1&lt;br /&gt;11:    invokevirtual    #20; //Method org/python/core/PyFrame.setline:(I)V&lt;br /&gt;14:    aload_1&lt;br /&gt;15:    ldc    #22; //String e&lt;br /&gt;17:    invokevirtual    #26; //Method org/python/core/PyFrame.getname:(Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;20:    astore_2&lt;br /&gt;21:    aload_1&lt;br /&gt;22:    ldc    #28; //String a&lt;br /&gt;24:    invokevirtual    #26; //Method org/python/core/PyFrame.getname:(Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;27:    new    #30; //class org/python/core/PyList&lt;br /&gt;30:    dup&lt;br /&gt;31:    invokespecial    #34; //Method org/python/core/PyList.&quot;&quot;:()V&lt;br /&gt;34:    dup&lt;br /&gt;35:    ldc    #36; //String append&lt;br /&gt;37:    invokevirtual    #41; //Method org/python/core/PyObject.__getattr__:(Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;40:    astore_3&lt;br /&gt;41:    aload_1&lt;br /&gt;42:    ldc    #43; //String _[1_3]&lt;br /&gt;44:    aload_3&lt;br /&gt;45:    invokevirtual    #46; //Method org/python/core/PyFrame.setlocal:(Ljava/lang/String;Lorg/python/core/PyObject;)V&lt;br /&gt;48:    aconst_null&lt;br /&gt;49:    astore_3&lt;br /&gt;50:    aload_1&lt;br /&gt;51:    iconst_1&lt;br /&gt;52:    invokevirtual    #20; //Method org/python/core/PyFrame.setline:(I)V&lt;br /&gt;55:    aload_1&lt;br /&gt;56:    ldc    #48; //String d&lt;br /&gt;58:    invokevirtual    #26; //Method org/python/core/PyFrame.getname:(Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;61:    invokevirtual    #52; //Method org/python/core/PyObject.__iter__:()Lorg/python/core/PyObject;&lt;br /&gt;64:    astore_3&lt;br /&gt;65:    goto    131&lt;br /&gt;68:    aload    4&lt;br /&gt;70:    iconst_2&lt;br /&gt;71:    invokestatic    #58; //Method org/python/core/Py.unpackSequence:(Lorg/python/core/PyObject;I)[Lorg/python/core/PyObject;&lt;br /&gt;74:    astore    5&lt;br /&gt;76:    aload    5&lt;br /&gt;78:    iconst_0&lt;br /&gt;79:    aaload&lt;br /&gt;80:    astore    6&lt;br /&gt;82:    aload_1&lt;br /&gt;83:    ldc    #60; //String b&lt;br /&gt;85:    aload    6&lt;br /&gt;87:    invokevirtual    #46; //Method org/python/core/PyFrame.setlocal:(Ljava/lang/String;Lorg/python/core/PyObject;)V&lt;br /&gt;90:    aconst_null&lt;br /&gt;91:    astore    6&lt;br /&gt;93:    aload    5&lt;br /&gt;95:    iconst_1&lt;br /&gt;96:    aaload&lt;br /&gt;97:    astore    6&lt;br /&gt;99:    aload_1&lt;br /&gt;100:    ldc    #62; //String c&lt;br /&gt;102:    aload    6&lt;br /&gt;104:    invokevirtual    #46; //Method org/python/core/PyFrame.setlocal:(Ljava/lang/String;Lorg/python/core/PyObject;)V&lt;br /&gt;107:    aconst_null&lt;br /&gt;108:    astore    6&lt;br /&gt;110:    aload_1&lt;br /&gt;111:    iconst_1&lt;br /&gt;112:    invokevirtual    #20; //Method org/python/core/PyFrame.setline:(I)V&lt;br /&gt;115:    aload_1&lt;br /&gt;116:    ldc    #43; //String _[1_3]&lt;br /&gt;118:    invokevirtual    #26; //Method org/python/core/PyFrame.getname:(Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;121:    aload_1&lt;br /&gt;122:    ldc    #60; //String b&lt;br /&gt;124:    invokevirtual    #26; //Method org/python/core/PyFrame.getname:(Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;127:    invokevirtual    #66; //Method org/python/core/PyObject.__call__:(Lorg/python/core/PyObject;)Lorg/python/core/PyObject;&lt;br /&gt;130:    pop&lt;br /&gt;131:    aload_1&lt;br /&gt;132:    iconst_1&lt;br /&gt;133:    invokevirtual    #20; //Method org/python/core/PyFrame.setline:(I)V&lt;br /&gt;136:    aload_3&lt;br /&gt;137:    invokevirtual    #69; //Method org/python/core/PyObject.__iternext__:()Lorg/python/core/PyObject;&lt;br /&gt;140:    astore    4&lt;br /&gt;142:    aload    4&lt;br /&gt;144:    ifnonnull    68&lt;br /&gt;147:    aload_1&lt;br /&gt;148:    iconst_1&lt;br /&gt;149:    invokevirtual    #20; //Method org/python/core/PyFrame.setline:(I)V&lt;br /&gt;152:    aload_1&lt;br /&gt;153:    ldc    #43; //String _[1_3]&lt;br /&gt;155:    invokevirtual    #73; //Method org/python/core/PyFrame.dellocal:(Ljava/lang/String;)V&lt;br /&gt;158:    aload    6&lt;br /&gt;160:    invokevirtual    #77; //Method org/python/core/PyObject.__setitem__:(Lorg/python/core/PyObject;Lorg/python/core/PyObject;)V&lt;br /&gt;163:    aconst_null&lt;br /&gt;164:    astore_2&lt;br /&gt;165:    aload_1&lt;br /&gt;166:    iconst_m1&lt;br /&gt;167:    putfield    #81; //Field org/python/core/PyFrame.f_lasti:I&lt;br /&gt;170:    getstatic    #85; //Field org/python/core/Py.None:Lorg/python/core/PyObject;&lt;br /&gt;173:    areturn&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;span&gt;Tangent&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&quot;Accessing value from uninitialized register 9&quot;&lt;br /&gt;&lt;br /&gt;By the way JVM 1.5 -- you're a stack based virtual machine and you're bitching to me about unitialized registers? Sure I have bad bytecode, but registers are your problem buddy. I digress..&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Tools of the Trade&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've been using javap to look at the actual bytecode we produce, but now I'm also going to look at what that bytecode looks like as Java code with jad, a Java decompiler. I usually start this process with javap because it's more reliable on bad byte code.&lt;br /&gt;&lt;br /&gt;Luckily jad handles this one; here's what it looks like:&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PyObject&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PyFrame&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setglobal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;__file__&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;PyObject&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyobject&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;getname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;e&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;PyList&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pylist&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PyList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;PyObject&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyobject1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pylist&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__getattr__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;append&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setlocal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;_[1_3]&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyobject1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyobject1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;o&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyobject1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;getname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;d&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__iter__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;PyObject&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyobject3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;do&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;n&quot;&gt;pyobject2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyobject1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__iternext__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pyobject2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;n&quot;&gt;PyObject&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;apyobject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Py&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unpackSequence&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pyobject2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;n&quot;&gt;pyobject3&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;apyobject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setlocal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyobject3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;n&quot;&gt;pyobject3&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;n&quot;&gt;pyobject3&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;apyobject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setlocal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyobject3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;n&quot;&gt;pyobject3&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;getname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;_[1_3]&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__call__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;getname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;k&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dellocal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;_[1_3]&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;getname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__setitem__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pylist&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pyobject3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyobject&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;n&quot;&gt;pyframe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f_lasti&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Py&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;There's an oddity in the jad output: pyobject2 doesn't have any type information. Is that related to the bug I'm tracking down or is that a jad 'bug', or maybe both?&lt;br /&gt;&lt;br /&gt;So with jad and javap (or even just soley javap) I myself can become a Java byte code verifier by walking through each instruction line by line and eventually (hopefully) noticing a problem.&lt;br /&gt;&lt;br /&gt;Fortunately that isn't necessary with a good software byte code verifier. In this context the JVM's own bytecode verifier is *not* good. The error messages from the java.lang.VerifyErrors it throws are always pretty vague.&lt;br /&gt;&lt;br /&gt;The ASM project has a great one called &lt;a href=&quot;http://asm.objectweb.org/doc/faq.html#Q4&quot;&gt;CheckClassAdapter&lt;/a&gt;. It can't detect every problem, but when it can, it's incredibly helpful. Here it goes:&lt;pre&gt;(jython)pjenvey@golgo13:~/src/java/jython-trunk-clean3/asm-3.1/lib$ java -cp ~/src/java//jython-trunk-clean3/dist/jython.jar:asm-3.1.jar:asm-tree-3.1.jar:asm-analysis-3.1.jar:asm-util-3.1.jar  org.objectweb.asm.util.CheckClassAdapter /tmp/bad2\$py.class&lt;br /&gt;org.objectweb.asm.tree.analysis.AnalyzerException: Error at instruction 90: Expected an object reference, but found .&lt;br /&gt;at org.objectweb.asm.tree.analysis.Analyzer.analyze(Unknown Source)&lt;br /&gt;at org.objectweb.asm.util.CheckClassAdapter.verify(Unknown Source)&lt;br /&gt;at org.objectweb.asm.util.CheckClassAdapter.main(Unknown Source)&lt;br /&gt;Caused by: org.objectweb.asm.tree.analysis.AnalyzerException: Expected an object reference, but found .&lt;br /&gt;at org.objectweb.asm.tree.analysis.BasicVerifier.copyOperation(Unknown Source)&lt;br /&gt;at org.objectweb.asm.tree.analysis.Frame.execute(Unknown Source)&lt;br /&gt;... 3 more&lt;br /&gt;f$0(Lorg/python/core/PyFrame;)Lorg/python/core/PyObject;&lt;br /&gt;00000 Lbad2$py; PyFrame . . . . .  :  :    FRAME FULL [] []&lt;br /&gt;00001 Lbad2$py; PyFrame . . . . .  :  :     ALOAD 1&lt;br /&gt;00002 Lbad2$py; PyFrame . . . . .  : PyFrame  :     LDC &quot;__file__&quot;&lt;br /&gt;00003 Lbad2$py; PyFrame . . . . .  : PyFrame String  :     GETSTATIC bad2$py._0 : Lorg/python/core/PyString;&lt;br /&gt;00004 Lbad2$py; PyFrame . . . . .  : PyFrame String PyString  :     INVOKEVIRTUAL org/python/core/PyFrame.setglobal (Ljava/lang/String;Lorg/python/core/PyObject;)V&lt;br /&gt;00005 Lbad2$py; PyFrame . . . . .  :  :     ALOAD 1&lt;br /&gt;00006 Lbad2$py; PyFrame . . . . .  : PyFrame  :     ICONST_1&lt;br /&gt;00007 Lbad2$py; PyFrame . . . . .  : PyFrame I  :     INVOKEVIRTUAL org/python/core/PyFrame.setline (I)V&lt;br /&gt;00008 Lbad2$py; PyFrame . . . . .  :  :     ALOAD 1&lt;br /&gt;00009 Lbad2$py; PyFrame . . . . .  : PyFrame  :     LDC &quot;e&quot;&lt;br /&gt;00010 Lbad2$py; PyFrame . . . . .  : PyFrame String  :     INVOKEVIRTUAL org/python/core/PyFrame.getname (Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;00011 Lbad2$py; PyFrame . . . . .  : PyObject  :     ASTORE 2&lt;br /&gt;00012 Lbad2$py; PyFrame PyObject . . . .  :  :     ALOAD 1&lt;br /&gt;00013 Lbad2$py; PyFrame PyObject . . . .  : PyFrame  :     LDC &quot;a&quot;&lt;br /&gt;00014 Lbad2$py; PyFrame PyObject . . . .  : PyFrame String  :     INVOKEVIRTUAL org/python/core/PyFrame.getname (Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;00015 Lbad2$py; PyFrame PyObject . . . .  : PyObject  :     NEW org/python/core/PyList&lt;br /&gt;00016 Lbad2$py; PyFrame PyObject . . . .  : PyObject PyList  :     DUP&lt;br /&gt;00017 Lbad2$py; PyFrame PyObject . . . .  : PyObject PyList PyList  :     INVOKESPECIAL org/python/core/PyList. ()V&lt;br /&gt;00018 Lbad2$py; PyFrame PyObject . . . .  : PyObject PyList  :     DUP&lt;br /&gt;00019 Lbad2$py; PyFrame PyObject . . . .  : PyObject PyList PyList  :     LDC &quot;append&quot;&lt;br /&gt;00020 Lbad2$py; PyFrame PyObject . . . .  : PyObject PyList PyList String  :     INVOKEVIRTUAL org/python/core/PyObject.__getattr__ (Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;00021 Lbad2$py; PyFrame PyObject . . . .  : PyObject PyList PyObject  :     ASTORE 3&lt;br /&gt;00022 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00023 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList PyFrame  :     LDC &quot;_[1_3]&quot;&lt;br /&gt;00024 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList PyFrame String  :     ALOAD 3&lt;br /&gt;00025 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList PyFrame String PyObject  :     INVOKEVIRTUAL org/python/core/PyFrame.setlocal (Ljava/lang/String;Lorg/python/core/PyObject;)V&lt;br /&gt;00026 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList  :     ACONST_NULL&lt;br /&gt;00027 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList Lnull;  :     ASTORE 3&lt;br /&gt;00028 Lbad2$py; PyFrame PyObject Lnull; . . .  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00029 Lbad2$py; PyFrame PyObject Lnull; . . .  : PyObject PyList PyFrame  :     ICONST_1&lt;br /&gt;00030 Lbad2$py; PyFrame PyObject Lnull; . . .  : PyObject PyList PyFrame I  :     INVOKEVIRTUAL org/python/core/PyFrame.setline (I)V&lt;br /&gt;00031 Lbad2$py; PyFrame PyObject Lnull; . . .  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00032 Lbad2$py; PyFrame PyObject Lnull; . . .  : PyObject PyList PyFrame  :     LDC &quot;d&quot;&lt;br /&gt;00033 Lbad2$py; PyFrame PyObject Lnull; . . .  : PyObject PyList PyFrame String  :     INVOKEVIRTUAL org/python/core/PyFrame.getname (Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;00034 Lbad2$py; PyFrame PyObject Lnull; . . .  : PyObject PyList PyObject  :     INVOKEVIRTUAL org/python/core/PyObject.__iter__ ()Lorg/python/core/PyObject;&lt;br /&gt;00035 Lbad2$py; PyFrame PyObject Lnull; . . .  : PyObject PyList PyObject  :     ASTORE 3&lt;br /&gt;00036 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList  :     GOTO L0&lt;br /&gt;00037 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList  :    L1&lt;br /&gt;00038 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList  :    FRAME FULL [bad2$py org/python/core/PyFrame org/python/core/PyObject org/python/core/PyObject org/python/core/PyObject] [org/python/core/PyObject org/python/core/PyList]&lt;br /&gt;00039 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList  :     ALOAD 4&lt;br /&gt;00040 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList PyObject  :     ICONST_2&lt;br /&gt;00041 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList PyObject I  :     INVOKESTATIC org/python/core/Py.unpackSequence (Lorg/python/core/PyObject;I)[Lorg/python/core/PyObject;&lt;br /&gt;00042 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList PyObject  :     ASTORE 5&lt;br /&gt;00043 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject .  : PyObject PyList  :     ALOAD 5&lt;br /&gt;00044 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject .  : PyObject PyList PyObject  :     ICONST_0&lt;br /&gt;00045 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject .  : PyObject PyList PyObject I  :     AALOAD&lt;br /&gt;00046 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject .  : PyObject PyList PyObject  :     ASTORE 6&lt;br /&gt;00047 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00048 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList PyFrame  :     LDC &quot;b&quot;&lt;br /&gt;00049 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList PyFrame String  :     ALOAD 6&lt;br /&gt;00050 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList PyFrame String PyObject  :     INVOKEVIRTUAL org/python/core/PyFrame.setlocal (Ljava/lang/String;Lorg/python/core/PyObject;)V&lt;br /&gt;00051 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList  :     ACONST_NULL&lt;br /&gt;00052 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList Lnull;  :     ASTORE 6&lt;br /&gt;00053 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList  :     ALOAD 5&lt;br /&gt;00054 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyObject  :     ICONST_1&lt;br /&gt;00055 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyObject I  :     AALOAD&lt;br /&gt;00056 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyObject  :     ASTORE 6&lt;br /&gt;00057 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00058 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList PyFrame  :     LDC &quot;c&quot;&lt;br /&gt;00059 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList PyFrame String  :     ALOAD 6&lt;br /&gt;00060 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList PyFrame String PyObject  :     INVOKEVIRTUAL org/python/core/PyFrame.setlocal (Ljava/lang/String;Lorg/python/core/PyObject;)V&lt;br /&gt;00061 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList  :     ACONST_NULL&lt;br /&gt;00062 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject PyObject  : PyObject PyList Lnull;  :     ASTORE 6&lt;br /&gt;00063 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00064 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyFrame  :     ICONST_1&lt;br /&gt;00065 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyFrame I  :     INVOKEVIRTUAL org/python/core/PyFrame.setline (I)V&lt;br /&gt;00066 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00067 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyFrame  :     LDC &quot;_[1_3]&quot;&lt;br /&gt;00068 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyFrame String  :     INVOKEVIRTUAL org/python/core/PyFrame.getname (Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;00069 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyObject  :     ALOAD 1&lt;br /&gt;00070 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyObject PyFrame  :     LDC &quot;b&quot;&lt;br /&gt;00071 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyObject PyFrame String  :     INVOKEVIRTUAL org/python/core/PyFrame.getname (Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;00072 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyObject PyObject  :     INVOKEVIRTUAL org/python/core/PyObject.__call__ (Lorg/python/core/PyObject;)Lorg/python/core/PyObject;&lt;br /&gt;00073 Lbad2$py; PyFrame PyObject PyObject PyObject PyObject Lnull;  : PyObject PyList PyObject  :     POP&lt;br /&gt;00074 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList  :    L0&lt;br /&gt;00075 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList  :    FRAME FULL [bad2$py org/python/core/PyFrame org/python/core/PyObject org/python/core/PyObject] [org/python/core/PyObject org/python/core/PyList]&lt;br /&gt;00076 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00077 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList PyFrame  :     ICONST_1&lt;br /&gt;00078 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList PyFrame I  :     INVOKEVIRTUAL org/python/core/PyFrame.setline (I)V&lt;br /&gt;00079 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList  :     ALOAD 3&lt;br /&gt;00080 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList PyObject  :     INVOKEVIRTUAL org/python/core/PyObject.__iternext__ ()Lorg/python/core/PyObject;&lt;br /&gt;00081 Lbad2$py; PyFrame PyObject PyObject . . .  : PyObject PyList PyObject  :     ASTORE 4&lt;br /&gt;00082 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList  :     ALOAD 4&lt;br /&gt;00083 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList PyObject  :     IFNONNULL L1&lt;br /&gt;00084 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00085 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList PyFrame  :     ICONST_1&lt;br /&gt;00086 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList PyFrame I  :     INVOKEVIRTUAL org/python/core/PyFrame.setline (I)V&lt;br /&gt;00087 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList  :     ALOAD 1&lt;br /&gt;00088 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList PyFrame  :     LDC &quot;_[1_3]&quot;&lt;br /&gt;00089 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList PyFrame String  :     INVOKEVIRTUAL org/python/core/PyFrame.dellocal (Ljava/lang/String;)V&lt;br /&gt;00090 Lbad2$py; PyFrame PyObject PyObject PyObject . .  : PyObject PyList  :     ALOAD 6&lt;br /&gt;00091 ?             :     INVOKEVIRTUAL org/python/core/PyObject.__setitem__ (Lorg/python/core/PyObject;Lorg/python/core/PyObject;)V&lt;br /&gt;00092 ?             :     ACONST_NULL&lt;br /&gt;00093 ?             :     ASTORE 2&lt;br /&gt;00094 ?             :     ALOAD 1&lt;br /&gt;00095 ?             :     ICONST_M1&lt;br /&gt;00096 ?             :     PUTFIELD org/python/core/PyFrame.f_lasti : I&lt;br /&gt;00097 ?             :     GETSTATIC org/python/core/Py.None : Lorg/python/core/PyObject;&lt;br /&gt;00098 ?             :     ARETURN&lt;/pre&gt;The first column shown is the instruction number, the second the contents of local variable table, the third the contents of the operand stack, then finally the instruction.&lt;br /&gt;&lt;br /&gt;#90 is that last ALOAD 6 instruction. This tells me the problem is in the prepartion for invoking the __setitem__ method (the following instruction), which is Jython's method for actually doing item assignment, the final step in the order of operations of this line of code.&lt;br /&gt;&lt;br /&gt;Basically an item assignment of a[c] = e results in a Java method call of a.__setitem__(c, e).&lt;br /&gt;&lt;br /&gt;The ALOAD 6 instruction pushes the local variable at index 6 onto the stack. That's preparing the second argument to the __setitem__ method -- which should be the right hand side of the statement, variable e.&lt;br /&gt;&lt;br /&gt;However at that point there's nothing in the local variable 6 (represented by a '.' in CheckClassAdapter's output) -- not even a null, thus it is uninitialzed. Which explains the error message, though not totally the 'register 9' part.&lt;br /&gt;&lt;br /&gt;My point earlier about the word 'register' is that the JVM is not a register based virtual machine, so any notion of machine registers should be abstracted away from a user of it. Though it's obvious that at least some local variables would be mapped onto the underlying real machine's registers for performance, so I'll cut that message some slack.&lt;br /&gt;&lt;br /&gt;Comparing CheckClassAdapters' output vs jad's I see that jad's pyobject3 is (was) at index 6. That's not even the value we want to assign -- pyobject3 was a temporary variable used for collecting the items in the list comprehension.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;To the compiler!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So what does this mean the compiler is doing? In particular, what is the item assignment code doing when calling __setitem__? Here's the method responsible for genearting the item assignment bytecode, from org.python.compiler.CodeCompiler. Ignore the yellow sections, they're not called in this case:&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt; &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;&lt;br /&gt; &lt;span class=&quot;n&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Object&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;visitSubscript&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Subscript&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;ne&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hll&quot;&gt;        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;slice&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Slice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Slice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Slice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;slice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;n&quot;&gt;expr_contextType&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hll&quot;&gt;        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;expr_contextType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AugStore&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;augmode&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;expr_contextType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;            &lt;span class=&quot;n&quot;&gt;restoreAugTmps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;            &lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;expr_contextType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;n&quot;&gt;visit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;n&quot;&gt;visit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;slice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;hll&quot;&gt;            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;expr_contextType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AugStore&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;augmode&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;expr_contextType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Load&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;                &lt;span class=&quot;n&quot;&gt;saveAugTmps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;                &lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;expr_contextType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Load&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     &lt;span class=&quot;n&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hll&quot;&gt;        &lt;span class=&quot;n&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Del&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;            &lt;span class=&quot;n&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;invokevirtual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org/python/core/PyObject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;__delitem__&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;(&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pyObj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;)V&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;        &lt;span class=&quot;n&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Load&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;            &lt;span class=&quot;n&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;invokevirtual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org/python/core/PyObject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;__getitem__&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;(&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pyObj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;)&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pyObj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;hll&quot;&gt;            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;Store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;n&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;aload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;temporary&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;n&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;invokevirtual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org/python/core/PyObject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;__setitem__&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;(&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pyObj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pyObj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;)V&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;The sole argument passed to visitSubscript is an AST node. So the AST for this assignment is visited as:&lt;pre&gt;item assignment (visitSubscript):&lt;br /&gt;  value being e (visit(node.value) in visitSubscript),&lt;br /&gt;  key being (visit(node.slice) in visitSubscript) -&gt;&lt;br /&gt;    list comp -&gt;&lt;br /&gt;      tuple unpack&lt;/pre&gt;Our astview.py utility can show you the real AST nitty gritty:&lt;pre&gt;(jython)pjenvey@golgo13:~/src/java/jython-trunk-clean3$ jython ast/astview.py ~/src/python/sympy/bad2.py&lt;br /&gt;&lt;/pre&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Module'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'body'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Assign (1,0)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;   &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'targets'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Subscript (1,0)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'value'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Name (1,0)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'a'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ctx'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Load'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,)))),&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'slice'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Index'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'value'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ListComp (1,3)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'elt'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Name (1,3)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'b'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ctx'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Load'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,)))),&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'generators'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;          &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'comprehension'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;           &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'target'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Tuple (1,5)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'elts'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;              &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Name (1,9)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'b'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ctx'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Store'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,))),&lt;/span&gt;&lt;br /&gt;              &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Name (1,12)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'c'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ctx'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Store'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,)))),&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ctx'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Store'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,)))),&lt;/span&gt;&lt;br /&gt;           &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'iter'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Name (1,17)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'d'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ctx'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Load'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,)))),&lt;/span&gt;&lt;br /&gt;           &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ifs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,))))))),&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ctx'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Store'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,)))),&lt;/span&gt;&lt;br /&gt;   &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'value'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Name (1,23)'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'e'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'ctx'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Load'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,)))))))&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;This means that some interaction with the list comp/tuple unpack has caused the item assignment to lose track of its state for __setitem__.&lt;br /&gt;&lt;br /&gt;The bad ALOAD is generated by the line: code.aload(temporary);. Meaning the variable temporary is set to 6. The value we should be assigning, the e object, is one of the first things created in the generated method. We can see from the CheckClassAdapter output that e is stored at local 2:&lt;pre&gt;00009 Lbad2$py; PyFrame . . . . .  : PyFrame  :     LDC &quot;e&quot;&lt;br /&gt;00010 Lbad2$py; PyFrame . . . . .  : PyFrame String  :     INVOKEVIRTUAL org/python/core/PyFrame.getname (Ljava/lang/String;)Lorg/python/core/PyObject;&lt;br /&gt;00011 Lbad2$py; PyFrame . . . . .  : PyObject  :     ASTORE 2&lt;br /&gt;00012 Lbad2$py; PyFrame PyObject . . . .  :  :     ALOAD 1&lt;/pre&gt;(Index 2 being the PyObject after PyFrame in the last line)&lt;br /&gt;&lt;br /&gt;So 6 should be 2. I print out the value of temporary from both before and after we visit the child list comp/tuple unpack nodes -- the lines visit(node.value); visit(node.slice); and as I guessed the values are 2 and 6, respectively.&lt;br /&gt;&lt;span&gt;&lt;br /&gt;The Fix&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'm not that familliar with this 'temporary' instance variable in the compiler. It doesn't seem to be the best design as a few different methods use it to store a local variable index which they'll reference later, or which another method will grab later (in this case temporary is already setup for our visitSubscript likely by visitAssign). With multiple methods using it a clash was bound to happen at some point in a Visitor like our compiler.&lt;br /&gt;&lt;br /&gt;I briefly look at the lisp comp/tuple unpack bytecode generation code and wonder why it's overwriting the temporary variable on us, but I don't think I'm going to fix this there. Since temporary is correct before visiting the child nodes, I opt to save the correct value of temporary immediately at the beginning of visitSubscript, so I can use it later.&lt;br /&gt;&lt;br /&gt;Cleaning up the temporary variable business would be preferable, but this will do for now. Our compiler could use a lot of cleanup but that's &lt;a href=&quot;http://journal.thobe.org/2008/07/state-of-advanced-compiler.html&quot;&gt;for the future and has already started&lt;/a&gt;. I do at least double check the other uses of this variable to ensure this isn't a problem elsewhere.&lt;br /&gt;&lt;br /&gt;the fix:&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;gh&quot;&gt;Index: src/org/python/compiler/CodeCompiler.java&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;gh&quot;&gt;===================================================================&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;gd&quot;&gt;--- src/org/python/compiler/CodeCompiler.java (revision 5379)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;gi&quot;&gt;+++ src/org/python/compiler/CodeCompiler.java (working copy)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;gu&quot;&gt;@@ -1604,6 +1604,7 @@&lt;/span&gt;&lt;br /&gt;             return Slice(node, (Slice) node.slice);&lt;br /&gt;         }&lt;br /&gt; &lt;br /&gt;&lt;span class=&quot;gi&quot;&gt;+        int value = temporary;&lt;/span&gt;&lt;br /&gt;         expr_contextType ctx = node.ctx;&lt;br /&gt;         if (node.ctx == expr_contextType.AugStore &amp;amp;&amp;amp; augmode == expr_contextType.Store) {&lt;br /&gt;             restoreAugTmps(node, 2);&lt;br /&gt;&lt;span class=&quot;gu&quot;&gt;@@ -1627,7 +1628,7 @@&lt;/span&gt;&lt;br /&gt;             return null;&lt;br /&gt;         case Param:&lt;br /&gt;         case Store:&lt;br /&gt;&lt;span class=&quot;gd&quot;&gt;-            code.aload(temporary);&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;gi&quot;&gt;+            code.aload(value);&lt;/span&gt;&lt;br /&gt;             code.invokevirtual(&amp;quot;org/python/core/PyObject&amp;quot;, &amp;quot;__setitem__&amp;quot;, &amp;quot;(&amp;quot; + $pyObj + $pyObj + &amp;quot;)V&amp;quot;);&lt;br /&gt;             return null;&lt;br /&gt;         }&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;span&gt;Finally&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since this is old code, I double checked if the bug was present in the 2.2 release of Jython. Turns out it is, so this is probably a really old bug, possbily going back 8 years to Jython 2.0 when list comprehensions were first introduced. &lt;br /&gt;.hll { background-color: #ffffcc } .c { color: #408080; font-style: italic } /* Comment */ .err { border: 1px solid #FF0000 } /* Error */ .k { color: #008000; font-weight: bold } /* Keyword */ .o { color: #666666 } /* Operator */ .cm { color: #408080; font-style: italic } /* Comment.Multiline */ .cp { color: #BC7A00 } /* Comment.Preproc */ .c1 { color: #408080; font-style: italic } /* Comment.Single */ .cs { color: #408080; font-style: italic } /* Comment.Special */ .gd { color: #A00000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ .gr { color: #FF0000 } /* Generic.Error */ .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .gi { color: #00A000 } /* Generic.Inserted */ .go { color: #808080 } /* Generic.Output */ .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .gs { font-weight: bold } /* Generic.Strong */ .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .gt { color: #0040D0 } /* Generic.Traceback */ .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ .kp { color: #008000 } /* Keyword.Pseudo */ .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .kt { color: #B00040 } /* Keyword.Type */ .m { color: #666666 } /* Literal.Number */ .s { color: #BA2121 } /* Literal.String */ .na { color: #7D9029 } /* Name.Attribute */ .nb { color: #008000 } /* Name.Builtin */ .nc { color: #0000FF; font-weight: bold } /* Name.Class */ .no { color: #880000 } /* Name.Constant */ .nd { color: #AA22FF } /* Name.Decorator */ .ni { color: #999999; font-weight: bold } /* Name.Entity */ .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ .nf { color: #0000FF } /* Name.Function */ .nl { color: #A0A000 } /* Name.Label */ .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ .nt { color: #008000; font-weight: bold } /* Name.Tag */ .nv { color: #19177C } /* Name.Variable */ .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ .w { color: #bbbbbb } /* Text.Whitespace */ .mf { color: #666666 } /* Literal.Number.Float */ .mh { color: #666666 } /* Literal.Number.Hex */ .mi { color: #666666 } /* Literal.Number.Integer */ .mo { color: #666666 } /* Literal.Number.Oct */ .sb { color: #BA2121 } /* Literal.String.Backtick */ .sc { color: #BA2121 } /* Literal.String.Char */ .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .s2 { color: #BA2121 } /* Literal.String.Double */ .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ .sh { color: #BA2121 } /* Literal.String.Heredoc */ .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ .sx { color: #008000 } /* Literal.String.Other */ .sr { color: #BB6688 } /* Literal.String.Regex */ .s1 { color: #BA2121 } /* Literal.String.Single */ .ss { color: #19177C } /* Literal.String.Symbol */ .bp { color: #008000 } /* Name.Builtin.Pseudo */ .vc { color: #19177C } /* Name.Variable.Class */ .vg { color: #19177C } /* Name.Variable.Global */ .vi { color: #19177C } /* Name.Variable.Instance */ .il { color: #666666 } /* Literal.Number.Integer.Long *</content:encoded>
	<dc:date>2008-10-12T14:36:31+00:00</dc:date>
</item>
<item rdf:about="http://dunderboss.blogspot.com/2008/05/jython-javaone-2008.html">
	<title>Philip Jenvey: Jython @ JavaOne 2008</title>
	<link>http://dunderboss.blogspot.com/2008/05/jython-javaone-2008.html</link>
	<content:encoded>I attended a couple days of JavaOne last week and luckily avoided the norovirus outbreak. However I did notice something else spreading through Moscone Center; interest in languages on the JVM. For example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; The number of sessions/BoFs covering Dynamic Language topics: around 8 on Groovy, 5 on JRuby, 2 on Jython and also a couple on Scala and Rhino each, with some very good turnouts. That's not even including CommunityOne. Also featured was a Scripting language bowl: a faceoff between JRuby, Groovy, Scala and Jython.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; The JavaOne book store was stocked with just about every JRuby and Groovy book out there. Of the top 10 selling books at JavaOne, &lt;a href=&quot;http://www.adam-bien.com/roller/abien/entry/the_top_selling_books_at&quot;&gt;3 were about languages on top of the JVM &lt;/a&gt; (Groovy and JavaFX). &lt;a href=&quot;http://www.adam-bien.com/roller/abien/entry/wednesday_s_top_selling_books&quot;&gt;Wednesday's top 10 sellers&lt;/a&gt; also included JRuby committer Ola Bini's Practical JRuby on Rails as well as another Rails book. I'm hoping to see a whole lot of Python books on the shelf next year. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;A number of Ruby/JRuby folks (and not just the ones employed by Sun either) told me that they are quite happy with NetBeans' support for Ruby. It has code completion and even some refactoring support. Tor Norbye and the NetBeans crew are now working on JavaScript support (&lt;a href=&quot;http://blogs.sun.com/tor/entry/javascript_type_inference&quot;&gt;Look Mom, JavaScript type inference&lt;/a&gt;) and are slated to add Python support next. Ted Leung has already begun talking to them about the details.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.eweek.com/c/a/Application-Development/Ruby-is-on-the-Rise/&quot;&gt;Ruby is still on the rise&lt;/a&gt;, and JRuby is a big contributing factor. JRuby definitely had the attention of many attendees and definitely has a growing userbase in Java land.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; Groovy and the Groovy on Grails combo is also on the rise. linkedin.com, Sky TV and SAP's Composition on Grails Product are a few notable users of Grails. IBM's Project Zero (aka the WebSphere sMash product) is also utilizing Groovy, as well as their own PHP on the JVM implementation.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; As for a language he'd use *now* on top of the JVM, except Java, &lt;a href=&quot;http://www.adam-bien.com/roller/abien/entry/java_net_javaone_which_programming&quot;&gt;James Gosling endorses Scala&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Sun's own new scripting lanuguage on top of the JVM, JavaFX, was of course all over the place.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; John Rose: &quot;&lt;span&gt;I think we are on the right track here, letting the JVM grow independently of the Java language. (The language, if it has room to grow, will catch up.) James Gosling expressed a similar sentiment at his February Java Users Group talk “The Feel of Java, Revisited”, when he said he sometimes felt more interested in the future of the JVM than that of the Java language. “I don’t really care about the Java language. All the magic is in the JVM specification.” (Yes, I think that is hyperbolic. No, he is not abandoning Java.) I love both Java and the JVM, and I am pushing on the JVM this year.&lt;/span&gt;&quot;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; The potential  Java 7 new features. They're still potential because the Java 7 JSR isn't out yet. While some are nice (like &lt;a href=&quot;http://blogs.sun.com/jrose/entry/the_golden_spike&quot;&gt;John Rose's JSR 292&lt;/a&gt;, which will be a big help for JVM languages like Jython), some are arguably not nice. I hear more disdain than ever over where Java the language is going, which makes other languages on top of the JVM even more desirable.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; I met many new people (more than I expected) who have used Jython at some point in their career, and some who are using it now (like &lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=49332&quot;&gt;pushToTest's Frank Cohen&lt;/a&gt;). They're all eager about its recent progress and can't wait for the 2.5 release.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Reminder: the Java world is large. Over 10,000 attendees, probably 10 times as many as this year's PyCon. All potential Python converts, right?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Ok, I mostly covered what I observed about different JVM languages at JavaOne, not just Jython. What I'm getting at here is that there's a lot of potential for the Jython 2.5 release (and all that code waiting around on &lt;a href=&quot;http://pypi.python.org/pypi&quot;&gt;Pypi&lt;/a&gt; to run on it) in this large Java ecosystem.</content:encoded>
	<dc:date>2008-10-12T04:13:05+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/417740655/">
	<title>Ed Taekema: I Switched my Asus eee 900 to Ubuntu eee 8.04.1</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/417740655/</link>
	<content:encoded>&lt;p&gt;I&amp;#8217;ve made the switch to Ubuntu for my Asus eee 900.  I played around with the &lt;a href=&quot;http://www.ubuntu-eee.com/&quot; target=&quot;_blank&quot;&gt;ubuntu-eee&lt;/a&gt; distribution a while ago and convinced myself that the install would work.  What finally pushed me to do this what the very stale app repository for Xandros &amp;#8230; So I backed up all my personal files to a 16 gb HC SD card, and used a USB stick to install Ubuntu eee 8.04.1.&lt;/p&gt;
&lt;div id=&quot;attachment_660&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;a href=&quot;http://www.fishandcross.com/blog/wp-content/uploads/2008/10/p1010478-modified.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-660&quot; title=&quot;Ubuntu eee 8.04.1&quot; src=&quot;http://www.fishandcross.com/blog/wp-content/uploads/2008/10/p1010478-modified-300x282.jpg&quot; alt=&quot;Ubuntu eee 8.04.1 install and recovery media&quot; width=&quot;300&quot; height=&quot;282&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Ubuntu eee 8.04.1 install and recovery media&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;So far I am enjoying the Netbook Remix interface, but may eventually switch back to full mode.  Given that my Asus is not one of the Atom based units, I want to get the most performance out of the system so I&amp;#8217;ll compare the two modes and take which ever one is fastest.&lt;/p&gt;
&lt;p&gt;So far the only problem I&amp;#8217;ve encountered is that automounting inserted SD cards (and maybe USB sticks) doesn&amp;#8217;t work.  The mount needs to be performed by root, then it all works nicely.  The performance is really good, maybe even better than on Xandros, and the updated apps are great.  This is where I&amp;#8217;ll stay I think.  But just in case, I still travel with a USB sticks with ubuntu and the recovery image in the unlikely event that I do need to go back to Xandros.  Since these two sticks will be in my bag from now on, I put my label maker to good use&amp;#8230;&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=BWjNM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=BWjNM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=8uF6m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=8uF6m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=UwqFM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=UwqFM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=mmTxm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=mmTxm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=1Wlqm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=1Wlqm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=H0GVM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=H0GVM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=ncXgM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=ncXgM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=ZiIlm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=ZiIlm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/417740655&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-11T12:53:15+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/417726726/">
	<title>Ed Taekema: The Low Carb Grocery - Finally a store in Toronto Area</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/417726726/</link>
	<content:encoded>&lt;p&gt;I don&amp;#8217;t have to stuff my suitcase full of CarbQuick anymore!  There is now a great Low carb grocery store in the Toronto area (Markham 404 &amp;amp; Steeles area for locals).  They have a great selection of Low Carb products and are also connected to some pretty talented bakers because their line of very low carb cheese cake and 4 net carbs / slice whole wheat bread is amazing.  Check them out at &lt;a href=&quot;http://www.thelowcarbgrocery.com&quot; target=&quot;_blank&quot;&gt;The Low Carb Grocery&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=INuHM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=INuHM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=xHYRm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=xHYRm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=3spHM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=3spHM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=4fYnm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=4fYnm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=5NUqm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=5NUqm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=HGMtM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=HGMtM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=1UQUM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=1UQUM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=pmssm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=pmssm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/417726726&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-11T12:23:43+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/416391222/">
	<title>Ed Taekema: Vim Mode for Firefox - Perfect for Small Screens</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/416391222/</link>
	<content:encoded>&lt;p&gt;For those who are keyboard focused, now you can run Firefox using all the same key bindings as VIM.  Take a look at &lt;a href=&quot;http://vimperator.mozdev.org/&quot; target=&quot;_blank&quot;&gt;vimperator&lt;/a&gt;, a VIM mode plugin for Firefox.  When you install it, the menu bar, navigation bar and bookmarks are hidden, and all your surfing is controlled through a VIM like input area by the status bar.&lt;/p&gt;
&lt;div id=&quot;attachment_650&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;a href=&quot;http://www.fishandcross.com/blog/wp-content/uploads/2008/10/vimperator.png&quot;&gt;&lt;img class=&quot;size-medium wp-image-650&quot; title=&quot;Vimperator&quot; src=&quot;http://www.fishandcross.com/blog/wp-content/uploads/2008/10/vimperator-300x210.png&quot; alt=&quot;Vimperator Vim Mode for Firefox&quot; width=&quot;300&quot; height=&quot;210&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Vimperator Vim Mode for Firefox&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;It has all the usual page navigation keys like j - k to scroll up and down, h - l for horizontal scrolling, and space bar to scroll down a page.  They also have a neat way to highlight links with number that can then be selected via a command + the number to navigate to the link.  The search capabilities are there as are using standard Vim commands to go the next match.  There are also commands for navigating through the tabs, opening and closing tabs &amp;#8230; all in all a very complete VIM experience for Firefox.&lt;/p&gt;
&lt;p&gt;Hints let you quickly navigate to a link by entering a number and pressing Enter.  Fast link mode is activated by pressing F &amp;#8230; each link on the page gets a highlight number in front of it.  Type that number and press enter and Firefox navigates to the link.&lt;/p&gt;
&lt;p&gt;This is a pretty interesting idea.  The only complaint I have is that it breaks the shortcut keys I use in Google&amp;#8217;s GMail and Reader and of course if I am typing text into a textarea on an html form, it happily ignores all vimperator behavior.  I think that is to be expected.  I think I may keep this for a while.  Its starting to grow on me.  It may make it over to my Asus eee &amp;#8230; this gives me about as much screen real estate as possible for actual content.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=WY4XM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=WY4XM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=Fkp8m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=Fkp8m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=btYcM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=btYcM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=qU6Pm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=qU6Pm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=U4LXm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=U4LXm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=lVMpM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=lVMpM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=wFAkM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=wFAkM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=10xUm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=10xUm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/416391222&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-10T03:17:57+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/416300706/">
	<title>Ed Taekema: How to Hire A Technology Implementor</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/416300706/</link>
	<content:encoded>&lt;p&gt;David over at &lt;a href=&quot;http://www.37signals.com/svn/posts/1296-do-it-yourself-first&quot; target=&quot;_blank&quot;&gt;37 Signals&lt;/a&gt; makes the following assertion:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;You should never hire anyone for something you haven’t first struggled to do on your own. It’ll teach you most of what you need to know to actually interview candidates, it’ll allow you to understand the nature of the work better (do I even need to hire or can we outsource?), and you’ll know exactly what a job well done will look like. It’ll also give you a sense of whether the job is big enough for a full-time hire yet or if you can skimp by on your own (the latter is preferable if possible).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I think this is good advice for more than just a hiring situation.  So many organizations purchase software tools and along with it a small dose of services from a vendor to get up and running.  While I understand that purchasing services together with the product works well for both you and the vendor, there are some huge risks getting the services locked in so early.  You can:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Underestimate the complexity of the implementation and run the tool into the ground.&lt;/li&gt;
&lt;li&gt;Miss the opportunities to get additional value out of the tool because you are focused the ideas that generated the purchase and that is what the vendor builds for you.&lt;/li&gt;
&lt;li&gt;Hire the wrong people for the implementation.&lt;/li&gt;
&lt;li&gt;Under/Over estimate the amount of help you will need to implement a solution.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here are some suggestions for how to do this a bit better.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If the solution involves new technology and skills, invest in limited up front help from outside the organization to get &lt;strong&gt;you &lt;/strong&gt;proficient so you can try things &lt;strong&gt;yourself&lt;/strong&gt;. Note the emphasis.&lt;/li&gt;
&lt;li&gt;If you determine you need additional help, after you and your organization have a better feel for what needs to be done, then pursue external help from the vendor and other sources.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you follow that approach you will know what you need, have an idea of what the finished solution will look like, and know when you are done.  Believe it or not, the supplier will probably be happier with this kind of arrangement.  We all like working for prople who know what they want and have a good feel for reality!&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=hIj5M&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=hIj5M&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=YBOPm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=YBOPm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=Y1fPM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=Y1fPM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=RrEVm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=RrEVm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=ToRsm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=ToRsm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=bFbnM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=bFbnM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=767IM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=767IM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=Ex1Wm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=Ex1Wm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/416300706&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-10T00:54:18+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/415908052/">
	<title>Ed Taekema: Another Windows Copy Utility - FastCopy</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/415908052/</link>
	<content:encoded>&lt;p&gt;With a name like that it has to be good.  I ran across &lt;a href=&quot;http://www.ipmsg.org/tools/fastcopy.html.en&quot; target=&quot;_blank&quot;&gt;Fast Copy&lt;/a&gt; while looking for a solution to my failing windows file copies and it looks like a winner.  It basically gets better performance for file copies since it doesn&amp;#8217;t use the MFC at all.  Instead it hits the Win32 api directly and can get near to actual device limit speeds for file copies.&lt;/p&gt;
&lt;div id=&quot;attachment_639&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;a href=&quot;http://www.fishandcross.com/blog/wp-content/uploads/2008/10/fast_copy.png&quot;&gt;&lt;img class=&quot;size-medium wp-image-639&quot; title=&quot;Fast Copy&quot; src=&quot;http://www.fishandcross.com/blog/wp-content/uploads/2008/10/fast_copy-230x300.png&quot; alt=&quot;Fastest File Copy on Windows&quot; width=&quot;230&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Fastest File Copy on Windows&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Try it out and let me know if it measures up to its claim to be the fastest file copy on windows.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=GrzqM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=GrzqM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=n0Wam&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=n0Wam&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=UKtzM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=UKtzM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=Eqx8m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=Eqx8m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=BDRwm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=BDRwm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=zPjOM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=zPjOM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=awdmM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=awdmM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=vVZ0m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=vVZ0m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/415908052&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-09T16:18:29+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/415262833/">
	<title>Ed Taekema: Security Issues with Mozilla Lab’s Ubiquity</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/415262833/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://news.cnet.com/8301-17939_109-10053044-2.html?part=rss&amp;amp;tag=feed&amp;amp;subj=Webware&quot; target=&quot;_blank&quot;&gt;Chris Soghoian&lt;/a&gt; has some pretty legitimate sounding security concerns with Ubiquity.  I&amp;#8217;ve blogged about Ubiquity before, and have it installed on my various Firefox installations, but I have to confess, I haven&amp;#8217;t added any extra commands to it.  Good thing too, since that could be a pretty serious security risk.  Here are issues that Chris identifies:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;There is no protection in Ubiquity for malicious JavaScript commands.  The user is responsible for only installing code the trust, but most users will be unable to catch dangerous JavaScript just by reading it.  If someone was really clever they could certainly write a command that looked pretty clean but was still dangerous.&lt;/li&gt;
&lt;li&gt;Auto-Update of commands could make it easy for a malicious user to write a useful and popular command and once it was widely used, send out an update that was dangerous.&lt;/li&gt;
&lt;li&gt;Updates for commands are also served over a non-encrypted http connection, which is vulnerable to being intercepted and used in a &amp;#8220;man in the middle&amp;#8221; style attack.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ubiquity is certainly not finished and I am sure that Mozilla labs will move to address these issues.  In the mean time, it&amp;#8217;s proably a good idea to use with care.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=C2qkM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=C2qkM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=SC3um&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=SC3um&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=WAzpM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=WAzpM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=18XQm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=18XQm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=u6Grm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=u6Grm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=3n8jM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=3n8jM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=NcNsM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=NcNsM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=5RMum&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=5RMum&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/415262833&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-09T00:21:34+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/414971253/">
	<title>Ed Taekema: Asus eee - Upgrade Solid State Storage</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/414971253/</link>
	<content:encoded>&lt;p&gt;&lt;span&gt;Super Talent has line the availability of a &lt;a href=&quot;http://www.supertalent.com/press_view.php?prid=5f93f983524def3dca464469d2cf9f3e&amp;amp;lid=c4ca4238a0b923820dcc509a6f75849b&quot; target=&quot;_blank&quot;&gt;new line of  mini PCI-Express SSDs&lt;/a&gt;, in 16GB, 32GB and 64GB sizes.  These are designed and tested with Asus eee.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;
The current pricing is &lt;/span&gt;&lt;span&gt;$53 for the 16 Gig, &lt;/span&gt;&lt;span&gt;$79 for the 32 Gig, and &lt;/span&gt;&lt;span&gt;$149 for the 65 Gig models. &lt;/span&gt;So if you are running into storage limitations and want to expand your on board flash space, these look like the way to go.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;via &lt;a href=&quot;http://www.liliputing.com/2008/10/super-talent-releases-affordable-eee-pc-ssd-upgrades.html&quot; target=&quot;_blank&quot;&gt;Liliputing&lt;/a&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=k1KUM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=k1KUM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=9jDCm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=9jDCm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=tBZkM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=tBZkM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=dcawm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=dcawm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=0qkLm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=0qkLm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=pIZxM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=pIZxM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=FTf1M&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=FTf1M&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=a8bFm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=a8bFm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/414971253&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-08T16:52:11+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/414841500/">
	<title>Ed Taekema: Make Windows File Share Copy Recoverable?</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/414841500/</link>
	<content:encoded>&lt;p&gt;I&amp;#8217;m digging for a tool that will allow me to resume a failed file copy from a Windows file share.  I have to move a bunch of data and am limited to using Windows SP sp2 to do it .. but I seem to get random failures at various points in the 220 meg file copy &amp;#8230; Is there a tool out there that will somehow wrap the file copy and let it recover from such errors?  Large file copies seem kinda like a gamble with windows &amp;#8230;&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=2xI3M&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=2xI3M&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=vOZym&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=vOZym&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=om5wM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=om5wM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=G0BVm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=G0BVm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=GqM2m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=GqM2m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=YSswM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=YSswM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=RBk6M&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=RBk6M&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=54VXm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=54VXm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~4/414841500&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-10-08T13:55:25+00:00</dc:date>
</item>
<item rdf:about="http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/414428305/">
	<title>Ed Taekema: High Fructose Corn Syrup a Natural Product?</title>
	<link>http://feeds.feedburner.com/~r/RoadWarriorCollaboration/~3/414428305/</link>
	<content:encoded>&lt;p&gt;I think I have stumbled into a weird parallel universe where black is white and white is black .. and manufactured chemical products are &amp;#8230; natural.  Apparently, the United States FDA has come out to say that &lt;a href=&quot;http://www.foodnavigator-usa.com/Financial-Industry/HFCS-is-natural-says-FDA-in-a-letter&quot; target=&quot;_blank&quot;&gt;High Fructose Corn Syrop (HFCS) is a natural product&lt;/a&gt;.  Now this is rather surprising since the particular arrangement of atoms in HFCS does not actually occur on its own anywhere in nature and requires some pretty heavy duty chemical engineering to manufacture it from otherwise inedible (for humans anyway) commodity corn.&lt;/p&gt;
&lt;p&gt;Of course the problem with HFCS is how it is metabolized.  We metabolize fructose directly through the liver, and there is quite a bit of evidence now emerging that HFCS is a major culprit behind many rising diseases of of our time such as heart disease, obesity, diabetes, hypertension, even cancer.  Check out &lt;a href=&quot;http://www.marksdailyapple.com/foods-with-hfcs/&quot; target=&quot;_self&quot;&gt;The Daily Apple &lt;/a&gt;for some more issues related to consuming HFCS.  Oh, there is also a book called &lt;a href=&quot;http://www.amazon.com/gp/product/0425213579?ie=UTF8&amp;amp;tag=roadwarricoll-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0425213579&quot;&gt;Sugar Shock!&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=roadwarricoll-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0425213579&quot; border=&quot;0&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt; (isn&amp;#8217;t there always) that makes a case that HFCS alone is the cause of many of our modern diseases.   The thesis is a little exaggerated, but its a light read (a little repetitive) but worth skimming if this issue interests you.&lt;/p&gt;
&lt;p&gt;There is also some good info online.  Here is a study on HFCS from the &lt;a href=&quot;http://www.ajcn.org/cgi/content/full/79/4/537&quot; target=&quot;_blank&quot;&gt;American Journal of Clinical Nutrition&lt;/a&gt; that details a little bit about the differences between glucose and fructose metabolism.  Notice how fructose is more efficient at producing triglycerides and seems to short circuit satiety signals:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Glucose provides &amp;#8220;satiety&amp;#8221; signals to the brain&lt;sup&gt; &lt;/sup&gt;that fructose cannot provide because it is not transported into&lt;sup&gt; &lt;/sup&gt;the brain. &amp;#8230; Fructose&lt;sup&gt; &lt;/sup&gt;also provides carbon atoms for synthesis of long-chain fatty&lt;sup&gt; &lt;/sup&gt;acids, although in humans, the quantity of these carbon atoms&lt;sup&gt; &lt;/sup&gt;is small. Thus, fructose facilitates the biochemical formation&lt;sup&gt; &lt;/sup&gt;of triacylglycerols more efficiently than does glucose.&lt;sup&gt; &lt;/sup&gt;For example, when a diet containing 17% fructose was provided&lt;sup&gt; &lt;/sup&gt;to healthy men and women, the men, but not the women, showed&lt;sup&gt; &lt;/sup&gt;a highly significant increase of 32% in plasma triacylglycerol&lt;sup&gt; &lt;/sup&gt;concentrations.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;If you are interested in more details on HFCS  from a scientific point of view, read &lt;a href=&quot;http://www.westonaprice.org/motherlinda/cornsyrup.html&quot; target=&quot;_blank&quot;&gt;The Murky World of High Fructose Corn Syrup&lt;/a&gt;. Also Gary Taubes in &lt;a href=&quot;http://www.amazon.com/gp/product/1400033462?ie=UTF8&amp;amp;tag=roadwarricoll-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1400033462&quot;&gt;Good Calories, Bad Calories&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=roadwarricoll-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1400033462&quot; border=&quot;0&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;, details the meteoric increase in HFCS consumption from its introduction in 1975.  Taubes sees HFCS as the main impulse behind the increase in sugar consumption from a stable 110 pounds per person per year pre 1960s to 150 pounds per year and up now, with HFCS making up most of the increase (See Taubes page 189-199) .&lt;/p&gt;
&lt;p&gt;So does HFCS matter?  It does.  Its the number one sweetener used most soft drinks and can be found in processed foods from cheese to ketchup.  Best to know what you are eating &amp;#8230; and no &amp;#8230; its not natural.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=utPkM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=utPkM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=Vvgbm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=Vvgbm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?a=3cRoM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/RoadWarriorCollaboration?i=3cRoM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.co