Well, It's Been Fun 
It's been nearly a year since KnitML first got off the ground. It has taught me a lot about open source, given me the chance to stay on top of some of the latest technologies, and taught me a lot about software architecture. Perhaps the best part about the project is that it's been my chance to combine my professional skills with one of my favorite hobbies.

So it is with sadness that I am forced to announce the hibernation of the KnitML project. I've come to face reality that I can no longer continue to do this by myself. I was really hoping to build a community of software developers that could deliver something extraordinary. Unfortunately, the vision, design, and implementation has almost exclusively been mine, and I have not been able to drum up enough interest. There is not much point in putting forth a specification which includes only one person's ideas, as it will never meet the needs of a global knitting community.

Also, there's nothing more effective for setting priorities straight than family. That said, my wife and I are expecting our first child in a few weeks! We are absolutely thrilled and can't wait to meet this new, special person about to come into our lives.

The web site, the downloads, the source code repository, and the issue tracker will of course remain open. Perhaps in the future I will start things back up again, or perhaps another soul will come along and continue with what we've started.

Thanks for everyone's support. May we meet someday again.

[ 2 comments ] ( 29 views )   |  [ 0 trackbacks ]   |  permalink
KnitML 0.3 Released 
I am very happy to announce that KnitML 0.3 has been released. This release includes a much-needed user's guide and solidifies support for the KnitML Expression Language (a.k.a. GroovyKnit). GroovyKnit should make writing KnitML files a breeze.

Give it a try and let me know what you think!

[ add comment ] ( 1 view )   |  [ 0 trackbacks ]   |  permalink
Upcoming KnitML 0.3 release 
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.

I'll certainly keep you posted.

[ add comment ]   |  [ 0 trackbacks ]   |  permalink
KnitML 0.2 released 
KnitML 0.2 has been released! New features include:
  • support for multi-color knitting, including schema changes and a new color swatch sample KnitML file
  • more complete internationalization support
  • support for binding off
  • Groovy support
  • first cut of a knitting pattern domain-specific language - much shorter and more intuitive than coding XML directly
Here is an example of how to apply the domain-specific language. Instead of writing this:
<row type="round">
<repeat until="end">
<purl>1</purl>
<knit>2</knit>
<purl>1</purl>
</repeat>
</row>
<row type="round">
<repeat until="end">
<knit />
</repeat>
</row>
You can write it like this:
round { repeatToEnd { p 1; k 2; p 1 } }
round { knitToEnd() }
I'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's free sailing.

Anyways, give the new release a go and let me know what you think!

[ 7 comments ] ( 62 views )   |  [ 0 trackbacks ]   |  permalink
Peeling Back the Onion: KnitML Core 
Now that you have hopefully had the chance to play with KnitML, I thought I'd blog a mini-series about each component to give you a better understanding of how everything works.

The core project provides building blocks for defining and parsing KnitML documents. This includes:
  • XML schemas to define the KnitML syntax
  • Knitting extensions to the JSR-275 Units specification
  • Utilities for working with KnitML documents

The XML schemas


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.

The body of the <knit> 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 <needles> element, however, must contain one or more <needle> elements within it, and the ordering may be important. This is an example of a data structure definition.

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 (<pattern>). You can also perform syntactic validation by passing the -checksyntax option to the knitml command line:

knitml validatePattern pattern.xml -checksyntax

Keep in mind that syntactic validation is different from semantic validation. I'll cover semantic validation in my next post in this series.

The JSR-275 Units Specification


JSR-275 is a Java community effort which defines a standard measurement framework, and JScience 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).

Utilities


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().

KnitML Core's dependencies


The KnitML Core project, like the rest of the KnitML projects, are built using Maven 2. This means that you can identify a project'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.

[ add comment ]   |  [ 0 trackbacks ]   |  permalink

| 1 | 2 | 3 | 4 | 5 | 6 | Next> Last>>