<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>onTheCode</title>
   <link rel="alternate" type="text/html" href="http://www.gregsandell.com/blog/onTheCode/" />
   <link rel="self" type="application/atom+xml" href="http://www.gregsandell.com/blog/onTheCode/atom.xml" />
   <id>tag:www.gregsandell.com,2008:/blog/onTheCode/1</id>
   <updated>2007-10-29T19:47:54Z</updated>
   <subtitle>Articles on J2EE Web Development</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type Publishing Platform 4.0</generator>


<entry>
   <title>The SHARC Timbre Dataset v. 2.0:  XML Format</title>
   <link rel="alternate" type="text/html" href="http://www.gregsandell.com/blog/onTheCode/2007/10/the_sharc_timbre_database_xml.html" />
   <id>tag:www.gregsandell.com,2007:/blog/onTheCode//1.3</id>
   
   <published>2007-10-19T19:23:30Z</published>
   <updated>2007-10-29T19:47:54Z</updated>
   
   <summary>SHARC is a dataset of musical timbre information that I collected by analyzing over 1300 orchestral musical instrument notes. Specifically, the information is amplitude and phase data from a selected steady-state portion of each note. The dataset is now available...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://www.gregsandell.com/blog/onTheCode/">
      SHARC is a dataset of musical timbre information that I collected by analyzing over 1300 orchestral musical instrument notes.  Specifically, the information is amplitude and phase data from a selected steady-state portion of each note.  The dataset is now available in XML format.
      <![CDATA[

Some time ago, when I was a grad student, and while holding various fellowships after I got my PhD, I did research in music, human hearing and digital audio (see my <a href="http://www.gregsandell.com/pagePublications.php">publications</a>).  One of the projects I undertook was to compile a collection of information on musical instrument tones, which I called SHARC ("Sandell Harmonic Archive").  

I've described SHARC in a few places before:  in an <a href="http://www.gregsandell.com/portfolio/publications/1991-10-01_library_ICMC.pdf">article from 1991</a>, and in the <a href="http://www.timbre.ws/sharc/files/README.txt">release notes</a> from the original distribution.  Briefly, though, what I did was this.  I had a collection of CDs consisting of individually performed notes of all the standard instruments of the orchestra, one recording for each note in the respective instrument's playable range.  For each note, I chose a middle portion of the recording, during the note's steady state, and performed a spectrum analysis.  I saved the amplitudes and phases of all the harmonics of the pitch's fundamental frequency up to a ceiling of 10kHz. 

In my first version of the distribution (which you can still <a href="http://www.timbre.ws/sharc/files/sharc.tar.gz">download</a> in compressed tar format), SHARC consisted of a series of files, one for each note that was analyzed, organized into directories by instrument.  That was 1994; since then, XML has come into being and I've now released <a href="http://www.timbre.ws/sharc/">SHARC in an XML format</a>.

I'm calling this SHARC's "2.0" release, and back-versioning the original distribution to "1.0" (even though I timidly referred to it at as version 0.921 at the time).  In this blog article, I'll describe the design of this 2.0 version, for the convenience of anyone who would like to work with it.

Let's consider the XML that specifies a single instrument and all of its notes, and their harmonics.  The rough outline of the XML is:

<div class="code">
<pre>
&#160;&#160;&lt;instrument&gt;
&#160;&#160;&#160;&#160;&lt;note&gt;&#160;&#160; &lt;!-- first note --&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&lt;a/&gt;&#160;&#160; &lt;!-- harmonic 1 --&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&lt;a/&gt;&#160;&#160; &lt;!-- harmonic 2 --&gt;
&#160;&#160;&#160;&#160;&#160;&#160;...etc...
&#160;&#160;&#160;&#160;&lt;/note&gt;
&#160;&#160;&#160;&#160;&lt;note&gt;&#160;&#160; &lt;!-- second note --&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&lt;a/&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&lt;a/&gt;
&#160;&#160;&#160;&#160;&#160;&#160;...etc...
&#160;&#160;&#160;&#160;&lt;/note&gt;
...etc...
&#160;&#160;&lt;/instrument&gt;
&#160;&#160;&#160;&#160;
</pre>
</div>
The &lt;instrument&gt; element has the following attributes:
<ul><li><b>id</b>: the instrument's short name, containing no spaces, suitable for variable names and querystring parameters</li><li><b>name</b>: the instrument's longer, more descriptive name</li><li><b>source</b>: the cd from which the tone originated</li><li><b>cd</b>: the volume of cd</li><li><b>track</b>: the track on the cd</li><li><b>numNotes</b>: the number of notes for this instrument</li></ul>

Here is a sample &lt;instrument&gt; element:

<div class="code"><pre>
&lt;instrument 
&#160;&#160;&#160;&#160;&#160;&#160;id="CB_pizz" name="Contrabass (pizzicato)"
&#160;&#160;&#160;&#160;&#160;&#160;source="McGill" cd="1" track="18"
&#160;&#160;&#160;&#160;&#160;&#160;numNotes="41"&gt;
</pre></div>

The &lt;note&gt; element has the following attributes:
<ul><li><b>pitch</b>: the notes pitch and octave number, e.g. c4 = middle C.  Sharps are specified with the letter s, e.g. 'fs4' rather than 'f#4'.</li><li><b>seq</b>: the sequential order number of the note in the series (i.e. starting at 1 with the first note)</li><li><b>keyNum</b>: numerical location of the pitch on a piano keyboard, where middle C = 48</li><li><b>fundHz</b>: the frequency of the note's fundamental (e.g. a4 = 440)</li><li><b>numHarms</b>: the number of harmonics (i.e. the number of &lt;a&gt; elements to follow)</li></ul>


Here is a sample note element:
<div class="code"><pre>
&lt;note pitch="cs1" seq="2" keyNum="13"&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;fundHz="34.648" numHarms="287"&gt;
</pre></div>

Finally we have the harmonic data itself, contained in the &lt;a&gt; element.  The harmonic amplitude value is the text node of the element, expressed as a linear value (i.e. not in dB).  The attributes for the &lt;a&gt; element are:
<ul><li><b>n</b>: the sequential order number of the harmonic in the series (i.e. starting at 1 with the first harmonic)</li><li><b>p</b>: phase, expressed in the range between negative and positive pi</li></ul>

Here is a sample sequence of a few &lt;a&gt; elements:
<div class="code"><pre>
&#160;&#160;&#160;&#160;&lt;a n="1" p="-1.686"&gt;32.91&lt;/a&gt;
&#160;&#160;&#160;&#160;&lt;a n="2" p="0.309"&gt;2131.69&lt;/a&gt;
&#160;&#160;&#160;&#160;&lt;a n="3" p="1.764"&gt;5878.0&lt;/a&gt;
</pre></div>

Using the brief names 'n' and 'p' keeps the size of the XML document lower.  For similar reasons, the frequency of each harmonic is not given.  To obtain the frequency of the harmonic, you simply multiply the value of the "n" attribute by the value of the "fundHz' attribute of the 'note' element.  

As I said, that is a rough sketch of the XML; to simplify the explanation I left out some of the detail.  In addition to what I have discussed so far, each instrument element, and each note element, has a sibling element &lt;ranges&gt; which contains useful metadata.  Here is a sample &lt;ranges&gt; element for an &lt;instrument&gt; element:

<div class="code"><pre>
&lt;ranges&gt;
&#160;&#160;&#160;&#160;&lt;lowest&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;harmonicFreq harmNum="1" keyNum="12"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; pitch="c1"&gt;32.7
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/harmonicFreq&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;pitch 
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; fundHz="32.7" keyNum="12"&gt;c1&lt;/pitch&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;amplitude freqHz="8449.15" keyNum="22"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; pitch="as1" fundHz="58.27"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; harmNum="145"&gt;0.0&lt;/amplitude&gt;
&#160;&#160;&#160;&#160;&lt;/lowest&gt;
&#160;&#160;&#160;&#160;&lt;highest&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;pitch fundHz="349.22"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;keyNum="53"&gt;f4&lt;/pitch&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;harmonicFreq harmNum="151" keyNum="25"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; pitch="cs2"&gt;10463.69&lt;/harmonicFreq&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;amplitude freqHz="261.62" keyNum="48"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;harmNum="1" pitch="c4"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fundHz="261.626"&gt;15389.0&lt;/amplitude&gt;
&#160;&#160;&#160;&#160;&lt;/highest&gt;
&#160;&#160;&#160;&#160;&lt;pitches&gt;c1 cs1 d1 ds1 e1 f1 fs1 gs1 a1 as1 
&#160;&#160;&#160;&#160;&#160;&#160; b1 c2 cs2 d2 ds2 e2 f2 fs2 g2 gs2 a2 as2 
&#160;&#160;&#160;&#160;&#160;&#160; b2 c3 cs3 d3 ds3 e3 f3 fs3 g3 gs3 a3 as3 
&#160;&#160;&#160;&#160;&#160;&#160; b3 c4 cs4 d4 ds4 e4 f4
&#160;&#160;&#160;&#160;&lt;/pitches&gt;
&lt;/ranges&gt;
</pre></div>

The logic behind the &lt;ranges&gt; element is mostly convenience for applications that will be constructing graphic plots from the data.  For example, having the highest and lowest frequency specified here, rather than making it necessary to traverse through the data to find it, makes it easier for a program to set up the minimum and maximum for a graphic plot.  The &lt;pitches&gt; element is another convenience that keeps the user from having to issue a thorny xpath query just to get a list of all the instrument's pitches.

Let's drill down into the details of this &lt;ranges&gt; element.  The text node of the <i>ranges/lowest/harmonicFreq</i> element is the lowest frequency of any harmonic in the entire instrument's collection.  Obviously, this is always harmonic 1 of the instrument's lowest note.  The attributes for harmonicFreq convey this, as well as the pitch (c1) and keyNum (12).  The element <i>ranges/lowest/pitch</i> contains the same information, but described in terms of the lowest pitch and its fundamental frequency.  This redundancy has little impact since it is occurs just once for the instrument. Information about the lowest amplitude harmonic to be found in the instrument is given in the <i>ranges/lowest/amplitude</i> element.  For the instrument in question, this honor goes to a#1 (keyNum of 22, fundamental frequency of 58.27 Hz), 10 semitones above the instrument's lowest note, the 145th harmonic (frequency of 8449.15 Hz).

The <i>ranges/highest</i> element provides equivalent data for the highest harmonic frequency, highest pitch and highest amplitude.

Here is a sample &lt;ranges&gt; element for an &lt;note&gt; element:
<div class="code"><pre>
&lt;ranges&gt;
&#160;&#160;&#160;&#160;&lt;lowest&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;amplitude freqHz="6475.19"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;harmNum="198"&gt;0.0&lt;/amplitude&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;harmonicFreq
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; harmNum="1"&gt;32.7&lt;/harmonicFreq&gt;
&#160;&#160;&#160;&#160;&lt;/lowest&gt;
&#160;&#160;&#160;&#160;&lt;highest&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;amplitude freqHz="98.1"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;harmNum="3"&gt;2335.0&lt;/amplitude&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;harmonicFreq
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;harmNum="303"&gt;9909.0&lt;/harmonicFreq&gt;
&#160;&#160;&#160;&#160;&lt;/highest&gt;
&lt;/ranges&gt;
</pre></div>

This element provides data similar to <i>instrument/ranges</i>, but in terms of the highest/lowest frequency and amplitude harmonics for the note in question.

The XML was designed in a way that the entire SHARC dataset could be combined into a single XML file (i.e. as a series of <i>instrument</i> elements), and this file is in fact available for download in zip format.  However, this file is quite large (nearly 3 meg), which will put quite a burden on parsers, and especially DOM parsers.  For more efficient processing, I have placed each instrument into its own dataset file.

For a summary, here is a shorthand showing the overall design of the xml, with attributes shown in red and text nodes in blue:

<div class="code"><pre>
tree<br />
&#160;&#160;&#160;&#160;instrument (<span style="color: red">id, name, source, cd, track, numNotes</span>)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ranges
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;lowest
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;harmonicFreq (<span style="color: red">harmNum, keyNum, pitch</span>) [<span style="color: blue"><i>frequency</i></span>]
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pitch (<span style="color: red">fundHz, keyNum</span>) [<span style="color: blue"><i>pitch</i></span>]
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;amplitude (<span style="color: red">freqHz, keyNum, pitch, fundHz, harmNum</span>) [<span style="color: blue"><i>amplitude</i></span>]
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;highest 
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<i>(all same as lowest)</i>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;note (<span style="color: red">pitch, seq, keyNum, fundHz, numHarms</span>)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ranges
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;lowest
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;amplitude (<span style="color: red">freqHz, harmNum</span>) [<span style="color: blue"><i>amplitude</i></span>]
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;harmonicFreq (<span style="color: red">harmNum</span>) [<span style="color: blue"><i>frequency</i></span>]
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;highest
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<i>all same as lowest)</i>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;a (<span style="color: red">n, p</span>) [<span style="color: blue"><i>amplitude</i></span>]
</pre></div>

I'm not attached to this particular XML design, and I may come out with a 3.0 version some day.  One change I expect to make in a future version is to move a lot of information that is in attributes to elements, which means that more queries would return element nodes that could be further processed.  Another idea I have is to make a secondary, "bare bones" release, that would have no metadata, for quicker processing.

Enjoy playing with the data!]]>
   </content>
</entry>

<entry>
   <title>Maven2 Introduction part 1:  the Coordinate System</title>
   <link rel="alternate" type="text/html" href="http://www.gregsandell.com/blog/onTheCode/2007/07/getting_started_with_maven_2.html" />
   <id>tag:www.18thStreet.net,2007:/blog/onTheCode//1.4</id>
   
   <published>2007-07-13T17:15:00Z</published>
   <updated>2007-08-28T22:34:30Z</updated>
   
   <summary>Maven is gaining traction as the premiere form of Java code organization and managing builds. The entire world won&apos;t convert overnight, but adoption is likely to steadily increase once more people get over the learning curve and conceptual difference with...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://www.gregsandell.com/blog/onTheCode/">
      Maven is gaining traction as the premiere form of Java code organization and managing builds.  The entire world won&apos;t convert overnight, but adoption is likely to steadily increase once more people get over the learning curve and conceptual difference with ant scripts, the previous prevailing model of build management.  In this article I&apos;m going to try to take a bit of the steepness off of the learning curve for you.
      <![CDATA[
The big sell for Maven is the dependency management and the coherence it brings to both your individual projects, and your code development overall.  And by dependency management, I mostly mean where and which jar files you use.  For ant users reading this, this is a way more than what the "depends" attribute of an ant target gets you.  It's a way of:
<ul>
<li>Avoiding confusion between different versions of the same jars</li>
<li>Maintaining only one copy of the same jar on your computer (instead of having one copy for each of your projects that use it)</li>
<li>Having a mechanism that retrieves jars (and making sure it is the right version as well) from the internet for you without you having to think about where it should be stored</li>
</ul>

Maven does this my having a highly structured approach to dependencies, and importantly, the adherence to this framework by the community who uses Maven.  In this part of the article I'll start by covering the cornerstone of the Maven appeoach, the "Coordinate System,"  then we'll move on to Maven repositories.

<h2>The Coordinate System: groupId, artifactId and version</h2>
At the core of Maven 2 is its method of identifying resources (mostly jar files) by a strictly followed practice of file and directory naming.  The goal is similar to that of XML namespaces and the java packaging conventions:  to define items as distinct points in space according to a unversally followed set of conventions.  It's simply these four identifiers:

<ul>
<li><span class="grp">groupId</span>:  usually a reversed domain name such as <span class="grp"><i>com.lowagie</i></span>.  </li>
<li><span class="art">artifactId</span>: a common name for the resource, such as <span class="art"><i>itext</i></span>.</li>
<li><span class="ver">version</span>:   a version indicator such as <span class="ver"><i>1.4</i></span>.  Numbers and decimals are typical, but not required, values for the version.</li>
<li><span class="pac">packaging</span>:  the type of end product which could be <span class="pac"><i>ear</i></span> or <span class="pac"><i>war</i></span>, but is most often <span class="pac"><i>jar</i></span> (and therefore the default, so packaging need not be specified)</li>
</ul>

(A side note about the groupId:  there are many jars out there that do <i>not</i> use their organization's reverse domain name.  In fact, they comprise some of the most widely used jars out there:  log4j, jdom, ant, and xalan to name a few.  All they use for their groupId is their simple well-known name (<span class="grp"><i>log4j</i></span>, <span class="grp"><i>jdom</i></span>, <span class="grp"><i>ant</i></span>, and <span class="grp"><i>xalan</i></span> for the examples just mentioned), and their artifactId is the same.  These famous jars just happen to have been on the scene during an earlier version of Maven before the convention of using reversed domain names took hold; they held on to their old coordinate locations instead of updating.)

<ol>
<li>Here is the location of a jar file named <tt>itest-1.4.jar</tt> in a proper Maven repository.  The initial part is chosen by the individual user (<tt>c:/.m2/repository</tt>) but everything following that is dictated by the coordinate system:
<br/><tt>c:/.m2/repository/<span class="grp">com/lowagie</span>/<span class="art">itext</span>/<span class="ver">1.4</span>/<span class="art">itext</span>-<span class="ver">1.4</span>.<span class="pac">jar</span></tt>
</li>
<li>In the same directory as <tt>itest-1.4.jar</tt>, you will find the file <tt>itest-1.4.pom</tt>.  This is an XML file containing the following:
<tt>
<p style="line-height: 13px">
&lt;project &gt;<br/>
&nbsp;&nbsp;&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br/>
&nbsp;&nbsp;&lt;groupId&gt;<span class="grp">com.lowagie</span>&lt;/groupId&gt;<br/>
&nbsp;&nbsp;&lt;artifactId&gt;<span class="art">itext</span>&lt;/artifactId&gt;<br/>
&nbsp;&nbsp;&lt;packaging&gt;<span class="pac">jar</span>&lt;/packaging&gt;<br/>
&nbsp;&nbsp;&lt;version&gt;<span class="ver">1.4</span>&lt;/version&gt;<br/>
&lt;/project&gt;<br/>
</p>
</tt>
</li>
<li>In the project's root directory, you will find a file called <tt>pom.xml</tt>, and that file will contain the same lines as above, but wrapped inside a <tt>&lt;dependency&gt;</tt> element:
<tt>
<p style="line-height: 13px">
&lt;dependency &gt;<br/>
&nbsp;&nbsp;&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br/>
&nbsp;&nbsp;&lt;groupId&gt;<span class="grp">com.lowagie</span>&lt;/groupId&gt;<br/>
&nbsp;&nbsp;&lt;artifactId&gt;<span class="art">itext</span>&lt;/artifactId&gt;<br/>
&nbsp;&nbsp;&lt;packaging&gt;<span class="pac">jar</span>&lt;/packaging&gt;<br/>
&nbsp;&nbsp;&lt;version&gt;<span class="ver">1.4</span>&lt;/version&gt;<br/>
&lt;/dependency&gt;<br/>
</p>
</tt>
</li>
<li>Retrieval of resources over the internet is integral to maven.  A jar can be referred to by its URL on a known repository.  The first part of the URL is specific to the repository, whereas the rest follows the file structure of the coordinate system.  Here is a URL for the location of a jar at the well-known repository <i>ibiblio</i>:
<tt>http://mirrors.ibiblio.org/pub/mirrors/maven2/<span class="grp">com/lowagie</span>/<span class="art">itext</span>/<span class="ver">1.4</span>/<span class="art">itext</span>-<span class="ver">1.4</span>.<span class="pac">jar</span>
</tt></li>
<li>Now here is a Maven command line statement.  It's purpose is to install a jar in a repository, but don't worry about that right now; just notice how the coordinate system manifests itself on a typical command line statement.
<tt><p style="line-height: 13px">
mvn install:install-file -DgroupId=<span class="grp">com.lowagie</span> \<br/>
&nbsp;&nbsp;-DartifactId=<span class="art">itext</span> \<br/>
&nbsp;&nbsp;-Dversion=<span class="ver">1.4</span> \<br/>
&nbsp;&nbsp;-Dpackaging=<span class="pac">jar</span> \<br/>
&nbsp;&nbsp;-Dfile=<span class="art">itext</span>-<span class="ver">1.4</span>.<span class="pac">jar</span>
</p></tt>
<li>Occasionally a point in space is referenced with a single line of text, using the format 
<br/>&nbsp;&nbsp;<span class="grp">groupId</span>:<span class="art">artifactId</span>:<span class="pac">packaging</span>:<span class="ver">version</span>, as in: 
<br/>&nbsp;&nbsp;<span class="grp">com.lowagie</span>:<span class="art">itext</span>:<span class="pac">jar</span>:<span class="ver">1.4</span>
</ol>

These 5 situations show you most of the ways in which jars are referenced in the Maven world.  There is a maddening consistency and pervasiveness to the Coordinate System throughout Maven.  The more you learn about Maven, the more you discover you've already learned it.

]]>
   </content>
</entry>

<entry>
   <title>S-Corps for Software Contracters</title>
   <link rel="alternate" type="text/html" href="http://www.gregsandell.com/blog/onTheCode/2006/10/independent_contracting_running_your_company_of_one.html" />
   <id>tag:www.18thStreet.net,2006:/blog/onTheCode//1.1</id>
   
   <published>2006-10-23T02:20:40Z</published>
   <updated>2008-09-17T16:41:54Z</updated>
   
   <summary> location.href=&quot;http://gregsandell.blogspot.com/2006/10/s-corps-for-software-contracters.html&quot; --&gt;...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="7" label="1099" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="10" label="accountant" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="1" label="contracting" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="9" label="corp-to-corp" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="14" label="corporation" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="13" label="deductions" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="4" label="incorporating" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="12" label="irs" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="15" label="law" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="11" label="lawyer" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="18" label="medicare" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="6" label="payroll" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="3" label="s-corp" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="17" label="social security" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="5" label="taxes" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.gregsandell.com/blog/onTheCode/">
      <![CDATA[<script language="javascript">
<!--
location.href="http://gregsandell.blogspot.com/2006/10/s-corps-for-software-contracters.html"
-->
</script>]]>
      
   </content>
</entry>

</feed>
