<?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>The Third Bit &#187; Extensible Programming</title>
	<atom:link href="http://third-bit.com/blog/archives/category/extensible-programming/feed" rel="self" type="application/rss+xml" />
	<link>http://third-bit.com/blog</link>
	<description>Data is ones and zeroes &#124; Software is ones and zeroes and hard work.</description>
	<lastBuildDate>Thu, 24 May 2012 16:16:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>I Have Seen the Future&#8230;</title>
		<link>http://third-bit.com/blog/archives/4436.html</link>
		<comments>http://third-bit.com/blog/archives/4436.html#comments</comments>
		<pubDate>Wed, 15 Feb 2012 18:07:42 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>

		<guid isPermaLink="false">http://third-bit.com/blog/?p=4436</guid>
		<description><![CDATA[&#8230;and its name is Bret Victor. (Jump ahead to 7:00 and watch for a couple of minutes if you need to be persuaded&#8230;)]]></description>
			<content:encoded><![CDATA[<p>&#8230;and its name is <a href="http://vimeo.com/36579366">Bret Victor</a>. (Jump ahead to 7:00 and watch for a couple of minutes if you need to be persuaded&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/4436.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where&#8217;s My Shell?</title>
		<link>http://third-bit.com/blog/archives/4367.html</link>
		<comments>http://third-bit.com/blog/archives/4367.html#comments</comments>
		<pubDate>Wed, 30 Nov 2011 20:26:29 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>

		<guid isPermaLink="false">http://third-bit.com/blog/?p=4367</guid>
		<description><![CDATA[My first programming language was PL/1. (Look it up if you need to, kid.) My second was Pascal, and then in the summer of 1982 I was introduced to two more: C, and the Unix shell. I realized that C was a programming language right away, mostly because that&#8217;s what people said it was.  It [...]]]></description>
			<content:encoded><![CDATA[<p>My first programming language was PL/1. (Look it up if you need to, kid.) My second was Pascal, and then in the summer of 1982 I was introduced to two more: C, and the Unix shell. I realized that C was a programming language right away, mostly because that&#8217;s what people said it was.  It took me longer to realize that the shell was also a programming language; I still remember the first time the sys admin responsible for our VAX 11/780 wrote a &#8216;for&#8217; loop on the command line to try my program for each of several input files.</p>
<p>But now I&#8217;m programming on the web, which means I&#8217;m writing Javascript. OK, that&#8217;s the equivalent of C: full of traps for the unwary, but able to do quite a bit once you get your head around it.  What I want to know is, where&#8217;s my shell?  Where&#8217;s the tool that&#8217;s not quite as expressive (try manipulating tree-shaped data in the Bourne shell), and not as fast, but lets me do with two or three commands what would take half an hour to code and debug at the base level?</p>
<p>JQuery isn&#8217;t what I&#8217;m looking for (though I&#8217;m very, very grateful that it exists). JQuery isn&#8217;t a watertight layer of abstraction above Javascript: it&#8217;s <a href="http://en.wikipedia.org/wiki/Leaky_abstraction">leaky</a>, in the sense that users still have to pay attention to Javascript-y things.  (&#8220;Wait, I forgot to say &#8216;var&#8217;&#8230;&#8221;)  <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> and other compile-to-JS languages are leaky too, but the shell is as close to being leak-free as any abstraction layer I can think of. In almost 30 years of nearly constant use, I&#8217;ve almost never had to think at the C level in order to debug a problem at the shell script level [1].</p>
<p>So what would a shell-like tool for in-browser programming look like? Well, I think it would look something like Microsoft PowerShell. There&#8217;d be lots of more-or-less orthogonal tools, each of which did one thing, but instead of communicating via streams of text, they&#8217;d send one another streams of objects. Those tools would probably be written in Javascript, and the shell might be as well (just as bash and its ilk are written in C), but users wouldn&#8217;t see that.  What they <em>would</em> see is that they could package combinations of tools into scripts that could then be used as tools in their own right. The syntax for simple operations would be much simpler than that of Javascript, at the cost of some expressive power, but that&#8217;s OK: 80/20 splits are a good thing.</p>
<p>And hey, it would give us a chance to choose command names that are more mnemonic than &#8216;ls&#8217; and &#8216;mv&#8217;&#8230; <img src='http://third-bit.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>[1] And the times I did were my own fault, because one of the components in my pipe was a program I&#8217;d written myself, which didn&#8217;t fork properly, and&#8212;never mind, it&#8217;s not important.</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/4367.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Two Steps Forward, Two Steps Back?</title>
		<link>http://third-bit.com/blog/archives/4355.html</link>
		<comments>http://third-bit.com/blog/archives/4355.html#comments</comments>
		<pubDate>Mon, 14 Nov 2011 19:42:09 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>

		<guid isPermaLink="false">http://third-bit.com/blog/?p=4355</guid>
		<description><![CDATA[The November/December 2011 issue of IEEE Software has a good article by Markus Völter titled, &#8220;From Programming to Modeling—and Back Again&#8220;. In it, the author asks, &#8220;What&#8217;s the difference between programming and modeling? And should there be one?&#8221; His answer to the second question is no: instead of today&#8217;s sharp divide between describing the problem [...]]]></description>
			<content:encoded><![CDATA[<p>The November/December 2011 issue of <em>IEEE Software</em> has a good article by Markus Völter titled, &#8220;<a href="http://www.computer.org/csdl/mags/so/2011/06/mso2011060020-abs.html">From Programming to Modeling—and Back Again</a>&#8220;. In it, the author asks, &#8220;What&#8217;s the difference between programming and modeling? And should there be one?&#8221; His answer to the second question is no: instead of today&#8217;s sharp divide between describing the problem domain, and telling a computer what to do, we should use extensible environments that support a continuum between the two.  I like his description of what&#8217;s wrong with things today: we shouldn&#8217;t use concrete syntax as a storage format.  But as with so many other articles on extensible programming, I think he glosses over the biggest practical obstacle such systems face: debugging.  An abstraction&#8217;s usefulness is limited by how fixable it is when it breaks; if you give me a way to program in pictures, in natural language, or in some domain-specific notation, but then require me to wade through automatically-generated spaghetti code to figure out <em>why</em> my description of what I want isn&#8217;t doing the right thing, you haven&#8217;t really helped me very much. I&#8217;m still trying to figure out how to reconcile this with the &#8220;pile of crap&#8221; problem I ranted about in <a href="/blog/archives/4352.html">my previous post</a>, though. If my editor/compiler/debugger are all extensible, then <em>everything</em> I try to do will trip over installation and configuration snags&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/4355.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extensible Programming: A New Hope</title>
		<link>http://third-bit.com/blog/archives/4302.html</link>
		<comments>http://third-bit.com/blog/archives/4302.html#comments</comments>
		<pubDate>Fri, 16 Sep 2011 15:24:30 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://third-bit.com/blog/?p=4302</guid>
		<description><![CDATA[Back in 2004, I wrote an article for ACM Queue titled &#8220;Extensible Programming for the 21st Century&#8220;. In it, I argued that it was time for programming languages to break free from their textual shackles—that we should separate models (the program&#8217;s content) from views and controllers (how that content is displayed), just as we have [...]]]></description>
			<content:encoded><![CDATA[<p>Back in 2004, I wrote an article for <a href="http://queue.acm.org"><cite>ACM Queue</cite></a> titled &#8220;<a href="http://queue.acm.org/detail.cfm?id=1039534">Extensible Programming for the 21st Century</a>&#8220;. In it, I argued that it was time for programming languages to break free from their textual shackles—that we should separate models (the program&#8217;s content) from views and controllers (how that content is displayed), just as we have with CAD systems, word processors, and other tools that work with rich, highly-structured content. Before I look at some recent signs of progress, let me back up and explain both the problem and why I think model-view separation is the solution. What I want is a programming &#8220;language&#8221; that can be extended in a wide variety of ways. That&#8217;s pretty conventional—every modern language lets people define new functions, create new types, overload operators, etc.—but I think that&#8217;s much too limited. I want to be able to embed a table in a program as a first-class object, so that instead of:</p>
<pre>if x:
    if y:
        z == 0
    else:
        z == 1
else:
    if y:
        z == 2
    else:
        z == 3</pre>
<p>I can write</p>
<table>
<tbody>
<tr>
<td valign="center">z</td>
<td valign="center">=</td>
<td>
<table>
<tbody>
<tr>
<td colspan="2"></td>
<td colspan="2" align="center" valign="center">y</td>
</tr>
<tr>
<td colspan="2"></td>
<td align="center" valign="center">True</td>
<td align="center" valign="center">False</td>
</tr>
<tr>
<td rowspan="2" align="center" valign="center">x</td>
<td align="center" valign="center">True</td>
<td align="center" valign="center">0</td>
<td align="center" valign="center">1</td>
</tr>
<tr>
<td align="center" valign="center">False</td>
<td align="center" valign="center">2</td>
<td align="center" valign="center">3</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p>Actually, scrap that: what I want is to be able to embed a full-blown spreadsheet in amongst other statements so that I can write:</p>
<table>
<tbody>
<tr>
<td colspan="3">def func(a, b):</td>
</tr>
<tr>
<td></td>
<td>x =</td>
<td>a &gt; b</td>
</tr>
<tr>
<td></td>
<td>y =</td>
<td>something(a, b)</td>
</tr>
<tr>
<td></td>
<td>z =</td>
<td>
<table>
<tbody>
<tr>
<td>
<table border="1">
<tbody>
<tr>
<td colspan="2"></td>
<td colspan="2" align="center" valign="center">y</td>
</tr>
<tr>
<td colspan="2"></td>
<td align="center" valign="center">True</td>
<td align="center" valign="center">False</td>
</tr>
<tr>
<td rowspan="2" align="center" valign="center">x</td>
<td align="center" valign="center">True</td>
<td align="center" valign="center">a + 1</td>
<td align="center" valign="center">b + 1</td>
</tr>
<tr>
<td align="center" valign="center">False</td>
<td align="center" valign="center">(a + b) &#8211; 1</td>
<td align="center" valign="center">a + b</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p>I want to be able to embed other things as well: bubble-and-arrow diagrams of finite state machines, before-and-after diagrams of data structures, and everything else that appears in programming textbooks. I can do this if I&#8217;m writing in Word or LibreOffice, or giving a lecture in front of a whiteboard. Why can&#8217;t I do it when I&#8217;m programming?</p>
<p>The standard answer is, &#8220;Because programs are text.&#8221; To which I can only reply, &#8220;No: that&#8217;s a <em>storage format</em> for programs—a very limited (and limiting) one.&#8221; I don&#8217;t know how LibreOffice stores documents, or how SQLite stores a database, and I don&#8217;t care. In fact, I <em>shouldn&#8217;t</em> care unless something goes wrong (about which more later). In every domain except programming, programmers accept that there should be a division between:</p>
<ol>
<li>models (the things that make up whatever we&#8217;re working with)</li>
<li>views and controllers (how we display and interact with those things)</li>
<li>storage formats (how we store things on disk)</li>
</ol>
<p>The only place where we don&#8217;t do this is when we&#8217;re building things for ourselves. We insist that programs be stored as text streams because that&#8217;s what Emacs, Vi, and the Unix command-line tools know how to work with, and what our compilers know how to process, but it doesn&#8217;t have to be like that. We could store programs as XML documents, blobs of JSON, serialized Python data structures, whatever your favorite database uses, or something else entirely, then teach our controllers and views (i.e., our editors), and our processing tools (compilers and interpreters) to display that however we wanted and let us manipulate it in whatever way made the most sense for the content.</p>
<p>I thought at the time that doing this would require us to combine three specific technologies:</p>
<ol>
<li>Programming languages that allow programmers to extend their syntax.</li>
<li>Compilers, linkers, debuggers, and other tools that are frameworks for plug-ins, rather than monolithic applications.</li>
<li>Programs that are stored as XML documents, so programmers can represent and process data and meta-data uniformly.</li>
</ol>
<p>Looking back seven years later:</p>
<ol>
<li>#1 was the goal of the exercise, so long as &#8220;extending syntax&#8221; is understood to mean &#8220;with entirely new displays with associated processing rules&#8221;. Scheme&#8217;s hygienic macros and Python&#8217;s operator overloading are great, but they still require you to squeeze your thoughts into a single display form. You don&#8217;t have to do that on a whiteboard, when authoring a textbook, or when writing a plugin for Firefox (though in each case, what you&#8217;re building will be more comprehensible if it rhymes with things users already understand); why should you have to do it with programs?</li>
<li>#2 is a corollary of #1: if I&#8217;m going to add X to my language, I need a way to tell tools how to handle X. The compiler or interpreter needs to know how to translate it into primitives; the optimizer might need special rules for making it fast; the debugger needs to know how to display its operation or internals, my coverage tool probably needs something as well, and so on. This is straightforward engineering: every new &#8220;thing&#8221; should be a bundle that respects various tools&#8217; APIs, and each tool should provide an API so that people can plug things into it.</li>
<li>I was wrong about #3, partly because I still hadn&#8217;t escaped the &#8220;storage format equals model&#8221; trap, and partly because I thought that XML processing tools like XSLT would catch on and become the basis for a new generation of pipe-and-filter tools to replace the venerable Unix toolset. What I&#8217;d say today is, &#8220;Programs are stored in some format that&#8217;s amenable to low-level inspection by people who are developing new plugin forms, in the same way that SVG diagrams can be viewed as angle-bracketed text if absolutely necessary.&#8221;</li>
</ol>
<p>So, how has reality measured up? Well, as Bill Gates once said, &#8220;We always overestimate the change that will occur in the next two years and underestimate the change that will occur in the next ten.&#8221; There has been renewed interest in programming language design in the last few years, mostly focused around the meme of functional languages being the only way to cope with massive parallelism (they aren&#8217;t, but that&#8217;s a different post). Unfortunately, all of these languages have remained trapped in the textual tarpit: whether it&#8217;s Scala, Clojure, Haskell, or something more esoteric, their authors all take for granted that a program has to be a stream of characters that can be edited by Pico or Notepad. There are, however, a few signs of progress:</p>
<ul>
<li>Something—no one is quite sure what—is happening at Charles Simonyi&#8217;s company Intentional Software. <a href="http://msdn.microsoft.com/en-us/data/dd727740.aspx">This talk</a> seems to show a working implementation of many of the ideas discussed above, focused on letting business people build things for themselves. That will fail unless someone teaches those business people the principles of <a href="http://blog.jonudell.net/2011/01/24/seven-ways-to-think-like-the-web/">computational</a> <a href="http://software-carpentry.org/4_0/softeng/principles/">thinking</a>, but the tool itself shows a lot of promise.</li>
<li>Mathematica&#8217;s <a href="http://www.wolfram.com/news/cdf-computable-document-format-released.html">Computable Document Format</a> doesn&#8217;t provide the extensibility, but I still think it&#8217;s worth watching. As I said in the original article, the biggest obstacle to getting from here to there is that everything has to change at once: editors, compilers, the language, etc. Vendors who own the whole toolchain, like Wolfram (Mathematica), The MathWorks (MATLAB), and Microsoft (.NET) can do this more easily than systems with distributed ownership (the C/Linux/Vi-or-Emacs/GCC toolchain). In that light, Microsoft&#8217;s <a href="http://www.techworld.com.au/article/401071/microsoft_previews_compiler-as-a-service_software/">compiler-as-a-service</a> project is very interesting as well&#8230;</li>
<li>Steve Witten&#8217;s <a href="http://acko.net/blog/on-termkit">TermKit</a> is also interesting: he&#8217;s replacing the plain text streams that classic Unix tools use to communicate with streams of JSON and a rich display. This grassroots, bottom-up approach is an interesting complement to the corporate, top-down approaches above.</li>
</ul>
<p>But the project that has me really excited is Geoffrey French&#8217;s <a href="https://sites.google.com/site/larchenv/">Larch</a>, which leverages Python and Jython to give people a forward migration path. The <a href="https://sites.google.com/site/larchenv/video-tutorials">tutorial videos</a> don&#8217;t really do Larch justice, and you have to remember that it&#8217;s really a proof of concept, but I&#8217;m still very excited. If nothing else, it could finally bring software visualization into the mainstream: as several studies have showed, visualizations are more useful and powerful if people create their own, but existing IDEs and languages make this hard. By making &#8220;draw this&#8221; a natural part of programming, Larch or something like it could be the next big step forward in programming.</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/4302.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Grown-Up Languages</title>
		<link>http://third-bit.com/blog/archives/4254.html</link>
		<comments>http://third-bit.com/blog/archives/4254.html#comments</comments>
		<pubDate>Tue, 12 Jul 2011 19:38:41 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>

		<guid isPermaLink="false">http://third-bit.com/blog/?p=4254</guid>
		<description><![CDATA[A few days ago, after browsing the Coffeescript docs and examples, I tweeted, &#8220;I will take your new language seriously when you have a symbolic debugger for it. For it, not for the C/JavaScript/whatever it compiles to.&#8221; So what exactly did I mean by that?  Well, a debugger is a program that lets you watch [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago, after browsing the <a href="http://en.wikipedia.org/wiki/CoffeeScript">Coffeescript</a> docs and examples, I <a href="http://twitter.com/#!/gvwilson/status/87719895613190144">tweeted</a>, &#8220;I will take your new language seriously when you have a symbolic  debugger for it. For <em>it</em>, not for the C/JavaScript/whatever it compiles  to.&#8221; So what exactly did I mean by that?  Well, a <a href="http://en.wikipedia.org/wiki/Debugger">debugger</a> is a program that lets you watch and control another program.  (If you&#8217;ve never used one, have a look at <a href="http://software-carpentry.org/4_0/python/debugger/">this 6-minute video</a>.)  Instead of staring at your code, trying to figure out why it&#8217;s broken, or adding &#8216;print&#8217; statements left and right to display values, debuggers let you stop the program at any point and look at the values, or tell the program to execute one line at a time so that you can see which &#8220;if/else&#8221; branches it&#8217;s taking, what parameters are being passed to function calls, and so on.</p>
<p>Debuggers make programming much less painful and much more productive, but a lot of students never pick up the habit of using one.  Personally, I think this is because teachers have never figured out how to put questions about using debuggers on mid-terms: most computer science programs don&#8217;t have an equivalent of the &#8220;lab exams&#8221; that are common in chemistry and biology, and if students are never examined on their ability to do things the right way, they never <em>have</em> to climb the learning curve.  But that&#8217;s just a guess, and tangential to the main point of this post.</p>
<p>What I really want to talk about is languages like Coffeescript, and why I won&#8217;t use them.  If I write a program in C, Java, Python, or Javascript, it is translated into instructions for some kind of machine (either real hardware, in the case of C, or a virtual machine in the case of the other three).  When that program runs, the debugger can match up the source code of the program and the instructions that are being executed, so that when I say, &#8220;Go to the next line,&#8221; the debugger can do what I ask.  These debuggers are WYSIWYG: the code I wrote (i.e., the code that&#8217;s in my mind) and the operations and data that I&#8217;m debugging, line up neatly.</p>
<p>But if I write a program in Coffeescript, it isn&#8217;t executed directly.  Instead, it is translated into Javascript, and then <em>that</em> is what&#8217;s run.  If I want to debug that Javascript, I can, but <em>I didn&#8217;t write it</em>: a computer program did.  Yes, the bits and pieces of that Javascript correspond to my Coffeescript, but the match is not obvious, and may not even be one-to-one.  It&#8217;s as if I wrote a contract in English in terms of Ontario law, then had to defend it in court in French under Quebec law.  Without near-expert understanding of how the one translates to the other, it&#8217;s hard or impossible for people to reverse engineer what the debugger is showing them and figure out which bits of the code they actually wrote needs to change.</p>
<p>I first ran into this problem in the 1980s, when the C++ compiler I was working with translated my object-oriented programs into a tangle of strangely-named C functions for me to compile and run.  After a while, I figured out that if the error was in XX_@_YY_@@_ZZ, I should look for a method called XX.YY taking a parameter of type ZZ, but the C that implemented overloaded operators was ugly enough that I never really wrapped my head around it.  Debuggers eventually appeared that could handle C++ &#8220;in source&#8221;, and I&#8217;m sure that if Coffeescript proves popular, a native debugger for it will appear as well.  &#8216;Til then, as much as I prefer its syntax to Javascript&#8217;s, I will (regretfully) turn away&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/4254.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Usability of Programming Languages</title>
		<link>http://third-bit.com/blog/archives/4160.html</link>
		<comments>http://third-bit.com/blog/archives/4160.html#comments</comments>
		<pubDate>Wed, 09 Mar 2011 21:19:12 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>

		<guid isPermaLink="false">http://third-bit.com/blog/?p=4160</guid>
		<description><![CDATA[Alan Blackwell&#8217;s course at Cambridge on the usability of programming languages has as its text a selection of chapters from a 1990 book on the psychology programming.  There&#8217;s a ton of great material here: I&#8217;d love to see a revival of interest in the topic.]]></description>
			<content:encoded><![CDATA[<p>Alan Blackwell&#8217;s course at Cambridge on the <a href="http://www.cl.cam.ac.uk/teaching/1011/R201/">usability of programming languages</a> has as its text a selection of chapters from a 1990 book on the psychology programming.  There&#8217;s a ton of great material here: I&#8217;d love to see a revival of interest in the topic.</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/4160.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ground Up, in No Particular Order</title>
		<link>http://third-bit.com/blog/archives/4139.html</link>
		<comments>http://third-bit.com/blog/archives/4139.html#comments</comments>
		<pubDate>Fri, 11 Feb 2011 16:23:46 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>

		<guid isPermaLink="false">http://third-bit.com/blog/?p=4139</guid>
		<description><![CDATA[I&#8217;ve said for years that extensible programming systems wouldn&#8217;t be designed per se; they&#8217;d emerge from the ground up as a younger generation left lines of ASCII text behind without ever really thinking about it.  This new tool from Alex McLean is a case in point: yeah, it&#8217;s fragile, and primary colors on black isn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve said for years that extensible programming systems wouldn&#8217;t be designed per se; they&#8217;d emerge from the ground up as a younger generation left lines of ASCII text behind without ever really thinking about it.  <a href="http://yaxu.org/text-update-and-source/">This new tool</a> from Alex McLean is a case in point: yeah, it&#8217;s fragile, and primary colors on black isn&#8217;t my favorite look and feel, but man, isn&#8217;t it cool?</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/4139.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bottom-Up, Top-Down, and Back to the Future</title>
		<link>http://third-bit.com/blog/archives/3641.html</link>
		<comments>http://third-bit.com/blog/archives/3641.html#comments</comments>
		<pubDate>Sat, 13 Mar 2010 13:42:17 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>

		<guid isPermaLink="false">http://pyre.third-bit.com/blog/?p=3641</guid>
		<description><![CDATA[I just (finally) watched the demo video for Andrew Bragdon&#8217;s CodeBubbles. You&#8217;ve probably already seen it, but if you haven&#8217;t, check it out: it rocks. Like Kael Rowan&#8217;s Code Canvas (a Microsoft research project), it imagines an IDE that is more than just a bunch of 1970s-era TTYs in a frame. I think of these [...]]]></description>
			<content:encoded><![CDATA[<p>I just (finally) watched the demo video for Andrew Bragdon&#8217;s <a href="http://www.cs.brown.edu/people/acb/codebubbles_site.htm">CodeBubbles</a>. You&#8217;ve probably already seen it, but if you haven&#8217;t, check it out: it rocks. Like Kael Rowan&#8217;s <a href="http://blogs.msdn.com/kaelr/archive/2009/03/26/code-canvas.aspx">Code Canvas</a> (a Microsoft research project), it imagines an IDE that is more than just a bunch of 1970s-era TTYs in a frame. I think of these as bottom-up efforts: both still accept that source code must be ASCII tokens, and do the best they can from there. In contrast, Intentional Software&#8217;s still-in-beta product (described in <a href="http://msdn.microsoft.com/en-us/data/dd727740.aspx">this talk</a>) goes further toward treating source &#8220;code&#8221; as a model in the model-view-controller sense, so that rendering and interaction can be comprehensively customized.  I <a href="http://www.third-bit.com/articles/extprog-acmqueue-2004.pdf">still believe</a> that sooner or later, the maker of a proprietary language (most likely Wolfram Research or The MathWorks, but Microsoft is still in the running) will proudly announce a breakthrough in this area, and that everyone else will scramble to catch up, while graybeards on the sidelines point to the original Smalltalk of the late 1970s and grumble that it has all been done before.</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/3641.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Half Measures</title>
		<link>http://third-bit.com/blog/archives/3489.html</link>
		<comments>http://third-bit.com/blog/archives/3489.html#comments</comments>
		<pubDate>Mon, 01 Feb 2010 16:27:47 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>

		<guid isPermaLink="false">http://pyre.third-bit.com/blog/?p=3489</guid>
		<description><![CDATA[Lots of people were chatting last week about Sikuli, the &#8220;programming with screenshots&#8221; project from MIT. Even if I didn&#8217;t agree with Adam Goucher&#8217;s comments (with I do), I&#8217;d still criticize it as a half-measure: a real extensible programming system would allow one programmer to nest this capability in a generic programming language.]]></description>
			<content:encoded><![CDATA[<p>Lots of people were chatting last week about <a href="http://groups.csail.mit.edu/uid/sikuli/">Sikuli</a>, the &#8220;programming with screenshots&#8221; project from MIT. Even if I didn&#8217;t agree with <a href="http://adam.goucher.ca/?p=1369">Adam Goucher&#8217;s comments</a> (with I do), I&#8217;d still criticize it as a half-measure: a real <a href="http://www.cs.utoronto.ca/~gvwilson/articles/extprog-acmqueue-2004.pdf">extensible programming system</a> would allow one programmer to nest this capability in a generic programming language.</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/3489.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pictures in Pages</title>
		<link>http://third-bit.com/blog/archives/3097.html</link>
		<comments>http://third-bit.com/blog/archives/3097.html#comments</comments>
		<pubDate>Fri, 23 Oct 2009 14:22:50 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Extensible Programming]]></category>

		<guid isPermaLink="false">http://pyre.third-bit.com/blog/?p=3097</guid>
		<description><![CDATA[It&#8217;s still a lot harder than it should be to add pictures to web pages. I know, you think it&#8217;s easy, but let&#8217;s do a comparison: Modern desktop WYSIWYG editor WordPress (and most other tools) click on the drawing palette draw fire up a separate drawing application create the image upload it add an &#60;img&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s still a lot harder than it should be to add pictures to web pages. I know, you think it&#8217;s easy, but let&#8217;s do a comparison:</p>
<table border="0">
<tbody>
<tr>
<td>Modern desktop WYSIWYG editor</td>
<td>WordPress (and most other tools)</td>
</tr>
<tr>
<td>
<ol>
<li>click on the drawing palette</li>
<li>draw</li>
</ol>
</td>
<td>
<ol>
<li>fire up a separate drawing application</li>
<li>create the image</li>
<li>upload it</li>
<li>add an &lt;img&gt; tag to link to it</li>
</ol>
</td>
</tr>
</tbody>
</table>
<p>Not too bad so far, but what happens when someone wants to update the image?</p>
<table border="0">
<tbody>
<tr>
<td>Modern desktop WYSIWYG editor</td>
<td>WordPress (and most other tools)</td>
</tr>
<tr>
<td>
<ol>
<li>click on the picture</li>
<li>draw</li>
</ol>
</td>
<td>
<ol>
<li>download the image</li>
<li>fire up a separate drawing application</li>
<li>update the image</li>
<li>upload it again</li>
</ol>
</td>
</tr>
</tbody>
</table>
<p>The former feels more wiki-like, and I suspect that if sketching in web pages was as easy as sketching in Word or OpenOffice, a lot more developers would draw pictures of what&#8217;s going on in their applications.</p>
<p>I can see two ways forward: create drawing tools that rely on the &lt;canvas&gt; element that are as easy to incorporate into web pages as the Javascript WYSIWYG HTML editor I&#8217;m using right now in WordPress, or hack around the problem. Right now, it looks like the latter is winning.  For example, check out Jordi Cabot&#8217;s list of <a href="http://modeling-languages.com/content/uml-tools#textual">text-based UML tools</a>: all of the entries translate text like</p>
<pre>@startuml
Alice -&gt; Bob: Authentication Request
Bob --&gt; Alice: Authentication Response
@enduml</pre>
<p>into a picture like:</p>
<p><img class="alignnone size-full wp-image-3098" title="diagram" src="http://pyre.third-bit.com/blog/wp-content/uploads/2009/10/diagram.png" alt="diagram" width="210" height="153" /></p>
<p>just as a wiki engine takes <code>//ohmigod!//</code> and turns it into <em>ohmigod!</em>. (Example taken from <a href="http://plantuml.sourceforge.net/">PlantUML</a>.)</p>
<p>Now, part of me wants to weep at the prospect of ASCII art&#8217;s continued survival. On the other hand, it&#8217;s a pretty creative way to work around the continuing backwardness of web interfaces, and if people actually start using it to explain what their code is doing and how it works, we&#8217;ll all be better off.</p>
]]></content:encoded>
			<wfw:commentRss>http://third-bit.com/blog/archives/3097.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

