<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>IANP.ORG &#187; RvSnoop</title>
	<atom:link href="http://ianp.org/tag/rvsnoop/feed/" rel="self" type="application/rss+xml" />
	<link>http://ianp.org</link>
	<description>random thought and mutterings</description>
	<lastBuildDate>Thu, 25 Mar 2010 09:41:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Jython 2.2b1 Released</title>
		<link>http://ianp.org/2007/02/jython-22b1-released/</link>
		<comments>http://ianp.org/2007/02/jython-22b1-released/#comments</comments>
		<pubDate>Fri, 09 Feb 2007 15:44:35 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RvSnoop]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Jython]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=83</guid>
		<description><![CDATA[The first beta of Jython 2.2 has been released! Jyhon scripting is
something that I&#8217;m planning to add to RvSnoop so I&#8217;m quite interested in this, especially given the current focus of development is making the codebase easier to understand for new developers, I&#8217;ve looked at it fairly recently and at the moment it&#8217;s quite a&#160;tangle!
]]></description>
			<content:encoded><![CDATA[<p>The first beta of Jython 2.2 has <a href="http://sourceforge.net/project/showfiles.php?group_id=12867&amp;package_id=12218&amp;release_id=485053">been released</a>! Jyhon scripting is
something that I&#8217;m planning to add to <a href="http://rvsnoop.org/">RvSnoop</a> so I&#8217;m quite interested in this, especially given the current focus of development is making the codebase easier to understand for new developers, I&#8217;ve looked at it fairly recently and at the moment it&#8217;s quite a&nbsp;tangle!</p>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2007/02/jython-22b1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RvSnoop 1.6.1</title>
		<link>http://ianp.org/2006/12/rvsnoop-161/</link>
		<comments>http://ianp.org/2006/12/rvsnoop-161/#comments</comments>
		<pubDate>Tue, 26 Dec 2006 04:38:10 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RvSnoop]]></category>
		<category><![CDATA[TIBCO]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=81</guid>
		<description><![CDATA[A new stable build of RvSnoop is available for downloading (it was actually released back on the 12th, but I forgot to post about it here and have been away from the internet for a few days). New in this&#160;release:


Added an option to republish records to different&#160;connections.
Added actions to export and import records to a [...]]]></description>
			<content:encoded><![CDATA[<p>A new stable build of <a href="http://rvsnoop.org/">RvSnoop</a> is available for <a href="http://downloads.sourceforge.net/rvsn00p/rvsnoop-1.6.1.tgz?download">downloading</a> (it was actually released back on the 12th, but I forgot to post about it here and have been away from the internet for a few days). New in this&nbsp;release:</p>

<ul>
<li>Added an option to republish records to different&nbsp;connections.</li>
<li>Added actions to export and import records to a binary file format (the records are stored in a ZIP based file, they are stored as wire format messages with some additional&nbsp;metadata).</li>
<li>Added an action to remove connections from the list; also, added some
options to the connection list context menu to access the recent connections&nbsp;list.</li>
<li>Added a dialog to allow the user to configure different record types. The underlying code to support this was present in the 1.5 release, but there was no way to access it short of editing the saved project file by&nbsp;hand.</li>
<li>The build system no longer strips out unused classes from the included
libraries. This increases the size of the download but in some cases the
licenses of included libraries require this, and it simplifies the build
process, which is a Good&nbsp;Thing.</li>
<li>Started to use the <a href="http://jakarta.apache.org/commons/lang/">Commons Lang</a> and <a href="http://jakarta.apache.org/commons/io/">Commons IO</a> libraries from Apache instead of the utility classes that I had written myself. The next step is to start using <a href="http://jakarta.apache.org/commons/logging/">Commons Logging</a> instead of my own custom&nbsp;logger.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2006/12/rvsnoop-161/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oh, Such a Good Infrastructure</title>
		<link>http://ianp.org/2006/12/oh-such-a-good-infrastructure/</link>
		<comments>http://ianp.org/2006/12/oh-such-a-good-infrastructure/#comments</comments>
		<pubDate>Tue, 19 Dec 2006 21:40:23 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RvSnoop]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[OSGi]]></category>
		<category><![CDATA[TIBCO]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=79</guid>
		<description><![CDATA[Now that the 1.6 release of RvSnoop is out of the door (OK, 1.6.1 &#8216;cause of a wart inthe original release), there are certain features that I&#8217;d like to see added, and for the 2.0 release I want to have in place a foundation that will make it easier to add&#160;these.

A full list of features [...]]]></description>
			<content:encoded><![CDATA[<p>Now that <a href="http://downloads.sourceforge.net/rvsn00p/rvsnoop-1.6.1-bin.tgz">the 1.6 release</a> of <a href="http://rvsnoop.org/">RvSnoop</a> is out of the door (OK, 1.6.1 &#8216;cause of a wart inthe original release), there are certain features that I&#8217;d like to see added, and for the 2.0 release I want to have in place a foundation that will make it easier to add&nbsp;these.</p>

<p>A full list of features can be found in the <a href="http://svn.sourceforge.net/viewvc/*checkout*/rvsn00p/trunk/rvsn00p/doc/plans.txt">plan file</a> in the
<a href="http://sourceforge.net/svn/?group_id=63447">RvSnoop Subversion repository</a>, but some of the big ones that
will impact the overall architecture of RvSnoop&nbsp;are&#8230;</p>

<h3>Pluggable Persistence&nbsp;Mechanism</h3>

<p>I&#8217;m going to migrate the record ledger to being persistent, there
are a couple of options here as to how this will be handled: flat
files, a combination of flat files and <a href="http://lucene.apache.org/java/">Lucene</a> based indexes,
or some kind of JDBC backed&nbsp;store.</p>

<p>One option would be to make the persistence mechanism plug-able,
this would also ease the use of an all-in-memory storage system,
like the one that is currently used (which is useful when you just
want to use RvSnoop as a graphical replacement for&nbsp;tibrvlisten).</p>

<h3>Able to Run&nbsp;Headless</h3>

<p>I&#8217;d like to add the ability to run RvSnoop without the UI, this
would be based on loading a pre-configured project. Combining this
feature with a JDBC backed store this could be really useful for
auditing and logging&nbsp;messages.</p>

<h3>EMS&nbsp;Support</h3>

<p>I registered the <a href="http://emssnoop.org/">emssnoop.org</a> domain at the same time as
<a href="http://rvsnoop.org/">rvsnoop.org</a>, and there has been a project on SourceForge for a
while, even if it hasn&#8217;t had anything checked in to it yet! An open
question is whether to try for generic JMS support or just work with
EMS&nbsp;directly.</p>

<h3>User Written&nbsp;Plug-ins</h3>

<p>It would be nice to be able to cleanly extend RvSnoop if required,
without going back and modifying the main code&nbsp;base.</p>

<h3>So, What About&nbsp;2.0?</h3>

<p>All (well, most) of these features point to a need for an extensible
plug-in system, <a href="http://www.eclipse.org/">Eclipse</a> has shown that a good way of
architecting a desktop application (or any application, for that
matter) is to build it entirely from plug-ins wrapped around a small&nbsp;core.</p>

<p>So, the upshot of this is that I&#8217;m planning on migrating to a managed runtime, probably <a href="http://www.osgi.org/">OSGi</a>, for the 2.0 release. I&#8217;ll talk about this more in another post. In particular, what&#8217;s the cost/benefit ratio of using this type of runtime; and which runtimes are&nbsp;good?</p>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2006/12/oh-such-a-good-infrastructure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RvSnoop 356</title>
		<link>http://ianp.org/2006/12/rvsnoop-356/</link>
		<comments>http://ianp.org/2006/12/rvsnoop-356/#comments</comments>
		<pubDate>Thu, 07 Dec 2006 18:59:37 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RvSnoop]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=77</guid>
		<description><![CDATA[A new development build of RvSnoop is available for
downloading. This release contains all of the features that
will be in the finished 1.6 release, due out sometime next&#160;week.

Changes from the last development build&#160;include:


Added support for republishing on different&#160;connections.
Added column to ledger to display wire size of&#160;messages.
Fixed bug that caused republished messages to be filtered
incorrectly from the [...]]]></description>
			<content:encoded><![CDATA[<p>A new development build of <a href="http://rvsnoop.org/">RvSnoop</a> is available for
<a href="http://downloads.sourceforge.net/rvsn00p/rvsnoop-356-bin.tgz">downloading</a>. This release contains all of the features that
will be in the finished 1.6 release, due out sometime next&nbsp;week.</p>

<p>Changes from the last development build&nbsp;include:</p>

<ul>
<li>Added support for republishing on different&nbsp;connections.</li>
<li>Added column to ledger to display wire size of&nbsp;messages.</li>
<li>Fixed bug that caused republished messages to be filtered
incorrectly from the subject&nbsp;hierarchy.</li>
<li>Fixed bug with ledger renderer which caused striping to break when
columns were added/removed from the&nbsp;view.</li>
<li>Minor code clean-ups and removal of a couple of unused&nbsp;methods.</li>
<li>Updated the FAQs page with correct details of timestamp formatting
in ledger (this hasn&#8217;t been pushed out to the public site&nbsp;yet).</li>
</ul>

<p>The only things left to do now (assuming no new bugs are found) are
some additional testing and documentation&nbsp;updates.</p>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2006/12/rvsnoop-356/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RvSnoop 353</title>
		<link>http://ianp.org/2006/12/rvsnoop-353/</link>
		<comments>http://ianp.org/2006/12/rvsnoop-353/#comments</comments>
		<pubDate>Wed, 06 Dec 2006 00:42:35 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RvSnoop]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[TIBCO]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=76</guid>
		<description><![CDATA[A new development version of RvSnoop is now available for
download. This version&#160;adds:


Saving and restoring messages between&#160;sessions.
Remove Connection as a context sensitive menu&#160;option.
Improved drag and drop&#160;support.


And also fixes some bugs involving the screen menu on Mac OS X.
The save and restore messages option writes the selected records
from the ledger to a ZIP based binary file format [...]]]></description>
			<content:encoded><![CDATA[<p>A new development version of <a href="http://rvsnoop.org/">RvSnoop</a> is now available for
<a href="http://downloads.sourceforge.net/rvsn00p/rvsnoop-353-bin.tgz">download</a>. This version&nbsp;adds:</p>

<ul>
<li>Saving and restoring messages between&nbsp;sessions.</li>
<li>Remove Connection as a context sensitive menu&nbsp;option.</li>
<li>Improved drag and drop&nbsp;support.</li>
</ul>

<p>And also fixes some bugs involving the screen menu on Mac OS X.
The save and restore messages option writes the selected records
from the ledger to a ZIP based binary file format (it&#8217;s the same
format that is used internally by the copy and paste mechanism). The
format has also been enhanced to include subject information for the
messages, as this is stripped out by the raw Rendezvous library&nbsp;calls.</p>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2006/12/rvsnoop-353/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>30,000,000 Lines Of Code? WTF?</title>
		<link>http://ianp.org/2006/11/30000000-lines-of-code-wtf/</link>
		<comments>http://ianp.org/2006/11/30000000-lines-of-code-wtf/#comments</comments>
		<pubDate>Sat, 04 Nov 2006 21:08:26 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[RvSnoop]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=75</guid>
		<description><![CDATA[Apparently (according to this) Mac Office is 30,000,000 lines of code, that&#8217;s a lot of code to try to keep bug free! Out of curiosity, I downloaded a utility to count lines of code and found that RvSnoop is only ~7,000 lines of code. That&#8217;s only counting non-comment lines, I don&#8217;t know how well commented [...]]]></description>
			<content:encoded><![CDATA[<p>Apparently (according to <a href="http://blogs.msdn.com/macmojo/archive/2006/11/03/it-s-all-in-the-numbers.aspx">this</a>) Mac Office is 30,000,000 lines of code, that&#8217;s a lot of code to try to keep bug free! Out of curiosity, I downloaded <a href="http://www.kclee.de/clemens/java/javancss/">a utility to count lines of code</a> and found that <a href="http://rvsnoop.org/">RvSnoop</a> is only ~7,000 lines of code. That&#8217;s only counting non-comment lines, I don&#8217;t know how well commented the MS codebase&nbsp;is.</p>

<p>Not that there&#8217;s any real comparison in functionality between the two of&nbsp;course!</p>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2006/11/30000000-lines-of-code-wtf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Namespace Support to RvSnoop</title>
		<link>http://ianp.org/2006/10/adding-namespace-support-to-rvsnoop/</link>
		<comments>http://ianp.org/2006/10/adding-namespace-support-to-rvsnoop/#comments</comments>
		<pubDate>Tue, 17 Oct 2006 09:58:15 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RvSnoop]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[TIBCO]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=72</guid>
		<description><![CDATA[For RvSnoop I&#8217;m currently working on adding namespaces to all
of the files that are used to save the application preferences and
also the project files. This is a Good Thing in and of itself, as it
allows me to use XML Schema to validate and document the
files formats. But, more importantly, it gives me the opportunity to
refactor [...]]]></description>
			<content:encoded><![CDATA[<p>For <a href="http://rvsnoop.prg/">RvSnoop</a> I&#8217;m currently working on adding namespaces to all
of the files that are used to save the application preferences and
also the project files. This is a Good Thing in and of itself, as it
allows me to use <a href="http://www.w3.org/XML/Schema">XML Schema</a> to validate and document the
files formats. But, more importantly, it gives me the opportunity to
refactor as I go alond, the general plan is to make the projects in
the next release be based on directories rather than a single XML
file, this will allow me to use a disk based storage mechanism for
messages so that they will be persistent across&nbsp;sessions.</p>

<h3>Playing Well With&nbsp;Others</h3>

<p>At the same time, I&#8217;ve taken the opportunity to include some of the
<a href="http://www.apache.org/">Apache</a> <a href="http://jakarta.apache.org/commons/index.html">Commons</a> libraries in the build. There were
(well, still are) a number of small utility classes scattered around
which I&#8217;m planning on replacing with the versions from&nbsp;Apache.</p>

<p>One side effect of this is that the build is increasing in size, to
help control this I&#8217;m going to remove the <a href="http://www.oracle.com/database/berkeley-db/je/index.html">Berkeley DB</a>
dependency from the build. I was origiannly planning to use this for
the on disk message store but I&#8217;ve changed my mind here. My current
thinking is to just write the messages out to files but to have a
set of indexes (probably built using <a href="http://lucene.apache.org/java/docs/index.html">Lucene</a>) as well for
searching and&nbsp;sorting.</p>

<p>There should be another (alpha) release out later this week with the
Commons and Berkeley DB changes complete, and a release next week
with the new project&nbsp;structure.</p>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2006/10/adding-namespace-support-to-rvsnoop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Transparent Development for RvSnoop</title>
		<link>http://ianp.org/2006/10/more-transparent-development-for-rvsnoop/</link>
		<comments>http://ianp.org/2006/10/more-transparent-development-for-rvsnoop/#comments</comments>
		<pubDate>Fri, 06 Oct 2006 14:59:13 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RvSnoop]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[TIBCO]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=70</guid>
		<description><![CDATA[Although it&#8217;s an open source project that anybody can help out with, in
practice RvSnoop is developed by me at present. However, a couple of people have asked&#8201;&#8212;&#8201;- either in the forums or by email&#8201;&#8212;&#8201;- what the current development status is. Well, in a word, it&#8217;s going slower than I had&#160;planned!

However, I&#8217;ll start posting to this [...]]]></description>
			<content:encoded><![CDATA[<p>Although it&#8217;s an open source project that anybody can help out with, in
practice <a href="http://rvsnoop.org/">RvSnoop</a> is developed by me at present. However, a couple of people have asked&thinsp;&#8212;&thinsp;- either in the forums or by email&thinsp;&#8212;&thinsp;- what the current development status is. Well, in a word, it&#8217;s going slower than I had&nbsp;planned!</p>

<p>However, I&#8217;ll start posting to this blog a little about what I&#8217;m working on and what my current plans are, and also try to start making more frequent&nbsp;releases.</p>

<p>I&#8217;ll rearrange the distributables slightly as well, given the speed of most connections these days I no longer see the point of keeping a <em>binary only</em> download so I&#8217;m just goint to include the compressed source and API docs will all of the releases, this will be labelled as the <em>RvSnoop Stable</em>&nbsp;release.</p>

<p>I&#8217;ll make more frequent releases of the code that I am working on as a
<em>RvSnoop Development</em> release. But first, a little explanation of what you can expect from these unstable releases. I&#8217;ll post later about my plans for the upcoming&nbsp;releases.</p>

<h3>It&#8217;s All Greek To&nbsp;Me</h3>

<p>Projects use diffferent terminology for there release schedules, here&#8217;s how I&#8217;m using the&nbsp;terms.</p>

<h4>Alpha</h4>

<p>If a release is labelled <em>alpha</em> then it means that I am still adding new features and working on major known bugs. Once the release is feature complete and all of the major bugs have been squashed I&#8217;ll go through and clean up all of the strings, finally I&#8217;ll spend some time cleaning up any glaring UI&nbsp;problems.</p>

<p>Once this is complete I&#8217;ll relabel the release&nbsp;<em>beta</em>.</p>

<h4>Beta</h4>

<p>Moving forward one of the main points about the <em>beta</em> release is that it will be considered to be a <em>string freeze</em> release. I&#8217;m aiming for release 1.7 to be fully prepared for internationalization and hopefully some of the people who have been using RvSnoop will help out with&nbsp;translations.</p>

<p>Also at this point the UI will be basically finished, so the beta releases are for testing and minor bug fixing. Also during this phase I will run all of the analysis tasks (currently only <a href="http://pmd.sourceforge.net/">PMD</a>, but more are planned) and clean up whatever they&nbsp;reveal.</p>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2006/10/more-transparent-development-for-rvsnoop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dynamic Date Formatting</title>
		<link>http://ianp.org/2006/04/dynamic-date-formatting/</link>
		<comments>http://ianp.org/2006/04/dynamic-date-formatting/#comments</comments>
		<pubDate>Mon, 17 Apr 2006 17:12:49 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RvSnoop]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=60</guid>
		<description><![CDATA[I&#8217;ve noticed a neat feature in Path Finder where it changes the date format used to display time stamps in the main table based on the width of the column. In RvSnoop I was allowing the user to set a preferred format as a configuration option, but this seems much&#160;better.

It turns out that this is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve noticed a neat feature in <a href="http://www.cocoatech.com/pf4/">Path Finder</a> where it changes the date format used to display time stamps in the main table based on the width of the column. In <a href="http://rvsnoop.org">RvSnoop</a> I was allowing the user to set a preferred format as a configuration option, but this seems much&nbsp;better.</p>

<p>It turns out that this is pretty easy to achieve in Java, just use the following&nbsp;class:</p>


<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DateCellRenderer <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">DefaultTableCellRenderer</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Or load these from a user preference...</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">DateFormat</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> dateFormats <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;yyyy-MM-dd HH:mm:ss.SSS&quot;</span><span style="color: #009900;">&#41;</span>,
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;yy-MM-dd HH:mm:ss.SSS&quot;</span><span style="color: #009900;">&#41;</span>,
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;MM/dd HH:mm:ss.SSS&quot;</span><span style="color: #009900;">&#41;</span>,
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;HH:mm:ss.SSS&quot;</span><span style="color: #009900;">&#41;</span>,
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;HH:mm:ss.SS&quot;</span><span style="color: #009900;">&#41;</span>,
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;HH:mm:ss.S&quot;</span><span style="color: #009900;">&#41;</span>,
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;HH:mm:ss&quot;</span><span style="color: #009900;">&#41;</span>,
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;HH:mm&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> currentWidth<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Font</span> currentFont<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">DateFormat</span> currentFormat<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Date</span> date <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Component</span> getTableCellRendererComponent<span style="color: #009900;">&#40;</span><span style="color: #003399;">JTable</span> table, <span style="color: #003399;">Object</span> value,
    <span style="color: #000066; font-weight: bold;">boolean</span> isSelected, <span style="color: #000066; font-weight: bold;">boolean</span> hasFocus, <span style="color: #000066; font-weight: bold;">int</span> row, <span style="color: #000066; font-weight: bold;">int</span> col<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">DateFormat</span> format <span style="color: #339933;">=</span> getFormat<span style="color: #009900;">&#40;</span>table.<span style="color: #006633;">getColumnModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getColumn</span><span style="color: #009900;">&#40;</span>col<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, table<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> displayed <span style="color: #339933;">=</span> value <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">?</span> format.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Date</span><span style="color: #009900;">&#41;</span> value<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">getTableCellRendererComponent</span><span style="color: #009900;">&#40;</span>table, displayed, isSelected, hasFocus, row, col<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">DateFormat</span> getFormat<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> width, <span style="color: #003399;">JTable</span> table<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Font</span> font <span style="color: #339933;">=</span> table.<span style="color: #006633;">getFont</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>currentWidth <span style="color: #339933;">==</span> width <span style="color: #339933;">&amp;&amp;</span> currentFormat <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> font.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>currentFont<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> currentFormat<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        currentWidth <span style="color: #339933;">=</span> width<span style="color: #339933;">;</span>
        currentFont <span style="color: #339933;">=</span> font<span style="color: #339933;">;</span>
        <span style="color: #003399;">FontMetrics</span> metrics <span style="color: #339933;">=</span> table.<span style="color: #006633;">getFontMetrics</span><span style="color: #009900;">&#40;</span>font<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        date.<span style="color: #006633;">setTime</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">currentTimeMillis</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">DateFormat</span> df <span style="color: #339933;">:</span> dateFormats<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>metrics.<span style="color: #006633;">stringWidth</span><span style="color: #009900;">&#40;</span>df.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>date<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> width<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                currentFormat <span style="color: #339933;">=</span> df<span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">return</span> df<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        currentFormat <span style="color: #339933;">=</span> dateFormats<span style="color: #009900;">&#91;</span>dateFormats.<span style="color: #006633;">length</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> currentFormat<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<p>You will need to register it with your <code>JTable</code> via <code>myTable.getColumnModel().getColumn(0).setCellRenderer(myRenderer);</code> and away you go. You can have more or less format options by altering the static array in the&nbsp;class.</p>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2006/04/dynamic-date-formatting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rvSnoop</title>
		<link>http://ianp.org/2006/04/rvsnoop/</link>
		<comments>http://ianp.org/2006/04/rvsnoop/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 13:48:14 +0000</pubDate>
		<dc:creator>Ian Phillips</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RvSnoop]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ianp.org/?p=59</guid>
		<description><![CDATA[I&#8217;ve taken over pretty much all of the development of the
rvSnoop utility now, the first major new release has
been put out today with a number of changes in it. Here, briefly, are the
plans for the next few&#160;versions:


A graphical widget to display messages instead of the text&#160;field.
More import/export formats for&#160;messages.
General user interface&#160;clean-up.
Better&#160;documentation.


I&#8217;ll have more plans once [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve taken over pretty much all of the development of the
<a href="http://rvsnoop.org">rvSnoop</a> utility now, the first major new release has
been put out today with a number of changes in it. Here, briefly, are the
plans for the next few&nbsp;versions:</p>

<ul>
<li>A graphical widget to display messages instead of the text&nbsp;field.</li>
<li>More import/export formats for&nbsp;messages.</li>
<li>General user interface&nbsp;clean-up.</li>
<li>Better&nbsp;documentation.</li>
</ul>

<p>I&#8217;ll have more plans once I get to know the code a little&nbsp;better.</p>

<p><span id="more-59"></span>
* Add a new action to delete connections.
* Add support for viewing serialized Java objects.
* Move the preferences to a separate dialog.
* Add support for editing messages before republishing.
Along with some more code cleanup. After that I&#8217;m planning to push for a 2.0 release which should contain a much more robust export mechanism, persistent record ledgers, and graphical charts.
Finally, once the code settles down a bit I&#8217;m going to look into supporting EMS messages (as a separate project,&nbsp;emsSnoop).</p>
]]></content:encoded>
			<wfw:commentRss>http://ianp.org/2006/04/rvsnoop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
