<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Micahpedia &#187; software</title>
	<atom:link href="http://dubinko.info/blog/tags/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://dubinko.info/blog</link>
	<description>From an XML geek, a reader, a writer, a connector, a man of the people (says keep hope alive)</description>
	<lastBuildDate>Tue, 27 Jul 2010 04:28:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Grokking Selenium</title>
		<link>http://dubinko.info/blog/2010/07/07/grokking-selenium/</link>
		<comments>http://dubinko.info/blog/2010/07/07/grokking-selenium/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 18:00:36 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[browsers]]></category>
		<category><![CDATA[commercialism]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web20]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=859</guid>
		<description><![CDATA[As the world of web apps gets more framework-y, I need to get up to speed on contemporary automation testing tools. One of the most popular ones right now is the open source Selenium project. From the look of it, that project is going through an awkward adolescent phase. For example:

Selenium IDE lets you record [...]]]></description>
			<content:encoded><![CDATA[<p>As the world of web apps gets more framework-y, I need to get up to speed on contemporary automation testing tools. One of the most popular ones right now is the open source <a href="http://seleniumhq.org/">Selenium</a> project. From the look of it, that project is going through an awkward adolescent phase. For example:</p>
<ul>
<li>Selenium IDE lets you record tests in a number of languages, but only HTML ones can be played back. For someone using only Selenium IDE, it&#8217;s a confusing array of choices for no apparent reason.</li>
<li>Selenium RC has bindings for lots of different languages but not for the HTML tests that are most useful in Selenium IDE. (Why not include the ability to simply play through an entire recorded  script in one call, instead of fine grained commands like selenium.key_press(input_id, 110), etc.?)</li>
<li>The list of <a href="http://seleniumhq.org/projects/">projects</a> prominently mentions Selenium Core (a JavaScript implementation), but when you click through to the documentation, it&#8217;s not mentioned. Elsewhere on the site it&#8217;s spoken of in deprecating terms.</li>
<li>If you look at the developer <a href="http://code.google.com/p/selenium/w/list">wiki</a>, all the recent attention is on Web Drivers, a new architecture for remote-controlling browsers, but those aren&#8217;t mentioned in the docs (yet) either.</li>
</ul>
<p>So yeah, right now it&#8217;s awkward and confusing. The underlying architecture of the project is undergoing a tectonic shift, something that would never see public light of day in a proprietary project. In the end it will come out leaner and meaner. What the project needs in the short term is more help from fresh outsiders who can visualize the desirable end state and help the ramped and productive developers on the project get there.</p>
<p>By the way, if this kind of problem seems interesting to you, let me know. We&#8217;re hiring. If you have any tips for getting up to speed in Selenium, comment below.</p>
<p>-m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2010/07/07/grokking-selenium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Command Lines on the frontier of user interface</title>
		<link>http://dubinko.info/blog/2010/06/12/command-lines-on-the-frontier-of-user-interface/</link>
		<comments>http://dubinko.info/blog/2010/06/12/command-lines-on-the-frontier-of-user-interface/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 05:13:53 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[search]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[stuff]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[donnorman]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=847</guid>
		<description><![CDATA[This came from a comment on the prior post, and it&#8217;s worth a shout of its own. Don Norman on the importance of command lines, including the ubiquitous search box, in modern UI. -m
]]></description>
			<content:encoded><![CDATA[<p>This came from a comment on the prior post, and it&#8217;s worth a shout of its own. Don Norman on the importance of <a href="http://www.jnd.org/dn.mss/ui_breakthroughcomma.html">command lines</a>, including the ubiquitous search box, in modern UI. -m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2010/06/12/command-lines-on-the-frontier-of-user-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Google syntax&#8221; for semantic queries?</title>
		<link>http://dubinko.info/blog/2010/06/09/google-syntax-for-semantic-queries/</link>
		<comments>http://dubinko.info/blog/2010/06/09/google-syntax-for-semantic-queries/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 07:14:42 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[Mark Logic]]></category>
		<category><![CDATA[everythingismiscellaneous]]></category>
		<category><![CDATA[intentional web]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[stuff]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[searchmonkey]]></category>
		<category><![CDATA[semantics]]></category>
		<category><![CDATA[semweb]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=831</guid>
		<description><![CDATA[Thought experiment: are there any commonly-expressed semantic queries&#8211;the kind of queries you&#8217;d run over a triple store, or perhaps a SearchMonkey-annotated web site&#8211;expressible in common type-in-a-searchbox query grammar?
As a refresher, here&#8217;s some things that Google and other search engines can handle. The square brackets represent the search box into which the queries are typed, not [...]]]></description>
			<content:encoded><![CDATA[<p>Thought experiment: are there any commonly-expressed semantic queries&#8211;the kind of queries you&#8217;d run over a triple store, or perhaps a <a href="http://developer.yahoo.com/searchmonkey/">SearchMonkey</a>-annotated web site&#8211;expressible in common type-in-a-searchbox query grammar?</p>
<p>As a refresher, here&#8217;s some things that Google and other search engines can handle. The square brackets represent the search box into which the queries are typed, not part of the queries themselves.</p>
<p>[term]</p>
<p>[term -butnotthis]</p>
<p>[term1 OR term2]</p>
<p>["phrase term"]</p>
<p>[tem1 OR term2 -"but not this" site:dubinko.info filetype:html]</p>
<p>So what kind of semantic queries would be usefully expressed in a similar way, avoiding SPARQL and the like? For example, maybe [by:"Micah Dubinko"] could map to a document containing a triple like &lt;this document&gt; &lt;dc:author&gt; &#8220;Micah Dubinko&#8221;. What other kinds of graph queries are interesting, common, and simple to express like this? Comments welcome.</p>
<p>-m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2010/06/09/google-syntax-for-semantic-queries/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Geek Thoughts: verbing facebook</title>
		<link>http://dubinko.info/blog/2010/05/14/verbing-facebook/</link>
		<comments>http://dubinko.info/blog/2010/05/14/verbing-facebook/#comments</comments>
		<pubDate>Sat, 15 May 2010 05:56:52 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[annoyance]]></category>
		<category><![CDATA[commercialism]]></category>
		<category><![CDATA[geekthoughts]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[greed]]></category>
		<category><![CDATA[privacy]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=824</guid>
		<description><![CDATA[Facebook (v): to deliberately create an impenetrable computer user interface for purposes of manipulating users.
More collected Geek Thoughts at http://geekthoughts.info.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.businessinsider.com/well-these-new-zuckerberg-ims-wont-help-facebooks-privacy-problems-2010-5">Facebook</a> (v): to deliberately create an impenetrable computer user interface for purposes of manipulating users.</p>
<p>More collected Geek Thoughts at http://<a href="http://geekthoughts.info/">geekthoughts</a>.info.</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2010/05/14/verbing-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geek Thoughts: no-fly lists and CAP Theorem</title>
		<link>http://dubinko.info/blog/2010/05/05/geek-thoughts-no-fly-lists-and-cap-theorem/</link>
		<comments>http://dubinko.info/blog/2010/05/05/geek-thoughts-no-fly-lists-and-cap-theorem/#comments</comments>
		<pubDate>Wed, 05 May 2010 07:12:56 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[geekthoughts]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[CAP theorem]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=819</guid>
		<description><![CDATA[According to this article, a recent terror suspect almost got on a plane despite being recently added to the no-fly list. Why is it so difficult to administer a no-fly list? The CAP Theorem has answers. (Disclaimer: as always, this blog is apolitical&#8211;this isn&#8217;t about whether no-fly lists are a good idea or not, only [...]]]></description>
			<content:encoded><![CDATA[<p>According to <a href="http://www.nytimes.com/2010/05/05/nyregion/05plane.html">this</a> article, a recent terror suspect almost got on a plane despite being recently added to the no-fly list. Why is it so difficult to administer a no-fly list? The <a href="http://www.julianbrowne.com/article/viewer/brewers-cap-theorem">CAP Theorem</a> has answers. (Disclaimer: as always, this blog is apolitical&#8211;this isn&#8217;t about whether no-fly lists are a good idea or not, only a matter of technical interest)</p>
<p>Without stretching the imagination too much, one can think of a no-fly list as a distributed database. The list apparently changes frequently, and it needs to be accessible from thousands of airport gates and reservation desks. Thus CAP Theorem applies. In a nutshell, that theorem states that of Consistency, Availability, and Partition-tolerance, you can only pick, at most, two. Hit the link above for a much better, more complete description.</p>
<p>If there was one centralized list, the system would be Consistent and Available, but every time a name needed to be checked it would require an immediate network round-trip&#8211;should the connection to that central list go down, no further checks would be possible&#8211;no Partition tolerance.</p>
<p>Of course, the airline could set a policy that if said network connection goes down, no passengers at all would be able to get on planes. This would be a case of lack of Availability.</p>
<p>Or, the complete list could be periodically copied to each location that needs it. This provides good Availability and Partition tolerance, but fails Consistency, since it&#8217;s possible to miss out on late-breaking updates. Apparently, something like this is what happened.</p>
<p>More collected Geek Thoughts at http://<a href="http://geekthoughts.info/">geekthoughts</a>.info.</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2010/05/05/geek-thoughts-no-fly-lists-and-cap-theorem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tinderbox 5 is out</title>
		<link>http://dubinko.info/blog/2009/12/11/tinderbox-5-is-out/</link>
		<comments>http://dubinko.info/blog/2009/12/11/tinderbox-5-is-out/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 21:13:01 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[announcement]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[writing]]></category>
		<category><![CDATA[eastgate]]></category>
		<category><![CDATA[hypertext]]></category>
		<category><![CDATA[notes]]></category>
		<category><![CDATA[tinderbox]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=753</guid>
		<description><![CDATA[At first glance, this seems to be the Snow Leopard of Tinderbox releases&#8211;lots of behind-the-scenes technology updates and largely the same core features. If you&#8217;re looking for a way to get more organized, it&#8217;s worth a look. Link. -m
]]></description>
			<content:encoded><![CDATA[<p>At first glance, this seems to be the Snow Leopard of Tinderbox releases&#8211;lots of behind-the-scenes technology updates and largely the same core features. If you&#8217;re looking for a way to get more organized, it&#8217;s worth a look. <a href="http://www.eastgate.com/Tinderbox/updates/Tinderbox5.html">Link</a>. -m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2009/12/11/tinderbox-5-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Model Endpoint Template (MET) organizational pattern for XRX apps</title>
		<link>http://dubinko.info/blog/2009/11/29/model-endpoint-template/</link>
		<comments>http://dubinko.info/blog/2009/11/29/model-endpoint-template/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 21:09:08 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[Mark Logic]]></category>
		<category><![CDATA[XForms]]></category>
		<category><![CDATA[XQuery]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[application builder]]></category>
		<category><![CDATA[endpoint]]></category>
		<category><![CDATA[marklogic]]></category>
		<category><![CDATA[met]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[xquery]]></category>
		<category><![CDATA[xrx]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=730</guid>
		<description><![CDATA[One of the lead bullets describing why XForms is cool always mentions that it is based on a Model View Controller framework. When building a full XRX app, though, MVC might not be the best choice to organize things overall. Why not?
Consider a typical XRX app, like MarkLogic Application Builder. (You can download a your [...]]]></description>
			<content:encoded><![CDATA[<p>One of the lead bullets describing why <a title="XForms Institute" href="http://xformsinstitute.com">XForms</a> is cool always mentions that it is based on a Model View Controller framework. When building a full <a href="http://en.wikibooks.org/wiki/XRX">XRX</a> app, though, <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a> might not be the best choice to organize things overall. Why not?</p>
<p>Consider a typical XRX app, like MarkLogic Application Builder. (You can download a your copy of MarkLogic, including Application Builder, under the community license at the <a href="http://developer.marklogic.com/download/">developer site</a>.) For each page, the cycle goes like this:</p>
<ol>
<li>The browser requests a particular page, say the one that lets you configure sorting options in the app you&#8217;re building</li>
<li>The page loads, including client-side <a href="http://sourceforge.net/projects/xsltforms/">XForms via JavaScript</a></li>
<li>XForms requests the project state as XML from a designated endpoint; this becomes the XForms Instance Data</li>
<li>Stuff happens on the page that changes the client-side state</li>
<li>Just before leaving the page, XML representing the updated state is HTTP PUT back to the endpoint</li>
</ol>
<p>The benefit of this approach is that you are dealing with XML all the way through, no impedance mismatches like you might find on an app that awkwardly transitions from (say) relational data to Java objects to urlencoded name/value pairs embedded in HTML syntax.</p>
<p>So why not do this in straight MVC? Honestly, MVC isn&#8217;t a bad choice, but it can get unwieldy. If an endpoint consists of a separate model+view+controller files, and each individual page consists of separate model+view+controller files, it adds up to a lot of stuff to keep track of. In truly huge apps, this much attention to organization might be worth it, but most apps aren&#8217;t that big. Thus the MET pattern.</p>
<p>Model: It still makes sense to keep the code that deals with particular models (closely aligned with Schemas) as a separate thing. All of Application Builder, for example, has only one model.</p>
<p>Endpoint: The job of an endpoint is to GET and PUT (and possibly POST and DELETE) XML, or other equivalent resource bundles depending on how many media types you want to deal with. It combines an aspect of controllers by being activated by a particular URL and views by providing the data in a consistent format.</p>
<p>Template: Since XForms documents already contain MVC mechanics, it not a high-payoff situation to further use MVC to construct the XForms and XHTML wrapper themselves. The important stuff happens within XForms, and then you need various templating mechanisms for example to provide consistent headers, footers, and other pieces across multiple pages. For this, an ordinary templating mechanism suffices. I can imagine dynamic assembly scenarios where this wouldn&#8217;t be the case, but again, many apps don&#8217;t need this kind of flexibility, and the complexity that comes along with it.</p>
<p>What about separation of concerns? Oh yeah, what about it? :-) Technically both Endpoints and Templates violate classical <acronym title="separation of concerns">SOC</acronym>. In an XRX app, this typically doesn&#8217;t lead to the kinds of spaghetti situations that it might otherwise. Endpoints are self contained, and can focus on doing just one thing well; with limited scope comes limited ability to get into trouble. For those times when you need to dig into the XQuery code of an endpoint, it&#8217;s actually helpful to see both the controller and view pieces laid out in one file.</p>
<p>As for Templates, simplicity wins. With the specifics of models and endpoints peeled away, the remaining challenge in developing individual pages is getting the XForms right, and again, it&#8217;s helpful to minimize the numbers of files one XForms page are split across. <a title="You ain't gonna need it" href="http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it">YAGNI</a> applies to what&#8217;s left, at least in the stuff I&#8217;ve built.</p>
<p>So, I&#8217;ve been careful in the title to call this an &#8220;organizational pattern&#8221;, not a &#8220;design pattern&#8221; or an (ugh) &#8220;architectural pattern&#8221;. Nothing too profound here. I&#8217;d be happy to start seeing XRX apps laid out with directory names like &#8220;models&#8221;, &#8220;endpoints&#8221;, and &#8220;templates&#8221;.</p>
<p>What do you think? Comments welcome.</p>
<p>-m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2009/11/29/model-endpoint-template/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Geek Thoughts: stability theory</title>
		<link>http://dubinko.info/blog/2009/09/26/geek-thoughts-stability-theory/</link>
		<comments>http://dubinko.info/blog/2009/09/26/geek-thoughts-stability-theory/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 23:39:14 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[geekthoughts]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[joel]]></category>
		<category><![CDATA[jwz]]></category>
		<category><![CDATA[kernighan]]></category>
		<category><![CDATA[stability]]></category>
		<category><![CDATA[theory]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=651</guid>
		<description><![CDATA[My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl [...]]]></description>
			<content:encoded><![CDATA[<p>My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl interpreter, you&#8217;re in for some long nights. Via multiplication, a corollary is that the more layers a system has, the less likely it is to work well. (As an aside, I&#8217;m not arguing that all software architectures should have fewer layers&#8211;other forces outside the scope of this article work against systems with too few layers.)</p>
<p>Joel said something similar lately in the article <a href="http://www.joelonsoftware.com/items/2009/09/23.html">The Duct Tape Programmer</a>. There is a strong tendency for many coders to over-engineer a system, building towering heights of abstraction. In contrast, a Duct Tape Programmer gets the job done by making something ugly (and with fewer layers) but at least it works. So far this is a fit with what stability theory predicts.</p>
<p>But then he speaks out against unit testing, referring to it in similar terms to the extravagant tower. Quoting JWZ: &#8220;If there’s no unit test the customer isn’t going to complain about that.&#8221; Here stability theory makes a different prediction. Particularly in the lower levels of the system, flakiness is disastrous. You have to be sure that your foundation is stable before building upon it, or you&#8217;re in for keyboard-on-forehead-induced head trauma. This is true no matter how tight the deadlines are or how much pressure is on. In fact, when you don&#8217;t have time for a write-over, its even more important to get it right the first time.</p>
<p>The top accomplishment for a coder is shipping software. Duct Tape Programmers make this happen by avoiding needless complexity, which is a great principle to live by. I&#8217;m reminded of what Brian Kernighan is attributed as saying:</p>
<p style="padding-left: 30px;">Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.</p>
<p>Debugging, or more generally making software that works well all the way to the user-facing layer, is hard. Anything that provides fundamental assertions about the stability of your foundation is a useful tool, so don&#8217;t slack off on the unit testing.</p>
<p>What about you? Have you found stability theory to be supported by the facts? Comment below.</p>
<p>-m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2009/09/26/geek-thoughts-stability-theory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TextWrangler and special characters</title>
		<link>http://dubinko.info/blog/2009/04/22/text-wrangler-and-special-characters/</link>
		<comments>http://dubinko.info/blog/2009/04/22/text-wrangler-and-special-characters/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 05:58:51 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[writing]]></category>
		<category><![CDATA[breve]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[háček]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=497</guid>
		<description><![CDATA[Hey readers, all seven of you, can you help me out?
I&#8217;m perhaps finally switching to a Mac-native text editor, TextWrangler, or if I really like it, BBEdit. Within that app, what&#8217;s the easiest way to enter unusual characters not found on a keyboard, say š (Latin s with háček) or ḫ (h-breve below)? In jEdit, [...]]]></description>
			<content:encoded><![CDATA[<p>Hey readers, all seven of you, can you help me out?</p>
<p>I&#8217;m perhaps finally switching to a Mac-native text editor, TextWrangler, or if I really like it, BBEdit. Within that app, what&#8217;s the easiest way to enter unusual characters not found on a keyboard, say š (Latin s with <span class="mw-redirect">háček</span>) or ḫ (h-breve below)? In jEdit, one can set up longer strings that get automatically converted into harder-to-type ones. What&#8217;s the equivalent in TextWrangler or BBEdit? -m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2009/04/22/text-wrangler-and-special-characters/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wolfram Alpha</title>
		<link>http://dubinko.info/blog/2009/03/08/wolfram-alpha/</link>
		<comments>http://dubinko.info/blog/2009/03/08/wolfram-alpha/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 20:47:54 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Mark Logic]]></category>
		<category><![CDATA[aswemaythink]]></category>
		<category><![CDATA[commercialism]]></category>
		<category><![CDATA[intentional web]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[anewkindofscience]]></category>
		<category><![CDATA[mathematica]]></category>
		<category><![CDATA[nks]]></category>
		<category><![CDATA[nlp]]></category>
		<category><![CDATA[practice]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[rdfa]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[semweb]]></category>
		<category><![CDATA[wolfram]]></category>
		<category><![CDATA[wolframalpha]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=456</guid>
		<description><![CDATA[The remarkable (and prolific) Stephen Wolfram has an idea called Wolfram Alpha. People used to assume the &#8220;Star Trek&#8221; model of computers:
that one would be able to ask a computer any factual question, and have it compute the answer.
Which has proved to be quite distant from reality. Instead
But armed with Mathematica and NKS [A New [...]]]></description>
			<content:encoded><![CDATA[<p>The remarkable (and prolific) Stephen Wolfram has an <a href="http://blog.wolfram.com/2009/03/05/wolframalpha-is-coming/">idea</a> called Wolfram Alpha. People used to assume the &#8220;Star Trek&#8221; model of computers:</p>
<p style="padding-left: 30px;">that one would be able to ask a computer any factual question, and have it compute the answer.</p>
<p>Which has proved to be quite distant from reality. Instead</p>
<p style="padding-left: 30px;">But armed with <em>Mathematica</em> and NKS [<a title="Own it. But never have been able to justify picking up a copy of Mathematica (yet)" href="http://www.amazon.com/exec/obidos/ASIN/1579550088/dubinkoinfo-20">A New Kind of Science</a>] I realized there’s another way: explicitly implement methods and models, as algorithms, and explicitly curate all data so that it is immediately computable.</p>
<p style="padding-left: 30px;">It’s not easy to do this. Every different kind of method and model—and data—has its own special features and character. But with a mixture of <em>Mathematica</em> and NKS automation, and a lot of human experts, I’m happy to say that we’ve gotten a very long way.</p>
<p>I&#8217;m still a SearchMonkey guy at heart, so I wonder how much Wofram&#8217;s team is familiar with existing Semantic Web research and practice&#8211;because at a high level this seems very much like RDF with suitable queries thereupon. If that&#8217;s a good characterization, that&#8217;s A Good Thing, since practical application has been one of SemWeb&#8217;s weak spots.</p>
<p>-m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2009/03/08/wolfram-alpha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On porting WebPath to Python 3k</title>
		<link>http://dubinko.info/blog/2009/01/07/on-porting-webpath-to-python-3k/</link>
		<comments>http://dubinko.info/blog/2009/01/07/on-porting-webpath-to-python-3k/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 08:08:26 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[languages]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[2to3]]></category>
		<category><![CDATA[byte]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[lex]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[ply]]></category>
		<category><![CDATA[porting]]></category>
		<category><![CDATA[python3]]></category>
		<category><![CDATA[python3k]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[webpath]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=416</guid>
		<description><![CDATA[I&#8217;ve started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started looking into porting the <a href="https://sourceforge.net/projects/webpath">WebPath</a> code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from <a href="http://www.dabeaz.com/ply/">PLY</a>. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the remarkable David Beazley to blow that assumption out of the water: the latest version of lex.py from <a href="http://code.google.com/p/ply/source/browse/trunk/ply/lex.py">SVN</a> works in both 2.x and 3.x.</p>
<p>From there the included 2to3 tool was easy enough to run. (Relatively more difficult was getting 2.6 and 3.0 versions of Python frameworks installed on Mac, but even that wasn&#8217;t too bad.) The tool made some moderate changes, and I can run the unit tests, and a few even pass!</p>
<p>The primary remaining problem stems from code where the documentation is a little unclear, and my inexperience is severe. The part of the code in platonicweb.py that reads nasty, grotty HTML via Tidy and produces a clean DOM throws an exception every time. Seems to be a mismatch between String and Byte (encoded string) types, but manifested as a failed XML parse. Sans exception handling, the code looks like:</p>
<pre>    page <span class="hl sym">=</span> urllib<span class="hl sym">.</span>request<span class="hl sym">.</span><span class="hl kwd">urlopen</span><span class="hl sym">(</span>fullurl<span class="hl sym">)</span>
    markup <span class="hl sym">=</span> page<span class="hl sym">.</span><span class="hl kwd">read</span><span class="hl sym">()</span>
    dom <span class="hl sym">=</span> <span class="hl kwd">xml.dom.minidom.parseString</span><span class="hl sym">(</span>markup<span class="hl sym">)</span></pre>
<p>urlopen() returns a file-like object, but the docs didn&#8217;t seem clear on whether it&#8217;s like a file opened in byte or string mode. In any case, I&#8217;m almost certainly doing it wrong. Suggestions?</p>
<p>-m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2009/01/07/on-porting-webpath-to-python-3k/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RDFa parser in XQuery now open source</title>
		<link>http://dubinko.info/blog/2008/12/30/rdfa-parser-in-xquery-now-open-source/</link>
		<comments>http://dubinko.info/blog/2008/12/30/rdfa-parser-in-xquery-now-open-source/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 02:58:33 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[IPR]]></category>
		<category><![CDATA[Mark Logic]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[rdfa]]></category>
		<category><![CDATA[xquery]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=411</guid>
		<description><![CDATA[After a delay, the code to my RDFa parser in XQuery is now available under an Apache license. Go get it. This is some of the earliest XQuery code I ever wrote, so go easy on me. It follows the earlier work on a functional definition of RDFa. And feel free to send in patches. [...]]]></description>
			<content:encoded><![CDATA[<p>After a delay, the code to my RDFa parser in XQuery is now available under an Apache license. <a href="http://xqzone.marklogic.com/svn/commons/trunk/rdfa/">Go get it</a>. This is some of the earliest XQuery code I ever wrote, so go easy on me. It follows the <a href="http://rdfa.info/wiki/Functional_RDFa">earlier work</a> on a functional definition of RDFa. And feel free to send in patches. -m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2008/12/30/rdfa-parser-in-xquery-now-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XML 2008 non-liveblog: Content Authoring Schemas</title>
		<link>http://dubinko.info/blog/2008/12/08/xml-2008-non-liveblog-content-authoring-schemas/</link>
		<comments>http://dubinko.info/blog/2008/12/08/xml-2008-non-liveblog-content-authoring-schemas/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 04:27:30 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[infopath]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[writing]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[authoring]]></category>
		<category><![CDATA[dita]]></category>
		<category><![CDATA[docbook]]></category>
		<category><![CDATA[schemas]]></category>
		<category><![CDATA[xml2008]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=396</guid>
		<description><![CDATA[I was on the panel with Bob DuCharme, Frank Miller, and Evan Lenz discussing content authoring, from DITA to DocBook with some WordML sprinkled in for good measure. It was a good discussion, nothing earth-shaking. This session was laptopless, so I don&#8217;t have any significant notes. -m
]]></description>
			<content:encoded><![CDATA[<p>I was on the panel with Bob DuCharme, Frank Miller, and Evan Lenz discussing content authoring, from DITA to DocBook with some WordML sprinkled in for good measure. It was a good discussion, nothing earth-shaking. This session was laptopless, so I don&#8217;t have any significant notes. -m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2008/12/08/xml-2008-non-liveblog-content-authoring-schemas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mystery Python Theatre 3K</title>
		<link>http://dubinko.info/blog/2008/12/05/mystery-python-theatre-3k/</link>
		<comments>http://dubinko.info/blog/2008/12/05/mystery-python-theatre-3k/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 03:59:35 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[compatibility]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[python3k]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=391</guid>
		<description><![CDATA[The long-awaited Python 3.0 is out. It fixes almost every annoyance I have with the language, particularly around Unicode handling, which is important in the kinds of projects I work on.
Now, to revisit some of my Open Source projects&#8230; -m
]]></description>
			<content:encoded><![CDATA[<p>The long-awaited Python 3.0 is <a href="http://arstechnica.com/news.ars/post/20081204-python-3-0-sheds-backwards-compatibility.html">out</a>. It fixes almost every annoyance I have with the language, particularly around Unicode handling, which is important in the kinds of projects I work on.</p>
<p>Now, to revisit some of my Open Source <a href="http://sourceforge.net/projects/webpath/">projects</a>&#8230; -m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2008/12/05/mystery-python-theatre-3k/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XiX (XForms in XQuery)</title>
		<link>http://dubinko.info/blog/2008/10/30/xix-xforms-in-xquery/</link>
		<comments>http://dubinko.info/blog/2008/10/30/xix-xforms-in-xquery/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 22:07:32 +0000</pubDate>
		<dc:creator>mdubinko</dc:creator>
				<category><![CDATA[XForms]]></category>
		<category><![CDATA[XQuery]]></category>
		<category><![CDATA[intentional web]]></category>
		<category><![CDATA[patternalia]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[functional]]></category>
		<category><![CDATA[implementation]]></category>
		<category><![CDATA[structures]]></category>
		<category><![CDATA[w3c]]></category>
		<category><![CDATA[xix]]></category>
		<category><![CDATA[xquery]]></category>

		<guid isPermaLink="false">http://dubinko.info/blog/?p=378</guid>
		<description><![CDATA[I&#8217;m pondering implementing the computational parts of the XForms Model in XQuery. Doing so in a largely functional environment poses some challenges, though. Has anybody tackled this before? How about in any functional language, including ML, Haskell, Scheme, XSLT, or careful Python?
I borrowed the book Purely Functional Data Structures from a friend&#8211;this looks to be [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m pondering implementing the computational parts of the XForms Model in XQuery. Doing so in a largely functional environment poses some challenges, though. Has anybody tackled this before? How about in any functional language, including ML, Haskell, Scheme, XSLT, or careful Python?</p>
<p>I borrowed the book <a href="http://www.amazon.com/exec/obidos/ASIN/0521663504/dubinkoinfo-20">Purely Functional Data Structures</a> from a friend&#8211;this looks to be a good start. What else is out there? Comment below. -m</p>
]]></content:encoded>
			<wfw:commentRss>http://dubinko.info/blog/2008/10/30/xix-xforms-in-xquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
