<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ref="http://purl.org/rss/1.0/modules/reference/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://purl.org/rss/1.0/">
	<channel rdf:about="http://www.knitml.com/blog/rss.rdf">
		<title>KnitML</title>
		<link>http://www.knitml.com/blog/index.php</link>
		<description><![CDATA[No Footer]]></description>
		<items>
			<rdf:Seq>
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry080606-012111" />
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry080528-215523" />
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry080323-104221" />
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry080301-104217" />
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry080225-224839" />
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry080219-084932" />
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry080215-164952" />
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry071228-144755" />
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry071218-190304" />
				<rdf:li resource="http://www.knitml.com/blog/index.php?entry=entry071213-182623" />
			</rdf:Seq>
		</items>
	</channel>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry080606-012111">
		<title>KnitML 0.3 Released</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry080606-012111</link>
		<description><![CDATA[I am very happy to announce that KnitML 0.3 has been released. This release includes a much-needed user&#039;s guide and solidifies support for the KnitML Expression Language (a.k.a. GroovyKnit). GroovyKnit should make writing KnitML files a breeze.<br /><br />Give it a try and let me know what you think!]]></description>
	</item>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry080528-215523">
		<title>Upcoming KnitML 0.3 release</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry080528-215523</link>
		<description><![CDATA[After a bit of a hiatus to concentrate on a software release for work (and a nice vacation to the Pacific Northwest), I am now gearing up to release KnitML 0.3, hopefully within a week. Not only will it include a  series of bug fixes and enhancements, but I hope to have a fully annotated schema as well as more documentation and formality of the new GroovyKnit syntax.<br /><br />I&#039;ll certainly keep you posted.]]></description>
	</item>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry080323-104221">
		<title>KnitML 0.2 released</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry080323-104221</link>
		<description><![CDATA[KnitML 0.2 has been released! New features include:
<ul>
<li>support for multi-color knitting, including schema changes and a new color swatch sample KnitML file</li>
<li>more complete internationalization support</li>
<li>support for binding off</li>
<li>Groovy support</li>
<li>first cut of a knitting pattern domain-specific language - much shorter and more intuitive than coding XML directly</li>
</ul>
Here is an example of how to apply the domain-specific language. Instead of writing this:<br /><pre>&lt;row type=&quot;round&quot;&gt;<br />  &lt;repeat until=&quot;end&quot;&gt;<br />    &lt;purl&gt;1&lt;/purl&gt;<br />    &lt;knit&gt;2&lt;/knit&gt;<br />    &lt;purl&gt;1&lt;/purl&gt;<br />  &lt;/repeat&gt;<br />&lt;/row&gt;<br />&lt;row type=&quot;round&quot;&gt;<br />  &lt;repeat until=&quot;end&quot;&gt;<br />    &lt;knit /&gt;<br />  &lt;/repeat&gt;<br />&lt;/row&gt;</pre>You can write it like this:<br /><pre>round { repeatToEnd { p 1; k 2; p 1 } }<br />round { knitToEnd() }<br /></pre>I&#039;ll do a separate posting about writing in this expression language, as there are a few quirks to know about the way Groovy expresses functions. Once you learn the rules, though, it&#039;s free sailing.<br /><br />Anyways, give the new release a go and let me know what you think!]]></description>
	</item>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry080301-104217">
		<title>Peeling Back the Onion: KnitML Core</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry080301-104217</link>
		<description><![CDATA[Now that you have hopefully had the chance to play with KnitML, I thought I&#039;d blog a mini-series about each component to give you a better understanding of how everything works.<br /><br />The core project provides building blocks for defining and parsing KnitML documents. This includes:
<ul>
<li>XML schemas to define the KnitML syntax</li>
<li>Knitting extensions to the JSR-275 Units specification</li>
<li>Utilities for working with KnitML documents</li>
</ul>
<h4>The XML schemas</h4><br />The XML schemas define the syntax of a KnitML document. This includes data type and data structure definitions. Data types are usually primitive values such as numbers, strings, and booleans (or subsets of these types), while data structure refers to the elements that can appear within the body of the element.<br /><br />The body of the &lt;knit&gt; element can only contain a positive integer because it indicates the number of stitches to knit. This is an example of a data type definition. The body of the &lt;needles&gt; element, however, must contain one or more &lt;needle&gt; elements within it, and the ordering may be important. This is an example of a data structure definition.<br /><br />You can validate the syntax of a KnitML document with most XML editors. The schema location information is located in the root element of the KnitML document (&lt;pattern&gt;). You can also perform syntactic validation by passing the <code>-checksyntax</code> option to the <code>knitml</code> command line:<br /><br /><code>knitml validatePattern pattern.xml -checksyntax</code><br /><br />Keep in mind that syntactic validation is different from semantic validation. I&#039;ll cover semantic validation in my next post in this series.<br /><br /><h4>The JSR-275 Units Specification</h4><br /><a href="http://jcp.org/en/jsr/detail?id=275" target="_blank" >JSR-275</a> is a Java community effort which defines a standard measurement framework, and <a href="http://jscience.org" target="_blank" >JScience</a> provides a reference implementation for JSR-275. I have chosen to use this framework as a basis for converting knitting measurements between English and metric systems. KnitML Core extends upon JSR-275 to provide support for converting between US and standard needle sizes as well as definitions for gauge units (st/in, st/cm, row/in, row/cm).<br /><br /><h4>Utilities</h4><br />The utilities provide code support for common concepts used in other components. This includes common exceptions and enumerations, constants for XML elements and attributes, and parsing utilities. KnitML uses dom4j, a Java API for working with XML documents as an in-memory tree structure. KnitML Core builds on dom4j to provide additional support for KnitML-specific data type parsing, methods such as isKnittingOperation() and getGaugeForElement().<br /><br /><h4>KnitML Core&#039;s dependencies</h4><br />The KnitML Core project, like the rest of the KnitML projects, are built using Maven 2. This means that you can identify a project&#039;s dependencies on external components simply by examining the pom.xml file in the root directory of each component. KnitML depends on Commons Lang and Commons Collections, dom4j, and JScience. In the next release, KnitML will also depend on Spring Core and Spring Beans as these components provide XML schema resolution tools useful for offline schema lookups.]]></description>
	</item>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry080225-224839">
		<title>KnitML 0.1.1 released</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry080225-224839</link>
		<description><![CDATA[This is a minor enhancement / bugfix release which provides the following functionality:<ul>
<li>Java 1.5 compatible</li>
<li>Shell script for *nix environment (tested using Cygwin for Windows)</li>
<li>Full featured validator no longer requires "needle1" and "needle2"</li>
</ul>So now all of you running 32-bit Mac OS can celebrate!]]></description>
	</item>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry080219-084932">
		<title>KnitML 0.1 Released!</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry080219-084932</link>
		<description><![CDATA[Ladies and gentleman, we have a release! I have put it up on SourceForge. Please <a href="http://sourceforge.net/project/showfiles.php?group_id=209545" target="_blank" >download</a> it and let me know what you think. Choose your download format (tar.gz or .zip) and unpack it to the directory of your choice. All files in the archive start with the knitml-0.1 directory, so you can unpack it into a generic directory (such as C:\projects, for instance).<br /><br />Once you&#039;ve unpacked the files, read the README.txt in the root directory. It will tell you how to set up your environment so that you can run the <i>knitml</i> command from any directory. Take a look at the samples/basic-sock directory to see how the sample is structured and to try out the <i>knitml</i> executable.<br /><br />The command you&#039;ll most be interested in is:<br /><code>knitml validateAndRender <i>filename-to-process</i></code><br /><br />And to capture the output to a file:<br /><code>knitml validateAndRender <i>filename-to-process</i> -output pattern.txt</code><br /><br /><h4>Known limitations</h4>Because I forgot to remove some hard-coded meta information from the validator, there is a limitation that you can only use needles with an ID of &quot;needle1&quot; and/or &quot;needle2&quot; and pattern messages in a file (or files) named pattern-messages.properties. The sample conforms to these limitations, so please model any patterns you write after this fashion (for now, until a bugfix release comes out). Hopefully, you won&#039;t need to use more than 2 needles right away in your patterns. Also, the &#039;knitml&#039; executable is only currently available as a Windows batch file. If you are running on a *nix platform, you will have to call the Java program manually. If someone would like to contribute a *nix script, I will be more than happy to include it in a future release.<br /><br /><h4>Development and Contributions</h4>Please submit bugs and feature requests to our <a href="http://www.doublebock.net/bugzilla/buglist.cgi?quicksearch=KnitML" target="_blank" >issue tracker</a>. You have to sign up for an account, but I promise it&#039;s quick and painless, and your e-mail address won&#039;t be used for anything other than notifications of the progress of issues you submit. Please, please, <i>please</i> provide your feedback and help to better the KnitML project!<br /><br />If you are interested in downloading the source code (hopefully with the intent of contributing), it is stored at the Sourceforge Subversion repository. The SVN URL (for access with an SVN client) is <a href="https://knitml.svn.sourceforge.net/svnroot/knitml." target="_blank" >https://knitml.svn.sourceforge.net/svnroot/knitml.</a> I apologize but I have not been able to get my assembly tool to give me a reliable source package yet. I may assemble something manually and upload it in the coming days.<br /><br />The project is built with Maven 2. I use Eclipse to develop KnitML, so all of the required Eclipse artifacts are also in the repository. I also use the Maven plugin for Eclipse, and I highly recommend it. Note that you can still use a different IDE to develop KnitML, it&#039;s just that the artifacts are not (as yet) checked in.<br /><br />The project is organized into several modules:
<ul>
<li>knitml-parent: top-level meta-information about the project, including build configuration</li>
<li>knitml-core: contains XML schemas and core processing code</li>
<li>knitml-validation: provides a mechanism to verify that a KnitML pattern is knittable</li>
<li>knitml-pattern-renderer: produces a human-readable pattern from a KnitML pattern</li>
<li>knitml-tools: provides executable classes to bind the modules together</li>
</ul>
I recommend downloading all of the modules to start with. The development stream for each module is located under: <i>module_name</i>/trunk.<br /><br />Thanks for everyone&#039;s continued support to get us to a 0.1 release!]]></description>
	</item>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry080215-164952">
		<title>KnitML 0.1 achieved!</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry080215-164952</link>
		<description><![CDATA[After several months of planning, designing, coding, and debugging (as well as an almost two month break on the project completely), I can confidently say that both the validator and the pattern renderer for the basic sock pattern works! This means that KnitML 0.1 has been accomplished! Thanks to everyone who has participated thus far.<br /><br />I will be packaging this up into something far more useful than its current state. You&#039;ll get a Java JAR out of this with directions for use. Instructions will be forthcoming once I get the JAR built.<br />]]></description>
	</item>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry071228-144755">
		<title>New Bug Tracker</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry071228-144755</link>
		<description><![CDATA[First, I would like to wish everyone and their family very happy holidays! We just received 5 inches of snow here in Chicago, and it&#039;s quite delightful to look at.<br /><br />You may have noticed the new KnitML Issues Tracker link on the sidebar. Matt, our fearless web admin, has installed Bugzilla, which is a vast improvement from what SourceForge was offering. Bugzilla will be KnitML&#039;s central repository for issues.<br /><br />Some of you may not care for Bugzilla, so I have to let you know that it was not my first choice. Ideally I wanted JIRA, but our hosting service here at knitml.com doesn&#039;t support Java. We tried out Mantis, which is PHP-based. The interface was nicer than Bugzilla, but we could not get it to integrate with Mylyn, a task-based plugin for Eclipse which is an integration point I think is necessary. Since the Mylyn project grew up using Bugzilla, and integration with it was incredibly simple, it seemed like a no-brainer.<br /><br />That said, Matt has done everything easy he can to make the web interface a bit more bearable. He removed the picture of a nasty-looking microscopic bug which comes with the default screens. He also installed the Flat Green skin, which makes Bugzilla look a lot more Google-esque than the traditional I-was-clearly-developed-by-hardcore-computer-science-geeks skin (though I think they just call it the &quot;default&quot; skin).<br /><br />If you still object to the web interface, I would highly encourage you to try out Mylyn 2.0. It comes with the newest Eclipse Europa package. You can interact with Bugzilla completely within the confines of Mylyn and Eclipse without ever having to go the website. It&#039;s quite slick.<br /><br />You do need to create an account to report bugs. This is mostly so that you can be informed of the progress of bugs through e-mail if you prefer. Your information will be completely private. I promise I won&#039;t sell your e-mail address to anyone and I won&#039;t use it to communicate with you directly without your permission.<br /><br />Now... bring on the bugs!]]></description>
	</item>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry071218-190304">
		<title>MusicXML: A Case Study</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry071218-190304</link>
		<description><![CDATA[In perusing the web recently, I stumbled across MusicXML&#039;s successful attempt to standardize an interchange format for many different music softwares. They have several recommendations to make regarding incubating standards for a niche market. Read the full article <a href="http://www.musicxml.org/good/xml2006.html" target="_blank" >here</a>, or just the highlights from the article below:<br /><blockquote>
<ul>
	<li>Apply usability techniques to language design in the same way that you would to GUI design. Use terms that domain experts understand. Where possible, avoid introducing concepts that are specific to applications in the domain, rather than to the domain itself.</li>
	<li>Develop the format together with software that reads and writes the format. Use evolutionary delivery to deliver early versions of both the format and the software, with frequent iterations to get both working well together. This particularly helps for meeting the twin goals of completeness and usability.</li>
	<li>Make sure that the format can exchange data in both directions with at least one market leader in your application area. Do this as early as possible in your development process. Do not expect the market leaders to do this for you.</li>
	<li>Market to other developers who would get a business benefit from using your format. This will be difficult until your format can exchange data with a market leader.</li>
	<li>Give format developers good support. Involve the development community in the design of the format. Be responsive to developers who are using early versions of your format and translation software.</li>
	<li>Avoid overhead. In a small market like music notation software, organizations like ISO and OASIS can be too costly in both time and money for even the largest industry players. Following the model of Adobe's PDF format - an open format under single company control - can be more effective in these situations.</li>
</ul>
</blockquote><br />In short, I think our instincts for what to do and how to do it have been right, or at least have been justified. I definitely see their point about standards organizations. Besides, they don&#039;t seem to want to talk to me anyways. :)]]></description>
	</item>
	<item rdf:about="http://www.knitml.com/blog/index.php?entry=entry071213-182623">
		<title>What You Can Do!</title>
		<link>http://www.knitml.com/blog/index.php?entry=entry071213-182623</link>
		<description><![CDATA[If you are looking for ways to help (and I know that many of you are), here are some things that you could do:<br />
<ul>
<li>Get familiar with XML, XML Schema, and what I have done so far with KnitML. You certainly won't need the nitty-gritty details of XML Schema, but at least enough to understand which options are available.
<li>Take your favorite patterns and attempt to convert them to KnitML (as I have done with the sock pattern). If there are things that are missing from the XML Schema that you need, add a feature request on the SourceForge tracker. This will help us fill out the spec to emcompass all types of knitting. If it works and validates, I'll publish the pattern on the website.
<li>If you are a code geek, install a Java JRE and try to run the validator. Get familiar with the code base and make recommendations for improvement.
<li>If you are multi-lingual, translate the instructions.properties file into your favorite language using the conventions of that language. See if you can get the renderer to make the pattern look like what a normal pattern in that language would look like. If something doesn't work, submit a bug or feature request.
<li>Start building your own software that does something cool.
</ul>
<br />The possibilities really are endless. If there is anything else you&#039;d like to do, including helping me refine the pattern renderer or expand the validator, please let me know.<br /><br />Thanks for everyone&#039;s support!]]></description>
	</item>
</rdf:RDF>
