<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>The Path to Zen</title>
	
	<link>http://www.digizenstudio.com/blog</link>
	<description>Jing Xue's Weblog</description>
	<lastBuildDate>Sun, 29 Mar 2009 04:27:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ThePathToZen" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="thepathtozen" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>When does Ivy:deliver not replace dynamic revisions?</title>
		<link>http://www.digizenstudio.com/blog/2009/03/28/when-does-ivy-deliver-not-replace-dynamic-revisions/</link>
		<comments>http://www.digizenstudio.com/blog/2009/03/28/when-does-ivy-deliver-not-replace-dynamic-revisions/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 04:27:09 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[ivy]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=234</guid>
		<description><![CDATA[When publishing a module, Ivy:deliver (and in turn, publish) has the ability to replace dynamic dependency revisions (e.g. ranges like &#8220;2.5+&#8221;) with the specific revisions resolved. One thing that is not very obvious is that, since the task relies on the latest resolve results to figure out what exactly those dynamic revisions are resolved to, [...]]]></description>
			<content:encoded><![CDATA[<p>When publishing a module, Ivy:deliver (and in turn, publish) has the ability to replace dynamic dependency revisions (e.g. ranges like &#8220;2.5+&#8221;) with the specific revisions resolved. One thing that is not very obvious is that, since the task relies on the latest resolve results to figure out what exactly those dynamic revisions are resolved to, if the latest resolve is a partial one &#8211; meaning only some of the confs are resolved, ivy:deliver may not be able to see all the resolved revisions.</p>
<p>I discovered this when I changed my build script to only resolve &#8216;master&#8217; before publishing a snapshot to a local repo, because I wanted local publishes to be extremely fast. I guess it&#8217;s ok for local snapshots to carry dynamic revisions, but it&#8217;s probably a good idea to always do a full resolve before publishing a release.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2009/03/28/when-does-ivy-deliver-not-replace-dynamic-revisions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>An Ant Task to Maintain Eclipse Classpaths with Ivy Resolve Results</title>
		<link>http://www.digizenstudio.com/blog/2009/02/13/ivy-ant-task-to-maintain-eclipse-classpaths/</link>
		<comments>http://www.digizenstudio.com/blog/2009/02/13/ivy-ant-task-to-maintain-eclipse-classpaths/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 05:21:00 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ivy]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=223</guid>
		<description><![CDATA[I put together an Ant task(download) that can use the result of the ivy:resolve task to maintain Eclipse's .classpath file. If your ivy:resolve also generates references to the source jars, this task will also attach them to the corresponding classpath entries in the .classpath file.
To use the class, drop the class on you Ant classpath, [...]]]></description>
			<content:encoded><![CDATA[<p>I put together an Ant task(<a href='http://www.digizenstudio.com/blog/wp-content/uploads/2009/02/EclipseClasspath.java'>download</a>) that can use the result of the <code>ivy:resolve</code> task to maintain Eclipse's .classpath file. If your ivy:resolve also generates references to the source jars, this task will also attach them to the corresponding classpath entries in the .classpath file.<span id="more-223"></span></p>
<p>To use the class, drop the class on you Ant classpath, then declare the task like so:</p>
<div class="igBar"><span id="lxml-5"><a href="#" onclick="javascript:showPlainTxt('xml-5'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">XML:</span>
<div id="xml-5">
<div class="xml">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;taskdef</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"ivyeclipse"</span> <span style="color: #000066;">classname</span>=<span style="color: #ff0000;">"org.apache.ivy.ant.EclipseClasspath"</span><span style="font-weight: bold; color: black;">/&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
It's a standard <a href="http://ant.apache.org/ivy/history/latest-release/use/postresolvetask.html" rel="_blank">Ivy post-resolve task</a>. What that means is a) it takes the same common attribute set as any other post-resolve tasks would, and b) it must be run after an ivy:resolve call.  For example, every time the following line</p>
<div class="igBar"><span id="lxml-6"><a href="#" onclick="javascript:showPlainTxt('xml-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">XML:</span>
<div id="xml-6">
<div class="xml">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;ivyeclipse</span> <span style="color: #000066;">conf</span>=<span style="color: #ff0000;">"provided,testtime"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
executes, the entries in .classpath that were generated from the previous run are removed, and new entries added according to the latest ivy:resolve result on ivy conf "provided" and "testtime".  The entries generated by this task are marked with an attribute, <code>ivygen="true"</code>, so any entries you manually added are not impacted.  <strong>Note:</strong> if you have added classpath entries manually for the dependencies in ivy.xml, before running this task for the first time ever, it's a good idea to remove all of them, otherwise you'll end up with duplicated entries.</p>
<p>To invoke the source jar attachment support, just add to the ivy.xml references to the source jars. For example:</p>
<div class="igBar"><span id="lxml-7"><a href="#" onclick="javascript:showPlainTxt('xml-7'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">XML:</span>
<div id="xml-7">
<div class="xml">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;dependency</span> <span style="color: #000066;">org</span>=<span style="color: #ff0000;">"org.hibernate"</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"hibernate-core"</span> <span style="color: #000066;">rev</span>=<span style="color: #ff0000;">"3.3.1.GA"</span> <span style="color: #000066;">conf</span>=<span style="color: #ff0000;">"compile;references"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artifact</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"hibernate-core"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"sources"</span> <span style="color: #000066;">ext</span>=<span style="color: #ff0000;">"jar"</span> m:<span style="color: #000066;">classifier</span>=<span style="color: #ff0000;">"sources"</span> <span style="color: #000066;">conf</span>=<span style="color: #ff0000;">"references"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/dependency<span style="font-weight: bold; color: black;">&gt;</span></span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
would add hibernate-core's source jar to ivy conf named "references". Then make sure to include conf "references" in the ivy:resolve call, such as:</p>
<div class="igBar"><span id="lxml-8"><a href="#" onclick="javascript:showPlainTxt('xml-8'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">XML:</span>
<div id="xml-8">
<div class="xml">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;ivyeclipse</span> <span style="color: #000066;">conf</span>=<span style="color: #ff0000;">"provided,testtime,references"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
The classpath entries updated will then also have the corresponding source jars (if available) attached.</p>
<p><a href='http://www.digizenstudio.com/blog/wp-content/uploads/2009/02/EclipseClasspath.java'><strong>Here's the source code for the task.</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2009/02/13/ivy-ant-task-to-maintain-eclipse-classpaths/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse, Mac OS X, JDK 1.6</title>
		<link>http://www.digizenstudio.com/blog/2009/01/21/eclipse-mac-os-x-jdk-16/</link>
		<comments>http://www.digizenstudio.com/blog/2009/01/21/eclipse-mac-os-x-jdk-16/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 14:38:33 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[jobsthenewcyborg]]></category>
		<category><![CDATA[macosx]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=214</guid>
		<description><![CDATA[Question: how do you not want to start an unseasonably cold Northern Virginia winter morning?
Answer: have some chill down the spine when you fire up Eclipse on your Mac Book Pro Toy(tm), only to get hit by this mysterious error message:

_NSJVMLoadLibrary: NSAddLibrary failed for /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Libraries/libjvm.dylib
JavaVM FATAL: Failed to load the jvm library.

As the initial "oh [...]]]></description>
			<content:encoded><![CDATA[<p>Question: how do you <em>not</em> want to start an unseasonably cold Northern Virginia winter morning?<br />
Answer: have some chill down the spine when you fire up Eclipse on your Mac Book Pro Toy(tm), only to get hit by this mysterious error message:</p>
<blockquote><p>
_NSJVMLoadLibrary: NSAddLibrary failed for /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Libraries/libjvm.dylib<br />
JavaVM FATAL: Failed to load the jvm library.
</p></blockquote>
<p>As the initial "oh crap now we don't have Bush to blame it on" panic settles in, you realize since the last time Eclipse ran fine, you did go in there and tinkered with that "CurrentJDK" stuff, so that JDK 1.6 instead of 1.5 would be the default.</p>
<p>So you start googling frantically and find, through the first link returned, <a href="http://blog.kischuk.com/2008/05/08/running-eclipse-on-macbooks-with-java-6/" rel="_blank">this neat solution by rkischuk</a>.  The only difference is that the file you have to edit is located at:<br />
<code><br />
${ECLIPSE_HOME}/Eclipse.app/Contents/Info.plist<br />
</code></p>
<p>Hmm..., and when Steve Jobs said <a href="http://java.sys-con.com/node/331264" rel="_blank">"Java's not worth building in,"</a> you thought he was only talking about the iPhone.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2009/01/21/eclipse-mac-os-x-jdk-16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fix broken maven-metadata.xml through Nexus</title>
		<link>http://www.digizenstudio.com/blog/2009/01/17/fix-broken-maven-metadataxml-through-nexus/</link>
		<comments>http://www.digizenstudio.com/blog/2009/01/17/fix-broken-maven-metadataxml-through-nexus/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 02:41:23 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[ivy]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[nexus]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=210</guid>
		<description><![CDATA[The log4j maven-metadata.xml hosted at ibiblio is missing the latest two versions, 1.1.14 and 1.1.15.  It becomes a problem for me as an Ivy user, too, since Ivy 2.0 adds the ability to use maven metadata to list available versions.
Fortunately I have a Nexus repository as the aggregator/proxy to all the external repositories.  [...]]]></description>
			<content:encoded><![CDATA[<p>The log4j maven-metadata.xml hosted at <a href="http://repo2.maven.org/maven2/log4j/log4j/maven-metadata.xml" rel="_blank">ibiblio</a> is missing the latest two versions, 1.1.14 and 1.1.15.  It becomes a problem for me as an Ivy user, too, since Ivy 2.0 adds the ability to <a href="http://www.digizenstudio.com/blog/2008/03/18/ivy-2-maven-metadata-support/" rel="_blank">use maven metadata to list available versions</a>.</p>
<p>Fortunately I have a Nexus repository as the aggregator/proxy to all the external repositories.  Brian from the Nexus IRC room pointed me to this solution/workaround: add the fixed maven-metadata.xml to a repo hosted by Nexus - e.g., the "3rd Party" repo coming out of box in Nexus. Then create a group to aggregate the 3rd Party and the public Ibiblio repos.  The "virtual" group repo will automatically create a merged maven-metadata.xml on the fly whenever it is requested.</p>
<p>And it works like a charm. Thanks, Brian!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2009/01/17/fix-broken-maven-metadataxml-through-nexus/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hibernate more picky on character type discriminators</title>
		<link>http://www.digizenstudio.com/blog/2008/11/20/hibernate-more-picky-on-character-type-discriminators/</link>
		<comments>http://www.digizenstudio.com/blog/2008/11/20/hibernate-more-picky-on-character-type-discriminators/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 03:15:02 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=194</guid>
		<description><![CDATA[On a project I'm working on, I've got one abstract base class and two subclasses, which are mapped to one same table, with a single character column as the discriminator. I got this error when Hibernate initializes:

org.hibernate.MappingException: multiple or zero characters found parsing string

Turns out if the discriminator type is "character", the base class must [...]]]></description>
			<content:encoded><![CDATA[<p>On a project I'm working on, I've got one abstract base class and two subclasses, which are mapped to one same table, with a single character column as the discriminator. I got this error when Hibernate initializes:</p>
<blockquote><p>
<code>org.hibernate.MappingException: multiple or zero characters found parsing string</code>
</p></blockquote>
<p>Turns out if the discriminator type is "character", the base class must have a discriminator-value attribute declared, even though obviously due to the abstractness there will never be any row carrying that discriminator value.  And apparently for "string" type discriminators, there isn't such a limitation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/11/20/hibernate-more-picky-on-character-type-discriminators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weird git gui startup problem</title>
		<link>http://www.digizenstudio.com/blog/2008/11/09/weird-git-gui-startup-problem/</link>
		<comments>http://www.digizenstudio.com/blog/2008/11/09/weird-git-gui-startup-problem/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 20:15:11 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=190</guid>
		<description><![CDATA[This has happened to me for a while every time after I build and install the latest git, but I didn't really get to the bottom of it until just now. My tinfoil hat umask setting, 0027, finally came around and bit me!
After a fresh rebuild and 'make install', git gui upon starting up would [...]]]></description>
			<content:encoded><![CDATA[<p>This has happened to me for a while every time after I build and install the latest git, but I didn't really get to the bottom of it until just now. My tinfoil hat umask setting, 0027, finally came around and bit me!<span id="more-190"></span></p>
<p>After a fresh rebuild and '<code>make install</code>', git gui upon starting up would insist on making me choose a repository, even when I start it from a perfectly valid git working directory.</p>
<p>So I found out that it was failing to execute "git rev-parse" during startup, which was due to /usr/local/libexec/git-core/git-rev-parse being installed with mode 750. And that was traced back to the fact that I have umask set to 0027, so the locally built git-add would have mode 750. Since git uses hardlinks to install all the built-in commands, everything hardlinked to git-add would have the same mode, and I end up with bunch of git built-ins owned by root and inaccessible to anybody else.</p>
<p>So the workaround is either '<code>chmod o+rx ${git-source-root}/git-add</code>' before '<code>make install</code>', or '<code>sudo chmod o+rx ${prefix}/libexec/git-core/*</code>' after '<code>make install</code>'.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/11/09/weird-git-gui-startup-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hardy to Intrepid</title>
		<link>http://www.digizenstudio.com/blog/2008/11/02/hardy-to-intrepid/</link>
		<comments>http://www.digizenstudio.com/blog/2008/11/02/hardy-to-intrepid/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 23:11:14 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=178</guid>
		<description><![CDATA[I was planning on giving it a week before upgrading my desktop to the new Ubuntu 8.10 Intrepid Ibex, but couldn't find better things to do on the mild sunny classic Virginian Saturday afternoon than hunching over a computer in the darkest corner of a basement... 
Anyway, the online upgrade wasn't as slow as I [...]]]></description>
			<content:encoded><![CDATA[<p>I was planning on giving it a week before upgrading my desktop to the new Ubuntu 8.10 Intrepid Ibex, but couldn't find better things to do on the mild sunny classic Virginian Saturday afternoon than hunching over a computer in the darkest corner of a basement... <span id="more-178"></span></p>
<p>Anyway, the online upgrade wasn't as slow as I thought - took about 3 hours to download about 1GB data and set up everything.  Did run into a couple of minor surprises:</p>
<p>The computer booted up fine... without any functioning dns! NetworkManager apparently decided that it was OK to silently overwrite all the changes I made in <code>/etc/resolv.conf</code>.  I have had <a href="http://www.digizenstudio.com/blog/2007/04/25/ubuntu-network-manager-feisty-fowl-up/" rel="_blank">some history with the Network Manager</a> before, and so was not hesitant to disable it with sudo update-rc.d -f NetworkManager remove<code>.</p>
<p>My Logitech Marble Mouse seemed to run into some issue and wouldn't let me scroll by holding down the left small button. I had to revert to xorg.conf following the workaround mentioned in  <a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/261995" rel="_blank">this HAL bug</a>.</p>
<p>The only real annoyance was that kde4 stopped honoring </code><code>~/.kde4/Autostart</code>, and when restoring a previously saved session wouldn't restore anything on the system tray either.  So none of the utility programs I'm used to - klipper, kbiff, etc. - were automatically started any more. It was annoying because I had to restart X over and over to troubleshoot.  Finally I spotted the Autostart item in System Settings, which seems to be using <code>~/.config/autostart</code> (I guess that's part of the freedesktop.org standards?), and works fine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/11/02/hardy-to-intrepid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retab files using vim</title>
		<link>http://www.digizenstudio.com/blog/2008/11/02/retab-files-using-vim/</link>
		<comments>http://www.digizenstudio.com/blog/2008/11/02/retab-files-using-vim/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 22:44:33 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=173</guid>
		<description><![CDATA[Use tabs as much as possible:
vim -u NONE -c "set noet" -c 'retab! 4' -c wq filename
Use spaces as much as possible:
vim -u NONE -c "set et" -c 'retab! 4' -c wq filename
]]></description>
			<content:encoded><![CDATA[<p>Use tabs as much as possible:<br />
<code>vim -u NONE -c "set noet" -c 'retab! 4' -c wq <em>filename</em></code><br />
Use spaces as much as possible:<br />
<code>vim -u NONE -c "set et" -c 'retab! 4' -c wq <em>filename</em></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/11/02/retab-files-using-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse + Vim = Eclim</title>
		<link>http://www.digizenstudio.com/blog/2008/10/22/eclipse-vim-eclim/</link>
		<comments>http://www.digizenstudio.com/blog/2008/10/22/eclipse-vim-eclim/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 00:58:22 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[vim]]></category>
		<category><![CDATA[eclim]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=175</guid>
		<description><![CDATA[I tried Eclim some time last year. I thought the idea of tackling the eclipse/vim-integration situation from a completely different angle was very clever, but the implementation wasn't quite there. I couldn't even get through the installation.
Then like everyone else I have had to get by with the Eclipse viplugin for quite a while, but [...]]]></description>
			<content:encoded><![CDATA[<p>I tried <a href="http://eclim.sourceforge.net/" rel="_blank">Eclim</a> some time last year. I thought the idea of tackling the eclipse/vim-integration situation from a completely different angle was very clever, but the implementation wasn't quite there. I couldn't even get through the installation.<span id="more-175"></span></p>
<p>Then like everyone else I have had to get by with the Eclipse viplugin for quite a while, but that's kind of like... well, three thin slices of turkey ham for lunch for a meat lover. On top of that, the new provisioning system and the countless new plugins bundled in Ganymede has driven me crazy (<em>OK take a deep breath and stop ranting...</em>).</p>
<p>Just a couple of days ago, I decided to give the latest 1.4.2 release another shot. Well, what do you know, I was up and running in no time. It's the best of both worlds - vim's powerful editing and Eclipse's powerful tooling.</p>
<p>I'm also enjoying the bonus that it works just fine even with vim in terminal mode.  So I can just ssh to my box at work and start coding away, without having to suffer from VNC or remote X over a slow VPN.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/10/22/eclipse-vim-eclim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Upgrade The Freemarker Jar Bundled In JBoss Freemarker IDE</title>
		<link>http://www.digizenstudio.com/blog/2008/08/30/how-to-upgrade-the-freemarker-jar-bundled-in-jboss-freemarker-ide/</link>
		<comments>http://www.digizenstudio.com/blog/2008/08/30/how-to-upgrade-the-freemarker-jar-bundled-in-jboss-freemarker-ide/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 23:28:48 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[freemarker]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[osgi]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=167</guid>
		<description><![CDATA[The current version (1.0.0.GA) of Freemarker IDE from JBoss Tools comes with freemarker-2.3.8.jar bundled. To update to freemarker 2.3.13:

Copy freemarker-2.3.13.jar into $ECLIPSE_INSTALLATION/plugins/org.jboss.ide.eclipse.freemarker_1.0.0.GA, and remove the freemarker-2.3.8.jar in there.
Edit META-INF/MANIFEST.MF to replace the reference to "freemarker-2.3.8.jar" with "freemarker-2.3.13.jar".
Restart Eclipse with the "-clean" command line option. This is important because otherwise the Eclipse OSGI engine will keep [...]]]></description>
			<content:encoded><![CDATA[<p>The current version (1.0.0.GA) of Freemarker IDE from <a href="http://www.jboss.org/tools/">JBoss Tools</a> comes with freemarker-2.3.8.jar bundled. To update to freemarker 2.3.13:</p>
<ol>
<li>Copy freemarker-2.3.13.jar into <code>$ECLIPSE_INSTALLATION/plugins/org.jboss.ide.eclipse.freemarker_1.0.0.GA</code>, and remove the freemarker-2.3.8.jar in there.</li>
<li>Edit <code>META-INF/MANIFEST.MF</code> to replace the reference to "freemarker-2.3.8.jar" with "freemarker-2.3.13.jar".</li>
<li>Restart Eclipse with the "-clean" command line option. This is important because otherwise the Eclipse OSGI engine will keep using cached bundle data which is stale now.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/08/30/how-to-upgrade-the-freemarker-jar-bundled-in-jboss-freemarker-ide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>But Then There Is Also Unnecessary Coupling</title>
		<link>http://www.digizenstudio.com/blog/2008/08/18/but-then-there-is-also-unnecessary-coupling/</link>
		<comments>http://www.digizenstudio.com/blog/2008/08/18/but-then-there-is-also-unnecessary-coupling/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 02:05:08 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=164</guid>
		<description><![CDATA[Jeffrey Palermo writes an interesting post about Inversion of Control is NOT about testability. I guess this is one of the scenarios where I agree with the conclusion, but not necessarily how it is arrived at.  
Jeffrey drives to his point by giving an example:
PLAIN TEXT
C#:




public class MissileLauncher&#123;


&#160; &#160; private INavigator _navigator;


&#160; &#160; public [...]]]></description>
			<content:encoded><![CDATA[<p>Jeffrey Palermo writes an interesting post about <a href="http://jeffreypalermo.com/blog/inversion-of-control-is-not-about-testability/" rel="_blank">Inversion of Control is NOT about testability</a>. I guess this is one of the scenarios where I agree with the conclusion, but not necessarily how it is arrived at. <img src='http://www.digizenstudio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span id="more-164"></span></p>
<p>Jeffrey drives to his point by giving an example:</p>
<div class="igBar"><span id="lcsharp-10"><a href="#" onclick="javascript:showPlainTxt('csharp-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">C#:</span>
<div id="csharp-10">
<div class="csharp">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> MissileLauncher<span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0600FF;">private</span> INavigator _navigator;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0600FF;">public</span> MissileLauncher<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; _navigator = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> MissileNavigator<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Launch<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//get direction guidance from _navigator and launch a missile</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
And then he states:</p>
<blockquote><p>
"This can be a good design or bad design depending on your needs.  We are coupling to an interface, INavigator, but we are also coupling to a specific implementation class, MissileNavigator.</p>
<p>"If MissileLauncher can't do its job without MissileNavigator, then this coupling makes sense, and the class should be tested together with MissileNavigator.
</p></blockquote>
<p>Well, I am not sure about that.  Looks to me, the commitment of coupling is already made right on the second line of the code above: where <code>_navigator</code> is declared <code>INavigator</code>. It essentially asserts that:</p>
<ol>
<li>The interface exposed via <code>INavigator</code> suffices for <code>MissleNavigator</code>.</li>
<li><code>MissileNavigator</code> makes no further assumptions on the class that actually implements <code>INavigator</code>.</li>
</ol>
<p>Once that commitment is made, specifically instantiating <code>_navigator</code> to an implementation class buys us absolutely nothing, and loses for us most of the flexibility associated from programing against <code>INavigator</code> the interface.  Think about it this way, if <code>MissileLauncher</code> <em>has to</em> use the specific implementation, <code>MissleNavigator</code>, meaning at some point it will have to explicitly cast <code>_navigator</code> to <code>MissleNavigator</code>, then that would be a very awkward OO design, and we might as well declare <code>_navigator</code> a <code>MissleNavigator</code>, and program against <em>that</em> interface to begin with.</p>
<p>So, depending on how people look at it, the hard-coded instantiation in the constructor can be considered part of the design or the implementation.  But either way IMHO it's a bad one, and makes some unnecessary coupling.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/08/18/but-then-there-is-also-unnecessary-coupling/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hooked up my new 24″ LCD – suprisingly easy</title>
		<link>http://www.digizenstudio.com/blog/2008/08/10/hooked-up-my-new-24-lcd-suprisingly-easy/</link>
		<comments>http://www.digizenstudio.com/blog/2008/08/10/hooked-up-my-new-24-lcd-suprisingly-easy/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 21:52:49 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[my-toys]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=163</guid>
		<description><![CDATA[I've wanted to replace one of the dual-19" LCDs with a widescreen for a while.  So Today I picked up the Samsung 2443BWX $349.99 special Costco is running.  I had thought hooking it up to my dual-head setup would be some pain because it would have to run under 1920x1200 while the other [...]]]></description>
			<content:encoded><![CDATA[<p>I've wanted to replace one of the dual-19" LCDs with a widescreen for a while.  So Today I picked up the <a href="http://www.costco.com/Browse/Product.aspx?Prodid=11297826&#038;whse=BC&#038;Ne=4000000&#038;eCat=BC|84|1680|62021&#038;N=4018599&#038;Mo=5&#038;pos=0&#038;No=2&#038;Nr=P_CatalogName:BC&#038;cat=62021&#038;Ns=P_Price|1||P_SignDesc1&#038;lang=en-US&#038;Sp=C&#038;ec=BC-EC12116-Cat1680&#038;topnav=" rel="_blank">Samsung 2443BWX</a> $349.99 special Costco is running.  I had thought hooking it up to my dual-head setup would be some pain because it would have to run under 1920x1200 while the other 19" under 1280x1024.  Well, it worked out surprisingly easy in both Windows and Linux. In Windows, it was trivially done via the display settings.  In Linux, all I had to do was replace this line in the xorg.conf:<br />
<code><br />
    Option         "metamodes" "DFP-0: nvidia-auto-select +1280+0, DFP-1: nvidia-auto-select +0+0"<br />
</code><br />
with<br />
<code><br />
    Option         "metamodes" "DFP-0: nvidia-auto-select +1920+0, DFP-1: nvidia-auto-select +0+0"<br />
</code><br />
and restart the X server.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/08/10/hooked-up-my-new-24-lcd-suprisingly-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manage Local Versions with Git</title>
		<link>http://www.digizenstudio.com/blog/2008/07/31/manage-local-versions-with-git/</link>
		<comments>http://www.digizenstudio.com/blog/2008/07/31/manage-local-versions-with-git/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 03:38:35 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=161</guid>
		<description><![CDATA[In almost every project I have worked on, there were always a couple of files here and there that are checked into the version control, but have to be modified according to everyone's local environment. With conventional centralized version control, they can become quite a pain to manage -- we have to condition ourselves to [...]]]></description>
			<content:encoded><![CDATA[<p>In almost every project I have worked on, there were always a couple of files here and there that are checked into the version control, but have to be modified according to everyone's local environment. With conventional centralized version control, they can become quite a pain to manage -- we have to condition ourselves to remember to ignore them during diff'ing, always be careful not to check the local versions in, and deal with the mess when we have to actually check into those files changes which <em>do</em> need to be shared. This blog post tries to present a approach that makes it easier and less error prone, using <a title="git" rel="_blank" href="http://git.or.cz/">git</a>.<br />
<span id="more-161"></span></p>
<p>The general idea of this approach is to maintain two separate branches -- one for synchronizing with the rest of the world, and the other for managing the local changes -- and sync between the two using the powerful <code>git-rebase</code>.</p>
<ol>
<li>
Say we have just cloned the team repository:</p>
<pre>    master
    v
A-B-C</pre>
</li>
<li>
The next step is getting ready to start hacking locally:</p>
<pre>(Nadeem Bitar points out below that "checkout -b" is a better way. Thanks!)
<del datetime="2008-08-08T01:03:33+00:00">$git branch local &amp;&amp; git checkout local</del>
$git checkout -b local
$make whatever local changes
$git add &lt;the files changed&gt;
$git commit -m 'LOCAL_HACKS: my env'</pre>
<p>Now we have (* indicates we are currently on the local branch, and the L? commits are the ones containing local changes):</p>
<pre>    master
    v
A-B-C-L1-L2
         ^
         local*</pre>
</li>
<li>
So we stay on the local branch, continue to work on the real cool features that we are here to really implement, and keep committing just like usual.  After a while, we end up with:</p>
<pre>    master
    v
A-B-C-L1-L2-E-F
              ^
              local*</pre>
</li>
<li>This is where the interactive rebase comes in so we can move the local changes L1 and L2 to the tip of local:
<pre>$git rebase -i master
(use our favorite editor to rearrange the commit lines)</pre>
<p>Now we have:</p>
<pre>    master
    v
A-B-C-E'-F'-L1'-L2'
                ^
                local*</pre>
</li>
<li>The last step is to bring master up to speed with only the commits we intend to publish:
<pre>$git rebase local~2 master  # local~2 is F' in this scenario.</pre>
<p>So the end state is:</p>
<pre>         master*
         v
A-B-C-E'-F'-L1'-L2'
                ^
                local</pre>
</li>
</ol>
<p>An alternative is use git-cherry-pick to move the non-local commits from local to master. Although it's easier than the approach above only when there is just one or two commits that need to be moved over.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/07/31/manage-local-versions-with-git/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ditz: Distributed Issue Tracking</title>
		<link>http://www.digizenstudio.com/blog/2008/07/28/ditz-distributed-issue-tracking/</link>
		<comments>http://www.digizenstudio.com/blog/2008/07/28/ditz-distributed-issue-tracking/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 04:19:50 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[ditz]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[issuetracking]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=162</guid>
		<description><![CDATA[Ditz is a little (ruby) gem I ran into today. It allows every developer to maintain their own issue tracking database, saved in human readable YAML files, which can be easily exchanged along with the corresponding code changes through a distributed version control system, such as git.
As the latest version number, 0.4, implies, ditz is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ditz.rubyforge.org/" rel="_blank">Ditz</a> is a little (ruby) gem I ran into today. It allows every developer to maintain their own issue tracking database, saved in human readable YAML files, which can be easily exchanged along with the corresponding code changes through a distributed version control system, such as git.</p>
<p>As the latest version number, 0.4, implies, ditz is still at an early stage, but the idea of distributed issue tracking and managing the issues themselves as part of the codebase sounds very interesting to me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/07/28/ditz-distributed-issue-tracking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The UnknownHostException and A Not-so-obvious Cause</title>
		<link>http://www.digizenstudio.com/blog/2008/06/09/the-unknownhostexception-and-a-not-so-obvious-cause/</link>
		<comments>http://www.digizenstudio.com/blog/2008/06/09/the-unknownhostexception-and-a-not-so-obvious-cause/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 01:12:15 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[networking]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=160</guid>
		<description><![CDATA[The past week has turned out to be the week of "all sorts of weird problems" for me.  One of the issues I ran into was that, in a new Ubuntu installation, maven fails to download artifacts from the repository server.  After some arm-twisting with maven (people really should start logging the actually [...]]]></description>
			<content:encoded><![CDATA[<p>The past week has turned out to be the week of "all sorts of weird problems" for me.  One of the issues I ran into was that, in a new Ubuntu installation, maven fails to download artifacts from the repository server.  After some arm-twisting with maven (people really should start logging the actually exception instead of just printing "unable to download artifact..."), I was able to pinpoint the underlying problem to be an UnknownHostException from trying to resolve the repository server.  The strangeness of the situation is, I can access the repo and download the same artifact with firefox, wget, or anything non-java.  I can also resolve the repo server name just fine with nslookup.<span id="more-160"></span></p>
<p>And here comes the second layer of strangeness - I also have an ubuntu virtualbox machine running in the same box, with the same JDK version, same setup, and the same source tree.  And it works just fine in there.</p>
<p>So fast-forward through a few hours of hair pulling, the two workarounds I eventually figured out are:</p>
<ul>
<li>The <code>/etc/nsswitch.conf</code> file out-of-box has a line looking like this:<br />
<code>hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4</code><br />
Apparently the name resolution code in JVM (e.g. <code>InetAddress.getByName()</code> and friends) doesn't like the multicasting DNS (represented by 'mdns4_minimal').<br />
Move 'dns' up so it looks like:<br />
<code>hosts:          files <strong>dns</strong> mdns4_minimal [NOTFOUND=return] mdns4</code><br />
solves the problem.  On the other hand, I haven't observed any negative effect of this change on any of the non-Java applications.
</li>
<li>If you are not comfortable with or don't have control over changing a box-wide config file, another workaround is to set the system property <code>java.net.preferIPv4Stack</code> to <code>true</code> when starting a Java application (maven in my case) which needs to do name resolution.</li>
</ul>
<p>So how come the default works fine in the virtual machine?  My theory is that when running in there, the virtualbox NAT code running in the guest OS is called for name resolution during 'files'-based resolution, and is able to handle it by delegating to the host OS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/06/09/the-unknownhostexception-and-a-not-so-obvious-cause/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vmware to Virtualbox Migration Issues</title>
		<link>http://www.digizenstudio.com/blog/2008/05/20/vmware-to-virtualbox-migration-issues/</link>
		<comments>http://www.digizenstudio.com/blog/2008/05/20/vmware-to-virtualbox-migration-issues/#comments</comments>
		<pubDate>Wed, 21 May 2008 00:43:21 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[virtualbox]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/?p=159</guid>
		<description><![CDATA[In my Kubuntu, I have a Windows XP Professional virtual machine running in Vmware that I use from time to time.  Recently I decided to migrate it to VirtualBox. Eventually I got it working, after going through a number of issues.  Here goes a recount of them:
The Agp440.sys Hang
Since VirtualBox supports the VMDK [...]]]></description>
			<content:encoded><![CDATA[<p>In my Kubuntu, I have a Windows XP Professional virtual machine running in Vmware that I use from time to time.  Recently I decided to migrate it to VirtualBox. Eventually I got it working, after going through a number of issues.  Here goes a recount of them:<span id="more-159"></span></p>
<p><strong>The Agp440.sys Hang</strong><br />
Since VirtualBox supports the VMDK file format, it's fairly simple to get started: just create a new VirtualBox vm, make it as close to the Vmware one as possible configuration wise, attach the same VMDK files to the vm as harddrives, and that's it.</p>
<p>Although the first time when you try to boot it up in VirtualBox, Windows is very likely going to hang right away.  Trying to boot it into safe mode reveals that the sequence hangs at agp440.sys.</p>
<p>It is easily resolved by following <a href="http://www.virtualbox.org/wiki/Migrate_Windows" rel="_blank">this VirtualBox wiki article</a>. Basically boot into the Recovery Console, and disable the agp440 service.</p>
<p><strong>The Mup.sys Hang</strong><br />
Next Windows hangs at Mup.sys. The same trick from above doesn't help. After disabling Mup.sys, Windows hangs at the driver before it. So it's not Mup.sys itself, but something afterwards. Google finds me this <a href="http://www.virtualbox.org/ticket/995" rel="_blank">virtualbox ticket</a>. Following the tips, I switch to the PIIX4 setting for the IDE controller, experiment various combinations of APIC and IO ACPI, and am able to get past Mup.sys with both enabled.</p>
<p><strong>Reactivate Windows</strong><br />
Finally I'm able to boot into Windows, but with various new hardware found, the Reactivate Windows screen shows up. I called Microsoft to reactivate, but looking back, I would advise waiting until after you have successfully reconfigured windows, especially the network connection (see below).</p>
<p><strong>Hardware Configuration</strong><br />
Once booting into the desktop, Windows happily reports "new hardware" found and offer to install drivers for them. Always choosing the easiest option (i.e. the one with "automatic" in it) gets me through. If it does not for you, try selecting "Install Guest Addons" from the virtual machine menu first.</p>
<p>Naturally I decide to reboot at this point. Big surprise! Windows hangs up again as soon as the splash screen shows up. Booting into safe mode works, but not the normal mode.  After a few tries and some futile digging around, I decide to call it a day.</p>
<p>Well, the next day when I try it again, it just magically works!  I still don't know how exactly, except maybe a soft reset in VirtualBox is not such a "clean" restart compared to completely quit VirtualBox and restart from scratch.</p>
<p><strong>Network Configuration</strong><br />
The networking doesn't work after booting into Windows at this point. Try to manually add a network connection manually does not go anywhere.  Look through the Device Manager and find that the Vmware network card is still in there, with a big question mark. Uninstall that. Force the Device Manager to detect new hardware. Sure enough the VirtualBox one comes up and the driver gets installed smoothly. </p>
<p>Everything works great now. I'm for sure making a baseline copy of the virtual machine though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/05/20/vmware-to-virtualbox-migration-issues/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Why does the GWT compiler require an X server and how to work around it</title>
		<link>http://www.digizenstudio.com/blog/2008/05/12/why-does-the-gwt-compiler-require-an-x-server-and-how-to-work-around-it/</link>
		<comments>http://www.digizenstudio.com/blog/2008/05/12/why-does-the-gwt-compiler-require-an-x-server-and-how-to-work-around-it/#comments</comments>
		<pubDate>Tue, 13 May 2008 01:20:30 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/2008/05/12/why-does-the-gwt-compiler-require-an-x-server-and-how-to-work-around-it/</guid>
		<description><![CDATA[Got this error today when trying to build our little GWT application in linux:
PLAIN TEXT
CODE:




Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':1' as the value of the DISPLAY variable.


&#160; &#160; at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)


&#160; &#160; at sun.awt.X11GraphicsEnvironment.access$000(X11GraphicsEnvironment.java:95)


&#160; &#160; at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:184)


&#160; &#160; at java.security.AccessController.doPrivileged(AccessController.java:193)


&#160; &#160; at sun.awt.X11GraphicsEnvironment.&#60;clinit&#62;(X11GraphicsEnvironment.java:173)


&#160; &#160; at java.lang.J9VMInternals.initializeImpl(Native Method)


&#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Got this error today when trying to build our little GWT application in linux:<span id="more-158"></span></p>
<div class="igBar"><span id="lcode-12"><a href="#" onclick="javascript:showPlainTxt('code-12'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-12">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Exception in thread <span style="color:#CC0000;">"main"</span> java.<span style="">lang</span>.<span style="">InternalError</span>: Can<span style="color:#CC0000;">'t connect to X11 window server using '</span>:1<span style="color:#CC0000;">' as the value of the DISPLAY variable.</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at sun.awt.X11GraphicsEnvironment.access$000(X11GraphicsEnvironment.java:95)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:184)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at java.security.AccessController.doPrivileged(AccessController.java:193)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at sun.awt.X11GraphicsEnvironment.&lt;clinit&gt;(X11GraphicsEnvironment.java:173)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at java.lang.J9VMInternals.initializeImpl(Native Method)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at java.lang.J9VMInternals.initialize(J9VMInternals.java:192)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at java.lang.Class.forNameImpl(Native Method)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at java.lang.Class.forName(Class.java:130)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:101)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1174)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.user.rebind.ui.ImageBundleBuilder.drawBundledImage(ImageBundleBuilder.java:258)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.user.rebind.ui.ImageBundleBuilder.writeBundledImage(ImageBundleBuilder.java:108)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.user.rebind.ui.ImageBundleGenerator.generateImpl(ImageBundleGenerator.java:160)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.user.rebind.ui.ImageBundleGenerator.generate(ImageBundleGenerator.java:76)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:43)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.tryRebind(StandardRebindOracle.java:116)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:61)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:173)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.GWTCompiler$DistillerRebindPermutationOracle.getAllPossibleRebindAnswers(GWTCompiler.java:195)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.doFindAdditionalTypesUsingRebinds(WebModeCompilerFrontEnd.java:105)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.process(AbstractCompiler.java:137)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.compile(AbstractCompiler.java:74)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.compile(AbstractCompiler.java:162)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.access$600(AbstractCompiler.java:61)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.jdt.AbstractCompiler.compile(AbstractCompiler.java:430)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.getCompilationUnitDeclarations(WebModeCompilerFrontEnd.java:65)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.&lt;init&gt;(JavaToJavaScriptCompiler.java:248)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.GWTCompiler.distill(GWTCompiler.java:329)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.GWTCompiler.run(GWTCompiler.java:755)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.GWTCompiler.run(GWTCompiler.java:745)</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">&nbsp; &nbsp; at com.google.gwt.dev.GWTCompiler.main(GWTCompiler.java:213) </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Apparently the GWT compiler tries to assemble some images into the client package, and in doing so triggers some parts in AWT that require an X display if $DISPLAY is set.  There seems to be two solutions:</p>
<ol>
<li>Make sure $DISPLAY is unset for your build environment.</li>
<li>Define a system property, <code>java.awt.headless=true</code>.  The twist here is that if you are using the GWT maven plugin, instead of directly specifying the property on maven's command line, it needs to be defined in the plugin's configuration in the form of:<br />
<code>&lt;extraJvmArgs&gt;-Djava.awt.headless=true&lt;/extraJvmArgs&gt;</code></li>
</ol>
<p></init></clinit></p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/05/12/why-does-the-gwt-compiler-require-an-x-server-and-how-to-work-around-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 8.04 Upgrade Goes Well, Not Without Issues</title>
		<link>http://www.digizenstudio.com/blog/2008/05/03/ubuntu-804-upgrade-goes-well-not-without-issues/</link>
		<comments>http://www.digizenstudio.com/blog/2008/05/03/ubuntu-804-upgrade-goes-well-not-without-issues/#comments</comments>
		<pubDate>Sat, 03 May 2008 13:46:17 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/2008/05/03/ubuntu-804-upgrade-goes-well-not-without-issues/</guid>
		<description><![CDATA[Upgraded from 7.10 to 8.04 last week. The Upgrade went quite smooth, especially considering I have been running a mixed kde 4/kde 3 setup, with the kde 4 pulled directly from the kde.org repo.

A few issues I ran into so far, most of which I suspect have more or less to do with the new [...]]]></description>
			<content:encoded><![CDATA[<p>Upgraded from 7.10 to 8.04 last week. The Upgrade went quite smooth, especially considering I have been running a mixed kde 4/kde 3 setup, with the kde 4 pulled directly from the kde.org repo.<br />
<span id="more-157"></span><br />
A few issues I ran into so far, most of which I suspect have more or less to do with the new 2.6.24 kernel:</p>
<ol>
<li>The sound system in kde 4 appeared to have stopped working. It simply refuses to recognize the onboard sound card. Sound works fine in kde 3, or in kde 4 but through other packages - for instance, amarok and the flash video player can play sound without any problems.</li>
<li>The Logitech Marble Mouse would arbitrarily stop responding out of blue, and won't come back without rebooting. Good thing I have two mouses plugged in (the other Logitech with higher precision for games <img src='http://www.digizenstudio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</li>
<li>Firefox 3 Beta 5 crashed the X server once. I'll have to wait and see if this is recurring. So far Firefox has been quite stable otherwise.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/05/03/ubuntu-804-upgrade-goes-well-not-without-issues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>There Is A Geek In Every One Of Us</title>
		<link>http://www.digizenstudio.com/blog/2008/03/18/there-is-a-geek-in-every-one-of-us/</link>
		<comments>http://www.digizenstudio.com/blog/2008/03/18/there-is-a-geek-in-every-one-of-us/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 23:39:25 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/2008/03/18/there-is-a-geek-in-every-one-of-us/</guid>
		<description><![CDATA[Nick Tosches recounts his year-long quest to find out where the Windows wallpaper 'Autumn' was originally taken, and by who.
]]></description>
			<content:encoded><![CDATA[<p>Nick Tosches recounts <a href="http://www.vanityfair.com/ontheweb/features/2007/02/autumn200702" rel="_blank">his year-long quest</a> to find out where the Windows wallpaper 'Autumn' was originally taken, and by who.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/03/18/there-is-a-geek-in-every-one-of-us/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ivy 2 beta 2 Adds Maven Metadata Support</title>
		<link>http://www.digizenstudio.com/blog/2008/03/18/ivy-2-maven-metadata-support/</link>
		<comments>http://www.digizenstudio.com/blog/2008/03/18/ivy-2-maven-metadata-support/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 23:33:41 +0000</pubDate>
		<dc:creator>Jing Xue</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ivy]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.digizenstudio.com/blog/2008/03/18/ivy-2-maven-metadata-support/</guid>
		<description><![CDATA[Ivy 2.0 beta 2 adds an interesting useMavenMetaData switch to its ibiblio resolver. When it's on (the default actually), Ivy will try and use the maven-metadata.xml for listing the versions available, and for dynamic dependency resolution. This is interesting to me because it makes it a lot easier to run our builds against a proxy [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ant.apache.org/ivy/history/2.0.0-beta2/index.html" rel="_blank">Ivy 2.0 beta 2</a> adds an interesting <code>useMavenMetaData</code> switch to its ibiblio resolver. When it's on (the default actually), Ivy will try and use the maven-metadata.xml for listing the versions available, and for dynamic dependency resolution. This is interesting to me because it makes it a lot easier to run our builds against a proxy repository server like <a href="http://www.google.com/url?sa=t&#038;ct=res&#038;cd=1&#038;url=http%3A%2F%2Fmaven-proxy.codehaus.org%2F&#038;ei=QfXdR-u-E6KMiwHP3MDhBQ&#038;usg=AFQjCNGi21bVGx7PO0TIVDMhr8DJe72KmA&#038;sig2=kI1pyOBn6kM6vzHApMP6oA" rel="_blank">Maven Proxy</a> or <a href="http://www.google.com/url?sa=t&#038;ct=res&#038;cd=1&#038;url=http%3A%2F%2Fmaven.apache.org%2Farchiva%2F&#038;ei=Z_XdR-_vMozqiAHptJHDBQ&#038;usg=AFQjCNHsRevKxvYtOfiEaDk2-2r0yLkhDw&#038;sig2=EKaF7VMZ-uytuguDdcKqPA" rel="_blank">Archiva</a>. </p>
<p>Until beta 2, Ivy finds out about the available versions of a module by parsing the directory listing HTML from Ibiblio's Apache server. That doesn't work when there is a proxy server sitting in between, because a) the proxy server doesn't usually proxy directory listing requests, and/or b) the proxy server renders the directory listing in different HTML. Switching to using the structured maven meta data completely eliminated this mess.</p>
<p>Of course, using the maven-metadata.xml files from the official ibiblio repository will subject us to some new hazard - some modules   have out-of-date maven-metadata.xml. For instance, by its maven-metadata.xml, the latest version of Hibernate would still be 3.2.0.cr1.</p>
<p>One of those maven proxy servers turns out to be a perfect solution to this problem - we can use them now, remember? <img src='http://www.digizenstudio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   In my case, I run an Archiva server proxying the official maven 2 repository. Whenever I run into a bad metadata file, I simply request the missing version through Archiva, and it will fetch it <em>and</em> update the metadata file.  For example, in the hibernate case, I would just open up Firefox and try to download <code>http://archiva-server/repository/internal/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.jar</code>.  That only needs to be done once, and afterwards Archiva would have updated its local version of the maven-metadata.xml properly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digizenstudio.com/blog/2008/03/18/ivy-2-maven-metadata-support/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
