The document is valid XHTML5 + ARIA + SVG 1.1 + MathML 2.0 (subject to the utter previewness of this service).
<!DOCTYPE html>↩<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">↩↩<head>↩<title>Sam Ruby</title>↩<link rel="alternate" type="application/atom+xml" title="It’s just data" href="http://intertwingly.net/blog/index.atom"/>↩<link rel="openid.server" href="http://intertwingly.net/id/"/>↩<link rel="search" type="application/opensearchdescription+xml" href="http://intertwingly.net/search/" title="intertwingly blog search"/>↩<link rel="stylesheet" href="/css/blog5.css" type="text/css" media="screen"/>↩<link rel="stylesheet" href="/css/print.css" type="text/css" media="print"/>↩<link rel="shortcut icon" href="/favicon.ico"/>↩<meta name="ICBM" content="35.708298,-78.695515"/>↩<script type="text/javascript" src="/js/localize_dates.js"></script>↩</head>↩↩<body>↩↩<header>↩<h1><a href="http://intertwingly.net/blog/">intertwingly</a></h1>↩<form method="get" action="http://intertwingly.net/blog/">↩<div>↩<label for="q">Search</label>↩<input type="text" id="q" name="q" value=""/>↩</div>↩</form>↩<p>It’s just data</p>↩</header>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/07/13/Editors-Draft-of-HTML5-RDFa">Editors Draft of HTML5+RDFa</a></h3>↩<hr/><div><time title="GMT" datetime="2009-07-13T17:51:00Z">Mon 13 Jul 2009 at 17:51</time></div>↩</header>↩<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100" viewBox="0 0 100 100">↩↩ <defs>↩ <g id="node" stroke="none">↩ <circle r="18" fill="#149"></circle>↩ <path d="M-14,7a16,16,0,0,1,22-21a15,15,0,0,0-14,2a3,3,0,1,1-5,5a15,15,0,0,0-3,14" fill="#fff"></path>↩ </g>↩ <path d="M-14-6a44,62,0,0,0,28,0l0,12a44,62,0,0,0-28,0z" fill="#149" id="arc"></path>↩ </defs>↩↩ <use xlink:href="#arc" transform="translate(76,50) rotate(90)"></use>↩ <use xlink:href="#arc" transform="translate(50,35) rotate(-30)"></use>↩ <use xlink:href="#arc" transform="translate(50,65) rotate(30)"></use>↩ <use xlink:href="#node" transform="translate(24,50)"></use>↩ <use xlink:href="#node" transform="translate(76,80)"></use>↩ <use xlink:href="#node" transform="translate(76,20)"></use>↩</svg>↩<p><a href="http://blog.digitalbazaar.com/2009/07/13/html5rdfa/">Manu Sporny</a>: <em>The first public Editors Draft of RDFa for HTML5 was published earlier today.</em></p>↩<footer>↩<a title="Editors Draft of HTML5+RDFa" href="http://intertwingly.net/blog/2009/07/13/Editors-Draft-of-HTML5-RDFa#comments">3 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/07/11/Vendor-Veto">Vendor Veto</a></h3>↩<hr/><div><time title="GMT" datetime="2009-07-11T19:42:07Z">Sat 11 Jul 2009 at 19:42</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="131" height="76" viewBox="0 0 131 76">↩ <path d="M36,5l12,41l12-41h33v4l-13,21c30,10,2,69-21,28l7-2c15,27,33,-22,3,-19v-4l12-20h-15l-17,59h-1l-13-42l-12,42h-1l-20-67h9l12,41l8-28l-4-13h9" fill='#005A9C'></path>↩ <path d="M94,53c15,32,30,14,35,7l-1-7c-16,26-32,3-34,0M122,16c-10-21-34,0-21,30c-5-30 16,-38 23,-21l5-10l-2-9"></path>↩</svg><p>Shelley Powers recently made a good faith effort to create a <a href="http://lists.w3.org/Archives/Public/www-archive/2009Jul/0075.html">Formal Objection</a>; however, to date I have not found a way to treat it as such.  The concern is certainly valid, but we need to find a process for dealing with the issue, and this post is a part of the process for determining the process.</p>↩<p>The concern is that <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-June/020620.html">Ian made a decision to remove two subsections</a> in his draft HTML5 spec in which codecs would have been required and that such a decision was widely viewed as a decision by the W3C.  It was not, in fact, a decision by the W3C, and as such it is not a subject to a Formal Objection.  But I can’t escape the fact that the perception exists, and is <a href="http://tech.slashdot.org/story/09/07/02/184251/Browser-Vendors-Force-W3C-To-Scrap-HTML-5-Codecs">widely held</a>.</p>↩<p><a href="http://intertwingly.net/blog/2009/07/11/Vendor-Veto">...</a></p>↩<footer>↩<a title="Vendor Veto" href="http://intertwingly.net/blog/2009/07/11/Vendor-Veto#comments">17 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/07/09/Agile-Web-Development-with-Rack">Agile Web Development with... Rack</a></h3>↩<hr/><div><time title="GMT" datetime="2009-07-09T13:49:35Z">Thu 09 Jul 2009 at 13:49</time></div>↩</header>↩<svg xmlns="http://www.w3.org/2000/svg" width="90" height="111" viewBox="0 0 90 111">↩ <g stroke-linejoin="bevel" stroke-linecap="square" fill="none" stroke="#000">↩ <path d="M6,15l30-10l49,11v82v-82l-24,8v83v-83l-55-9v83l56,8l23-8" stroke-width="4"></path>↩ <path d="M6,98l27-9v-13l-26-4l27-8v-20l-27-5l28-8v-11v11l49,10l-24,8l-26-5v20l50,8l-24,9l-27-5v13l51,8" stroke-width="2"></path>↩ </g>↩</svg><p>I believe that test-first and continuous-deployment are important characteristics of Agile Web Development.  That’s why it bothers me that Testing isn’t properly introduced until page 205 of <a href="http://www.pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition">AWDwR3</a>, and deployment until page 651.  I am also aware that not everybody who comes to this book has the same background and experience.</p>↩<p>I’m experimenting with a number of ways to address this, and <a href="http://intertwingly.net/stories/2009/07/09/insideout.html">this</a> is my current iteration.</p>↩<p>Feedback welcome.</p>↩<p><a href="http://intertwingly.net/blog/2009/07/09/Agile-Web-Development-with-Rack">...</a></p>↩<footer>↩<a title="Agile Web Development with... Rack" href="http://intertwingly.net/blog/2009/07/09/Agile-Web-Development-with-Rack#comments">4 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/07/03/XHML-2-Charter-Set-To-Expire">XHML 2 Charter Set To Expire</a></h3>↩<hr/><div><time title="GMT" datetime="2009-07-03T09:40:39Z">Fri 03 Jul 2009 at 09:40</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="131" height="76" viewBox="0 0 131 76">↩ <path d="M36,5l12,41l12-41h33v4l-13,21c30,10,2,69-21,28l7-2c15,27,33,-22,3,-19v-4l12-20h-15l-17,59h-1l-13-42l-12,42h-1l-20-67h9l12,41l8-28l-4-13h9" fill='#005A9C'></path>↩ <path d="M94,53c15,32,30,14,35,7l-1-7c-16,26-32,3-34,0M122,16c-10-21-34,0-21,30c-5-30 16,-38 23,-21l5-10l-2-9"></path>↩</svg>↩<p><a href="http://www.w3.org/2009/06/xhtml-faq">Philippe Le Hegaret and Ian Jacobs</a>: <em>W3C management has decided to allow the <a href="http://www.w3.org/2007/03/XHTML2-WG-charter">Working Group’s charter</a> to expire at the end of 2009 and not to renew it ... we expect the next generation XML serialization of HTML to be defined in the HTML 5 specification.</em></p>↩<footer>↩<a title="XHML 2 Charter Set To Expire" href="http://intertwingly.net/blog/2009/07/03/XHML-2-Charter-Set-To-Expire#comments">4 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/07/02/Media-Dependent-Styling">Media Dependent Styling</a></h3>↩<hr/><div><time title="GMT" datetime="2009-07-02T10:50:45Z">Thu 02 Jul 2009 at 10:50</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="100" height="100" viewBox="0 0 100 100">↩ <path d='M39,40a4,4,0,1,1,0,1M52,36h3v27h7v3h-10v-3zM80,50h-18v4h17c-1,13-12,23-26,23c-14,0-26-11-26-26c0-13,12-25,26-25h2v-4h-2c-17,0-30,13-30,29c0,17,13,30,30,30c17,0,31-13,31-30v-1zM53,87c20,0,37-16,37-36c0-19-17-35-37-35c-20,0-36,16-36,35c0,20,16,36,36,36' fill='#CB2846' fill-rule='evenodd'></path>↩</svg><p>I <b>finally</b> decided to upgrade my cell phone to one that supports the web and email.  I settled on an LG enV3 in slate blue.  One of the pages I frequently check is my <a href="http://intertwingly.net/blog/comments.html">comments page</a>, and as I had taken care to ensure that the markup degraded gracefully, the page displays adequately on my mobile device — with one obvious annoyance that surprised me.</p>↩<p>To read the comments, I have to horizontally scroll.</p>↩<p><a href="http://intertwingly.net/blog/2009/07/02/Media-Dependent-Styling">...</a></p>↩<footer>↩<a title="Media Dependent Styling" href="http://intertwingly.net/blog/2009/07/02/Media-Dependent-Styling#comments">16 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/07/01/Rails-Book-Update-and-Outlook">Rails Book Update and Outlook</a></h3>↩<hr/><div><time title="GMT" datetime="2009-07-01T15:52:27Z">Wed 01 Jul 2009 at 15:52</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="100" height="100" viewBox="0 0 100 100">↩<path d='M1,12c0-7,4-11,11-11h87v87c0,5-5,11-11,11h-87z' fill='#723' stroke='#712' stroke-width='2'></path>↩↩<path d='M13,22h80v60l-40,15l-39-16z' fill='#a33'></path>↩<path d='M25,2l27,18l28,11l18,48v-77z' fill='#a54'></path>↩<path d='M80,31l19,8l-9,20z' fill='#d5a67c'></path>↩<path d='M78,2l2,29l19,8z' fill='#c98'></path>↩<path d='M53,20l25-18l2,29z' fill='#b76'></path>↩<path d='M90,58l8,20l-20,7z' fill='#b65'></path>↩<path d='M98,78l-47,18l2,2h36zM25,2l28,18l-27,10l-12,27l-11-19z' fill='#a72d3a'></path>↩<path d='M14,56l-11,23l26,6z' fill='#924'></path>↩↩<path d='M93,23c-38-35-78,17-77,69h41c-17-52,7-81,35-67zM62,80l-7-1l2,5h7zM15,72l-7-1l-2,7l8,1zM58,62l-5-3v5l6,3zM22,47l-7-3l-2,6l7,3zM59,48l-4-4l-1,4l4,4zM62,31l-2,4l3,3l1-3zM34,26l-4-3l-4,4l5,4zM73,25h-4l1,4l3-1zM86,24h-4v2h4zM87,14l-4-3v3l4,2zM50,13l-3-4l-4,3l3,4zM68,10l-2-4h-5l2,4z' fill='#FFF'></path>↩</svg>↩<p>Agile Web Development with Rails, 3rd Edition is about to have its third printing.  Translations are under way for Chinese, Japanese, Korean, and Spanish.  One thing I wasn’t aware of before participating in the development of this book is that printers have an opportunity to address errata in each printing.  Other changes are fodder for a new edition (or possibly even a new title).  What would I like to see in a follow-on to this book?</p>↩<p><a href="http://intertwingly.net/blog/2009/07/01/Rails-Book-Update-and-Outlook">...</a></p>↩<footer>↩<a title="Rails Book Update and Outlook" href="http://intertwingly.net/blog/2009/07/01/Rails-Book-Update-and-Outlook#comments">2 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/29/ECMAScript-5-Test-Suites">ECMAScript 5 Test Suites</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-29T21:29:17Z">Mon 29 Jun 2009 at 21:29</time></div>↩</header>↩<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">↩ <circle r="25" cx="43" cy="49" fill="#6bb8ff" opacity="0.7"></circle>↩ <path fill="#86c5ff" fill-opacity="0.8" d="M32,94L60,94L38,49ZM74,85L92,61L33,35ZM95,53L93,24L24,46zM78,16L62,4L42,46Z"></path>↩ <circle r="15" cx="40" cy="43" fill="#FFF"></circle>↩ <circle r="12" cx="40" cy="42" fill="#9ed9ff"></circle>↩</svg>↩<p><a href="http://blog.chromium.org/2009/06/launching-sputnik-into-orbit.html">Christian Plesner Hansen</a>: <em>Today we’re releasing the <a href="http://code.google.com/p/sputniktests/">Sputnik</a> JavaScript test suite. Sputnik is a comprehensive set of more than 5000 tests that touch all aspects of the JavaScript language as defined in the ECMA-262 standard.</em></p>↩<p><a href="http://blogs.msdn.com/jscript/archive/2009/06/30/steps-toward-creating-compatible-ecmascript-5-implementations.aspx">Allen Wirfs-Brock</a>: <em>Anyone who has the interest and skills for developing individual ECMAScript conformance tests are invited to participate in the project. If you’re interested check out the <a href="http://es5conform.codeplex.com/">Codeplex site</a> and get involved.</em></p>↩<footer>↩<a title="ECMAScript 5 Test Suites" href="http://intertwingly.net/blog/2009/06/29/ECMAScript-5-Test-Suites#comments">Add comment</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/28/Test-Notifications">Test Notifications</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-28T11:46:10Z">Sun 28 Jun 2009 at 11:46</time></div>↩</header>↩<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">↩ <path d="M43,90c-88,-16,-21,-86,41,-51l9,-6v17h-26l8,-5c-55,-25,-86,29,-32,36z" fill="#ccc"></path>↩ <path d="M43,90v-75l14,-9v75z" fill="#f60"></path>↩</svg><p><a href="http://yehudakatz.com/2009/06/20/on-rails-testing/">Yehuda Katz</a>: <em>Last week, Carl and I started digging into the Rails initializer, and the tests in the initializer (railties) are more mock-based and less reliable than the tests in ActionPack (which we’ve been working with so far). They’re pretty reasonable unit tests for individual components, but getting all of the tests to pass did not result in an (even close) bootable Rails app.</em></p>↩<p>To help with spreading the word, I’ve created a <a href="http://rails.intertwingly.net/registry/awdwr">registration page</a> where those with an interest in doing so can sign up for IM notification on test results.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/28/Test-Notifications">...</a></p>↩<footer>↩<a title="Test Notifications" href="http://intertwingly.net/blog/2009/06/28/Test-Notifications#comments">4 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/23/Validator-Nu-on-GCJ-Update">Validator.Nu on GCJ Update</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-23T19:48:44Z">Tue 23 Jun 2009 at 19:48</time></div>↩</header>↩<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">↩ <g stroke-linecap="round" stroke-linejoin="round">↩ <path d="M15,68v-29c27-1,26,0,26,29M86,39v29c-27,1-26,0-26-29" stroke="#000" stroke-width="20" opacity="0.5"></path>↩ <path d="M8,10h15c26,97,26,97,52,0h15c-32,115-50,115-82,0z" fill="#2a2863" stroke-width="4" stroke="#2a2863" stroke-opacity="0.5"></path>↩ <path d="M15,68v-29c27-1,26,0,26,29M86,39v29c-27,1-26,0-26-29" stroke="#FFF" stroke-width="8" fill="none"></path>↩ </g>↩</svg><pre class="code">ruby test/<a href="http://intertwingly.net/stories/2009/06/23/fonts.rb">fonts.rb</a> test/<a href="http://intertwingly.net/stories/2009/06/23/google.html">google.html</a>↩size => -1↩size => -1↩size => -2↩size => -2</pre>↩<p>I jotted down a few notes.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/23/Validator-Nu-on-GCJ-Update">...</a></p>↩<footer>↩<a title="Validator.Nu on GCJ Update" href="http://intertwingly.net/blog/2009/06/23/Validator-Nu-on-GCJ-Update#comments">Add comment</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/22/Revisiting-RedHat">Revisiting RedHat</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-22T15:49:49Z">Mon 22 Jun 2009 at 15:49</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="100" height="100" viewBox="0 0 100 100">↩ <path d='M98,50c0-27-22-49-48-49c-27,0-49,22-49,49v37c0,6,5,11,11,11h38c26,0,48-21,48-48' fill='#072b61'></path>↩ <path d='M64,13c-13,0-23,10-23,23v12h-12c-12,0-22,10-22,22c0,13,10,23,22,23c13,0,23-10,23-23v-12h12c13,0,23-10,23-22c0-13-10-23-23-23M64,24c7,0,12,5,12,12c0,6-5,12-12,12h-10c-1,0-2-1-2-2v-10c0-7,5-12,12-12M29,58h11l1,2v10c0,7-5,12-12,12c-6,0-12-5-12-12c0-6,6-12,12-12' fill='#0a57a4'></path>↩ <path d='M41,48v-12c0-13,10-23,23-23h2c6,1,8,3,8,6c0,3-3,5-6,5h-4c-7,0-12,5-12,12v10c0,1,1,2,2,2h8c2,0,5,2,5,5c0,3-3,5-5,5h-10v12c0,13-10,23-22,23c-2,0-3,0-6-1c-3-1-4-3-4-5c0-3,2-5,5-5h4c7,0,12-5,12-12v-10c0-1-1-2-2-2h-7c-3,0-6-2-6-5c0-3,3-5,6-5z' fill='#fff'></path>↩</svg><p>I <a href="http://intertwingly.net/blog/2003/11/24/apt-get-upgrade">switched to Debian in 2003</a> given the <a href="http://www.redhat.com/archives/rhl-list/2003-September/msg00064.html">uncertainty at the time</a> for RedHat.  Eighteen months later, I <a href="http://www.intertwingly.net/blog/2005/05/04/Ubuntu-Update">switched to Ubuntu</a> as I found the unpredictable release cycle of Debian to be an issue.</p>↩<p>I had occasion to try Fedora again yesterday when debugging a <a href="http://gcc.gnu.org/ml/java/2009-06/msg00049.html">GCP/JAXP issue</a>.  I was curious to see what had changed since I had last looked into a RPM based distribution over five years ago, and the answer in retrospect was totally obvious.  The difference between two 2009 vintage Linux distributions is much smaller than the difference between a 2009 vintage distribution and a 2003 vintage distribution, even of those distributions came from the same place.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/22/Revisiting-RedHat">...</a></p>↩<footer>↩<a title="Revisiting RedHat" href="http://intertwingly.net/blog/2009/06/22/Revisiting-RedHat#comments">6 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/17/Calling-JAXP-from-Ruby">Calling JAXP from Ruby</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-18T00:38:11Z">Thu 18 Jun 2009 at 00:38</time></div>↩</header>↩<svg xmlns="http://www.w3.org/2000/svg" width="75" height="136" viewBox="0 0 75 136">↩<path d="M1190 2982 c-38-31-31-179 17-347 14-49-50 34-89 115-59 126↩-75 138-139 104-89-45-31-286 106-438 37-41 37-56 2-56-64-1-147↩-63-147-111 0-68 36-95 107-78 72 17 110 12 162-18 59-36 99-53 121↩-53 70 0 98-274 36-339-77-80-124-64-211 69-235 363-871 1021-794↩823 6-16 15-109 21-208 8-154 7-237-7-510-1-22-5-71-9-110-3↩-38-8-99-11-135-16-193-59-311-172-463-89-120-103-199-62-333↩46-147 32-217-65-342-86-110-34-240 74-182 15 8 16-2 16-118-1↩-208 99-262 252-137 459 378 583 383 820 37 106-155 165-182 267-123 179↩103 150 755-55 1272-72 180-71 272 6 419 l38 71-1 147 c0 177 4 192 76↩262 82 80 99 158 65 300-25 105-22 166 16 269 47 130 23 186-68 161-65↩-17-142-154-142-253 0-42-37 30-49 96-23 120-43 186-61 202-30 27↩-91 31-120 7z m-342-1094 c74-22 122-90 122-170 0-77-7-87-54-86-83↩2-183-78-173-139 14-82-172-40-237 54-127 183 105 413 342 341z m315↩-214 c237-426 341-786 342-1179 0-460-61-531-239-277-251 358-453↩367-824 35-124-110-190-136-208-80-7 22-7 235 0 272 2 11 7 45 10 75↩4 30 8 66 11 80 2 14 9 52 14 85 109 661 160 849 214 789 199-228 612 2 545↩303-6 28-4 32 15 36 38 7 40 4 120-139z m-900-522 c3-4-5-61-18-127↩-13-66-25-131-27-145-6-36-39 38-46 101-7 76 66 213 91 171z"↩transform="translate(0,136) scale(0.045181,-0.045181)"></path>↩<ellipse rx="12" ry="10" transform="rotate(-24) translate(5.4,68.3)"↩fill="#F00" opacity="0.7"></ellipse>↩<ellipse rx="3.5" ry="2" transform="rotate(-33) translate(-9,61)" fill="#FFF"↩opacity="0.7"></ellipse>↩</svg>↩<p>I’ve now got a Ruby module that calls into the JAXP API.  Why is this a big deal?  Validator.nu has a <a href="http://about.validator.nu/htmlparser/apidocs/nu/validator/htmlparser/dom/HtmlDocumentBuilder.html">HtmlDocumentBuilder</a> that complies with HTML 5.  Furthermore, <a href="http://xml.apache.org/xalan-j/xpath_apis.html">JAXP has full support for XPath</a> and Nokogiri has the ability to convert CSS into XPath.  This may seem like going the long way around, but my intuition is that the expensive parts will be transferring data across the language boundary (especially strings).  Having a DOM entirely on the Java side, probed via CSS selectors and/or XPath expressions and only retrieving the specific nodes across the Java/Ruby boundary for further processing should minimize this issue.  And the end result should be able to pass all of the Nokogiri and Validator.nu tests.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/17/Calling-JAXP-from-Ruby">...</a></p>↩<footer>↩<a title="Calling JAXP from Ruby" href="http://intertwingly.net/blog/2009/06/17/Calling-JAXP-from-Ruby#comments">2 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/15/Invoking-HtmlParser-from-C">Invoking HtmlParser from C++</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-15T19:03:47Z">Mon 15 Jun 2009 at 19:03</time></div>↩</header>↩<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">↩ <g stroke-linecap="round" stroke-linejoin="round">↩ <path d="M15,68v-29c27-1,26,0,26,29M86,39v29c-27,1-26,0-26-29" stroke="#000" stroke-width="20" opacity="0.5"></path>↩ <path d="M8,10h15c26,97,26,97,52,0h15c-32,115-50,115-82,0z" fill="#2a2863" stroke-width="4" stroke="#2a2863" stroke-opacity="0.5"></path>↩ <path d="M15,68v-29c27-1,26,0,26,29M86,39v29c-27,1-26,0-26-29" stroke="#FFF" stroke-width="8" fill="none"></path>↩ </g>↩</svg>↩<p>On <a href="http://intertwingly.net/blog/2009/06/12/Validator-Nu-on-GCJ">Friday</a>, I said <em>Next task is to repackage the htmlparser as a library, and to reimplement the HTML2XML tool itself in C++</em>.  This is now <a href="http://intertwingly.net/stories/2009/06/15/">done</a>.  In the process, I also converted a <code>SystemErrErrorHandler</code> class into C++ so that I could be sure that I was able to do both Java=>C++ and C++=>Java calls.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/15/Invoking-HtmlParser-from-C">...</a></p>↩<footer>↩<a title="Invoking HtmlParser from C++" href="http://intertwingly.net/blog/2009/06/15/Invoking-HtmlParser-from-C#comments">2 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/14/Rest-In-Place">Rest In Place</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-14T10:54:28Z">Sun 14 Jun 2009 at 10:54</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="100" height="100" viewBox="0 0 100 100">↩<path d='M1,12c0-7,4-11,11-11h87v87c0,5-5,11-11,11h-87z' fill='#723' stroke='#712' stroke-width='2'></path>↩↩<path d='M13,22h80v60l-40,15l-39-16z' fill='#a33'></path>↩<path d='M25,2l27,18l28,11l18,48v-77z' fill='#a54'></path>↩<path d='M80,31l19,8l-9,20z' fill='#d5a67c'></path>↩<path d='M78,2l2,29l19,8z' fill='#c98'></path>↩<path d='M53,20l25-18l2,29z' fill='#b76'></path>↩<path d='M90,58l8,20l-20,7z' fill='#b65'></path>↩<path d='M98,78l-47,18l2,2h36zM25,2l28,18l-27,10l-12,27l-11-19z' fill='#a72d3a'></path>↩<path d='M14,56l-11,23l26,6z' fill='#924'></path>↩↩<path d='M93,23c-38-35-78,17-77,69h41c-17-52,7-81,35-67zM62,80l-7-1l2,5h7zM15,72l-7-1l-2,7l8,1zM58,62l-5-3v5l6,3zM22,47l-7-3l-2,6l7,3zM59,48l-4-4l-1,4l4,4zM62,31l-2,4l3,3l1-3zM34,26l-4-3l-4,4l5,4zM73,25h-4l1,4l3-1zM86,24h-4v2h4zM87,14l-4-3v3l4,2zM50,13l-3-4l-4,3l3,4zM68,10l-2-4h-5l2,4z' fill='#FFF'></path>↩</svg>↩<p><a href="http://24ways.org/2005/edit-in-place-with-ajax">Edit in place</a> is a handy feature where clicking on an area of a web page replaces that portion of the page with a form which will enable the user to update that information.  At one time, this was a part of Rails, but in 2007 it moved out to a <a href="http://github.com/rails/in_place_editing/tree/master">plugin</a>, and <a href="http://github.com/nakajima/better-edit-in-place/tree/master">improved upon</a>.  The one that looked like it most closely matched my needs was <a href="http://jan.varwig.org/projects/rest-in-place">REST in Place</a>.  It comes in <a href="http://github.com/janv/rest_in_place/tree/21b0fae04e34ee8e7f962559c572896e6a79726f/javascripts">three flavors</a>, I picked JQuery.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/14/Rest-In-Place">...</a></p>↩<footer>↩<a title="Rest In Place" href="http://intertwingly.net/blog/2009/06/14/Rest-In-Place#comments">11 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/13/Rails-Edge-Very-Stable-Lately">Rails Edge - Very Stable Lately</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-13T10:04:01Z">Sat 13 Jun 2009 at 10:04</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="100" height="100" viewBox="0 0 100 100">↩<path d='M1,12c0-7,4-11,11-11h87v87c0,5-5,11-11,11h-87z' fill='#723' stroke='#712' stroke-width='2'></path>↩↩<path d='M13,22h80v60l-40,15l-39-16z' fill='#a33'></path>↩<path d='M25,2l27,18l28,11l18,48v-77z' fill='#a54'></path>↩<path d='M80,31l19,8l-9,20z' fill='#d5a67c'></path>↩<path d='M78,2l2,29l19,8z' fill='#c98'></path>↩<path d='M53,20l25-18l2,29z' fill='#b76'></path>↩<path d='M90,58l8,20l-20,7z' fill='#b65'></path>↩<path d='M98,78l-47,18l2,2h36zM25,2l28,18l-27,10l-12,27l-11-19z' fill='#a72d3a'></path>↩<path d='M14,56l-11,23l26,6z' fill='#924'></path>↩↩<path d='M93,23c-38-35-78,17-77,69h41c-17-52,7-81,35-67zM62,80l-7-1l2,5h7zM15,72l-7-1l-2,7l8,1zM58,62l-5-3v5l6,3zM22,47l-7-3l-2,6l7,3zM59,48l-4-4l-1,4l4,4zM62,31l-2,4l3,3l1-3zM34,26l-4-3l-4,4l5,4zM73,25h-4l1,4l3-1zM86,24h-4v2h4zM87,14l-4-3v3l4,2zM50,13l-3-4l-4,3l3,4zM68,10l-2-4h-5l2,4z' fill='#FFF'></path>↩</svg><p><a href="http://yehudakatz.com/2009/06/11/rails-edge-architecture/">Yehuda Katz</a>: ... <em>have focused quite a bit on maintaining backward compatibility (for the user-facing API) with Rails 2.3. If you try edge and find that we’ve broken something, definitely let us know.</em></p>↩<p>I’ve been running automated tests on Rails, focusing on edge, for about a month now.  Four problems were found during the process.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/13/Rails-Edge-Very-Stable-Lately">...</a></p>↩<footer>↩<a title="Rails Edge - Very Stable Lately" href="http://intertwingly.net/blog/2009/06/13/Rails-Edge-Very-Stable-Lately#comments">3 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/12/Validator-Nu-on-GCJ">Validator.Nu on GCJ</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-12T10:49:23Z">Fri 12 Jun 2009 at 10:49</time></div>↩</header>↩<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">↩ <g stroke-linecap="round" stroke-linejoin="round">↩ <path d="M15,68v-29c27-1,26,0,26,29M86,39v29c-27,1-26,0-26-29" stroke="#000" stroke-width="20" opacity="0.5"></path>↩ <path d="M8,10h15c26,97,26,97,52,0h15c-32,115-50,115-82,0z" fill="#2a2863" stroke-width="4" stroke="#2a2863" stroke-opacity="0.5"></path>↩ <path d="M15,68v-29c27-1,26,0,26,29M86,39v29c-27,1-26,0-26-29" stroke="#FFF" stroke-width="8" fill="none"></path>↩ </g>↩</svg><p>This turned out to be much easier than I thought.  The tool I chose to focus on itself isn’t very important, it simply converts HTML5 into XHTML5.  But for it to work at all essentially requires the whole of the htmlparser library to be functional, as well as its dependencies (namely chardet and icu4j).</p>↩<p>Next steps are to rewrite the tool itself in C++ and generate bindings for a <a href="http://www.swig.org/compat.html#SupportedLanguages">host of other languages</a>.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/12/Validator-Nu-on-GCJ">...</a></p>↩<footer>↩<a title="Validator.Nu on GCJ" href="http://intertwingly.net/blog/2009/06/12/Validator-Nu-on-GCJ#comments">2 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/09/Whenever">Whenever</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-09T13:58:09Z">Tue 09 Jun 2009 at 13:58</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="78" height="129" viewBox="0 0 78 129">↩ <path d='M2,11c0,40,34,34,34,54c0,17-34,10-34,53h74c0-43-35-35-35-53c0-20,35-20,35-54z' stroke='#000' fill='#DDD'></path>↩ <path d='M5,115h68c0-1,0-10-4-19h-60c-4,9-4,19-4,19M12,36c14,1,36,1,50,0c-1,5-23,14-24,25c0-11-24-19-26-25' fill='#B5AB93'></path>↩ <path d="M1,1h76v10h-76zM1,117h76v10h-76z" stroke='#000' fill='#663624'></path>↩ <path d='M10,15h16c0,28,12,29,13,45c-5-19-27-19-29-45M10,116h15c-4-29,12-28,13-47c-5,19-31,13-28,47' fill='#FFF' opacity='0.6'></path>↩</svg>↩<p><a href="http://railscasts.com/episodes/164-cron-in-ruby">Ryan Bates</a>: <em>Cron is great for handling recurring tasks, but it is an external dependency with a crazy syntax. In this episode I show you how to use Whenever to create cron jobs with Ruby.</em></p>↩<p>In all of my <a href="http://intertwingly.net/blog/2009/05/26/Provisioning-a-New-Machine">re-provisioning</a> activities, updating cron was the one piece that I didn’t automate.  <a href="http://github.com/javan/whenever/tree/master">Whenever</a> does fill this need quite nicely.  In converting over existing applications, the only issue I encountered is that some of my tasks were executed at times that didn’t match the much simpler syntax that Whenever provides, so I <a href="http://github.com/rubys/whenever/blob/08e8a2fd2c8c89676e0477477bdeddb086eb7c20/test/output_at_test.rb">added a few tests</a> and <a href="http://github.com/rubys/whenever/tree/master">made a fork</a>.  I created a pull request, so hopefully this change (or at least the tests) will be pulled into <a href="http://github.com/javan">javan’s</a> tree shortly.</p>↩<footer>↩<a title="Whenever" href="http://intertwingly.net/blog/2009/06/09/Whenever#comments">4 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/08/Google-Chrome-on-Linux-First-Impressions">Google Chrome on Linux First Impressions</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-08T14:50:44Z">Mon 08 Jun 2009 at 14:50</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="100" height="100" viewBox="0 0 100 100">↩ <circle cx='50' cy='50' r='44' fill='#666'></circle>↩ <path d='M48,95c-8-1-15-7-18-11s-6-6-2-11s17-12,17-12c-9-2-15-10-15-19v-5c0-1-1-3-4-6c-8-9-4-13-4-17a47,45,0,0,0,28,81' fill='#2A2'></path>↩ <path d='M32,33c4-11,25-18,36-1h4c3,0,13,2,21,4a45,51,0,0,0-67-24c0,0-1,4,0,7s4,9,5,12' fill='#C11'></path>↩ <path d='M34,75c0,0-4,3-2,6c3,3,12,12,22,14a47,45,0,0,0,34-72c0,0,6,9,6,17c-5-1-13-6-24-5c6,18-9,27-19,26' fill='#FD0'></path>↩ <path d='M45,61c-9-2-16-9-15-24c0,0,0-2-2-4a24,23,0,0,0,13,30M72,32a24,23,0,0,0-42-4l2,5c5-12,26-17,36-1M70,36c5,13-3,26-19,26l-5,4a24,23,0,0,0,28-28M28,23c3-1,1-6-2-6zM34,13a3,1-30,1,0,0,1M20,18c-19,26-15,43,3,60c7,6,2,6-1,3c-17-13-24-38-2-63M25,30l-3-1c-3,1-9-2-1-7' fill='#FFF' opacity='.4'></path>↩ <radialGradient id='gcb' cx='50' cy='39' r='20' gradientUnits='userSpaceOnUse'>↩ <stop offset='0' stop-color='#BDF'></stop>↩ <stop offset='.5' stop-color='#18C'></stop>↩ <stop offset='1' stop-color='#333'></stop>↩ </radialGradient>↩ <circle cx='50' cy='42' r='18' fill='url(#gcb) #37C'></circle>↩ <path d='M74,88c0,0,1-3-3-7c14-8,19-22,20-33c0,0,5-1,6,7M62,93c0,0-3-2-5-7c0,0,6-1,10-3c0,0,4,3,3,8' stroke='#EC0' fill='none'></path>↩</svg><p>I took the <a href="http://dev.chromium.org/getting-involved/dev-channel#TOC-For-Linux">Early Access version of Google Chrome for Linux</a> for a spin.</p>↩<p>I don’t see me changing my usage on my desktop as I don’t currently have any “pain points” with Firefox, but I can definitely see me switching on my NetBook later this year if Chrome continues to be appreciably faster that the version of the browser that ships with Karmic Koala.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/08/Google-Chrome-on-Linux-First-Impressions">...</a></p>↩<footer>↩<a title="Google Chrome on Linux First Impressions" href="http://intertwingly.net/blog/2009/06/08/Google-Chrome-on-Linux-First-Impressions#comments">6 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/07/Google-Wave-Robot-w-Sinatra-JRuby-AppEngine">Google Wave Robot w/Sinatra+JRuby+AppEngine</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-07T19:18:12Z">Sun 07 Jun 2009 at 19:18</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="100" height="90" viewBox="0 0 100 90">↩ <defs>↩ <linearGradient id="wave1" gradientTransform="rotate(70)">↩ <stop stop-color="#F10" offset=".7"></stop><stop stop-color="#710" offset="1"></stop>↩ </linearGradient>↩ <linearGradient id="wave2">↩ <stop stop-color="#B81" offset="0"></stop><stop stop-color="#FD6" offset=".5"></stop>↩ </linearGradient>↩ <filter id="wave3">↩ <feGaussianBlur stdDeviation="2"></feGaussianBlur>↩ </filter>↩ </defs>↩ <path d='M2,31c2-27,11-24,15,2z' fill='#0991ec'></path>↩ <path d='M11,12c2,3,2,2,3,5l10,42c4,16,11,12,13,0l10-41l-3,8l-4,16c-2,8-4,8-6,0l-4-14z' fill='url(#wave1)'></path>↩ <path d='M46,27c2,0,3,4,3,5l3,16l18,18l-10-39c-3-19-12-19-14,0' fill='url(#wave2)'></path>↩ <path d='M66,44l4-18c1-3,3-5,6-6l20-8s-2,1-3,4l-11,47c-4,9-8,9-12,0z' fill='#5bb753'></path>↩ <path d='M16,82l15-5l32-3l30,12h-55z' fill='#ddd' filter="url(#wave3)"></path>↩</svg><p><a href="http://blog.inigral.com/2009/06/07/a-google-wave-robot-container-in-sinatra/">Mike Sofaer</a>: <em>Since I got a Google Wave account at Google IO, I felt like I should try to do something Ruby-ish in it.  I got talking to Charles Nutter, and he suggested a Sinatra template for Wave Robots.  So here it is.</em></p>↩<p>Good job!  I’m jealous.  Not havinging the foresight to go to Google I/O, I can’t play yet.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/07/Google-Wave-Robot-w-Sinatra-JRuby-AppEngine">...</a></p>↩<footer>↩<a title="Google Wave Robot w/Sinatra+JRuby+AppEngine" href="http://intertwingly.net/blog/2009/06/07/Google-Wave-Robot-w-Sinatra-JRuby-AppEngine#comments">3 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/06/01/Wave-Robot-Ruby-Client">Wave Robot Ruby Client</a></h3>↩<hr/><div><time title="GMT" datetime="2009-06-01T22:08:50Z">Mon 01 Jun 2009 at 22:08</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="100" height="90" viewBox="0 0 100 90">↩ <defs>↩ <linearGradient id="wave1_2" gradientTransform="rotate(70)">↩ <stop stop-color="#F10" offset=".7"></stop><stop stop-color="#710" offset="1"></stop>↩ </linearGradient>↩ <linearGradient id="wave2_2">↩ <stop stop-color="#B81" offset="0"></stop><stop stop-color="#FD6" offset=".5"></stop>↩ </linearGradient>↩ <filter id="wave3_2">↩ <feGaussianBlur stdDeviation="2"></feGaussianBlur>↩ </filter>↩ </defs>↩ <path d='M2,31c2-27,11-24,15,2z' fill='#0991ec'></path>↩ <path d='M11,12c2,3,2,2,3,5l10,42c4,16,11,12,13,0l10-41l-3,8l-4,16c-2,8-4,8-6,0l-4-14z' fill='url(#wave1_2)'></path>↩ <path d='M46,27c2,0,3,4,3,5l3,16l18,18l-10-39c-3-19-12-19-14,0' fill='url(#wave2_2)'></path>↩ <path d='M66,44l4-18c1-3,3-5,6-6l20-8s-2,1-3,4l-11,47c-4,9-8,9-12,0z' fill='#5bb753'></path>↩ <path d='M16,82l15-5l32-3l30,12h-55z' fill='#ddd' filter="url(#wave3_2)"></path>↩</svg><p>Wanting to learn more about Google Wave, I ported the <a href="http://code.google.com/p/wave-robot-python-client/">Wave Robot Python Client library</a> to <a href="http://github.com/rubys/wave-robot-ruby-client/tree/master">Ruby</a>, mainly because I wanted to understand the protocol.  The current protocol is tightly coupled to the Java server implementation.</p>↩<p>Overall, I feel that this Google Wave could benefit from earlier and wider reviews.  In particular, the whole approach to JSON generation should be rethought.  I look forward to testing interop with a live server, in particular one that I can self host.</p>↩<p><a href="http://intertwingly.net/blog/2009/06/01/Wave-Robot-Ruby-Client">...</a></p>↩<footer>↩<a title="Wave Robot Ruby Client" href="http://intertwingly.net/blog/2009/06/01/Wave-Robot-Ruby-Client#comments">9 comments</a>↩</footer>↩</article>↩↩<article>↩<header>↩<h3><a rel="bookmark" href="http://intertwingly.net/blog/2009/05/31/Google-Wave">Google Wave</a></h3>↩<hr/><div><time title="GMT" datetime="2009-05-31T19:06:35Z">Sun 31 May 2009 at 19:06</time></div>↩</header>↩<svg xmlns='http://www.w3.org/2000/svg' width="100" height="90" viewBox="0 0 100 90">↩ <defs>↩ <linearGradient id="wave1_3" gradientTransform="rotate(70)">↩ <stop stop-color="#F10" offset=".7"></stop><stop stop-color="#710" offset="1"></stop>↩ </linearGradient>↩ <linearGradient id="wave2_3">↩ <stop stop-color="#B81" offset="0"></stop><stop stop-color="#FD6" offset=".5"></stop>↩ </linearGradient>↩ <filter id="wave3_3">↩ <feGaussianBlur stdDeviation="2"></feGaussianBlur>↩ </filter>↩ </defs>↩ <path d='M2,31c2-27,11-24,15,2z' fill='#0991ec'></path>↩ <path d='M11,12c2,3,2,2,3,5l10,42c4,16,11,12,13,0l10-41l-3,8l-4,16c-2,8-4,8-6,0l-4-14z' fill='url(#wave1_3)'></path>↩ <path d='M46,27c2,0,3,4,3,5l3,16l18,18l-10-39c-3-19-12-19-14,0' fill='url(#wave2_3)'></path>↩ <path d='M66,44l4-18c1-3,3-5,6-6l20-8s-2,1-3,4l-11,47c-4,9-8,9-12,0z' fill='#5bb753'></path>↩ <path d='M16,82l15-5l32-3l30,12h-55z' fill='#ddd' filter="url(#wave3_3)"></path>↩</svg><p><a href="http://wave.google.com/">Google Wave</a> is clearly a <a href="http://agylen.com/2009/05/28/bullshit-graphs/">bold statement</a> that “this is the type of application that every browser should be able to run natively without needing to resort to a plugin”.</p>↩<p>Working on such a Ruby library, a Rails generator for Robots, and ultimately a Ruby implementation of the XMPP server itself would be of interest to me, once the project is <a href="http://www.waveprotocol.org/get-involved">open to outside participants</a>.</p>↩<p><a href="http://intertwingly.net/blog/2009/05/31/Google-Wave">...</a></p>↩<footer>↩<a title="Google Wave" href="http://intertwingly.net/blog/2009/05/31/Google-Wave#comments">14 comments</a>↩</footer>↩</article>↩↩<aside>↩↩<h2>Nav Bar</h2>↩↩<nav>↩<ul>↩<li><a href="http://en.wikipedia.org/wiki/Sam_Ruby">About</a></li>↩<li><a href="http://twitter.com/samruby">Twitter</a></li>↩<li><a href="/blog/comments.html">Comments</a></li>↩<li><a id="navbar_register" href="/blog/registry/">Register</a></li>↩<li><a href="/stats/">Statistics</a></li>↩<li><a href="/blog/archives/">Archives</a></li>↩<li><a href="http://planet.intertwingly.net/">Planet</a></li>↩<li><a href="http://code.intertwingly.net/public/">Code</a></li>↩<li><a href="http://www.pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition">Rails</a></li>↩<li><a href="http://www.oreilly.com/catalog/9780596529260/">RESTful</a></li>↩<li><a href="/blog/2005/05/16/Disclaim-This">Disclaimer</a></li>↩</ul>↩</nav>↩↩</aside>↩↩</body>↩</html>Total execution time 599 milliseconds.