<?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>scotfl.ca</title>
	<atom:link href="http://scotfl.ca/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://scotfl.ca/blog</link>
	<description>Depreciated HTML comes in handy when on a tight budget</description>
	<lastBuildDate>Sat, 06 Mar 2010 12:58:43 +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>Called It</title>
		<link>http://scotfl.ca/blog/2010/03/06/called-it/</link>
		<comments>http://scotfl.ca/blog/2010/03/06/called-it/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 12:58:43 +0000</pubDate>
		<dc:creator>scotfl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scotfl.ca/blog/?p=195</guid>
		<description><![CDATA[Three years before Google Chrome, four years before the Chrome OS announcement, one year before the Writely acquisition, one year before the launch of Google Labs Spreadsheet, and two years before the &#8216;netbook revolution&#8217;.

24 Aug 2005, 19:42:


  Google has a strong API on top of the browser, and is building a large enough collection [...]]]></description>
			<content:encoded><![CDATA[<p>Three years before <a href="http://techcrunch.com/2006/03/09/writely-confirms-google-acquisition/">Google Chrome</a>, four years before the <a href="http://techcrunch.com/2006/03/09/writely-confirms-google-acquisition/">Chrome OS</a> announcement, one year before the <a href="http://techcrunch.com/2006/03/09/writely-confirms-google-acquisition/">Writely acquisition</a>, one year before the launch of <a href="http://en.wikipedia.org/wiki/2Web_Technologies">Google Labs Spreadsheet</a>, and two years before the <a href="http://en.wikipedia.org/wiki/EeePC">&#8216;netbook revolution&#8217;</a>.</p>

<p><a href="http://web.archive.org/web/20051030162825/inessential.com/?comments=1&amp;postid=3159">24 Aug 2005, 19:42:</a></p>

<blockquote>
  <p>Google has a strong API on top of the browser, and is building a large enough collection of Apps running on that API that they can realistically do &#8216;typical office work&#8217;: Web Surfing, Word Processing, Spreadsheet, Email, IM, and Solitaire.</p>
  
  <p>They get the Web Surfing for free since you need a browser for the other apps, they have IM and Email, and PopCap and friends take care of the simple games. There are a couple Ajax-based spreadsheets out there, and it&#8217;s not too difficult to imagine a Word Processor based around Mozilla&#8217;s designMode or IE&#8217;s contentEditable. Especially since Google is already parsing Word and PDF files (and converting them to HTML) for their search engine.</p>
  
  <p>So far, no platform, but the idea I keep hearing is that with that suite available Google will move down the stack, releasing a &#8216;Google Browser&#8217; (say, a rebadged Firefox) and then a full-on &#8216;Google OS&#8217;. That is, something along the lines of a Knoppix CD-based system that boots and puts you straight into the browser. The logic behind the OS idea is usually something like &#8220;They run Linux on all their servers, and they have a lot of smart people, so building a custom distro would be easy.&#8221; It&#8217;s complete speculation on the part of everyone, but it has enough internal consistency that it makes a decent &#8216;what if&#8217; topic. (Personally I prefer &#8220;What if Apple had put more resources into A/UX rather than Copland?&#8221;, but I&#8217;m not quite mainstream&#8230;)</p>
  
  <p>Actually, now that I&#8217;ve written that all down in one place, it&#8217;s basically Larry Ellison&#8217;s Network Computer idea, but running on commodity hardware and without the Oracle badge.</p>
  
  <p>(And yes, I do recognize that while you&#8217;d be able to access you information from any machine with net access and have complete searching through everything, you would be trusting Google to store your data, only mine it when you ask them to, and you&#8217;d never be able to go offline.)</p>
</blockquote>

<p>If you follow the thread a little further, however, I go off into the weeds and say that this doesn&#8217;t make sense for home users. Which is completely ridiculous. Not having to install fifteen applications and transfer a bunch data every time a harddrive fails or a computer is replaced or added is a tremendous benefit to the home/SOHO market.</p>
]]></content:encoded>
			<wfw:commentRss>http://scotfl.ca/blog/2010/03/06/called-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jan 2010 Apple Event Prediction Score Card</title>
		<link>http://scotfl.ca/blog/2010/01/25/jan-2010-apple-event-prediction-score-card/</link>
		<comments>http://scotfl.ca/blog/2010/01/25/jan-2010-apple-event-prediction-score-card/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 02:17:36 +0000</pubDate>
		<dc:creator>scotfl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scotfl.ca/blog/?p=181</guid>
		<description><![CDATA[yes no yes no yes yes 
no yes no yes yes yes no yes yes no no yes 
no yes yes no no no no sadly-no no no yes yes no no 
no no no no no

Personally, I&#8217;m hoping Apple reaches back in time, naming-wise: Apple Macintosh Tablis 4220. With different CPU/storage combinations as the [...]]]></description>
			<content:encoded><![CDATA[<p>yes no yes no yes yes <br />
no yes no yes yes yes no yes yes no no yes <br />
no yes yes no no no no sadly-no no no yes yes no no <br />
no no no no no</p>

<p>Personally, I&#8217;m hoping Apple reaches back in time, naming-wise: <em>Apple Macintosh Tablis 4220</em>. With different CPU/storage combinations as the 4225, 4235, and 4250.</p>

<p><a href="http://unweary.com/2010/01/prediction-score-card.html">Key</a></p>
]]></content:encoded>
			<wfw:commentRss>http://scotfl.ca/blog/2010/01/25/jan-2010-apple-event-prediction-score-card/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP 5.3: Now With 40% Less Ugh!</title>
		<link>http://scotfl.ca/blog/2009/09/27/php-5-3-now-with-40-less-ugh/</link>
		<comments>http://scotfl.ca/blog/2009/09/27/php-5-3-now-with-40-less-ugh/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 21:57:45 +0000</pubDate>
		<dc:creator>scotfl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scotfl.ca/blog/?p=170</guid>
		<description><![CDATA[C&#8217;est functional programming:

array_walk($line, function (&#38;$i) { $i = trim($i); });


Or, at least, close enough.  Either way, a vast improvement over the old method.

Also nifty: the ternary shortcut: ($a ?: $b) is just like ($a ? $a : $b), but without the double evaluation.

It&#8217;s a nice little update.
]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est functional programming:</p>

<pre><code>array_walk($line, function (&amp;$i) { $i = trim($i); });
</code></pre>

<p>Or, at least, close enough.  Either way, a vast improvement over the <a href="http://scotfl.ca/blog/2006/10/09/ugh-php/">old method</a>.</p>

<p>Also nifty: the ternary shortcut: <code>($a ?: $b)</code> is just like <code>($a ? $a : $b)</code>, but without the double evaluation.</p>

<p><a href="http://php.net/releases/5_3_0.php">It&#8217;s</a> a nice little update.</p>
]]></content:encoded>
			<wfw:commentRss>http://scotfl.ca/blog/2009/09/27/php-5-3-now-with-40-less-ugh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Of Slugs and Permalinks and PHP Redux</title>
		<link>http://scotfl.ca/blog/2009/09/17/155/</link>
		<comments>http://scotfl.ca/blog/2009/09/17/155/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 20:50:54 +0000</pubDate>
		<dc:creator>scotfl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scotfl.ca/blog/?p=155</guid>
		<description><![CDATA[Around three years ago I posted a simple slugification function that used iconv() to coerce a string into URL-friendly ASCII.  It had a couple of drawbacks in that it dropped characters rather than transliterating them (oops) and it fell flat on its face if iconv() wasn&#8217;t available.

Thus, I present here an improved version.

/**
  [...]]]></description>
			<content:encoded><![CDATA[<p>Around three years ago I posted a simple slugification function that used <a href="http://php.net/manual/en/function.iconv.php"><code>iconv()</code></a> to coerce a string into URL-friendly ASCII.  It had a couple of drawbacks in that it dropped characters rather than transliterating them (oops) and it fell flat on its face if <code>iconv()</code> wasn&#8217;t available.</p>

<p>Thus, I present here an improved version.</p>

<pre><code>/**
    Clean up a string and make it suitable for inclusion in a url.


    @param $str The (UTF-8) string to be slugified

    @return a string containing a sanitized, url-safe version of $str
*/
function slugify ($str)
{
    if (function_exists('iconv')) {
        $old_level = error_reporting(0);
        $old_locale = set_locale(LC_ALL, '0');
        setlocale(LC_ALL, 'en_US.UTF-8');
        $slug = iconv('UTF-8', 'UTF-8//IGNORE', $str);
        $slug = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $slug);
        set_locale(LC_ALL, $old_locale);
        error_reporting($old_level);
    } else {
        $slug = preg_replace('/\s+/', ' ', $str);
        $slug = preg_replace("/[^a-z0-9 ]/i", "", $slug);
    }
    $slug = preg_replace('/\W+/', ' ', $slug);
    $slug = trim($slug);
    $slug = strtolower($slug);
    $slug = preg_replace('/\ +/', '-', $slug);

    return $slug;
}
</code></pre>

<p>The basic mechanism is to take a string, remove non-ASCII characters, strip punctuation, collapse whitespace and replace it with hyphens. Which will (ideally) turn &#8220;<code>I lìke: Icé Crëam!</code>&#8221; into &#8220;<code>i-like-ice-cream</code>&rdquo;.</p>

<p>The non-<code>iconv()</code> path doesn&#8217;t quite live up to that goal. It collapses white space and then strip anything that isn&#8217;t an alphanumeric ASCII character or ASCII space. This means it turns the previous example into &#8220;<code>I lke Ic Cram</code>&rdquo;. I&#8217;m not too worried about that as it&#8217;s intended solely as a fallback.  I added it because  had a development machine without <code>iconv()</code> and a server with it, and didn&#8217;t want to waste time installing it on the development machine at that moment.</p>

<p>The <code>iconv()</code> path is much nicer, and I&#8217;ll take it step by step. First error reporting is disabled because <code>iconv()</code> loves to spew errors even when everything is operating as expected. The old reporting level is recorded so that it can be restored once <code>iconv()</code> is done spewing errors.  Next the current locale is set to a UTF-8 value.  The function assumes its input is UTF-8 and this ensures <code>iconv()</code>&#8217;s transliteration works properly. As with the error level, the current locale is recorded for later restoration.</p>

<p>Now comes the heart of the function, in which the input string is first stripped of invalid UTF-8 byte sequences (just in case <code>$str</code> is composed of random gibberish), then bounced down from UTF-8 to ASCII. It&#8217;s the second <code>iconv()</code> call, with the &#8216;TRANSLIT&#8217; command, that makes up the real magic, transliterating accented character into non-accented versions. That is, it turns &#8220;ß&#8221; into &#8220;ss&#8221; and &#8220;é&#8221; into &#8220;e&#8221;. Unfortunately it doesn&#8217;t do much for non-European scripts, merely converting the characters into question marks. At this point the example has been transformed into &#8220;<code>I like: Ice Cream!</code>&rdquo;.</p>

<p>After the string has been converted, the error reporting level and locale are restored.</p>

<p>The remainder of the function is the same for both paths from this point. All runs of non-word characters (i.e., whitespace, control characters, punctuation) are replaced with spaces (<code>I like Ice Cream </code>). Then leading and trailing whitespace is stripped (<code>I like Ice Cream</code>), and the string is lowercased (<code>i like ice cream</code>). Finally, the remaining runs of whitespace are replaced by hyphens (<code>i-like-ice-cream</code> or <code>i-lke-ic-cram</code> for the non-<code>iconv()</code> path) and the string is returned to the caller.</p>

<p>My original function was adapted from an early version of Rick Olsen&#8217;s <a href="http://svn.techno-weenie.net/projects/plugins/permalink_fu/lib/permalink_fu.rb"><code>permalink_fu.rb</code></a> but there has been significant divergence since.</p>
]]></content:encoded>
			<wfw:commentRss>http://scotfl.ca/blog/2009/09/17/155/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming (And Markup) Languages I&#039;ve Learned</title>
		<link>http://scotfl.ca/blog/2008/10/15/programming-and-markup-languages-ive-learned/</link>
		<comments>http://scotfl.ca/blog/2008/10/15/programming-and-markup-languages-ive-learned/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 06:07:49 +0000</pubDate>
		<dc:creator>scotfl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scotfl.ca/blog/?p=143</guid>
		<description><![CDATA[Grabbing a meme from Glyph, here&#8217;s my list in rough chronological order:


LOGO
Apple Integer BASIC
HyperTalk
AppleScript
Pascal
Object Pascal
Microsoft QBASIC
HTML
C
C++
MPW Shell
Java
NewtonScript
68k assembler
AppleSoft BASIC
Perl
Bash
Haskell
Prolog
Ruby
PHP
CSS
Javascript
Scheme
Python


The boldface entries are languages I consider myself proficient in.  And Pascal, as always, remains very near and dear to my heart.

Languages I intend to learn in the near future:


Emacs Lisp
Erlang
Objective C


Edit: Forgot about NewtonScript!
]]></description>
			<content:encoded><![CDATA[<p>Grabbing a meme from <a href="http://glyph.twistedmatrix.com/2008/10/programming-and-markup-languages-i.html">Glyph</a>, here&#8217;s my list in rough chronological order:</p>

<ul>
<li>LOGO</li>
<li>Apple Integer BASIC</li>
<li>HyperTalk</li>
<li>AppleScript</li>
<li><strong>Pascal</strong></li>
<li>Object Pascal</li>
<li>Microsoft QBASIC</li>
<li><strong>HTML</strong></li>
<li><strong>C</strong></li>
<li>C++</li>
<li>MPW Shell</li>
<li>Java</li>
<li>NewtonScript</li>
<li>68k assembler</li>
<li>AppleSoft BASIC</li>
<li>Perl</li>
<li><strong>Bash</strong></li>
<li>Haskell</li>
<li>Prolog</li>
<li>Ruby</li>
<li><strong>PHP</strong></li>
<li><strong>CSS</strong></li>
<li><strong>Javascript</strong></li>
<li>Scheme</li>
<li><strong>Python</strong></li>
</ul>

<p>The boldface entries are languages I consider myself proficient in.  And Pascal, as always, remains very near and dear to my heart.</p>

<p>Languages I intend to learn in the near future:</p>

<ul>
<li>Emacs Lisp</li>
<li>Erlang</li>
<li>Objective C</li>
</ul>

<p><em>Edit: Forgot about NewtonScript!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://scotfl.ca/blog/2008/10/15/programming-and-markup-languages-ive-learned/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BBEdit Lite</title>
		<link>http://scotfl.ca/blog/2008/10/12/bbedit-lite/</link>
		<comments>http://scotfl.ca/blog/2008/10/12/bbedit-lite/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 18:57:44 +0000</pubDate>
		<dc:creator>scotfl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scotfl.ca/blog/?p=141</guid>
		<description><![CDATA[Since Bare Bones seems to have eliminated the legacy versions from their servers, it took me a few hours to scrape copies together from other sources. So I thought I&#8217;d share my findings with the world.  Just in case anyone else needs a good text editor for an old System 6 machine&#8230;


BBEdit Lite 3.5.1 [...]]]></description>
			<content:encoded><![CDATA[<p>Since <a href="http://www.barebones.com/">Bare Bones</a> seems to have eliminated the legacy versions from their servers, it took me a few hours to scrape copies together from other sources. So I thought I&#8217;d share my findings with the world.  Just in case anyone else needs a good text editor for an old System 6 machine&#8230;</p>

<ul>
<li><a href="http://scotfl.ca/images/bbedit_lite/bbedit-lite-351.hqx">BBEdit Lite 3.5.1</a> (484KB, The last version with System 6 support.)</li>
<li><a href="http://scotfl.ca/images/bbedit_lite/BBEdit_Lite_4.6.img.hqx">BBEdit Lite 4.6</a> (1.7MB, The last version with 68k support, System 7 or better)</li>
<li><a href="http://scotfl.ca/images/bbedit_lite/BBEdit_Lite_612.smi.hqx">BBEdit Lite 6.1.2</a> (6.1MB, The final version, Mac OS 7.5.5 – 10.3)</li>
</ul>

<p>For Mac OS X 10.3.5 and better, BBEdit&#8217;s current free text editor <a href="http://www.barebones.com/products/textwrangler/">TextWrangler</a> is the better choice.  At least until Bare Bones deems it discontinued and unsupported, at which point the lack of a redistribution clause in its license is going to hurt.</p>

<p>While I&#8217;m on the topic of ancient software, I might as well point out that <a href="nolobe.com">NoLobe</a> has full collection of Anarchie versions available (appropriately enough) on their <a href="ftp://ftp.nolobe.com/">File Transfer Protocol server</a>.  And, likewise, <a href="http://icab.de/dl.php">iCab</a> is available for every system all the way back to Mac OS 7.5.5.</p>

<p><em>Edit: fixed link to 6.1.2</em></p>
]]></content:encoded>
			<wfw:commentRss>http://scotfl.ca/blog/2008/10/12/bbedit-lite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stallman and Negroponte</title>
		<link>http://scotfl.ca/blog/2008/05/14/139/</link>
		<comments>http://scotfl.ca/blog/2008/05/14/139/#comments</comments>
		<pubDate>Wed, 14 May 2008 06:34:44 +0000</pubDate>
		<dc:creator>scotfl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scotfl.ca/blog/?p=139</guid>
		<description><![CDATA[
  In my values, freedom is more important than &#8220;serving users&#8221; in a mere practical sense.  Of course, in many cases we can achieve both, so we do not need to choose between them.  But once in a while that isn&#8217;t so. &#8212; Richard Stallman, 2000 (source)


That is my favourite Richard Stallman [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
  <p>In my values, freedom is more important than &#8220;serving users&#8221; in a mere practical sense.  Of course, in many cases we can achieve both, so we do not need to choose between them.  But once in a while that isn&#8217;t so. &#8212; <em>Richard Stallman, 2000 (<a href="http://web.archive.org/web/20001210172600/http://crystal.linuxgames.com/rms.html">source</a>)</em></p>
</blockquote>

<p>That is my favourite Richard Stallman quote because it, to my mind, perfectly encapsulates why he is largely irrelevant to day-to-day software development.  If I want to write a document I will choose and suggest Microsoft Word over a GPL-licensed Hello World program.  I suppose that makes me philosophically unclean to the Free Software community, but I can&#8217;t shake the idea that the only reason software exists is to serve users in a mere, practical sense.</p>

<p>I view Nicholas Negroponte in much the same way, though Negroponte&#8217;s philosophical contribution is as a futurist, rather than an ethicist.  I think <a href="http://en.wikipedia.org/wiki/Being_Digital">&#8220;Being Digital&#8221;</a> was what cemented Negroponte in that role for me.</p>

<p>Do not misunderstand me, both Negroponte and Stallman have immense value to the software industry.  Without people publishing proclamations and nailing manifestos to doors nothing truly innovative, and thus nothing better, ever happens.  The MIT Media Lab, emacs, the OLPC, and the GNU Project all represent huge contributions to the state of the art.  Both in their practical effects and in the fainter ripples of opinion and thought they cause.</p>

<p>Today, it was with little surprise that I read Ivan KrstiÄ‡&#8217;s <a href="http://radian.org/notebook/sic-transit-gloria-laptopi">insider view of the OLPC project</a>.  And it was with even less surprise that I read RMS&#8217;s <a href="http://www.fsf.org/blogs/rms/can-we-rescue-olpc-from-windows">response</a> to the news of the OLPC switching to Windows.</p>

<p>Respect these men, value their contributions, and give serious thought to their ideas.  But when it&#8217;s time to actually write code, concentrate on what you can do for users today.</p>
]]></content:encoded>
			<wfw:commentRss>http://scotfl.ca/blog/2008/05/14/139/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pseudo-functional C</title>
		<link>http://scotfl.ca/blog/2008/04/13/pseudo-functional-c/</link>
		<comments>http://scotfl.ca/blog/2008/04/13/pseudo-functional-c/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 20:25:54 +0000</pubDate>
		<dc:creator>scotfl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scotfl.ca/blog/?p=138</guid>
		<description><![CDATA[print( plus(&#38;ten, &#38;three) );
    print( times(plus(times(&#38;two, &#38;three), four_fn), &#38;ten) );

Result:

13
100


Reverse Polish Notation and a plethora of parentheses does not a functional language make.  But they do impart a superficial resemblance.  However, add a little context and suddenly it becomes a lot more ugly:

#include "functional.h"
#include "integers.h"


DType* plus (DType* a, ...)
{
  [...]]]></description>
			<content:encoded><![CDATA[<p>print( plus(&amp;ten, &amp;three) );
    print( times(plus(times(&amp;two, &amp;three), four_fn), &amp;ten) );</p>

<p>Result:</p>

<pre><code>13
100
</code></pre>

<p>Reverse Polish Notation and a plethora of parentheses does not a functional language make.  But they do impart a superficial resemblance.  However, add a little context and suddenly it becomes a lot more ugly:</p>

<pre><code>#include "functional.h"
#include "integers.h"


DType* plus (DType* a, ...)
{
    TWO_ARGS_ATOMIZED(a, b)
    return new_atom(a-&gt;atom + b-&gt;atom);
}


DType* times (DType* a, ...)
{
    TWO_ARGS_ATOMIZED(a, b)
    return new_atom(a-&gt;atom * b-&gt;atom);
}


DType* _four (DType *a, ...)
{
    return new_atom(4);
}


int main (int argc, char* argv[])
{
    DType* four_fn = new_nonatom(&amp;_four);
    print( plus(&amp;ten, &amp;three) );
    print( times(plus(times(&amp;two, &amp;three), four_fn), &amp;ten) );
}
</code></pre>

<p>This <em>really</em> needs lists and the usual suspects (<code>car</code>, <code>cdr</code>, <code>cons</code>, <code>map</code>, <code>filter</code>, and <code>reduce</code>).  As well as some sort of <code>call(List(fn, arg1, ...))</code>, which I am pretty sure is as close to functional notation as I can get.  As a bonus, lists will allow me to drop the varargs magic.  Maybe I&#8217;ll add that next weekend.  I had forgotten how much fun C can be, it was nice to go back to it for a while.</p>

<p>Git repo <a href="http://github.com/scotfl/fnc/tree/master">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://scotfl.ca/blog/2008/04/13/pseudo-functional-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
