<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>bramstein.com</title>
      <description>News and project updates</description>
      <link>http://www.bramstein.com/</link>
   </channel>
   <item>
      <title>JSLint
    CommonJS front-end</title>
      <link>http://www.bramstein.com/projects/jslint/</link>
      <description>&lt;p&gt;I've made a simple &lt;a href="http://www.bramstein.com/projects/jslint/"&gt;command line front-end for
    JSLint&lt;/a&gt; which is compatible with &lt;a href="http://commonjs.org/"&gt;CommonJS&lt;/a&gt; implementations such as &lt;a href="http://narwhaljs.org/"&gt;Narwhal&lt;/a&gt;. The front-end supports all
    JSLint configuration options through switches as well as configuration
    through a JSON file. Additionally, the front-end can be used in stream
    processing, for example, to pipe in a file.&lt;/p&gt;</description>
   </item>
   <item>
      <title>XSLTJSON
    Lite</title>
      <link>http://www.bramstein.com/projects/xsltjson/</link>
      <description>&lt;p&gt;Today in the category “software I finished over a year ago and
    forgot about completely” ― &lt;a href="http://www.bramstein.com/projects/xsltjson/"&gt;XSLTJSON Lite&lt;/a&gt; ―
    a XSLT 1.0 stylesheet to transform arbitrary XML to the JSONML format. It
    isn't as full featured as its bigger brother &lt;a href="http://www.bramstein.com/projects/xsltjson/"&gt;XSLTJSON&lt;/a&gt;, but
    might come in handy for developers who do not have access to an XSLT 2.0
    processor.&lt;/p&gt;</description>
   </item>
   <item>
      <title>jQuery 1.4.2 support</title>
      <description>&lt;p&gt;Just a quick note: &lt;a href="http://www.bramstein.com/projects/"&gt;all my projects&lt;/a&gt; relying
    or extending jQuery now support jQuery 1.4.2. Almost none of the projects
    required any changes, except for the &lt;a href="http://www.bramstein.com/projects/text-overflow/"&gt;jQuery Text
    Overflow plugin&lt;/a&gt;, which is now at version 0.14 and works with both
    jQuery 1.3.2 and 1.4.2.&lt;/p&gt;</description>
   </item>
   <item>
      <title>TeX line
    breaking algorithm in HTML5 Canvas</title>
      <link>http://www.bramstein.com/projects/typeset/myfit.html</link>
      <description>&lt;p&gt;I spent some time over the last few weeks implementing the &lt;a href="http://www.bramstein.com/projects/typeset/myfit.html"&gt;Knuth and Plass
    line breaking algorithm (as used in TeX and LaTeX) using JavaScript and
    the HTML5 canvas&lt;/a&gt; element. The code is still quite rough, but early
    results are quite promising and in my opinion better than what browsers
    commonly implement. The &lt;a href="http://www.bramstein.com/projects/typeset/myfit.html"&gt;example
    page&lt;/a&gt; contains an example paragraph, some rough documentation and a
    rather random collection of ideas and notes.&lt;/p&gt;</description>
   </item>
   <item>
      <title>Grid layout
    update &amp; jQuery UI integration demo</title>
      <link>http://www.bramstein.com/projects/jlayout/</link>
      <description>&lt;p&gt;The &lt;a href="http://www.bramstein.com/projects/jlayout/"&gt;jLayout
    grid layout&lt;/a&gt; received a small bug fix and a new feature; you can
    now specify how you want the grid to be filled in, from left to right and
    top to bottom, or top to bottom and left to right. There is also a &lt;a href="http://www.bramstein.com/projects/jlayout/jquery-ui.html"&gt;new
    demo&lt;/a&gt; showing how easily jQuery UI components can be integrated
    with jLayout.&lt;/p&gt;</description>
   </item>
   <item>
      <title>jQuery text
    overflow plugin: inline markup support</title>
      <link>http://www.bramstein.com/projects/text-overflow/</link>
      <description>&lt;p&gt;The &lt;a href="http://www.bramstein.com/projects/text-overflow/"&gt;jQuery Text
    Overflow plugin&lt;/a&gt; now supports truncating text nodes with inline
    markup. This means you can now call the plugin on any DOM element, and not
    have to worry about it removing your inline markup or creating invalid
    markup.&lt;/p&gt;</description>
   </item>
   <item>
      <title>Plotting with
    JavaScript, Canvas &amp; Interval Arithmetic</title>
      <link>http://www.bramstein.com/projects/interplot/plot.html</link>
      <description>&lt;p&gt;I decided to have some fun with the new features in Firefox 3.5 and
    reimplemented the function plotting from my (still unreleased) chart
    library using the HTML5 Canvas element and Web Workers. Charts are plotted
    using &lt;a href="http://en.wikipedia.org/wiki/Interval_arithmetic"&gt;interval
    arithmetic&lt;/a&gt;. The basic idea behind this is to recursively subdivide
    the range in which to plot a function. It keeps subdividing the range
    until the subdivisions are smaller than one screen pixel. At that point it
    will plot a pixel on that location. This pixel is then guaranteed to
    contain the correct solution. This also means that plots are always
    correct, in that they have no missing singularities or artifacts that are
    difficult to plot using other methods (well, that's the theory anyway―the
    interval arithmetic implementation I wrote does not guarantee
    correctness.) Web workers are used to run some of the recursive
    subdivisions in separate "threads" for better performance.&lt;/p&gt;&lt;p&gt;Equations are parsed using a &lt;a href="http://en.wikipedia.org/wiki/Shunting-yard_algorithm"&gt;Shunting Yard
    parser&lt;/a&gt; and converted internally to interval arithmetic. Most
    common mathematical operators are supported, such as: sin, cos, sqrt, abs,
    fmod, exp, log, et cetera. The code is still very much alpha quality, but
    I thought it might be interesting to put it online. You can find it right
    here: &lt;a href="http://www.bramstein.com/projects/interplot/plot.html"&gt;http://www.bramstein.com/projects/interplot/plot.html&lt;/a&gt;.&lt;/p&gt;</description>
   </item>
   <item>
      <title>JavaScript Preprocessor</title>
      <link>http://www.bramstein.com/projects/preprocess/</link>
      <description>&lt;p&gt;I spent the weekend working on a new project: a simple &lt;a href="http://www.bramstein.com/projects/preprocess/"&gt;JavaScript
    preprocessor&lt;/a&gt; to enable conditional compilation in JavaScript code
    using the syntax of the C preprocessor (well, a subset of.) This will
    hopefully make it easy to generate multiple versions of your project
    to―for example―create a debug build, or a specialized version designed to
    work in restrictive environments. It can be called from JavaScript, an Ant
    build script, or the command line.&lt;/p&gt;</description>
   </item>
   <item>
      <title>New jLayout
    algorithm, examples &amp; plugin update</title>
      <link>http://www.bramstein.com/projects/jlayout/</link>
      <description>&lt;p&gt;As promised a new layout algorithm: flow layout. The flow layout
    algoritm lays out components in rows with components overflowing to new
    rows if there is not enough horizontal space. The &lt;a href="http://www.bramstein.com/projects/jlayout/jquery-plugin.html"&gt;jQuery
    jLayout plugin&lt;/a&gt; has also been updated with a minor bug fix for
    nested border layouts. There are also three new examples, &lt;a href="http://www.bramstein.com/projects/jlayout/borderlayout-resize-nested.html"&gt;a
    nested resizable border layout&lt;/a&gt;, &lt;a href="http://www.bramstein.com/projects/jlayout/borderlayout-resize-ghost.html"&gt;a
    resizable layout with guides&lt;/a&gt;, and &lt;a href="http://www.bramstein.com/projects/jlayout/borderlayout-resize-smooth.html"&gt;an
    example of a smoothly resizing layout&lt;/a&gt;.&lt;/p&gt;</description>
   </item>
   <item>
      <title>Book
    Review: JQuery UI 1.6: The User Interface Library for
    jQuery</title>
      <link>http://www.bramstein.com/articles/jquery-ui.html</link>
      <description>&lt;p&gt;I recently started using the &lt;a href="http://jqueryui.com/"&gt;jQuery UI library&lt;/a&gt; in a work project so
    I was rather interested when I noticed a book had been published on this
    library by &lt;a href="http://www.danwellman.co.uk/"&gt;Dan Wellman&lt;/a&gt;.
    You can read &lt;a href="http://www.bramstein.com/articles/jquery-ui.html"&gt;my review of
    “jQuery UI 1.6: The User Interface Library for jQuery”&lt;/a&gt; in the
    articles book review section.&lt;/p&gt;</description>
   </item>
   <item>
      <title>Text
    Alignment jQuery plugin</title>
      <link>http://www.bramstein.com/projects/text-align/</link>
      <description>&lt;p&gt;Imagine you have worked hard to make your tables look good, but one
    thing keeps bugging you; the alignment of the text in the cells. You
    would, for example, like to align the contents of each cell on the comma
    character. Unfortunately, no browser supports aligning table cells on
    characters. This is where the new &lt;a href="http://www.bramstein.com/projects/text-align/"&gt;jQuery Text Alignment
    Plugin&lt;/a&gt; comes in; it adds support for aligning text based on
    characters to all browsers. You can see it in action on the &lt;a href="http://www.bramstein.com/projects/text-align/examples.html"&gt;example page&lt;/a&gt;, or read the documentation on &lt;a href="http://www.bramstein.com/projects/text-align/"&gt;the text-alignment
    plugin project page&lt;/a&gt;.&lt;/p&gt;</description>
   </item>
   <item>
      <title>New jQuery plugin:
    CSS3 text-overflow</title>
      <link>http://www.bramstein.com/projects/text-overflow/</link>
      <description>&lt;p&gt;This new jQuery plugin implements a simplified version of the &lt;a href="https://developer.mozilla.org/en/CSS/text-overflow"&gt;CSS3
    text-overflow&lt;/a&gt; property, which allows stylesheet authors to specify
    how and where text should be clipped. This is usually done by adding an
    ellipsis character "…" or three dots at the point the
    text should be cut off. Unfortunately, not all browser support this CSS
    property, and this plugin was designed to simulate it when the property is
    not natively available. The plugin is basically a rewrite of &lt;a href="http://devongovett.wordpress.com/2009/04/06/text-overflow-ellipsis-for-firefox-via-jquery/"&gt;an
    existing jQuery text-overflow plugin&lt;/a&gt;, with the goal of being
    faster and more reliable (for example, one of the optimizations is that it
    uses a binary search to find the correct clipping point, instead of a
    linear search.)&lt;/p&gt;</description>
   </item>
   <item>
      <title>XSLTJSON Bug fix
    release</title>
      <link>http://www.bramstein.com/projects/xsltjson/</link>
      <description>&lt;p&gt;Today sees a new release of &lt;a href="http://www.bramstein.com/projects/xsltjson/"&gt;XSLTJSON&lt;/a&gt;,
    bringing the version number up to 0.87. This new release contains several
    bug fixes for the recently introduced json:force-array feature. Upgrading
    from previous versions is recommended if you are using the force-array
    feature.&lt;/p&gt;</description>
   </item>
   <item>
      <title>New jLayout
    release</title>
      <link>http://www.bramstein.com/projects/jlayout/</link>
      <description>&lt;p&gt;In a further step to compatibility with the jQuery UI guidelines,
    this new release reduces the number of methods added to the jQuery
    function namespace to exactly one. Additionally, each layout algorithm is
    now distributed as a separate file, which hopefully makes it easier to
    extend the library with other algorithms. The &lt;a href="http://www.bramstein.com/projects/jlayout/jquery-plugin.html"&gt;jLayout
    jQuery plugin&lt;/a&gt; page now features more examples (such as a &lt;a href="http://www.bramstein.com/projects/jlayout/borderlayout-toggle.html"&gt;toggle-able
    border layout&lt;/a&gt;, and a &lt;a href="http://www.bramstein.com/projects/jlayout/content-scroll.html"&gt;layout
    with scrolling content&lt;/a&gt;), and an updated FAQ
    section. I'm planning on soon releasing a new layout algorithm plus
    articles on how to extend jLayout with new algorithms, and how to use
    jLayout with the HTML5 canvas element.&lt;/p&gt;</description>
   </item>
   <item>
      <title>New
    XSLTJSON version</title>
      <link>http://www.bramstein.com/projects/xsltjson/</link>
      <description>&lt;p&gt;This new release includes better handling of native JSON data types
    such as booleans and numbers, and a new source attribute that instructs
    XSLTJSON to create arrays instead of objects.&lt;/p&gt;</description>
   </item>
   <item>
      <title>Bug fix for
    jQuery column selector plugin</title>
      <link>http://www.bramstein.com/projects/column/</link>
      <description>&lt;p&gt;Version 0.13 of the column selector plugin has been released, and
    fixes the plugin inadvertently polluting the global namespace.&lt;/p&gt;</description>
   </item>
   <item>
      <title>jQuery
    column selector plugin</title>
      <link>http://www.bramstein.com/projects/column/</link>
      <description>&lt;p&gt;New project time; I mentioned some time ago that I was close to
    finishing two new projects. Today I finally got around to releasing a new
    &lt;a href="http://www.bramstein.com/projects/column/"&gt;jQuery plugin for
    selecting table columns&lt;/a&gt;. The plugin adds a new selector to the
    jQuery selector API for retrieving table cells by their column index. It
    supports tables with column and row spans transparently, no matter how
    complex a table is. The syntax for selecting column cells is simple and
    similar to other jQuery selectors, so the learning curve should be very
    small.&lt;/p&gt;</description>
   </item>
   <item>
      <title>jLayout
    updated &amp; jQuery UI integration example</title>
      <link>http://www.bramstein.com/projects/jlayout/</link>
      <description>&lt;p&gt;The &lt;a href="http://www.bramstein.com/projects/jlayout/"&gt;jLayout
    library&lt;/a&gt; has received an update; the new version is mostly a
    refactoring of the code and as a result the file size is slightly smaller
    than before (while keeping the same functionality.) It is also a first
    step towards integration with the jQuery UI framework. Also included in
    this update is a new example which demonstrates how to use the jQuery UI
    framework to make a &lt;a href="http://www.bramstein.com/projects/jlayout/borderlayout-resize.html"&gt;full-screen
    resizable border layout&lt;/a&gt;. As a bonus, this version has been tested
    with jQuery 1.3.2, which works just fine.&lt;/p&gt;</description>
   </item>
   <item>
      <title>Book
    Review: Object Oriented JavaScript</title>
      <link>http://www.bramstein.com/articles/object-oriented-javascript.html</link>
      <description>&lt;p&gt;A few weeks ago I was asked by &lt;a href="http://www.packtpub.com/"&gt;Packt Publishing&lt;/a&gt; to review one of
    their titles “&lt;a href="http://www.packtpub.com/object-oriented-javascript-applications-libraries/book"&gt;Object
    Oriented JavaScript: Create scalable, reusable high-quality JavaScript
    applications and libraries&lt;/a&gt;” by Stoyan Stefanov. As an avid reader
    and obsessed with all things JavaScript I couldn't say no, as you can see
    in &lt;a href="http://www.bramstein.com/articles/object-oriented-javascript.html"&gt;my
    review of Object Oriented JavaScript&lt;/a&gt;.&lt;/p&gt;</description>
   </item>
   <item>
      <title>New
    XSLTJSON version</title>
      <link>http://www.bramstein.com/projects/xsltjson/</link>
      <description>&lt;p&gt;I've just uploaded a &lt;a href="http://www.bramstein.com/projects/xsltjson/"&gt;new XSLTJSON
    version&lt;/a&gt;, with exactly one new feature and two minor bug fixes. It
    is now possible to skip the root element of a XML document and only have
    the child elements returned using the skip-root parameter. The
    JSONP support has changed to not produce parentheses
    when it is turned off (invalidating the JSON), and the
    stylesheet now supports XML parsers that do not
    properly match entity encoded new line control characters (that's a
    mouthful, but what it comes down to is that running XSLTJSON on some XSLT
    processors generated JSON with unescaped newlines.)&lt;/p&gt;&lt;p&gt;Last update I mentioned two new projects that have kept me busy. I
    haven't finished either project yet, but I'll give some hints as to the
    nature of one of them: &lt;a href="http://www.bramstein.com/projects/chart/scatter.png"&gt;Canvas&lt;/a&gt;,
    &lt;a href="http://www.bramstein.com/projects/chart/bar.png"&gt;JavaScript&lt;/a&gt;,
    &lt;a href="http://www.bramstein.com/projects/chart/line.png"&gt;chart&lt;/a&gt;,
    &lt;a href="http://www.bramstein.com/projects/chart/plot.png"&gt;plotting&lt;/a&gt;,
    and &lt;a href="http://www.bramstein.com/projects/chart/histogram.png"&gt;almost finished&lt;/a&gt;. I hope you can figure it out from
    that.&lt;/p&gt;</description>
   </item>
   <item>
      <title>jQuery 1.3
    support for jLayout</title>
      <link>http://www.bramstein.com/projects/jlayout/</link>
      <description>&lt;p&gt;Happy belated new year! It has been a while since I posted; moving
    twice, starting a new job, and writing your thesis simultaneously tends to
    do that. Things seem to be calming down now, and I hope to finish and
    release two new projects soon. In the meantime I've set up a &lt;a href="http://groups.google.com/group/jlayout/"&gt;support group for
    the jLayout library&lt;/a&gt; for general discussion and support. I have
    also tested both &lt;a href="http://www.bramstein.com/projects/jlayout/"&gt;jLayout&lt;/a&gt; and
    &lt;a href="http://www.bramstein.com/projects/jsizes/"&gt;JSizes&lt;/a&gt; with
    the new &lt;a href="http://blog.jquery.com/2009/01/14/jquery-13-and-the-jquery-foundation/"&gt;jQuery
    1.3 release&lt;/a&gt;. Neither required any changes, so no new release. I
    did however remove the “experimental” warning on the jLayout plugin page,
    and consider it stable and reasonably well tested―it works in all major
    browsers including Internet Explorer 6.&lt;/p&gt;</description>
   </item>
   <item>
      <title>Functional
    Pattern Matching in JavaScript</title>
      <link>http://www.bramstein.com/projects/jfun/</link>
      <description>&lt;p&gt;I've turned the articles on pattern matching in JavaScript into a
    library. The code is completely rewritten, shorter, more efficient, better
    tested and no longer depends on the Junify unification library. Please see
    the &lt;a href="http://www.bramstein.com/projects/jfun/"&gt;project
    page&lt;/a&gt; for details on the syntax, documentation and examples.&lt;/p&gt;</description>
   </item>
   <item>
      <title>New jLayout
    algorithm &amp; IE6 support</title>
      <link>http://www.bramstein.com/projects/jlayout/</link>
      <description>&lt;p&gt;I've uploaded a new version of &lt;a href="http://www.bramstein.com/projects/jlayout/"&gt;jLayout&lt;/a&gt;, with
    support for a new layout algorithm called ‘flex-grid’. The flex-grid
    algorithm allows you to lay out components in a grid with flexible column
    and row sizes. The &lt;a href="http://www.bramstein.com/projects/jlayout/jquery-plugin.html"&gt;jLayout
    jQuery plugin&lt;/a&gt; has also been updated and now supports Internet
    Explorer 6 (in standards mode). Support for IE6 brought up a small bug in
    the &lt;a href="http://www.bramstein.com/projects/jsizes/"&gt;JSizes jQuery
    plugin&lt;/a&gt;, which has now been corrected as well.&lt;/p&gt;</description>
   </item>
   <item>
      <title>Rayfish convention
    support for XSLTJSON</title>
      <link>http://www.bramstein.com/projects/xsltjson/</link>
      <description>&lt;p&gt;The XSLTJSON project now supports &lt;a href="http://onperl.org/blog/onperl/page/rayfish"&gt;Micheal Matthew's Rayfish
    convention&lt;/a&gt; for converting XML to JSON. The Rayfish convention
    creates highly structured JSON from your XML, and is a good choice when
    dealing with data centric XML files. Additionally I've created unit tests
    for all supported output formats and made sure that all are
    passing.&lt;/p&gt;</description>
   </item>
   <item>
      <title>JavaScript Pattern Matching &amp; JUnify, jLayout updates</title>
      <description>&lt;p&gt;I've uploaded a new article on &lt;a href="http://www.bramstein.com/articles/advanced-pattern-matching.html"&gt;advanced
    functional pattern matching in JavaScript&lt;/a&gt;. The article introduces
    a simplified pattern matching syntax, and shows how to use it with
    algebraic data types. There are also new versions of the &lt;a href="http://www.bramstein.com/projects/junify/"&gt;JUnify library&lt;/a&gt; and
    the &lt;a href="http://www.bramstein.com/projects/jlayout/"&gt;jLayout
    library&lt;/a&gt;. The new JUnify version contains a small modification to
    work together with &lt;a href="http://w3future.com/weblog/stories/2008/06/16/adtinjs.xml"&gt;Sjoerd
    Visscher's algebraic data type library&lt;/a&gt;, and the jLayout library
    now includes support for Safari 3.&lt;/p&gt;</description>
   </item>
   <item>
      <title>jLayout
    Layout Algorithms &amp; jQuery plugin</title>
      <link>http://www.bramstein.com/projects/jlayout/</link>
      <description>&lt;p&gt;The &lt;a href="http://www.bramstein.com/projects/jlayout/"&gt;jLayout
    JavaScript library&lt;/a&gt; provides layout algorithms for laying out
    components and containers. The library currently provides two layout
    algorithms: border, which lays out components in five different regions
    and grid, which lays out components in a user defined grid. An &lt;a href="http://www.bramstein.com/projects/jlayout/jquery-plugin.html"&gt;experimental jQuery plugin&lt;/a&gt; to lay out (X)HTML
    elements is also available.&lt;/p&gt;</description>
   </item>
   <item>
      <title>JUnify
    unification library</title>
      <link>http://www.bramstein.com/projects/junify/</link>
      <description>&lt;p&gt;JUnify is a JavaScript library for performing unification on objects
    and arrays. Unification is an algorithm to determine the substitutions
    needed to make two expressions match. If the expressions contain
    variables, these will be bound to values in order for the match to
    succeed. If two expressions are not identical or the variables can not be
    bound, the match fails. Unification can, for example, be used to implement
    &lt;a href="http://www.bramstein.com/articles/pattern-matching.html"&gt;pattern
    matching&lt;/a&gt;, &lt;a href="http://www.bramstein.com/articles/extracting-object-values.html"&gt;object
    property extraction&lt;/a&gt;, or an expert system.&lt;/p&gt;</description>
   </item>
   <item>
      <title>JSizes
    jQuery plugin</title>
      <link>http://www.bramstein.com/projects/jsizes/</link>
      <description>&lt;p&gt;JSizes is a small plugin for the jQuery JavaScript library which
    adds support for the CSS min-width, min-height, max-width, max-height,
    border-*-width, margin, and padding properties. Additionally it has one
    method for determining whether an element is visible. Because all the size
    methods return numbers, it is safe to use them in calculating DOM element
    dimensions.&lt;/p&gt;</description>
   </item>
</rss>