<?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>Monomorphic &#187; apple</title>
	<atom:link href="http://www.monomorphic.org/wordpress/tag/apple/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.monomorphic.org/wordpress</link>
	<description>Nystrom re-presents</description>
	<lastBuildDate>Sun, 29 Aug 2010 06:58:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Doing generality right</title>
		<link>http://www.monomorphic.org/wordpress/doing-generality-right/</link>
		<comments>http://www.monomorphic.org/wordpress/doing-generality-right/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 02:00:02 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[HCI]]></category>
		<category><![CDATA[platforms]]></category>
		<category><![CDATA[programming languages]]></category>
		<category><![CDATA[reuse]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=558</guid>
		<description><![CDATA[Many software developers, while making a tool to solve a specific problem, heed the siren call of generality. By making a few specific changes, they can turn the tool into a general framework for solving a larger class of problems. And then, with a few more changes, an even larger class of problems, and so [...]]]></description>
			<content:encoded><![CDATA[<p>Many software developers, while making a tool to solve a specific problem, heed the siren call of generality. By making a few specific changes, they can turn the tool into a general framework for solving a larger class of problems. And then, with a few more changes, an even larger class of problems, and so on. This often turns into a trap, and there is a risk that the end of the line is an over-generalised tool that isn&#8217;t very good at solving any problem, because the specificity that was present in the first place was part of why it was powerful. In this way, constraints can equal freedom.</p>
<p>Sometimes, though, the generalizers get it right. These are often moments of exceptional and lasting innovation. One example of such a system is the fabulously influential (but today, not that widely used) programming language <a href="http://www.smalltalk.org">Smalltalk</a>. Invented by the former jazz guitarist and subsequent Turing award winner <a href="http://en.wikipedia.org/wiki/Alan_Kay">Alan Kay</a>, Smalltalk was released as one of the first true object-oriented programming languages in 1980. It is probably still ahead of its time. It runs on a virtual machine, it has reflection, everything is an object, and the separation between applications is blurred in favour of a big object box. On running <a href="http://www.squeak.org/">Squeak</a>, a popular Smalltalk implementation, with its default system image today, users discover that all the objects on the screen, including the IDE to develop and debug objects, appear to follow the same rules. No objects seem to have special privileges.</p>
<p>Another such system is an application that used to be shipped on Mac computers in the distant past, <a href="http://en.wikipedia.org/wiki/HyperCard">Hypercard</a>. Hypercard enabled ordinary users to create highly customized software using the idea of filing cards in a drawer as the underlying model, blurring the line between end users and developers through its accessibility. I haven&#8217;t had the privilege to use it myself, but it seems like this was as powerful as it was because it served up a homogenous and familiar model, where everything was a card, and yet the cards had considerable scope for modification and special features. Even though, in some ways, this system appears to be a database, the cards didn&#8217;t need to have the same format, for instance. (Are we seeing this particular idea being recycled in a more enterprisey form in <a href="http://couchdb.apache.org/">CouchDB</a>?)</p>
<p>There are more examples of successful highly general design: the Unix file system, TCP/IP sockets and so on. They all have in common that they are easy to think about as a mental model, since a universal set of rules apply to all objects, they scale well in different directions when used for different purposes, and they give the user a satisfying sense of empowerment, <a href="http://www.monomorphic.org/wordpress/making-playtime-useful-with-color-filling-games/">blurring the line between work and play</a> to draw on the user&#8217;s natural creativity. Successful general systems are the ones that can be easily applied in quite varied situations without tearing in the seams.</p>
<p>While not widely used by industrial programmers today, Smalltalk was incredibly influential. In 1981 Objective-C was created by Brad Cox and Tom Love, directly inspired by what the Smalltalk designers had done. Objective-C was subsequently used as the language of choice for NeXTStep, and later for Apple&#8217;s MacOS X when Apple bought NeXT. Today it&#8217;s seeing a big surge in popularity thanks to devices like the iPhone, on which it is also used. In 1995 Java was introduced, owing a great deal of its design to Objective-C, but also introducing features such as a universal virtual machine and garbage collection, which Objective-C didn&#8217;t have at the time. In some sense, both Objective-C and Java are blends of the C-family languages and Smalltalk. Tongue in cheek, we might say that it seems evolution in industrial programming these days consists of finding blends that contain less of the C model and more of smalltalk or functional programming.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/doing-generality-right/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Standard new Mac setup routine</title>
		<link>http://www.monomorphic.org/wordpress/standard-new-mac-setup-routine/</link>
		<comments>http://www.monomorphic.org/wordpress/standard-new-mac-setup-routine/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 07:49:12 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[trivia]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=511</guid>
		<description><![CDATA[I just got a new laptop, courtesy of the lab. Naturally, it&#8217;s of the fruity kind. One of the first steps: install essential software. I thought I&#8217;d make a list of software I consider absolutely essential on any new computer, and it became longer than I thought. General use: NetNewsWire for news reading DropBox for [...]]]></description>
			<content:encoded><![CDATA[<p>I just got a new laptop, courtesy of the lab. Naturally, it&#8217;s of the fruity kind. One of the first steps: install essential software.</p>
<p>I thought I&#8217;d make a list of software I consider absolutely essential on any new computer, and it became longer than I thought.</p>
<p><strong>General use:</strong></p>
<p><a href="http://www.newsgator.com/INDIVIDUALS/NETNEWSWIRE/">NetNewsWire</a> for news reading</p>
<p><a href="http://www.google.co.jp/search?sourceid=chrome&amp;ie=UTF-8&amp;q=dropbox">DropBox</a> for file syncing</p>
<p><a href="http://www.omnigroup.com/applications/omnifocus">OmniFocus</a> as a task organizer (the GTD methodology actually works &#8212; it has liberated me from reciting a long list of things to do in my head all day long)</p>
<p>CircusPonies <a href="http://www.circusponies.com/">Notebook</a> for note taking</p>
<p><a href="http://islayer.com/apps/">iStat Pro</a> for system monitoring</p>
<p><strong>If I want to develop software:</strong></p>
<p><a href="http://www.eclipse.org/">Eclipse</a></p>
<p><a href="http://www.finkproject.org/">Fink</a> and <a href="http://www.macports.org/">MacPorts</a> so I can get various unix tools (I can&#8217;t settle for one or the other, since some tools are in one of them only, but normally Fink is nicer since the packages are precompiled)</p>
<p>Apple&#8217;s developer tools</p>
<p><strong>If I want to read and write papers:</strong></p>
<p><a href="http://www.uoregon.edu/~koch/texshop/">TeXShop</a></p>
<p><a href="http://mendeley.com/">Mendeley Desktop</a></p>
<p>So these are the &#8220;absolute essentials&#8221;. Of course web apps like gmail count too, but they require no installation. Anything I&#8217;ve missed?</p>
<p>One thing I do not install, but perhaps should, is Apple&#8217;s MobileMe. Considering how fruity my environment is, there ought to be some benefit. But between Dropbox, my own DAV server for calendars, and built-in syncing of apps like OmniFocus, I can make things stay in sync anyway, so MobileMe is probably not worth the cost&#8230; I think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/standard-new-mac-setup-routine/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
