<?xml version="1.0" encoding="utf-8"?>
        <?xml-stylesheet type="text/css" href="http://tstotts.net/blog/"?>
<rss version="2.0"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:admin="http://webns.net/mvcb/"
 xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title>Filed under: software | tstotts dot net Weblog</title>
<atom:link href="http://tstotts.net/blog/archives/software/index-rss.xml" rel="self" type="application/rss+xml" />
<link>http://tstotts.net/blog</link>
<description>jumbled items that fit nowhere else</description>
<dc:language>en-us</dc:language>
<dc:creator>timotheus</dc:creator>
<dc:date>2009-12-12T22:23:14-05:00</dc:date>
<admin:generatorAgent rdf:resource="http://nanoblogger.sourceforge.net" />

<item>
<link>http://tstotts.net/blog/archives/2009/12/12/latex_letter_paper/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/12/12/latex_letter_paper/</guid>
<title>latex letter paper</title>
<dc:date>2009-12-12T22:17:28-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> latex, software</dc:subject>
<description><![CDATA[<p>As a user, to configure <a href="http://www.latex-project.org/">LaTeX</a> to default to letter paper size (instead of A4),
run the command:</p>

<pre class="example"># texconfig paper letter
</pre>

<p>Paper size can also be respecified during the <a href="http://en.wikipedia.org/wiki/Device_independent_file_format">DVI</a> to <a href="http://en.wikipedia.org/wiki/Portable_Document_Format">PDF</a> conversion, if not
using pdfLaTeX:</p>

<pre class="example"># latex mydoc.tex &amp;&amp; latex mydoc.tex
# dvipdfmx -p letter mydoc.dvi
</pre>

<p>This is useful for third-party document classes, such as
<code>acm_proc_article-sp.cls</code>, which do not have a <code>letterpaper</code> option, but are
intended for letter paper size.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/12/06/searchable_ligatures/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/12/06/searchable_ligatures/</guid>
<title>searchable ligatures</title>
<dc:date>2009-12-06T20:56:26-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> latex, software</dc:subject>
<description><![CDATA[<p>While working on my resume, which is authored in <a href="http://www.latex-project.org/">LaTeX</a>, I noticed an
interesting problem: every word that contained the characters 'ff', 'fi', or
'ffi' was not searchable. The document was human-readable on the screen, but
for some reason <a href="http://www.adobe.com/products/reader/">Adobe Acrobat Reader</a> was unable to properly copy-and-paste or
search
these letters. Additionally, the Linux command `<a href="http://en.wikipedia.org/wiki/Pdftotext">pdftotext</a>' converted the PDF
to plain text that was not pure ASCII. After discussing the problem on
<a href="http://freenode.net/">freenode</a> with a few more experienced LaTeX users, I discovered what is
probably a lesser-known typography feature: <a href="http://en.wikipedia.org/wiki/Typographic_ligature">ligatures</a>.</p>

<p>Ligatures are single characters (glyphs) that represent the combination of two
or more characters
in a more aesthetically pleasing fashion for printing of documentation. LaTeX
and other typesetting software make these substitutions automatically. In this
case, the 'f' character is positioned closer to the following character if
the following character is 'f' or 'i', making a single glyph from two.</p>

<p>Normally a PDF using ligatures still has an internal font encoding that
permits searching and copying of the text without the ligatures. For some yet
unknown reason my distribution of <a href="http://www.tug.org/texlive/">TeXLive</a> creates PDFs whose ligatures are
encoding compatible with open source programs, such as <a href="http://www.gnome.org/projects/evince/">Evince</a>, but pose
problems with Adobe products.</p>

<p>The solution was to use the <code>lmodern</code> LaTeX package with pdfLaTeX, substituting
fonts in the PDF. Unfortunately, this can more than double the PDF size.</p>

<pre class="src"><span style="color: #a020f0;">\usepackage</span>{<span style="color: #0000ff;">lmodern</span>}
</pre>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/12/05/upgrading_ubuntu_kernel/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/12/05/upgrading_ubuntu_kernel/</guid>
<title>upgrading ubuntu kernel</title>
<dc:date>2009-12-05T01:35:19-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> linux, software</dc:subject>
<description><![CDATA[<p>New kernels for the ubuntu distribution are available
from <a href="http://kernel.ubuntu.com/~kernel-ppa">kernel-ppa</a>. At the moment, kernel 2.6.32 provides some Intel graphics
driver enhancements over the default 2.6.31 kernel shipped with Ubuntu 9.10.</p>

<p>To install, download
<a href="http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.32/">ubuntu kernel 2.6.32</a> for your architecture (i386 or amd64), and then run dpkg:</p>

<pre class="example">dpkg -i linux*2.6.32*.deb
</pre>

<p>Update. 05 Dec 2009 @ 20:19. It appears that the &quot;improved&quot; Intel graphics
driver does not properly resume from suspend. That is unfortunate.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/11/25/filtering_with_filternode/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/11/25/filtering_with_filternode/</guid>
<title>filtering with filternode</title>
<dc:date>2009-11-25T00:58:18-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> java, netbeans, software</dc:subject>
<description><![CDATA[<p>Once you begin to understand it, the Netbeans Nodes API is quite elegant, and
a useful way to display information in navigator tree structures. One
particular feature of the Nodes API is the FilterNode class. Typically used as
a Node that proxies a Node referencing a DataObject, the FilterNode provides
a mechanism by which to filter the displayed contents of a navigator's tree.</p>

<p>An example scenario for using FilterNode, similar to what I read about in a
<a href="http://wiki.netbeans.org/DevFaqNodesDecorating">wiki post</a>, is to hide the project settings directory inside the project
Navigator; but display all other files. This is accomplished using the
Project UI API, Nodes API, (and a few others).</p>

<p>First, create a project factory and implement its methods.</p>

<pre class="src">@<span style="color: #5f9ea0;">org</span>.<span style="color: #5f9ea0;">openide</span>.<span style="color: #5f9ea0;">util</span>.<span style="color: #5f9ea0;">lookup</span>.ServiceProvider(service=ProjectFactory.<span style="color: #a020f0;">class</span>)
<span style="color: #a020f0;">public</span> <span style="color: #a020f0;">class</span> MyProjectFactory <span style="color: #a020f0;">implements</span> <span style="color: #228b22;">ProjectFactory</span> {

  <span style="color: #a020f0;">public</span> <span style="color: #a020f0;">static</span> <span style="color: #a020f0;">final</span> <span style="color: #228b22;">String</span> <span style="color: #b8860b;">PROJECT_SUBDIR</span> = <span style="color: #bc8f8f;">"mymetadata"</span>;
  <span style="color: #a020f0;">public</span> <span style="color: #a020f0;">static</span> <span style="color: #a020f0;">final</span> <span style="color: #228b22;">String</span> <span style="color: #b8860b;">PROJECT_FILE</span> = <span style="color: #bc8f8f;">"myproject.xml"</span>;
  <span style="color: #a020f0;">public</span> <span style="color: #a020f0;">static</span> <span style="color: #a020f0;">final</span> <span style="color: #228b22;">String</span> <span style="color: #b8860b;">PROJECT_FILE_PATH</span> =
          PROJECT_SUBDIR + <span style="color: #bc8f8f;">"/"</span> + PROJECT_FILE;

  <span style="color: #a020f0;">public</span> <span style="color: #228b22;">boolean</span> <span style="color: #0000ff;">isProject</span>(<span style="color: #228b22;">FileObject</span> <span style="color: #b8860b;">projectDirectory</span>) {
    <span style="color: #228b22;">File</span> <span style="color: #b8860b;">dirFile</span>, <span style="color: #b8860b;">xmlFile</span>;

    dirFile = FileUtil.toFile(projectDirectory);
    <span style="color: #a020f0;">if</span> (dirFile == <span style="color: #5f9ea0;">null</span>)
        <span style="color: #a020f0;">return</span> <span style="color: #5f9ea0;">false</span>; <span style="color: #b22222;">// </span><span style="color: #b22222;">The directory is not valid.
</span>    xmlFile = <span style="color: #a020f0;">new</span> <span style="color: #228b22;">File</span>(<span style="color: #a020f0;">new</span> <span style="color: #228b22;">File</span>(dirFile, PROJECT_SUBDIR), PROJECT_FILE);
    <span style="color: #a020f0;">return</span> xmlFile.isFile(); <span style="color: #b22222;">// </span><span style="color: #b22222;">Does XML file exist?
</span>  }

  <span style="color: #a020f0;">public</span> <span style="color: #228b22;">Project</span> <span style="color: #0000ff;">loadProject</span>(<span style="color: #228b22;">FileObject</span> <span style="color: #b8860b;">projectDirectory</span>,
                             <span style="color: #228b22;">ProjectState</span> <span style="color: #b8860b;">state</span>) <span style="color: #a020f0;">throws</span> <span style="color: #228b22;">IOException</span> {
      <span style="color: #a020f0;">return</span> <span style="color: #5f9ea0;">null</span>;
  }

  <span style="color: #a020f0;">public</span> <span style="color: #228b22;">void</span> <span style="color: #0000ff;">saveProject</span>(<span style="color: #a020f0;">final</span> <span style="color: #228b22;">Project</span> <span style="color: #b8860b;">project</span>)
                         <span style="color: #a020f0;">throws</span> <span style="color: #228b22;">IOException</span>, <span style="color: #228b22;">ClassCastException</span> {
  }
}
</pre>

<p>Second, create a LogicalViewProvider that filters out the project
subdirectory. Take special note of the createNodes method of the ProxyChildren
inner class. A lot of additional implementation is omitted here to emphasize
the inner class that extends FilterNode.Children.</p>

<pre class="src"><span style="color: #a020f0;">class</span> <span style="color: #228b22;">MyLogicalView</span> <span style="color: #a020f0;">implements</span> <span style="color: #228b22;">LogicalViewProvider</span> {

  <span style="color: #a020f0;">private</span> <span style="color: #a020f0;">final</span> <span style="color: #228b22;">MyProject</span> <span style="color: #b8860b;">project</span>;

  <span style="color: #a020f0;">public</span> MyLogicalView(<span style="color: #228b22;">MyProject</span> <span style="color: #b8860b;">project</span>) {
    <span style="color: #a020f0;">this</span>.project = project;
  }

  <span style="color: #a020f0;">public</span> @Override Node createLogicalView() {
    <span style="color: #a020f0;">try</span> {
      <span style="color: #b22222;">// </span><span style="color: #b22222;">Find the project directory.
</span>      <span style="color: #228b22;">FileObject</span> <span style="color: #b8860b;">dir</span> = project.getProjectDirectory();
      <span style="color: #b22222;">// </span><span style="color: #b22222;">Find the data object for the directory.
</span>      <span style="color: #228b22;">DataFolder</span> <span style="color: #b8860b;">dirDF</span> = DataFolder.findFolder(dir);
      <span style="color: #b22222;">// </span><span style="color: #b22222;">Create a proxy node.
</span>      <span style="color: #a020f0;">return</span> <span style="color: #a020f0;">new</span> <span style="color: #228b22;">ProxyNode</span>(dirDF.getNodeDelegate(), project);
    } <span style="color: #a020f0;">catch</span> (<span style="color: #228b22;">DataObjectNotFoundException</span> <span style="color: #b8860b;">e</span>) {
      Exceptions.printStackTrace(e);
      <span style="color: #a020f0;">return</span> <span style="color: #a020f0;">new</span> <span style="color: #228b22;">AbstractNode</span>(<span style="color: #5f9ea0;">Children</span>.LEAF);
    }
  }

  <span style="color: #a020f0;">public</span> @Override Node findPath(<span style="color: #228b22;">Node</span> <span style="color: #b8860b;">root</span>, <span style="color: #228b22;">Object</span> <span style="color: #b8860b;">target</span>) {
    <span style="color: #a020f0;">return</span> <span style="color: #5f9ea0;">null</span>; <span style="color: #b22222;">// </span><span style="color: #b22222;">Unimplemented.
</span>  }

  <span style="color: #bc8f8f;">/**
   * This the actual visible node displayed
   * in the project tab for the project.
   */</span>
  <span style="color: #a020f0;">public</span> <span style="color: #a020f0;">static</span> <span style="color: #a020f0;">final</span> <span style="color: #a020f0;">class</span> <span style="color: #228b22;">ProxyNode</span> <span style="color: #a020f0;">extends</span> <span style="color: #228b22;">FilterNode</span> {
    <span style="color: #a020f0;">protected</span> <span style="color: #a020f0;">final</span> <span style="color: #228b22;">MyProject</span> <span style="color: #b8860b;">project</span>;

    <span style="color: #a020f0;">public</span> ProxyNode(<span style="color: #228b22;">Node</span> <span style="color: #b8860b;">node</span>, <span style="color: #228b22;">MyProject</span> <span style="color: #b8860b;">project</span>)
                     <span style="color: #a020f0;">throws</span> <span style="color: #228b22;">DataObjectNotFoundException</span> {
      <span style="color: #a020f0;">super</span>(node,
            <span style="color: #a020f0;">new</span> <span style="color: #228b22;">ProxyChildren</span>(node),
            <span style="color: #a020f0;">new</span> <span style="color: #228b22;">ProxyLookup</span>(<span style="color: #a020f0;">new</span> <span style="color: #228b22;">Lookup</span>[]{Lookups.singleton(project),
                                         node.getLookup()}));
      <span style="color: #a020f0;">this</span>.project = project;
    }
  }

  <span style="color: #a020f0;">public</span> <span style="color: #a020f0;">static</span> <span style="color: #a020f0;">class</span> <span style="color: #228b22;">ProxyChildren</span> <span style="color: #a020f0;">extends</span> <span style="color: #5f9ea0;">FilterNode</span>.<span style="color: #228b22;">Children</span> {
    <span style="color: #a020f0;">public</span> ProxyChildren(<span style="color: #228b22;">Node</span> <span style="color: #b8860b;">owner</span>) {
      <span style="color: #a020f0;">super</span>(owner);
    }

    <span style="color: #a020f0;">protected</span> @Override Node[] createNodes (<span style="color: #228b22;">Node</span> <span style="color: #b8860b;">key</span>) {
      List&lt;Node&gt; result = <span style="color: #a020f0;">new</span> <span style="color: #228b22;">ArrayList</span>&lt;Node&gt;();
      <span style="color: #a020f0;">for</span> (Node node : <span style="color: #a020f0;">super</span>.createNodes(key))
        <span style="color: #a020f0;">if</span> (accept(node))
          result.add(node);
      <span style="color: #a020f0;">return</span> result.toArray(<span style="color: #a020f0;">new</span> <span style="color: #228b22;">Node</span>[0]);
    }

    <span style="color: #a020f0;">private</span> <span style="color: #228b22;">boolean</span> <span style="color: #0000ff;">accept</span> (<span style="color: #228b22;">Node</span> <span style="color: #b8860b;">node</span>) {
      <span style="color: #b22222;">// </span><span style="color: #b22222;">The project subdirectory is hidden.
</span>      <span style="color: #228b22;">DataFolder</span> <span style="color: #b8860b;">f</span> = node.getLookup().lookup(DataFolder.<span style="color: #a020f0;">class</span>);
      <span style="color: #a020f0;">if</span> (f != <span style="color: #5f9ea0;">null</span>) {
        <span style="color: #228b22;">String</span> <span style="color: #b8860b;">name</span> = f.getName();
        <span style="color: #a020f0;">if</span> (name.equalsIgnoreCase(<span style="color: #5f9ea0;">MyProjectFactory</span>.PROJECT_SUBDIR))
          <span style="color: #a020f0;">return</span> <span style="color: #5f9ea0;">false</span>;
      }
      <span style="color: #a020f0;">return</span> <span style="color: #5f9ea0;">true</span>;
    }
  }
}
</pre>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/11/16/renaming_files_for_windows/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/11/16/renaming_files_for_windows/</guid>
<title>renaming files for windows</title>
<dc:date>2009-11-16T01:19:49-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> software, unix</dc:subject>
<description><![CDATA[<p>While all file systems support <a href="http://en.wikipedia.org/wiki/ASCII">ASCII</a> file names, there is usually a subset of
characters that are not supported. For example, <a href="http://en.wikipedia.org/wiki/Linux">Linux</a> and <a href="http://en.wikipedia.org/wiki/UNIX">UNIX</a> do not support
naming a file with a forward slash character ‘/’; and the Windows <a href="http://en.wikipedia.org/wiki/NTFS">NTFS</a>
file system disallows forward and backward slash, as well as
colon and several more characters.</p>

<p>The Windows NTFS file system is stricter than Linux <a href="http://en.wikipedia.org/wiki/Ext3">ext3</a> in what file (and
directory) names it will or will not support. And <a href="http://en.wikipedia.org/wiki/Samba_(software)">Samba</a>, the Windows file
server software for Linux/UNIX, is stricter yet in what file names it will
support. To assist me with renaming *NIX files to Windows-proper names, I have
created a command-line app called “winrename”. It acts like the UNIX “find”
command, but recursively renames files and directories to be Windows naming
compatible.</p>

<p>The source for “winrename” is available at:
<a href="http://tstotts.net/pubvc.co/mini-apps/000_rename_for_windows/">…/000_rename_for_windows/</a>.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/11/10/ezra_red_trac/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/11/10/ezra_red_trac/</guid>
<title>ezra red trac</title>
<dc:date>2009-11-10T01:43:56-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> software, engineering</dc:subject>
<description><![CDATA[
<p class="image"><img class="left" src="/img/blog/trac_feet.png"
alt="[Trac feet]" width="48" height="48" />

To further expedite my efforts at developing Ezra Red &mdash; my HDL revising and
rewriting application &mdash; I have created a Trac wiki and ticket site for the
project. The <a href="https://secure.tstotts.net/trac/ezrared">Ezra Red Trac site</a> permits anonymous viewing of all project
progress and tickets. Actual source-code viewing is not permitted though as
this application is closed-source.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/10/30/subversion_undelete/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/10/30/subversion_undelete/</guid>
<title>subversion undelete</title>
<dc:date>2009-10-30T23:13:39-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> software, tools</dc:subject>
<description><![CDATA[<p>The <a href="http://subversion.tigris.org">Subversion</a> <a href="http://en.wikipedia.org/wiki/Revision_control">VCS</a>
does not have an explicit undelete command to restore files
after commiting deletions.</p>

<pre class="example"># pwd
~/svn_work/repo/blog/sandbox
# svn delete fun.txt
D         fun.txt
# svn commit --message 'Delete fun file.' ./
</pre>
To accomplish an undelete operation, first examine the directory log and
select the desired commit revision of the (deleted) file to be restored.

<pre class="example"># svn log -verbose --limit 5 ./
------------------------------------------------------------------------
r73 | timotheus | 2009-10-30 22:44:43 -0400 (Fri, 30 Oct 2009) | 1 line
Changed paths:
   D /blog/sandbox/fun.txt

Delete fun file.
------------------------------------------------------------------------
r72 | timotheus | 2009-10-30 22:44:26 -0400 (Fri, 30 Oct 2009) | 1 line
Changed paths:
   M /blog/sandbox/fun.txt
...
</pre>
Here, in this example, revision 72 of fun.txt is selected to be
restored. It is necessary to copy the file by repository URL because a deleted
file does not exist in the work area.

<pre class="example"># svn copy https://host/repo/blog/sandbox/fun.txt@72 ./
A         fun.txt
# svn commit --message 'Restore fun.txt file from revision 72.' ./
</pre>
This operation could be performed by a single copy command, specifying the URL
and bypassing the work area:

<pre class="example"># svn copy --message 'Restore fun.txt file from revision 72.' \
      https://host/repo/blog/sandbox/fun.txt@72 \
      https://host/repo/blog/sandbox/fun.txt
</pre>
The primary advantage of copying to the work area first is to undelete a group
a files. If the files are first copied to the work area, then the commit of
all undeleted files will be a single atomic operation.]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/10/15/ezra_red_application/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/10/15/ezra_red_application/</guid>
<title>ezra red application</title>
<dc:date>2009-10-15T00:33:18-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> software, engineering</dc:subject>
<description><![CDATA[<p>“Ezra Red” is the code name for the new <a href="http://en.wikipedia.org/wiki/Hardware_description_language">HDL</a> revising and rewriting application
that I am developing as a personal project. After several weeks of studying
the Netbeans platform, I have begun a branch of my original HDL rewriting
application that will utilize the <a href="http://platform.netbeans.org">Netbeans RCP</a> instead of a custom
command-line interface and a custom Swing GUI. Using the Netbeans Platform as
a basis for my application will allow me to focus more on discipline specific
coding, such as the language parsing and tree rewriting of an HDL project; and
not spend so much time concerning myself with the presentation and usability
of the application. To track what functionality needs to be implemented, I
have created a <a href="http://tstotts.net/blog/articles/ezra_red_task_list/">Task List</a>.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/10/07/statistics_including_screen_size/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/10/07/statistics_including_screen_size/</guid>
<title>statistics including screen size</title>
<dc:date>2009-10-07T16:19:34-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> site-news, software</dc:subject>
<description><![CDATA[<p>The <a href="/awstats/awstats.pl?config=tstotts.net">site statistics</a> now include some additional miscellanea, including browser
screen sizes and installed browser plugins (<a href="http://www.adobe.com/go/EN_US-H-GET-READER">Adobe Acrobat Reader</a>, etc.). These
additional statistics are made available by some <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a> code that is
included at the end of every <a href="http://en.wikipedia.org/wiki/XHTML">XHTML</a> document, just before the closing <code>&lt;/body&gt;</code>
tag.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/09/22/netbeans_study-up/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/09/22/netbeans_study-up/</guid>
<title>netbeans study-up</title>
<dc:date>2009-09-22T23:34:17-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> software, engineering</dc:subject>
<description><![CDATA[
<p class="image"><img class="left" src="/img/blog/netbeans_logo1.png"
alt="[Netbeans Cube]" width="55" height="55" />

After some futher consideration, I have elected to try creating a branch of my
<a href="http://en.wikipedia.org/wiki/Hardware_description_language">HDL</a> rewriting tool as a combination of the <a href="http://www.antlr.org">Antlr v3</a> and <a href="http://www.netbeans.com">Netbeans</a> projects,
instead of Antlr with a custom user interface. Rather than reinvent what
another project freely provides, I hope to make a relatively adroit user
experience by utilizing the Netbeans Platform APIs. Watching the
<a href="http://platform.netbeans.org/tutorials/nbm-10-top-apis.html">API screencasts</a>, Netbeans could be just what I am looking for.</p>]]></description>

</item>
</channel>
</rss>
