<?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>Avocado</title>
	<atom:link href="http://adamspitz.com/avocado/feed/" rel="self" type="application/rss+xml" />
	<link>http://adamspitz.com/avocado</link>
	<description>A lively JavaScript programming environment</description>
	<lastBuildDate>Thu, 05 May 2011 21:38:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Open Source is not enough</title>
		<link>http://adamspitz.com/avocado/2011/05/05/open-source-is-not-enough/</link>
		<comments>http://adamspitz.com/avocado/2011/05/05/open-source-is-not-enough/#comments</comments>
		<pubDate>Thu, 05 May 2011 21:38:42 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamspitz.com/avocado/?p=33</guid>
		<description><![CDATA[The Open Source movement is great, but it doesn&#8217;t go far enough. When I first tried Smalltalk, one thing that really struck me about it was that not only was the source &#8220;open&#8221;, but it was right there in front &#8230; <a href="http://adamspitz.com/avocado/2011/05/05/open-source-is-not-enough/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The Open Source movement is great, but it doesn&#8217;t go far enough.</p>
<p>When I first tried Smalltalk, one thing that really struck me about it was that not only was the source &#8220;open&#8221;, but it was right there in front of me. If I wanted to see the source code for one of the classes in the Smalltalk standard library, I didn&#8217;t have to go to the web and find the project&#8217;s source-code repository and download the code. I just clicked on the class&#8217;s name in the Class Browser, and there it was. Making changes or additions to the standard library was as easy as making changes to my own code &#8211; everything was right there in the Class Browser, and <a href="http://adamspitz.com/avocado/2011/04/21/why-liveness/">changes took effect immediately</a>.</p>
<p>The Morphic user-interface system, originally created for <a href="http://selflanguage.org/">Self</a> and later ported to <a href="http://squeak.org/">Squeak</a> and then <a href="http://www.lively-kernel.org/">Lively Kernel</a>, took things even further. With Morphic, I could right-click on anything I saw on the screen and ask to see the source code for it. If I pressed a button and it did something neat and I wanted to see how it worked, I could find out with just a few clicks. If I wanted to make a second button that did something similar, I just right-clicked the first button and said Duplicate.</p>
<p>Convenience matters. When I feel the Urge To Tinker, only rarely does it feel like a loud voice shouting in my brain with enough energy to propel me to find the website and download the source code and figure out how to find the part of the code that corresponds to the thing I&#8217;m looking at on the screen and make the change and restart the program and retrace my steps. Much more often it&#8217;s just a quiet voice mumbling, &#8220;Hey, it&#8217;d be kinda neat if&#8230;&#8221; and then I think, &#8220;Well, it&#8217;s Open Source, I guess I <i>could</i> go download the source code&#8230; but&#8230; meh, it&#8217;s so far out of my way, not worth it,&#8221; and the urge fizzles out. I think that a lot of potential human creativity is being wasted this way.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamspitz.com/avocado/2011/05/05/open-source-is-not-enough/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Getting your hands on your objects</title>
		<link>http://adamspitz.com/avocado/2011/04/22/getting-hands-on-objects/</link>
		<comments>http://adamspitz.com/avocado/2011/04/22/getting-hands-on-objects/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 19:19:20 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamspitz.com/avocado/?p=19</guid>
		<description><![CDATA[In the land of the living, computer programs are made out of objects. A program isn&#8217;t a directory full of text files, it&#8217;s a web of objects with pointers to each other. But here&#8217;s what I see when I look &#8230; <a href="http://adamspitz.com/avocado/2011/04/22/getting-hands-on-objects/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://adamspitz.com/avocado/2011/04/21/why-liveness/">the land of the living</a>, computer programs are made out of objects. A program isn&#8217;t a directory full of text files, it&#8217;s a web of objects with pointers to each other.</p>
<p>But here&#8217;s what I see when I look at modern programming environments:</p>
<p><a href="http://upload.wikimedia.org/wikipedia/commons/d/d4/Eclipse33_Ubuntu.png"><img src="http://upload.wikimedia.org/wikipedia/commons/d/d4/Eclipse33_Ubuntu.png" style="max-width: 400px" /></a></p>
<p><a href="http://www.pharo-project.org/pictures/47/eefxugpq7wl3s5nh0viic4ufjt980c/browser-with-autocompletion-522.png"><img src="http://www.pharo-project.org/pictures/47/eefxugpq7wl3s5nh0viic4ufjt980c/browser-with-autocompletion-522.png" style="max-width: 400px" /></a></p>
<p>When I look at that, I don&#8217;t see my objects. I see a tool. A tool with a bunch of knobs and dials that I can fiddle with. I get the sense that my objects are behind the scenes somewhere, hiding deep in the bowels of my computer, and that the tool&#8217;s knobs and dials are somehow connected to the objects.</p>
<p>In contrast, here&#8217;s what Avocado looks like:</p>
<p><a href="http://adamspitz.com/avocado/wp-content/uploads/2011/04/Avocado-a-few-objects.jpg"><img src="http://adamspitz.com/avocado/wp-content/uploads/2011/04/Avocado-a-few-objects.jpg" style="max-width: 400px" /></a></p>
<p>(Those gray boxes are objects. I made a JavaScript object with an &#8216;x&#8217; attribute pointing to the number 3, a &#8216;y&#8217; attribute pointing to the number 4, and an &#8216;add&#8217; attribute containing a function. And the object inherits from Object.prototype, which is the standard root of the JavaScript inheritance hierarchy.)</p>
<p>This is how programming is done in Avocado &#8211; by getting your hands on the objects and doing things to them. If I want to change the object (say, by adding an attribute), I go right up to the object and tell it to add a new attribute. If I want to ask the object a question (i.e. call one of its functions), I go to the object and type in my question. If I ask the object how it fits into the inheritance hierarchy, the objects whoosh around on the screen to arrange themselves into a tree shape.</p>
<p>My program is made of objects. I want it to look and feel like it&#8217;s made of objects.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamspitz.com/avocado/2011/04/22/getting-hands-on-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why liveness?</title>
		<link>http://adamspitz.com/avocado/2011/04/21/why-liveness/</link>
		<comments>http://adamspitz.com/avocado/2011/04/21/why-liveness/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 18:03:59 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamspitz.com/avocado/?p=14</guid>
		<description><![CDATA[In Avocado, you write your code &#8220;live&#8221;, while your program is running. If you&#8217;re a computer programmer who doesn&#8217;t come from a Smalltalk background, this seems to you like a very strange way to write a program. Like jumping off &#8230; <a href="http://adamspitz.com/avocado/2011/04/21/why-liveness/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://adamspitz.github.com/Avocado/">Avocado</a>, you write your code &#8220;live&#8221;, while your program is running.</p>
<p>If you&#8217;re a computer programmer who doesn&#8217;t come from a Smalltalk background, this seems to you like a very strange way to write a program. Like jumping off a cliff holding a box of spare parts and trying to build an airplane around yourself in midair. But it only seems strange because your expectations have been warped by every other programming system in existence. The truth is, all those other systems are strange, and liveness is normal. <img src='http://adamspitz.com/avocado/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I don&#8217;t recommend trying the airplane trick, but for most computer programs, building the program while it&#8217;s running is actually pretty awesome.</p>
<p>In non-live programming environments, building your program is like drawing blueprints &#8211; you draw the blueprint, and then someone else (the compiler or interpreter) uses your blueprints to build the house (the running program). Then you realize that you need to change the layout of the kitchen, so you tear down the house, change the blueprints, and rebuild the house.</p>
<p>In a live environment, you can rearrange the kitchen without tearing down the house.</p>
<p>Part of the appeal is that you get quicker feedback. Even in a language like JavaScript where you can just hit Refresh and there&#8217;s no compile phase to wait through, you still need to get the program back to the state it was in when you left off. In a live environment, you just make your change and see the results right away.</p>
<p>But the subtler psychological appeal of a live environment is that <i>that&#8217;s how the real world works</i>. The real world is always running &#8211; you don&#8217;t shut down the universe and rerun the Big Bang every time you want to make a change. Our brains have had millions of years of evolution learning to deal with a world where everything is always running. (On the other hand, if you&#8217;re already a computer programmer, your own personal brain has had years of experience warping itself to think that shutting down a program and fixing the source code and restarting the program is normal. But who doesn&#8217;t like unlearning things?)</p>
<p>This emphasis on making the objects in your program feel <i>real</i>, in order to take advantage of all this hard-wired stuff in your brain, is one of the ideas that Avocado has stolen from <a href="http://selflanguage.org/">Self</a>. I plan on writing up Avocado-centric blog posts about these ideas, but there&#8217;s also lots of great stuff to read on the Self website, plus there&#8217;s <a href="http://video.google.com/videoplay?docid=5776880551404953752">the Self video</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamspitz.com/avocado/2011/04/21/why-liveness/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript is non-terrible</title>
		<link>http://adamspitz.com/avocado/2011/04/08/javascript-is-non-terrible/</link>
		<comments>http://adamspitz.com/avocado/2011/04/08/javascript-is-non-terrible/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 20:29:29 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamspitz.com/avocado/?p=9</guid>
		<description><![CDATA[When I started building Avocado, I never really expected it to be anything other than an amusing hack. I was curious to see how close I could come to re-creating Self in JavaScript, but I wasn&#8217;t expecting to actually succeed &#8230; <a href="http://adamspitz.com/avocado/2011/04/08/javascript-is-non-terrible/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>When I started building <a href="http://adamspitz.github.com/Avocado/">Avocado</a>, I never really expected it to be anything other than an amusing hack. I was curious to see how close I could come to re-creating <a href="http://selflanguage.org">Self</a> in JavaScript, but I wasn&#8217;t expecting to actually <em>succeed</em> in creating a usable programming environment. I certainly wasn&#8217;t expecting to <em>like</em> JavaScript. I wasn&#8217;t even expecting to not-hate it.</p>
<p>So I should say it: I don&#8217;t hate JavaScript. I even kinda like it.</p>
<p>I&#8217;ve been a Smalltalk (and later Self) fan for years. I like my languages simple and clean and dynamic. And JavaScript is definitely not simple or clean. But <a href="http://oreilly.com/catalog/9780596517748">as Douglas Crockford points out</a>, inside JavaScript is a core of really good stuff: a prototype-based object system, dynamic typing, closures that work (almost) right. As long as I stick to that part of the language and avoid the really messed-up parts, I can actually feel at home in JavaScript. If you&#8217;re familiar with other dynamic OO languages like Ruby or Python, you might like JavaScript too.</p>
<p>I&#8217;ll have lots to say in the future about JavaScript&#8217;s weirdnesses and deficiencies. So I figured I&#8217;d start out by saying that I&#8217;m actually enjoying myself.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamspitz.com/avocado/2011/04/08/javascript-is-non-terrible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avocado</title>
		<link>http://adamspitz.com/avocado/2011/04/04/avocado/</link>
		<comments>http://adamspitz.com/avocado/2011/04/04/avocado/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 13:42:56 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamspitz.com/avocado/?p=1</guid>
		<description><![CDATA[I&#8217;ve been building a Self-like programming environment for JavaScript. It incorporates a bunch of ideas and principles from Self and Smalltalk, and I&#8217;m building it on top of Dan Ingalls&#8217; Lively Kernel. It&#8217;s called Avocado. (You win a prize if &#8230; <a href="http://adamspitz.com/avocado/2011/04/04/avocado/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been building <a href="http://adamspitz.github.com/Avocado/">a Self-like programming environment for JavaScript</a>.</p>
<p>It incorporates a bunch of ideas and principles from <a href="http://selflanguage.org/">Self</a> and <a href="http://en.wikipedia.org/wiki/Smalltalk">Smalltalk</a>, and I&#8217;m building it on top of Dan Ingalls&#8217; <a href="http://www.lively-kernel.org/">Lively Kernel</a>. It&#8217;s called Avocado. (You win a prize if you can guess the origin of that name.)</p>
<p>I like playing with live objects rather than editing dead text files. I like getting my hands directly on my objects rather than using &#8220;tools&#8221; to manipulate them. I like prototype-based object systems, though I like classes too. I like computer systems that are designed to fit my brain, rather than to fit the machine or to be easy to write papers about.</p>
<p>So I&#8217;m building something like that. And it runs inside a standard web browser.</p>
<p>I&#8217;ll have a lot more to say later.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamspitz.com/avocado/2011/04/04/avocado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
