<?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>FND's Blag &#187; FND</title>
	<atom:link href="http://fnd.lewcid.org/blog/archive/author/admin/feed" rel="self" type="application/rss+xml" />
	<link>http://fnd.lewcid.org/blog</link>
	<description>Just Another Personal Wobsite</description>
	<lastBuildDate>Thu, 11 Mar 2010 15:19:16 +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>Introducing chrjs, a JavaScript Library for TiddlyWeb Clients</title>
		<link>http://fnd.lewcid.org/blog/archive/151</link>
		<comments>http://fnd.lewcid.org/blog/archive/151#comments</comments>
		<pubDate>Thu, 11 Mar 2010 15:13:48 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[TiddlyWeb]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=151</guid>
		<description><![CDATA[In order to simplify the development of TiddlyWeb-based applications (like TiddlyRecon), I created a generic library for making HTTP requests to a TiddlyWeb server. This has recently undergone a complete rewrite to provide an API that is more in line with the TiddlyWeb spirit &#8212; tiddler-centric and compositional &#8212; and should now be ready for [...]]]></description>
			<content:encoded><![CDATA[<p>In order to simplify the development of <a href="http://tiddlyweb.com">TiddlyWeb</a>-based applications (like <a href="http://github.com/fnd/tiddlyrecon">TiddlyRecon</a>), I created a <a href="http://github.com/tiddlyweb/chrjs">generic library for making HTTP requests to a TiddlyWeb server</a>.<span id="more-151"></span><br />
This has recently undergone a complete rewrite to provide an API that is more in line with the TiddlyWeb spirit &mdash; tiddler-centric and compositional &mdash; and should now be ready for general use.</p>
<p>In the spirit of letting the code speak for itself (and to save me the trouble of <a href="http://anathem.wikia.com/wiki/Bulshytt">composing prose</a>), I created an interactive <a href="http://tiddlyweb.peermore.com/chrjs/demo.html">demo page</a> which should illustrate the basic aspects.</p>
<p>Any feedback would be much appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/151/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery API Documentation in TiddlyWiki</title>
		<link>http://fnd.lewcid.org/blog/archive/143</link>
		<comments>http://fnd.lewcid.org/blog/archive/143#comments</comments>
		<pubDate>Sun, 14 Feb 2010 09:05:43 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[TiddlyWiki]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=143</guid>
		<description><![CDATA[The jQuery folks are nice enough to provide a raw XML dump of their API documentation (http://api.jquery.com). I wrote a quick macro to parse that data and store it as tiddlers: http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/jQueryDocsImportMacro.js Demo: http://fnd.lewcid.org/tmp/jQueryAPI.html http://groups.google.com/group/tiddlywikidev/browse_thread/thread/4974fa9717f669ab]]></description>
			<content:encoded><![CDATA[<blockquote><p>
The jQuery folks are nice enough to provide a raw XML dump of their API documentation (<a href="http://api.jquery.com">http://api.jquery.com</a>).<br />
I wrote a quick macro to parse that data and store it as tiddlers:<br />
<span id="more-143"></span><a href="http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/jQueryDocsImportMacro.js">http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/jQueryDocsImportMacro.js</a><br />
Demo:<br />
<a href="http://fnd.lewcid.org/tmp/jQueryAPI.html">http://fnd.lewcid.org/tmp/jQueryAPI.html</a>
</p></blockquote>
<p><a href="http://groups.google.com/group/tiddlywikidev/browse_thread/thread/4974fa9717f669ab">http://groups.google.com/group/tiddlywikidev/browse_thread/thread/4974fa9717f669ab</a></p>
]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/143/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python virtual namespaces</title>
		<link>http://fnd.lewcid.org/blog/archive/129</link>
		<comments>http://fnd.lewcid.org/blog/archive/129#comments</comments>
		<pubDate>Wed, 11 Nov 2009 16:37:02 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[TiddlyWeb]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=129</guid>
		<description><![CDATA[Recently we&#8217;ve started adding TiddlyWeb plugins to a virtual namespace. Holger (of py.test fame) was interested in this technique, so I posted my experience to the py-dev mailing list &#8212; which I figured was worth copying here: The goal is to use a common package name (here: &#8220;foo&#8221;) for multiple independent modules or packages (&#8220;alpha&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Recently we&#8217;ve started adding <a href="http://tiddlyweb.com">TiddlyWeb</a> <a href="http://pypi.python.org/pypi?%3Aaction=search&#038;term=tiddlywebplugins">plugins</a> to a <a href="http://cdent.tumblr.com/post/216241761/python-namespace-packages-for-tiddlyweb">virtual namespace</a>.</p>
<p><a href="http://tetamap.wordpress.com">Holger</a> (of <a href="http://codespeak.net/py/dist/">py.test</a> fame) was interested in this technique, so I <a href="http://codespeak.net/pipermail/py-dev/2009q4/001305.html">posted</a> my experience to the py-dev mailing list &mdash; which I figured was worth copying here:<br />
<span id="more-129"></span></p>
<blockquote><p>
The goal is to use a common package name (here: &#8220;foo&#8221;) for multiple independent modules or packages (&#8220;alpha&#8221; and &#8220;bravo&#8221; &#8211; to be accessed as <code>foo.alpha</code> and <code>foo.bravo</code>, respectively).</p>
<p>It&#8217;s actually rather simple:<br />
The individual components must be contained in a directory named after the virtual namespace, with an <code>__init__.py</code> containing nothing but the following statement:<br />
<code>__import__("pkg_resources").declare_namespace(__name__)</code><br />
To make Python aware of the local package (e.g. for running tests out of the repository), something like the following is required in a root-level <code>__init__.py</code>:<br />
<code>path = os.path.abspath(VIRTUAL_NAMESPACE)<br />
sys.modules[VIRTUAL_NAMESPACE].__dict__["__path__"].insert(0, path)</code><br />
This is illustrated here:<br />
     <a href="http://gist.github.com/231862">http://gist.github.com/231862</a></p>
<p>Disclaimer: I&#8217;m far from being an expert, just sharing what we&#8217;ve learned so far (it&#8217;s an ongoing effort).
</p></blockquote>
<p>While there are <a href="http://www.python.org/dev/peps/pep-0382/">other options</a>, this currently appears to be the most compatible approach (as confirmed by <a href="http://tarekziade.wordpress.com">Tarek</a>).</p>
<p><strong>Update:</strong> Some further insights made me <a href="http://github.com/FND/tiddlyweb-plugins/commit/f1f7069ee1731bbf6f6c240ee2e2a6b2d81f4dca">tweak the approach to module-path mangling</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/129/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Idioms For Element Generation</title>
		<link>http://fnd.lewcid.org/blog/archive/109</link>
		<comments>http://fnd.lewcid.org/blog/archive/109#comments</comments>
		<pubDate>Sat, 15 Aug 2009 12:31:41 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=109</guid>
		<description><![CDATA[While working on some jQuery-based applications for TiddlyWeb (post upcoming), I noticed there was no obvious concise way to chain the creation of multiple nested elements. Over the course of several discussions with Mike, we&#8217;ve come up with some simple idioms which we hope will make our code a little prettier: var entries = ["foo", [...]]]></description>
			<content:encoded><![CDATA[<p>While working on some <a href="http://jquery.com">jQuery</a>-based applications for <a href="http://tiddlyweb.com">TiddlyWeb</a> (post upcoming), I noticed there was no obvious concise way to chain the creation of multiple nested elements.</p>
<p>Over the course of several discussions with <a href="http://softwareas.com">Mike</a>, we&#8217;ve come up with some simple idioms which we hope will make our code a little prettier:<br />
<span id="more-109"></span></p>
<pre>
var entries = ["foo", "bar", "baz"];

$("&lt;ul /&gt;").
	append($.map(entries, function(item, i) {
		return $("&lt;li /&gt;").text(item)[0];
	})).
	appendTo(container);
</pre>
<pre style="margin-top: 10px">
$.fn.create = function(html) {
	return this.append(html).children(":last");
};

$("&lt;div /&gt;").
	create("&lt;h2 /&gt;").addClass(className).text(heading).end().
	create("&lt;p /&gt;").text(body).end().
	appendTo(container);
</pre>
<p>I&#8217;ve created a simple <a href="http://fnd.lewcid.org/misc/jQuery_idioms.html">demo page</a> (<a href="http://github.com/FND/jquery">source</a>) to better illustrate and explain this new approach, contrasting it with my previous code.</p>
<p>While I&#8217;m sure this sort of thing has been done before, it doesn&#8217;t seem to be common knowledge &mdash; at least nobody in the <a href="irc://irc.freenode.net/jQuery">jQuery IRC channel</a> had any ideas when I first asked.</p>
<p>Any comments (including <a href="http://www.urbandictionary.com/define.php?term=ydiw" title="you're doing it completely wrong">YDICW</a>, if necessary) would be appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/109/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Where Python Sucks</title>
		<link>http://fnd.lewcid.org/blog/archive/92</link>
		<comments>http://fnd.lewcid.org/blog/archive/92#comments</comments>
		<pubDate>Sun, 05 Jul 2009 09:32:42 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[EuroPython]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=92</guid>
		<description><![CDATA[More raw notes from EuroPython 2009 &#8211; this time from the entertaining and informative Python Sucks[1] session: programming languages do matter; choice can hugely affect the end result whitespace enforcement the &#8220;best worst feature&#8221; (other languages&#8217; worst features are much more severe) Unicode handling is a pain lambdas should just be called functions (increases acceptance) [...]]]></description>
			<content:encoded><![CDATA[<p>More <a href="http://fnd.lewcid.org/blog/archive/80">raw notes</a> from <a href="http://wiki.europython.eu/After">EuroPython 2009</a> &#8211; this time from the entertaining and informative <a href="http://www.europython.eu/talks/talk_abstracts/index.html#talk21">Python Sucks</a><sup>[1]</sup> session:<br />
<span id="more-92"></span></p>
<ul>
<li>programming languages <em>do</em> matter; choice can hugely affect the end result</li>
<li>whitespace enforcement the &#8220;best worst feature&#8221; (other languages&#8217; worst features are much more severe)</li>
<li>Unicode handling is a pain</li>
<li>lambdas
<ul>
<li>should just be called functions (increases acceptance)</li>
<li>cannot contain statements</li>
<li>binding issues in loops</li>
</ul>
</li>
<li>threading is haphazard (GIL is evil) &mdash; however: CPython <em>implementation</em> issue, addressed in v2.6 &#8211; &#8220;it&#8217;s <em>different</em>, not necessarily insufficient (e.g. using underlying OS)&#8221;</li>
<li>confusing packaging situation (setuptools, Easy Install, distutils, eggs, buildout, PyPI, virtualenv) &#8211; &#8220;solved, but people disagree&#8221; &#8211; &#8220;Easy Install sucks, too magic&#8221; &#8211; &#8220;not a Python-specific, but OS-level task&#8221; &#8211; problem is hard to solve, as there&#8217;s a variety of different usage scenarios</li>
<li>infinity, NaN support (<a href="http://en.wikipedia.org/wiki/IEEE_floating-point">IEEE 754</a>)</li>
<li>floating point printing (0.1 becomes 0.10000000000000001) &mdash; fixed in v3.1</li>
<li>division &mdash; fixed in v3.0</li>
<li>decorators (&#8220;<code>@</code> is scary, unfamiliar syntax&#8221;)</li>
<li>argument list splicing (e.g. <code>zip(*l)</code>) &#8211; &#8220;unfamiliar syntax&#8221;</li>
<li>some modules only exist on certain platforms</li>
<li>positive aspects
<ul>
<li>everything is an object</li>
<li>object instantiation (no <code>new</code> keyword &#8211; i.e. just like calling a function)</li>
<li>generator expressions (from Haskell)</li>
<li>chained comparisons (<code>0 < = x < n</code>) - though largely unknown, and allows </code><code>0 < x > a</code> or <code>0 < x in L</code></code></li>
<li>Iverson&#8217;s convention (<code>x < y</code> evaluates to 0/False or 1/True) - "open to abuse"</code></li>
<li>access control (public, private etc.) &#8211; not enforced (&#8220;advisory [bicycle] locks&#8221;) &#8211; likely more a social than a technical problem</li>
<li>fractions (from v2.6)</li>
<li>power (<code>x**2</code>)</li>
<li>explicit > implicit (unlike <code>this</code> in JavaScript, for example)</li>
</ul>
</li>
<li>&#8220;Python sucks because sometimes it has to run on Windows&#8221;</li>
</ul>
<p><a href="http://wiki.europython.eu/TalkMaterials">slides available</a></p>
<p>Obviously some points were quite controversial (whitespace FTW!) &#8211; which is what made the session so interesting.</p>
<ol class="footnotes"><li id="footnote_0_92" class="footnote">retitled <i>What Sucks About Python</i> in the official program</li></ol>]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/92/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rapid Testing with py.test</title>
		<link>http://fnd.lewcid.org/blog/archive/80</link>
		<comments>http://fnd.lewcid.org/blog/archive/80#comments</comments>
		<pubDate>Mon, 29 Jun 2009 20:56:36 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[EuroPython]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=80</guid>
		<description><![CDATA[Somewhat unexpectedly, I attended a tutorial on py.test at EuroPython today &#8212; which turned out to be very useful. Below are my raw (i.e. imperfect and likely inadequate) notes from that session. minimal, no-API approach; no need for boilerplates however, a lot of optional framework-y functionality is provided convention over configuration (automatic discovery of test_*.py, [...]]]></description>
			<content:encoded><![CDATA[<p>Somewhat <a href="http://twitter.com/FND/status/2385511283">unexpectedly</a>, I attended a tutorial on <a href="http://pytest.org">py.test</a> at EuroPython today &mdash; which turned out to be <a href="http://twitter.com/FND/status/2387884483">very useful</a>.<br />
<span id="more-80"></span><br />
Below are my raw (i.e. imperfect and likely inadequate) notes from that session.</p>
<ul>
<li>
		minimal, no-API approach; no need for boilerplates<br />
		however, a lot of optional framework-y functionality is provided
	</li>
<li>convention over configuration (automatic discovery of <code>test_*.py</code>, <code>def test_*</code>, <code>class Test*</code>)</li>
<li><i>py.test</i> overrides <code>AssertionError</code> built-in, then re-runs statement to provide details &mdash; avoid assertions with side-effects!</li>
<li>skip tests only for platform and dependency issues; use <code>@py.test.mark.xfail</code> for &#8220;expected to fail&#8221;</li>
<li><i>funcargs</i> introduced in v1.0 to replace traditional setup methods for fixtures (user &#038; provider, loose coupling); allows for more flexible grouping</li>
<li><code>print</code> captured by default, only shown on failure</li>
<li>internally makes use of its own hook architecture (i.e. many features implemented as plugins)</li>
<li><code>yield</code>ed tests are deprecated (due to internal ambiguity); recommended to use <code>pytest_generate_tests</code> instead</li>
<li>interesting <a href="http://codespeak.net/svn/py/trunk/py/test/plugin/">plugins</a>: coverage and PyLint integration</li>
<li>can be used to run non-Python tests (e.g. <a href="http://bitbucket.org/pedronis/js-infrastructure/">for JavaScript</a>)</li>
<li>supports distributed testing (load balancing with multiple CPUs or remote machines, testing on multiple platforms)</li>
<li>might be renamed (&#8220;I wish I&#8217;d named it differently&#8221;)</li>
</ul>
<p><a href="http://tetamap.wordpress.com">Holger Krekel</a> has also published his <a href="http://codespeak.net/~hpk/rapid-testing.pdf">slides</a> (PDF), which are well worth a look.</p>
]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/80/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git Basics: Getting Started</title>
		<link>http://fnd.lewcid.org/blog/archive/58</link>
		<comments>http://fnd.lewcid.org/blog/archive/58#comments</comments>
		<pubDate>Sat, 28 Mar 2009 10:43:00 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[revision control]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=58</guid>
		<description><![CDATA[Since my last post on the subject, I&#8217;ve become much more familiar and comfortable with Git. While I still don&#8217;t consider myself an expert &#8211; especially when it comes to truly distributed collaboration &#8211; I did manage to pass on some basic knowledge to those around me just getting started. In the process I came [...]]]></description>
			<content:encoded><![CDATA[<p>Since my <a href="http://fnd.lewcid.org/blog/archive/21">last post on the subject</a>, I&#8217;ve become much more familiar and comfortable with Git.</p>
<p>While I still don&#8217;t consider myself an expert &#8211; especially when it comes to truly <a href="http://tech.groups.yahoo.com/group/todotxt/message/1891">distributed</a> <a href="http://blog.insoshi.com/2008/10/14/setting-up-your-git-repositories-for-open-source-projects-at-github/">collaboration</a> &#8211; I did manage to pass on some basic knowledge to those around me <a href="http://twitter.com/FND/status/1383015297">just getting started</a>.<br />
<span id="more-58"></span><br />
In the process I came up with a very concise introduction &#8211; and even though it&#8217;s almost trivial, the following illustration of the basic workflow might be worth sharing (ASCII art ahead):</p>
<pre style="line-height: 1.2em">
                                                       repository (remote)
                                                            ^      |
                                                            |      |
                                                           push   pull
                                                            |      |
                                                            |      V
working copy --add--> index (staging area) --commit--> repository (local)
               \                                  /
                \------------commit -a-----------/
</pre>
<p><strong>Useful Commands:</strong></p>
<ul>
<li><code>status</code></li>
<li><code>log [-p] [--stat]</code></li>
<li><code>diff [-w] [--color-words]</code></li>
<li><code>checkout &lt;treeish&gt; &lt;file&gt;</code> (reverting)</li>
<li><code>init</code></li>
<li><code>clone</code></li>
</ul>
<p>My configuration is available <a href="http://github.com/FND/homedir/blob/master/.gitconfig">on GitHub</a> &#8211; this might serve as a reference for further exploration (e.g. aliases).</p>
]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/58/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mozilla Bespin Meetup</title>
		<link>http://fnd.lewcid.org/blog/archive/53</link>
		<comments>http://fnd.lewcid.org/blog/archive/53#comments</comments>
		<pubDate>Wed, 11 Mar 2009 08:53:42 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[London]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=53</guid>
		<description><![CDATA[Last night, some of my colleagues and I attended the Bespin meetup. It was great hearing Ben, Dion and Joe &#8211; quite obviously very smart hackers &#8211; speak, and later getting a chance to join various discussions with them. As before, I&#8217;ll settle for a few quick notes: name When asked about about the name [...]]]></description>
			<content:encoded><![CDATA[<p>Last night, <a href="http://softwareas.com">some</a> of <a href="http://hawksworx.com">my</a> <a href="http://jaybyjayfresh.com">colleagues</a> and I attended the <a href="http://en.wikipedia.org/wiki/Mozilla_Bespin">Bespin</a> <a href="http://upcoming.yahoo.com/event/2114472/">meetup</a>.<br />
It was great hearing <a href="http://www.galbraiths.org">Ben</a>, <a href="http://almaer.com">Dion</a> and <a href="http://directwebremoting.org/blog/joe">Joe</a> &#8211; quite obviously very smart hackers &#8211; speak, and later getting a chance to join various discussions with them.<br />
<span id="more-53"></span><br />
As <a href="http://fnd.lewcid.org/blog/archive/40">before</a>, I&#8217;ll settle for a few quick notes:</p>
<ul>
<li>
		name<br />
		When asked about about the name (which had <a href="http://twitter.com/mahemoff/status/1306439271">confused</a> us),  humorously dodged the question multiple times. Not entirely sure why&#8230;
	</li>
<li>
		reinventing the wheel<br />
		Bespin makes heavy use of <a href="http://en.wikipedia.org/wiki/Canvas_(HTML_element)">canvas</a>, essentially reinventing the rendering of text and layout (using their <a href="http://benzilla.galbraiths.org/2009/02/18/bespin-and-canvas-part-2/">Thunderhead</a> toolkit).<br />
		While contentious with regards to accessibility and web standards, this is necessary due to performance reasons.<br />
		(Note: Not JavaScript is the bottleneck here, but the DOM is.)
	</li>
<li>
		offline capability<br />
		Currently Bespin should be considered a &#8220;hosted application&#8221;, requiring a server-side component.<br />
		Personally, I don&#8217;t like the idea of relying on the &#8220;<a href="http://en.wikipedia.org/wiki/Cloud_computing">cloud</a>&#8221; for my <a href="http://twitter.com/FND/status/1240554276">primary</a> <a href="http://twitter.com/FND/status/1304799547">editor</a>.<br />
		While the Bespin team is planning to use <a href="http://titaniumapp.com">Titanium</a> eventually, <a href="http://twitter.com/joewalker">Joe</a> said it shouldn&#8217;t be too hard to integrate <a href="http://tiddlywiki.com">TiddlyWiki</a>&#8216;s <a href="http://trac.tiddlywiki.org/browser/Trunk/core/jquery/plugins/jquery.file.load.js">file</a>-<a href="http://trac.tiddlywiki.org/browser/Trunk/core/jquery/plugins/jquery.file.save.js">saving</a> code (similar to the <a href="http://jerome.myxwiki.org/xwiki/bin/view/Main/ASaturdayHackICouldNotResistTo">XWiki integration</a>), essentially creating a stand-alone HTML application.
	</li>
<li>
		tools integration<br />
		Since Bespin runs in the browser, it might be hard to integrate external tools (e.g. <a href="http://www.logilab.org/project/name/pylint">PyLint</a>).<br />
		I&#8217;m concerned that this might mean the respective server must support such applications, stripping away another bit of developer independence&#8230;
	</li>
<li>
		active community<br />
		There&#8217;s already an <a href="http://labs.mozilla.com/2009/02/thanks-for-the-bespin-contributions-eclipse-xwiki-and-more/">active</a> <a href="http://groups.google.com/group/bespin">community</a> of hackers making use of and contributing to the project.<br />
		(We&#8217;re also considering <a href="http://trac.tiddlywiki.org/ticket/961">using Bespin as a front-end</a> for <a href="http://tiddlywiki.org/wiki/TiddlyWeb">TiddlyWeb</a>.)
	</li>
<li>
		Ubiquity as Firefox extension API<br />
		On a slightly unrelated note, it has been suggested that <a href="http://en.wikipedia.org/wiki/Ubiquity_(Firefox)">Ubiquity</a> might be integrated into Firefox, which in turn could lead to a pure-JavaScript API for extensions (currently writing Firefox extensions involves a lot of overhead, e.g. creating XML documents). That would of course be <a href="http://softwareas.com/for-browser-extensions-grease-is-the-word">most welcome</a>!
	</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/53/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>London Geek Nights: Game Programming</title>
		<link>http://fnd.lewcid.org/blog/archive/40</link>
		<comments>http://fnd.lewcid.org/blog/archive/40#comments</comments>
		<pubDate>Sat, 22 Nov 2008 09:55:15 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[gaming]]></category>
		<category><![CDATA[London]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=40</guid>
		<description><![CDATA[I really enjoyed yesterday&#8217;s Geek Night on game development. Instead of writing an elaborate draft that ends up never getting published, I&#8217;ve decided to simply post a few quick notes (personal and non-authoritative): XNA (Microsoft&#8217;s game development toolkit for Windows and Xbox 360) live demo was fun, and it seemed fairly easy to get started [...]]]></description>
			<content:encoded><![CDATA[<p>I really enjoyed yesterday&#8217;s <a href="http://upcoming.yahoo.com/event/1076776">Geek Night</a> on <a href="http://londongeeknights.wetpaint.com/page/Developing+Games">game development</a>.<br />
Instead of writing an elaborate draft that ends up never getting published, I&#8217;ve decided to simply post a few quick notes (personal and non-authoritative):<br />
<span id="more-40"></span></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Microsoft_XNA">XNA</a> (Microsoft&#8217;s game development toolkit for Windows and Xbox 360) live demo was fun, and it seemed fairly easy to get started</li>
<li>Python is suitable for game development (e.g. OpenGL with <a href="http://www.pyglet.org">pyglet</a>), though with obvious performance limitations</li>
<li><a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile</a> methodologies would be even more suitable in game development than in traditional IT, but apathy and lacking/flawed feedback loops (publishers and retailers are harmful intermediaries) seem to prevent widespread adoption<sup>[1]</sup></li>
<li>Open Source is mostly shunned in game development, often due to apathy and ignorance (there are a few positive examples though, like <a href="http://en.wikipedia.org/wiki/Lua_(programming_language)#Games">Lua</a>); extreme short-term thinking prevents the realization of FOSS&#8217;s long-term benefits; standardization is actively subverted by platform vendors<sup>[2]</sup></li>
<li>my overall impression is that the gaming industry is pretty messed up, largely because it&#8217;s dominated by vendors rather than consumer interests</li>
</ul>
<ol class="footnotes"><li id="footnote_0_40" class="footnote">apparently, the gaming industry doesn&#8217;t perceive itself as part of the IT industry &#8211; while it sits somewhere between traditional IT and the movie/entertainment business, it tends to prefer the latter (which is also reflected in the semantics, e.g. &#8220;game studio&#8221;) </li><li id="footnote_1_40" class="footnote">instead of licensing game engines (e.g. Epic Games&#8217; <a href="http://en.wikipedia.org/wiki/Unreal_Engine">Unreal Engine</a>), why are there no collaborative development efforts &#8211; similar to the way <a href="http://en.wikipedia.org/wiki/Apache_HTTP_Server">Apache</a> now provides a superior alternative to <a href="http://en.wikipedia.org/wiki/Internet_Information_Services">IIS</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/40/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript Framework Detector</title>
		<link>http://fnd.lewcid.org/blog/archive/26</link>
		<comments>http://fnd.lewcid.org/blog/archive/26#comments</comments>
		<pubDate>Fri, 21 Nov 2008 12:49:05 +0000</pubDate>
		<dc:creator>FND</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bookmarklets]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://fnd.lewcid.org/blog/?p=26</guid>
		<description><![CDATA[Heavily inspired by Oskar Krawczyk&#8217;s WTFramework and Paul Downey&#8217;s subsequent enhancements, I&#8217;ve re-engineered this bookmarklet to be more extensible and better support multiple frameworks. In order to avoid confusion with Oskar&#8217;s original[1], I&#8217;ve uninspiringly named it JavaScript Framework Detector[2] (drag this link to your browser&#8217;s bookmarks toolbar or right-click and save it as a bookmark) [...]]]></description>
			<content:encoded><![CDATA[<p>Heavily inspired by Oskar Krawczyk&#8217;s <a href="http://blog.olicio.us/2008/11/08/wtframework-bookmarklet/">WTFramework</a> and Paul Downey&#8217;s <a href="http://blog.whatfettle.com/2008/11/19/wtframework/">subsequent enhancements</a>, I&#8217;ve re-engineered this bookmarklet to be more extensible and better support multiple frameworks.<br />
<span id="more-26"></span><br />
In order to avoid confusion with Oskar&#8217;s original<sup>[1]</sup>, I&#8217;ve uninspiringly named it</p>
<div style="font-size: 1.1em; text-align: center;">
<strong><a href='javascript:(function(){var%20c=document.getElementById("__wtframework");if(c){document.body.removeChild(c);return;}c=document.createElement("div");c.id="__wtframework";c.style.position="fixed";c.style.top="15px";c.style.right="20px";c.style.zIndex="9000";c.style.styleFloat="right";/*%20IE%20*/c.style.cssFloat="right";c.style.border="2px%20solid%20#FFF";c.style.padding="7px%2010px";c.style.MozBorderRadius="5px";c.style.WebkitBorderRadius="5px";c.style.fontFamily="\"Lucida%20Grande\",%20Helvetica,%20Tahoma";c.style.fontSize="0.9em";c.style.color="#FFF";c.style.backgroundColor="#000";c.style.opacity="0.7";c.style.filter="alpha(opacity%20=%2070)";/*%20IE%20*/c.style.MozBoxShadow="0px%200px%2020px%20#000";c.style.WebkitBoxShadow="0px%200px%2020px%20#000";c.style.cursor="pointer";c.href="#";document.body.appendChild(c);c.onclick=function(){this.parentNode.removeChild(this);};var%20frameworks=[];var%20check=function(indicator,name,version){try{if(window[indicator]){frameworks.push({name:name,version:eval(version)});}}catch(ex){}};check("MooTools","MooTools","MooTools.version");check("YAHOO","YUI","YAHOO.util.Dom.VERSION");check("Prototype","Prototype","Prototype.Version");check("Scriptaculous","Script.aculo.us","Scriptaculous.Version");check("jQuery","jQuery","jQuery.fn.jquery");check("dojo","Dojo%20Toolkit","dojo.version");check("MochiKit","MochiKit","MochiKit.MochiKit.VERSION");check("base2","Base2","base2.version");try{if(version&#038;&#038;version.title=="TiddlyWiki"){if(window.formatVersion){var%20v=formatVersion();}else{v=version.major+"."+version.minor+"."+version.revision+(version.beta?"%20(beta%20"+version.beta+")":"");}frameworks.push({name:"TiddlyWiki",version:v});}}catch(ex){}if(frameworks.length){for(var%20i=0;i<frameworks.length;i++){var%20el=document.createElement("div");el.appendChild(document.createTextNode(frameworks[i].name+"%20"+frameworks[i].version));c.appendChild(el);}}else{c.appendChild(document.createTextNode("no%20frameworks%20detected"));}})();'>JavaScript Framework Detector</a></strong><sup>[2]</sup><br />
<small>(drag this link to your browser&#8217;s bookmarks toolbar or right-click and save it as a bookmark)</small>
</div>
<p>The uncompressed source is available <a href="http://github.com/FND/bookmarklets/">on GitHub</a> (also for my previous <a href="http://fnd.lewcid.org/blog/archive/16">TinyURL bookmarklet</a>).</p>
<ol class="footnotes"><li id="footnote_0_26" class="footnote">I&#8217;d be happy for him to merge these changes back into WTFramework, thus rendering this fork obsolete</li><li id="footnote_1_26" class="footnote">created using <a href="http://subsimple.com/bookmarklets/jsbuilder.htm">Bookmarklet Builder</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://fnd.lewcid.org/blog/archive/26/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
