<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://blog.subterfusion.net/wp-atom.php">
	<title type="text">procedural</title>
	<subtitle type="text">on the nod from the hexadecimal syringe.</subtitle>

	<updated>2008-05-30T10:23:55Z</updated>
	<generator uri="http://wordpress.org/" version="2.6.2">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://blog.subterfusion.net" />
	<id>http://blog.subterfusion.net/feed/atom/</id>
	

			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/subterfusion_blog" /><feedburner:info uri="subterfusion_blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>matthew</name>
						<uri>http://subterfusion.net</uri>
					</author>
		<title type="html"><![CDATA[Running Tests Against a Gem]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/subterfusion_blog/~3/IYRicq4Ku00/" />
		<id>http://blog.subterfusion.net/?p=32</id>
		<updated>2008-05-30T10:23:55Z</updated>
		<published>2008-05-30T10:00:17Z</published>
		<category scheme="http://blog.subterfusion.net" term="code" /><category scheme="http://blog.subterfusion.net" term="gems" /><category scheme="http://blog.subterfusion.net" term="ruby" /><category scheme="http://blog.subterfusion.net" term="testing" />		<summary type="html"><![CDATA[I use Hoe to build my projects.  Sometimes I add a new source file and forget to update my Manifest.txt, so my gem doesn&#8217;t contain all of the necessary files.  My tests pass, but then I install my gem and it doesn&#8217;t work, usually due to a failed require.
So I thought: it would [...]]]></summary>
		<content type="html" xml:base="http://blog.subterfusion.net/2008/running-tests-against-a-gem/">&lt;p&gt;I use &lt;a href="http://seattlerb.rubyforge.org/hoe/" title="Hoedown"&gt;Hoe&lt;/a&gt; to build my projects.  Sometimes I add a new source file and forget to update my Manifest.txt, so my gem doesn&amp;#8217;t contain all of the necessary files.  My tests pass, but then I install my gem and it doesn&amp;#8217;t work, usually due to a failed &lt;code&gt;require&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So I thought: it would be nice if I could run my tests against the gem, so I could know that it was built correctly.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s how I do it:&lt;/p&gt;
&lt;pre class="code prettyprint"&gt;
def recreate_dir(dir)
  FileUtils.rm_r(dir) if File.exist?(dir)
  FileUtils.mkdir_p(dir)
end

def error(msg)
  $stderr.puts "ERROR -- #{msg}"
  exit 1
end

def run(command)
  puts command
  error 'command failed' unless system(command)
end

namespace :my do

  # initializes test output dir
  task :setup do
    # typical setup stuff
  end

  Spec::Rake::SpecTask.new(:run_system_specs) do |t|
    # typical RSpec stuff
  end

  desc "Runs RSpec System Tests against gem"
  task :system_specs_gem =&gt; ['my:setup'] do
    # builds gem
    Rake::Task[:gem].invoke

    # my code prettifier doesn't like this line.
    # uncomment if you want this code to actually work.
    #gem = Dir.glob("pkg/*.gem").first

    # installs gem into tmp dir
    install_dir = 'tmp'
    recreate_dir(install_dir)
    run "gem install --install-dir=#{install_dir} --no-rdoc --no-ri -y #{gem}"

    # points tests to gem and runs
    ENV['GEM_PATH'] = install_dir
    Rake::Task['my:run_system_specs'].invoke
  end

end
&lt;/pre&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul class="indented"&gt;
&lt;li&gt;Hoe gives me the &lt;code&gt;:gem&lt;/code&gt; task for free&lt;/li&gt;
&lt;li&gt;I put my tasks in the &lt;code&gt;:my&lt;/code&gt; namespace so I can easily differentiate them from the ones provided by Hoe&lt;/li&gt;
&lt;li&gt;I don&amp;#8217;t run my tests in this fashion as I&amp;#8217;m writing code, but I try to do it before I commit.  My automated build runs the tests against the gem before it installs it on my local system.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/subterfusion_blog/~4/IYRicq4Ku00" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.subterfusion.net/2008/running-tests-against-a-gem/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.subterfusion.net/2008/running-tests-against-a-gem/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.subterfusion.net/2008/running-tests-against-a-gem/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>matthew</name>
						<uri>http://subterfusion.net</uri>
					</author>
		<title type="html"><![CDATA[Trac Broke in Debian After Python 2.5 Became the Default]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/subterfusion_blog/~3/BSzyfpnmviQ/" />
		<id>http://blog.subterfusion.net/?p=31</id>
		<updated>2008-05-05T01:53:35Z</updated>
		<published>2008-05-05T01:52:31Z</published>
		<category scheme="http://blog.subterfusion.net" term="code" /><category scheme="http://blog.subterfusion.net" term="trac python debian" />		<summary type="html"><![CDATA[My Trac is broken
A few days ago I tried to log into my local Trac instance but saw &#8220;Internal Server Error&#8221;.
Looked in /var/log/apache2/error.log and saw:

[error] get_interpreter: no interpreter callback found.
[error] [client 192.168.1.100] python_handler:
  Can't get/create interpreter.
[error] make_obcallback: could not import mod_python.apache.\n
  ImportError: No module named mod_python.apache
[error] make_obcallback: Python path being used
"['/usr/lib/python2.4/site-packages/setuptools-0.6c3-py2.4.egg',
'/usr/lib/python2.4/site-packages/buildutils-0.1.1-py2.4.egg',
'/usr/lib/python2.4/site-packages/4Suite_XML-1.0.2-py2.4-linux-x86_64.egg',
'/usr/lib/python24.zip',
'/usr/lib/python2.4',
'/usr/lib/python2.4/plat-linux2',
'/usr/lib/python2.4/lib-tk',
'/usr/lib/python2.4/lib-dynload',
'/usr/local/lib/python2.4/site-packages',
'/usr/lib/python2.4/site-packages',
'/usr/lib/python2.4/site-packages/Numeric',
'/usr/lib/python2.4/site-packages/PIL',
'/usr/lib/python2.4/site-packages/gst-0.10',
'/var/lib/python-support/python2.4',
'/usr/lib/python2.4/site-packages/gtk-2.0',
'/var/lib/python-support/python2.4/gtk-2.0',
'/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode']".

Ran dpkg -L [...]]]></summary>
		<content type="html" xml:base="http://blog.subterfusion.net/2008/trac-broke-in-debian-after-python-25-became-the-default/">&lt;h3&gt;My Trac is broken&lt;/h3&gt;
&lt;p&gt;A few days ago I tried to log into my local Trac instance but saw &amp;#8220;Internal Server Error&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Looked in /var/log/apache2/error.log and saw:&lt;/p&gt;
&lt;pre class="code"&gt;
[error] get_interpreter: no interpreter callback found.
[error] [client 192.168.1.100] python_handler:
  Can't get/create interpreter.
[error] make_obcallback: could not import mod_python.apache.\n
  ImportError: No module named mod_python.apache
[error] make_obcallback: Python path being used
"['/usr/lib/python2.4/site-packages/setuptools-0.6c3-py2.4.egg',
'/usr/lib/python2.4/site-packages/buildutils-0.1.1-py2.4.egg',
'/usr/lib/python2.4/site-packages/4Suite_XML-1.0.2-py2.4-linux-x86_64.egg',
'/usr/lib/python24.zip',
'/usr/lib/python2.4',
'/usr/lib/python2.4/plat-linux2',
'/usr/lib/python2.4/lib-tk',
'/usr/lib/python2.4/lib-dynload',
'/usr/local/lib/python2.4/site-packages',
'/usr/lib/python2.4/site-packages',
'/usr/lib/python2.4/site-packages/Numeric',
'/usr/lib/python2.4/site-packages/PIL',
'/usr/lib/python2.4/site-packages/gst-0.10',
'/var/lib/python-support/python2.4',
'/usr/lib/python2.4/site-packages/gtk-2.0',
'/var/lib/python-support/python2.4/gtk-2.0',
'/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode']".
&lt;/pre&gt;
&lt;p&gt;Ran &lt;code&gt;dpkg -L libapache-mod-python&lt;/code&gt; and noticed that some stuff was installed in /usr/lib/python2.5/site-packages.  But the log implies that Trac is using Python 2.4?&lt;/p&gt;
&lt;p&gt;Wait, which is Debian&amp;#8217;s default Python version?&lt;/p&gt;
&lt;pre class="code"&gt;
-&gt;matth@juggernaut ~ ? type python
python is /usr/bin/python
-&gt;matth@juggernaut ~ ? ll /usr/bin/python
lrwxrwxrwx 1 root root 9 2008-05-02 06:35 /usr/bin/python -&gt; python2.5*
&lt;/pre&gt;
&lt;p&gt;Looks like the default switched to 2.5 since that morning&amp;#8217;s &lt;code&gt;apt-get upgrade&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Getting Trac running with Python 2.5&lt;/h3&gt;
&lt;p&gt;I restarted Apache, but then it complained because &lt;a href=""http://www.clearsilver.net/ title="ClearSilver"&gt;ClearSilver&lt;/a&gt; (Trac&amp;#8217;s templating engine) wasn&amp;#8217;t installed for Python 2.5.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;easy_install ClearSilver&lt;/code&gt; failed (&amp;#8221;couldn&amp;#8217;t find setup file&amp;#8221;).  Download, configure, make, make install also failed, complained about a C# test failing.&lt;/p&gt;
&lt;p&gt;I then read that you can easy_install Trac.  I think I would prefer to manage it this way.  I &lt;code&gt;apt-get remove&lt;/code&gt;d it, then easy_installed it.&lt;/p&gt;
&lt;p&gt;Trac ran, but complained about not having permissions to write to /var/www/.python-eggs.  I created this directory and blessed the permissions.&lt;/p&gt;
&lt;p&gt;Trac ran!  But my custom header wasn&amp;#8217;t there.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://trac.edgewall.org/wiki/TracDev/ReleaseNotes/0.11"&gt;Trac 0.11 Release Notes&lt;/a&gt; are informative.  They switched their templating engine from ClearSilver to &lt;a href="http://genshi.edgewall.org/" title="Genshi"&gt;Genshi&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;a name="templates"&gt;Porting my templates from Clearsilver to Genshi&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://trac.edgewall.org/wiki/TracDev/PortingFromClearSilverToGenshi"&gt;PortingFromClearSilverToGenshi&lt;/a&gt;   helps.&lt;/p&gt;
&lt;p&gt;I created &lt;code&gt;site.html&lt;/code&gt; in &lt;code&gt;$trac_root/templates&lt;/code&gt;.  (&lt;code&gt;$trac_root&lt;/code&gt; is nothing required by Trac, it&amp;#8217;s just where I keep my custom Trac scripts and similar things.)&lt;/p&gt;
&lt;pre class="code prettyprint"&gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:py="http://genshi.edgewall.org/"
  py:strip=""&amp;gt;

  &amp;lt;head py:match="head" py:attrs="select('@*')"&amp;gt;
    ${select('*|comment()|text()')}
    &amp;lt;link rel="stylesheet" type="text/css"
      href="${href.chrome('site/style.css')}" /&amp;gt;
  &amp;lt;/head&amp;gt;

  &amp;lt;body py:match="body" py:attrs="select('@*')"&amp;gt;
    &amp;lt;div id="siteheader" style="margin:1em 0 1em 0;"&amp;gt;
      &amp;lt;a href="/"&amp;gt;trac root&amp;lt;/a&amp;gt;
      /
      &amp;lt;a href="/$project.name"&amp;gt;$project.name&amp;lt;/a&amp;gt;
      /
      &amp;lt;a href="/$project.name/report/3"&amp;gt;active tickets by milestone&amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;

    ${select('*|text()')}

  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Then, for each of my Trac project directories, I added this to $project/conf/trac.ini:&lt;/p&gt;
&lt;pre class="code prettyprint"&gt;
[inherit]
templates_dir = /x/system/trac/templates/
&lt;/pre&gt;
&lt;p&gt;(my &lt;code&gt;$trac_root&lt;/code&gt; = /x/system/trac)&lt;/p&gt;
&lt;p&gt;Good night, and good luck.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/subterfusion_blog/~4/BSzyfpnmviQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.subterfusion.net/2008/trac-broke-in-debian-after-python-25-became-the-default/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.subterfusion.net/2008/trac-broke-in-debian-after-python-25-became-the-default/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.subterfusion.net/2008/trac-broke-in-debian-after-python-25-became-the-default/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>matthew</name>
						<uri>http://subterfusion.net</uri>
					</author>
		<title type="html"><![CDATA[Generating /etc/motd from &#8216;fortune&#8217; at boot]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/subterfusion_blog/~3/ScNzjrbtCLY/" />
		<id>http://blog.subterfusion.net/?p=29</id>
		<updated>2008-04-14T10:46:00Z</updated>
		<published>2008-04-14T10:46:00Z</published>
		<category scheme="http://blog.subterfusion.net" term="code" /><category scheme="http://blog.subterfusion.net" term="debian" /><category scheme="http://blog.subterfusion.net" term="linux" />		<summary type="html"><![CDATA[I created a script fortune2motd:

file=/etc/motd

# the wrapping echos are for spacing
echo > $file
/usr/games/fortune -a >> $file
echo >> $file

Then I created/etc/init.d/fortune2motd:

#! /bin/sh

N=/etc/init.d/fortune2motd

case "$1" in
  start)
        /home/system/private/bin/fortune2motd
        ;;
  stop&#124;reload&#124;restart&#124;force-reload)
        echo "got 'em"
   [...]]]></summary>
		<content type="html" xml:base="http://blog.subterfusion.net/2008/generating-motd-from-fortune-at-boot/">&lt;p&gt;I created a script fortune2motd:&lt;/p&gt;
&lt;pre class="code prettyprint"&gt;
file=/etc/motd

# the wrapping echos are for spacing
echo &gt; $file
/usr/games/fortune -a &gt;&gt; $file
echo &gt;&gt; $file
&lt;/pre&gt;
&lt;p&gt;Then I created/etc/init.d/fortune2motd:&lt;/p&gt;
&lt;pre class="code prettyprint"&gt;
#! /bin/sh

N=/etc/init.d/fortune2motd

case "$1" in
  start)
        /home/system/private/bin/fortune2motd
        ;;
  stop|reload|restart|force-reload)
        echo "got 'em"
        ;;
  *)
        echo "Usage: $N {start|stop|restart|force-reload}" &gt;&amp;#038;2
        exit 1
        ;;
esac
&lt;/pre&gt;
&lt;p&gt;Then I configured it to run at boot using Debian&amp;#8217;s &lt;code&gt;update-rc.d&lt;/code&gt; command.  I don&amp;#8217;t remember the exact syntax, but I think it&amp;#8217;s something like:&lt;/p&gt;
&lt;pre class="code"&gt;
update-rc.d fortune2motd defaults 99
&lt;/pre&gt;
&lt;p&gt;And now I get cute messages whenever I login to my box remotely.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/subterfusion_blog/~4/ScNzjrbtCLY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.subterfusion.net/2008/generating-motd-from-fortune-at-boot/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.subterfusion.net/2008/generating-motd-from-fortune-at-boot/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.subterfusion.net/2008/generating-motd-from-fortune-at-boot/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>matthew</name>
						<uri>http://subterfusion.net</uri>
					</author>
		<title type="html"><![CDATA[Differentiating JRuby executables from CRuby]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/subterfusion_blog/~3/yVffy5Uw1IY/" />
		<id>http://blog.subterfusion.net/?p=30</id>
		<updated>2008-04-07T22:17:15Z</updated>
		<published>2008-04-07T00:35:45Z</published>
		<category scheme="http://blog.subterfusion.net" term="code" /><category scheme="http://blog.subterfusion.net" term="jruby" /><category scheme="http://blog.subterfusion.net" term="shell" />		<summary type="html"><![CDATA[Now that I&#8217;ve installed JRuby alongside CRuby, I have a hard time knowing which gem or rake I&#8217;m running.
I fix this by running this script from my .bashrc:

export JRUBY_HOME=/usr/local/jruby
export PATH=$PATH:$JRUBY_HOME/bin

if [ -d $JRUBY_HOME ]; then
  for file in $JRUBY_HOME/bin/*; do
    alias jruby_`basename $file`=$file
  done
else
  echo "$JRUBY_HOME not found"
fi

Then I [...]]]></summary>
		<content type="html" xml:base="http://blog.subterfusion.net/2008/differentiating-jruby-executables-from-cruby/">&lt;p&gt;Now that I&amp;#8217;ve installed JRuby alongside CRuby, I have a hard time knowing which &lt;code&gt;gem&lt;/code&gt; or &lt;code&gt;rake&lt;/code&gt; I&amp;#8217;m running.&lt;/p&gt;
&lt;p&gt;I fix this by running this script from my &lt;code&gt;.bashrc&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="code"&gt;
export JRUBY_HOME=/usr/local/jruby
export PATH=$PATH:$JRUBY_HOME/bin

if [ -d $JRUBY_HOME ]; then
  for file in $JRUBY_HOME/bin/*; do
    alias jruby_`basename $file`=$file
  done
else
  echo "$JRUBY_HOME not found"
fi
&lt;/pre&gt;
&lt;p&gt;Then I can run &lt;code&gt;jruby_gem&lt;/code&gt; or &lt;code&gt;jruby_rake&lt;/code&gt; and know it&amp;#8217;s legitimate.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/subterfusion_blog/~4/yVffy5Uw1IY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.subterfusion.net/2008/differentiating-jruby-executables-from-cruby/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.subterfusion.net/2008/differentiating-jruby-executables-from-cruby/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.subterfusion.net/2008/differentiating-jruby-executables-from-cruby/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>matthew</name>
						<uri>http://subterfusion.net</uri>
					</author>
		<title type="html"><![CDATA[Logging Memory Usage in Java]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/subterfusion_blog/~3/WEY67nTeurM/" />
		<id>http://blog.subterfusion.net/2008/logging-memory-usage-in-java/</id>
		<updated>2008-04-07T00:42:46Z</updated>
		<published>2008-03-25T13:12:44Z</published>
		<category scheme="http://blog.subterfusion.net" term="code" /><category scheme="http://blog.subterfusion.net" term="java" /><category scheme="http://blog.subterfusion.net" term="memory" />		<summary type="html"><![CDATA[Sometimes our system gets slow, and we want to investigate what&#8217;s going on.  Checking the memory usage is one of the first steps in this process.
I wrote this command to help.  It uses the following classes from java.lang.management: ManagementFactory,  MemoryMXBean, and MemoryUsage.

@Command(path = CMD_PREFIX + "/memory")
public void mbeanMemory(CommandInvocation ci) {
  final [...]]]></summary>
		<content type="html" xml:base="http://blog.subterfusion.net/2008/logging-memory-usage-in-java/">&lt;p&gt;Sometimes our system gets slow, and we want to investigate what&amp;#8217;s going on.  Checking the memory usage is one of the first steps in this process.&lt;/p&gt;
&lt;p&gt;I wrote this command to help.  It uses the following classes from &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/management/package-summary.html"&gt;java.lang.management&lt;/a&gt;: &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/management/ManagementFactory.html"&gt;ManagementFactory&lt;/a&gt;,  &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/management/MemoryMXBean.html"&gt;MemoryMXBean&lt;/a&gt;, and &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/management/MemoryUsage.html"&gt;MemoryUsage&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="code prettyprint"&gt;
@Command(path = CMD_PREFIX + "/memory")
public void mbeanMemory(CommandInvocation ci) {
  final MemoryMXBean memoryBean =
    ManagementFactory.getMemoryMXBean();

  final String date =
    new SimpleDateFormat("yyyy/MM/dd hh:mm:ss")
    .format(new Date());

  ci.out.println(String.format("[%s] heap:{%s}, non-heap:{%s}",
    date,
    describe(memoryBean.getHeapMemoryUsage()),
    describe(memoryBean.getNonHeapMemoryUsage())));
}

private static final String describe(MemoryUsage memory) {
  final long max = memory.getMax();
  final long used = memory.getUsed();
  final long free = max - used;

  return String.format("used:%sMB, free:%sMB, max:%sMB",
    bytesToMegs(used), bytesToMegs(free), bytesToMegs(max));
}

private static final long bytesToMegs(long bytes) {
  return bytes / (1024 * 1024);
}
&lt;/pre&gt;
&lt;p&gt;The @Command annotation is a part of an OSGi &lt;a href="http://code.google.com/p/cimspringfield/wiki/Commands"&gt;Commands&lt;/a&gt; system created by one of my colleagues.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/subterfusion_blog/~4/WEY67nTeurM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.subterfusion.net/2008/logging-memory-usage-in-java/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.subterfusion.net/2008/logging-memory-usage-in-java/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.subterfusion.net/2008/logging-memory-usage-in-java/</feedburner:origLink></entry>
	</feed>
