<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2" -->
<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/"
	>

<channel>
	<title>Hawksworx</title>
	<link>http://www.hawksworx.com/journal</link>
	<description>Ramblings</description>
	<pubDate>Thu, 23 Apr 2009 14:02:22 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2</generator>
	<language>en</language>
			<item>
		<title>Moving on from Osmosoft</title>
		<link>http://www.hawksworx.com/journal/2009/04/23/moving-on-from-osmosoft/</link>
		<comments>http://www.hawksworx.com/journal/2009/04/23/moving-on-from-osmosoft/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 13:56:06 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[theteam]]></category>

		<category><![CDATA[osmosoft]]></category>

		<category><![CDATA[bt]]></category>

		<category><![CDATA[announcements]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2009/04/23/moving-on-from-osmosoft/</guid>
		<description><![CDATA[

Last week was both sad and exciting for me. Exciting because I was gearing up to start my new job at theTeam, a London-based communications agency with a slightly silly name. Sad because it was my last week working at Osmosoft (a company that created plenty of silly named things itself).

I had been at Osmosoft [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.flickr.com/photos/philliecasablanca/2049169747/' title='Osmosoft'><img src='http://www.hawksworx.com/journal/wp-content/uploads/2009/04/osmosoft-on-flickr-photo-sharing.png' alt='Osmosoft' /></a></p>

<p>Last week was both sad and exciting for me. Exciting because I was gearing up to start my new job at <a href="http://theteam.co.uk">theTeam</a>, a London-based communications agency with a slightly silly name. Sad because it was my last week working at <a href="http://osmosoft.com">Osmosoft</a> (a company that created plenty of silly named things itself).</p>

<p>I had been at Osmosoft since it grew from a <a href="http://jermolene.com/2007/05/29/i-for-one-welcome-my-new-bt-overlords/">one man band</a> into an open source innovations team at <a href="http://bt.com">BT</a>, and had a terrific experience along the way. I think that it is safe to say that I have learned more about The Web during my time at Osmosoft than in any previous job and that is in no small part due to the quality and experience of the people around me.</p>

<p>During my time I honed my appreciation of what makes a good Web citizen. From technology choices to quality of delivery. From interaction design to exhibiting good taste. From the importance of the &#8216;View Source&#8217; experience to openness and data availability. I&#8217;m going to miss the raging debates and big opinions which regularly surfaced at Osmosoft.  The people there are intelligent and articulate. </p>

<p>Osmonauts, I salute you!</p>

<p>But now I&#8217;m off to pastures new. <a href="http://theteam.co.uk">theTeam</a> has a young, but growing digital arm with an impressive client list.  I&#8217;ll be involved in what we deliver into the browser and how. A chance to influence the nature of the browser experience by pushing for <a href="http://www.hawksworx.com/journal/2009/01/05/unobtrusify-your-javascript/">unobtrusive</a> technologies and best practices on a range of sites which is due to increase in both reach and diversity is a big draw for me. I&#8217;m looking forward to the challenge.</p>

<p>My transition has been made easier by a number of things. Firstly, Osmosoft and theTeam have already established a bit of a relationship. Co-hosting a recent <a href="http://upcoming.yahoo.com/event/2149675/">Open Source Show and Tell</a> revealed some common interests and enthusiasms. I&#8217;m hoping for more crossover at events like that.  Secondly, a big part of my time at Osmosoft was spent developing for an open source project called <a href="http://tiddlywiki.com">TiddlyWiki</a>. While I&#8217;ll have to scale back my time on that, there is no reason for me to turn my back on it altogether. I&#8217;m keen to keep on contributing and building applications with TiddlyWiki.  Besides, it&#8217;s nice to bump into familiar friends in the <a href="irc://irc.freenode.net/#tiddlywiki">TiddlyWiki irc</a> room.</p>

<p>Osmosoft really sparked a lot of enthusiasm for me when it comes to both open source software and compelling Web content. In addition to contributing to TiddlyWiki, I&#8217;m hoping to start a small open source project of my own to feed my desire to make great stuff for the Web that anyone can use.</p>

<p>Thanks for everything Osmosoft. It&#8217;s been a blast!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2009/04/23/moving-on-from-osmosoft/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Leveraging jQuery and jQuery plugins in TiddlyWiki</title>
		<link>http://www.hawksworx.com/journal/2009/03/13/leveraging-jquery-and-jquery-plugins-in-tiddlywiki/</link>
		<comments>http://www.hawksworx.com/journal/2009/03/13/leveraging-jquery-and-jquery-plugins-in-tiddlywiki/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 14:09:07 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[jquery]]></category>

		<category><![CDATA[tips]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[tiddlywiki]]></category>

		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2009/03/13/leveraging-jquery-and-jquery-plugins-in-tiddlywiki/</guid>
		<description><![CDATA[

The recent release of TiddlyWiki v2.5 included something rather exciting for me: JQuery, the popular Javascript library is now part of the TiddlyWiki core.

This is exciting for a number of reasons. 


The TiddlyWiki core functions can now use jQuery to perform all manner of DOM inspection and DOM manipulation.  We can refactor a ton [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/jquery_-the-write-less-do-more-javascript-library.png' alt='jQuery' /></p>

<p>The recent release of <a href="http://tiddlywiki.com/">TiddlyWiki v2.5</a> included something rather exciting for me: <a href="http://jquery.com">JQuery</a>, the popular Javascript library is now part of the TiddlyWiki core.</p>

<p>This is exciting for a number of reasons. </p>

<ol>
<li>The TiddlyWiki core functions can now use jQuery to perform all manner of DOM inspection and DOM manipulation.  We can refactor a ton of code to benefit from jQuery&#8217;s blistering Sizzle engine and pass the burden of maintaining lots of utility functions over to those clever jQuery bods. All of which will simplify the TiddlyWiki codebase and ultimately make it easier to read and easier to maintain.</li>

<li>TiddlyWiki plugin developers will now be able to make use of jQuery in their plugins. That&#8217;s great news for both hardcore plugin developers and people dabbling for the first time.  jQuery is elegantly expressive, powerful, and superbly documented.  All of this lowers the barriers to entry for a would be developer and smooths the way for exisiting developers.</li>

<li>There is a huge wealth of jQuery plugins which can now be utilised by TiddlyWiki.  The quality of many of these plugins is tremendously high. Bring &#8216;em on!</li></ol>

<p>But how does a TiddlyWiki plugin developer get started? How can we bring a jQuery plugin into TiddlyWiki and make it available via a Macro?  Let&#8217;s take a look at an example.</p>

<p><a href="http://fnd.lewcid.org/blog/" title="FND&#8217;s Blag: Just Another Personal Wobsite">Fred</a>, my colleague at <a href="http://osmosoft.com/" title="osmosoft - open source applications from BT">Osmosoft</a> stumbled upon a plugin which creates a nice navigation structure from an HTML List element.  The plugin has lots of <a href="http://www.ihwy.com/Labs/Demos/Current/jquery-listnav-plugin.aspx" title="ListNav plugin examples">examples</a> and <a href="http://www.ihwy.com/Labs/jquery-listnav-plugin.aspx" title="jQuery listnav plugin - Javascript list navigation control">documentation</a> and seemed like a good contender for bringing something useful into TiddlyWiki.</p>

<p>To include the plugin, all we need to do is copy it into a tiddler and then tag the tiddler with systemConfig. After saving the file and reloading, the plugin is available for us to use.</p>

<p><a href='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/plugin_inclusion.png' title='Plugin inclusion'><img src='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/plugin_inclusion.png' alt='Plugin inclusion' width='400px' /></a></p>

<p>With the jQuery plugin availble, we can use it to provide a snazzy UI for any UL or LI elements on the page. The Javascirpt syntax for that is nice and simple:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript"><span style="color: #009900; font-style: italic;">// Turn the list element with an ID of 'myList' into a funky ListNav</span>
$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'#myList'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">listnav</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>


<p>This is great, but we want people to be able to call this from TiddlyWiki without having to write Javascript. If we create a TiddlyWiki macro to call this for us, people can easily make a nice NavList anywhere. Let&#8217;s make a macro which turns the contents of a tiddler into a NavList like this:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript">&lt;&lt;listnav TiddlerTitle&gt;&gt;</pre></div></div>


<p>To make that available, we should create a TiddlyWiki plugin which delivers this macro. We do this in a new tiddler.  I created a tiddler called &#8216;ListNavPlugin&#8217; and once again tagged it with systemConfig so that it becomes code that TiddlyWiki knows to interpret. To start with, let&#8217;s just create the macro and ensure that we can invoke it.</p>


<div class="wp_syntax"><div class="code"><pre class="javascript">&nbsp;
<span style="color: #009900; font-style: italic;">// create macro object</span>
config.<span style="color: #006600;">macros</span>.<span style="color: #006600;">listnav</span> = <span style="color: #66cc66;">&#123;</span> 
&nbsp;
  <span style="color: #009900; font-style: italic;">// Add a handler function to be invoked by &lt;&lt;listnav TiddlerTitle&gt;&gt; </span>
  handler: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>place, macroName, params, wikifier, paramString, tiddler<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #009900; font-style: italic;">// do some magic...</span>
    <span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;I'm gonna make a funky listnav!&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;</pre></div></div>


<p>To see it working, I created two more new tiddlers. MyFruityList holds a list of items, and ExampleListNav holds a call to the new macro.</p>

<p><a href='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/list-and-example-call.png' title='MyFruityList and ExampleListNav'><img src='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/list-and-example-call.png' alt='MyFruityList and ExampleListNav' width='400px' /></a></p>

<p>Saving the TiddlyWiki file and reloading will make the macro available to call. If we open the ExampleListNav tiddler, we should see our macro called like this:</p>

<p><a href='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/macro-called-1.png' title='Macro called'><img src='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/macro-called-1.png' alt='Macro called' width='400px' /></a></p>

<p>All good, but not exciting yet. Let&#8217;s flesh out our TiddlyWiki macro a bit.  We&#8217;ll use a TiddlyWiki function to get the text from our desired tiddler and then make a list from it.  Where we might once have used some TiddlyWiki utility functions to help us create the HTML elements (like createTiddlyElement), we can now use <a href="http://docs.jquery.com/Manipulation">jQuery&#8217;s helper functions</a> to append elements to the document.</p>


<div class="wp_syntax"><div class="code"><pre class="javascript">&nbsp;
<span style="color: #009900; font-style: italic;">// create macro object</span>
config.<span style="color: #006600;">macros</span>.<span style="color: #006600;">listnav</span> = <span style="color: #66cc66;">&#123;</span>
&nbsp;
  <span style="color: #009900; font-style: italic;">// Add a handler function to be invoked by &lt;&lt;listnav TiddlerTitle&gt;&gt; </span>
  handler: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>place, macroName, params, wikifier, paramString, tiddler<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #009900; font-style: italic;">// target tiddler passed in as macro parameter</span>
    <span style="color: #003366; font-weight: bold;">var</span> title = params<span style="color: #66cc66;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
    <span style="color: #009900; font-style: italic;">// read list items from tiddler contents</span>
    <span style="color: #003366; font-weight: bold;">var</span> text = store.<span style="color: #006600;">getTiddlerText</span><span style="color: #66cc66;">&#40;</span>title<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>text<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
      <span style="color: #009900; font-style: italic;">// generate list</span>
      <span style="color: #003366; font-weight: bold;">var</span> items = text.<span style="color: #006600;">split</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span>;
      <span style="color: #003366; font-weight: bold;">var</span> list = jQuery<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;&lt;ul /&gt;&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">attr</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;id&quot;</span>, <span style="color: #3366CC;">&quot;listnav&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color: #66cc66;">&#40;</span>place<span style="color: #66cc66;">&#41;</span>;
      jQuery.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span>items, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>i, itm<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        jQuery<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;&lt;li /&gt;&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">text</span><span style="color: #66cc66;">&#40;</span>itm<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color: #66cc66;">&#40;</span>list<span style="color: #66cc66;">&#41;</span>;
      <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;</pre></div></div>


<p>Now we&#8217;re getting somewhere. We&#8217;ve grabbed each line from our MyFruityList tiddler and used jQuery to turn them into an unordered list.</p>

<p><a href='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/example-list-created.png' title='List created from tiddler text'><img src='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/example-list-created.png' alt='List created from tiddler text' width='400px' /></a></p>

<p>We can now call the jQuery plugin to render our list as a NavList. The plugin requires a little extra HTML so we can create that, and then call the listnav plugin.</p>


<div class="wp_syntax"><div class="code"><pre class="javascript">&nbsp;
<span style="color: #009900; font-style: italic;">// create macro object</span>
config.<span style="color: #006600;">macros</span>.<span style="color: #006600;">listnav</span> = <span style="color: #66cc66;">&#123;</span>
&nbsp;
  <span style="color: #009900; font-style: italic;">// Add a handler function to be invoked by &lt;&lt;listnav TiddlerTitle&gt;&gt; </span>
  handler: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>place, macroName, params, wikifier, paramString, tiddler<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #009900; font-style: italic;">// target tiddler passed in as macro parameter</span>
    <span style="color: #003366; font-weight: bold;">var</span> title = params<span style="color: #66cc66;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
    <span style="color: #009900; font-style: italic;">// read list items from tiddler contents</span>
    <span style="color: #003366; font-weight: bold;">var</span> text = store.<span style="color: #006600;">getTiddlerText</span><span style="color: #66cc66;">&#40;</span>title<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>text<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
      <span style="color: #009900; font-style: italic;">// generate nav bar</span>
      jQuery<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;&lt;div /&gt;&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">attr</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;id&quot;</span>, <span style="color: #3366CC;">&quot;listnav-nav&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color: #66cc66;">&#40;</span>place<span style="color: #66cc66;">&#41;</span>;
&nbsp;
      <span style="color: #009900; font-style: italic;">// generate list</span>
      <span style="color: #003366; font-weight: bold;">var</span> items = text.<span style="color: #006600;">split</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span>;
      <span style="color: #003366; font-weight: bold;">var</span> list = jQuery<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;&lt;ul /&gt;&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">attr</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;id&quot;</span>, <span style="color: #3366CC;">&quot;listnav&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color: #66cc66;">&#40;</span>place<span style="color: #66cc66;">&#41;</span>;
      jQuery.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span>items, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>i, itm<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        jQuery<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;&lt;li /&gt;&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">text</span><span style="color: #66cc66;">&#40;</span>itm<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color: #66cc66;">&#40;</span>list<span style="color: #66cc66;">&#41;</span>;
      <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
      <span style="color: #009900; font-style: italic;">// apply listnav</span>
      list.<span style="color: #006600;">listnav</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;</pre></div></div>


<p>When we save our plugin, reload the page and open up our ExampleListNav tiddler, we see the navlist. Cool! Hang on though, it looks a bit rubbish. Not like the examples we saw earlier.  We have to include the CSS to style our new navlist.  Easy enough, let&#8217;s use our TiddlyWiki plugin to create a sylesheet for our new HTML by adding this:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript">&nbsp;
<span style="color: #009900; font-style: italic;">// add default styles (adapted from http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css)</span>
config.<span style="color: #006600;">shadowTiddlers</span>.<span style="color: #006600;">StyleSheetListNav</span> = <span style="color: #3366CC;">&quot;/*{{{*/<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;#listnav-nav { margin: 20px 0 10px; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letters { overflow: hidden; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letters a { font-size: 0.9em; display: block; float: left; padding: 2px 6px; border: 1px solid #eee; border-right: none; text-decoration: none; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>+
  <span style="color: #3366CC;">&quot;.ln-letters a.ln-last { border-right: 1px solid #eee; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letters a:hover, .ln-letters a.ln-selected { background-color: #eaeaea; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letters a.ln-disabled { color: #ccc; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letter-count { text-align: center; font-size: 0.8em; line-height: 1; margin-bottom: 3px; color: #336699; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;/*}}}*/&quot;</span>;
store.<span style="color: #006600;">addNotification</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;StyleSheetListNav&quot;</span>, refreshStyles<span style="color: #66cc66;">&#41;</span>;</pre></div></div>


<p>And we&#8217;re done.  The jQuery plugin is turning our boring old list into a dynamic indexed list with navigation. Cool!  For extra credit, we can make our jQuery a little more concise. Notice that we call jQuery by name rather than with the common idiom of $.  We could simply replace each jQuery with $ in our code and that would work, but beware!  There are other Javascript libraries that use the $ shortcut.  we don&#8217;t want to introduce the possibility of a clash.  Luckily, there is a simple way to get around that.  All we need to do is wrap our TiddlyWiki plugin in a closure and pass jQuery in as an argument (as explained on the <a href="http://docs.jquery.com/Plugins/Authoring#Custom_Alias_in_plugin_code" title="Plugins/Authoring - jQuery JavaScript Library">jQuery documentation</a> site).  Then we can use whatever shortcut for jQuery in our code that we like.  The final code looks like this:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript">&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>$<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #009900; font-style: italic;">// set up alias</span>
&nbsp;
  <span style="color: #009900; font-style: italic;">// create macro object</span>
  config.<span style="color: #006600;">macros</span>.<span style="color: #006600;">listnav</span> = <span style="color: #66cc66;">&#123;</span>
&nbsp;
  <span style="color: #009900; font-style: italic;">// Add a handler function to be invoked by &lt;&lt;listnav TiddlerTitle&gt;&gt; </span>
  handler: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>place, macroName, params, wikifier, paramString, tiddler<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #009900; font-style: italic;">// target tiddler passed in as macro parameter</span>
    <span style="color: #003366; font-weight: bold;">var</span> title = params<span style="color: #66cc66;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
    <span style="color: #009900; font-style: italic;">// read list items from tiddler contents</span>
    <span style="color: #003366; font-weight: bold;">var</span> text = store.<span style="color: #006600;">getTiddlerText</span><span style="color: #66cc66;">&#40;</span>title<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>text<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
     <span style="color: #009900; font-style: italic;">// generate nav bar</span>
     $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;&lt;div /&gt;&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">attr</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;id&quot;</span>, <span style="color: #3366CC;">&quot;listnav-nav&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color: #66cc66;">&#40;</span>place<span style="color: #66cc66;">&#41;</span>;
&nbsp;
     <span style="color: #009900; font-style: italic;">// generate list</span>
     <span style="color: #003366; font-weight: bold;">var</span> items = text.<span style="color: #006600;">split</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span>;
     <span style="color: #003366; font-weight: bold;">var</span> list = $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;&lt;ul /&gt;&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">attr</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;id&quot;</span>, <span style="color: #3366CC;">&quot;listnav&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color: #66cc66;">&#40;</span>place<span style="color: #66cc66;">&#41;</span>;
     $.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span>items, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>i, itm<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
       $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;&lt;li /&gt;&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">text</span><span style="color: #66cc66;">&#40;</span>itm<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color: #66cc66;">&#40;</span>list<span style="color: #66cc66;">&#41;</span>;
     <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
     <span style="color: #009900; font-style: italic;">// apply listnav</span>
     list.<span style="color: #006600;">listnav</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;
&nbsp;
  <span style="color: #009900; font-style: italic;">// add default styles (adapted from http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css)</span>
  config.<span style="color: #006600;">shadowTiddlers</span>.<span style="color: #006600;">StyleSheetListNav</span> = <span style="color: #3366CC;">&quot;/*{{{*/<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;#listnav-nav { margin: 20px 0 10px; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letters { overflow: hidden; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letters a { font-size: 0.9em; display: block; float: left; padding: 2px 6px; border: 1px solid #eee; border-right: none; text-decoration: none; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>+
  <span style="color: #3366CC;">&quot;.ln-letters a.ln-last { border-right: 1px solid #eee; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letters a:hover, .ln-letters a.ln-selected { background-color: #eaeaea; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letters a.ln-disabled { color: #ccc; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;.ln-letter-count { text-align: center; font-size: 0.8em; line-height: 1; margin-bottom: 3px; color: #336699; }<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> +
  <span style="color: #3366CC;">&quot;/*}}}*/&quot;</span>;
  store.<span style="color: #006600;">addNotification</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;StyleSheetListNav&quot;</span>, refreshStyles<span style="color: #66cc66;">&#41;</span>;	
&nbsp;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>jQuery<span style="color: #66cc66;">&#41;</span>;</pre></div></div>


<p>You can explore the finished example in a <a href='http://www.hawksworx.com/journal/wp-content/uploads/2009/03/listnavplugin.html' title='ListNavPlugin example TiddlyWiki'> TiddlyWiki</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2009/03/13/leveraging-jquery-and-jquery-plugins-in-tiddlywiki/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mashing up flickr in the client with jQuery</title>
		<link>http://www.hawksworx.com/journal/2009/02/15/mashing-up-flickr-in-the-client-with-jquery/</link>
		<comments>http://www.hawksworx.com/journal/2009/02/15/mashing-up-flickr-in-the-client-with-jquery/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 21:24:47 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[jquery]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[mash-ups]]></category>

		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2009/02/15/mashing-up-flickr-in-the-client-with-jquery/</guid>
		<description><![CDATA[

Recently I saw Tim Stevens post on Twitter about a slide show he had built using his Liveloom application. His slide show grabs some photos from Flickr tagged with &#8216;Osmosoft&#8217; and then renders them with all manner of visual effects using Flex.

While the visual effects available via Tim&#8217;s app are impressive, I&#8217;m a big advocate [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://polaroiderizer.com/#osmosoft' title='polaroiderizer'><img src='http://www.hawksworx.com/journal/wp-content/uploads/2009/02/polaroiderizer-a-slideshow-from-your-flickr-tags-2.png' alt='polaroiderizer' /></a></p>

<p>Recently I saw Tim Stevens <a href="http://twitter.com/san1t1/status/1193906661">post on Twitter</a> about a slide show he had built using his <a href="http://www.liveloom.com/">Liveloom</a> application. His slide show grabs some photos from Flickr tagged with &#8216;Osmosoft&#8217; and then renders them with all manner of visual effects using Flex.</p>

<p>While the visual effects available via Tim&#8217;s app are impressive, I&#8217;m a big advocate of open web standards and enjoy making things from HTML and Javascript, rather than using tools like Flex. My first encounter with the slide show made by Liveloom was on an iPhone where it couldn&#8217;t run. The temptation to cobble together a simple Flickr mashup which could operate in any Javascript capable browser was too much to resist.</p>

<p>Let&#8217;s not pretend, that there aren&#8217;t already slide show mashups galore, or that I was going to be able to rival some of the advanced visual effects that Liveloom can offer, but making a simple, attractive slide show which could run on lots of devices seemed like a fun and valuable exercise.  I was also keen to see just how quickly and easily I could produce this using jQuery.  I&#8217;m forever going on about how good jQuery is at manipulating the DOM, so this seemed like a good chance to demonstrate that.</p>

<p>I shared the result my efforts as the &#8216;Poloaroiderizer&#8217; and after getting some great feedback, promoted it to its very own domain. Check it out over at <a href="http://polaroiderizer.com">polaroiderizer.com</a></p>

<p>As it turns out, the task was incredibly simple and took just a few hours one evening. The interface is rendered with HTML and CSS. As such, it will work in any modern browser.  I used jQuery to request <a href="http://ajaxian.com/archives/jsonp-json-with-padding">JSONP</a> from the Flickr API. JSPONP gets you around the cross domain scripting restrictions and delivers JSON to the browser which is a snap to parse and render.  There is no logic on the server. All of my code is run in the browser.</p>

<p>The animations are provided by CSS and DOM manipulation, made simple by <a href="http://docs.jquery.com/Effects/animate">jQuery&#8217;s animation functions</a>.  The display needs Javascript to render, so without it Polaroiderizer is a bit toothless, but that doesn&#8217;t mean we can forget about those without Javascript. If you submit a flickr tag while you don&#8217;t have Javascript capabilities, the form will submit your tag to the standard flickr interface and you&#8217;ll find yourself at the flickr search results page.  This is another example of progressive enhancement. A topic close to my heart that I tried to demonstrate recently on <a href="http://unobtrusify.com">Unobtrusify</a>.</p>

<p>Another little bonus of building this slide show app this way, is that it is super-easy to share the results. I made sure that the tag entered was echoed into the address of the page as the page fragment identifier. Manipulating and interrogating the frag id can be useful in Ajax applications as my colleague <a href="http://softwareas.com/fun-with-fragment-identifiers">Michael Mahemoff explained recently</a>.  When the page loads, it looks for a tag stored in the frag id as its starting point. That means you can bookmark slide shows and share them as easily as email a URI. Here are a few:</p>

<p><a href="http://polaroiderizer.com/#PhilHawksworth">http://polaroiderizer.com/#PhilHawksworth</a>
<a href="http://polaroiderizer.com/#TheWebIsAgreement">http://polaroiderizer.com/#TheWebIsAgreement</a>
<a href="http://polaroiderizer.com/#TED2009">http://polaroiderizer.com/#TED2009</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2009/02/15/mashing-up-flickr-in-the-client-with-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Unobtrusify your Javascript</title>
		<link>http://www.hawksworx.com/journal/2009/01/05/unobtrusify-your-javascript/</link>
		<comments>http://www.hawksworx.com/journal/2009/01/05/unobtrusify-your-javascript/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 13:13:47 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[jquery]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2009/01/05/unobtrusify-your-javascript/</guid>
		<description><![CDATA[


Recently Jon Lister, a colleague of mine at Osmosoft showed me a website made by his friend Joshua Bradley. The site, used some of the Javscript code from TiddlyWiki&#8217;s animation engine to create some nice visual effects. I loved the design, but could see some room for improvement in the implementation. I&#8217;m a big advocate [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://unobtrusify.com' title='Unobtrusive Javascript'><img src='http://www.hawksworx.com/journal/wp-content/uploads/2009/01/unobtrusive.png' alt='Unobtrusive Javascript' /></a></p>

<p>
Recently <a href="http://jaybyjayfresh.com" title="jaybyjayfresh">Jon Lister</a>, a colleague of mine at <a href="http://www.osmosoft.com">Osmosoft</a> showed me a website made by his friend <a href="http://joshuabradley.co.uk/" title="Joshua Bradley">Joshua Bradley</a>. The site, used some of the Javscript code from <a href="http://tiddlywiki.com" title='TiddlyWiki'>TiddlyWiki</a>&#8217;s animation engine to create some nice visual effects. I loved the design, but could see some room for improvement in the implementation. I&#8217;m a big advocate of <a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript" title="Unobtrusive JavaScript">Unobtrusive Javascript</a> and <a href="http://en.wikipedia.org/wiki/Progressive_enhancement" title="Progressive enhancement">Progressive Enhancement</a> and so I set about producing a quick demo of how a similar result could be achieved in the most Web-kind and accessible way available using <a href="http://jquery.com" title='jQuery'>jQuery</a> for the behaviors.
</p>

<p>
The result has been published as <a href="http://unobtrusify.com" title="Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement">Unobtrusify.com</a>.
</p>

<h4>The aim.</h4>

<ul>
    <li>Create a similar effect to that on Josh&#8217;s site, but make sure that the page is readable without Javascript.</li>
    <li>Use images to make the headings look snazzy, but make sure that they are not required in order for the content to make sense.</li>
    <li>Use only unobtrusive Javascript and keep the HTML as clean as possible.</li>
    <li>Reduce the number of http requests required to as few as possible in order to improve performance.</li>
</ul>

<h4>The approach.</h4>

<p>
First of all, I wrote the text for the page. I chose a simple statement and tried to structure it such that it would make sense regardless of which sections were expanded.
</p>

<p>
Then I used the simplest HTML markup I could to logically represent the content with its various headings.  <a href="http://unobtrusify.com/justhtml.html" title="Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement (HTML only)">This is how the page would look</a> to text-only browsers search engines, web-crawlers and screen-readers.</p>

<p>I then used a well-known CSS technique to replace the text in the headings with images. This would ensure that the text would remain for non-human consumers of the site, while the images would be presented to those able to appreciate them.  The technique is simple.  You prevent the browser from scrolling the content of your element with <code>overflow:hidden</code> and then scoot the text out of the way with <code>text-indent</code>. Now that the way is clear, you can display an image with <code>background-image</code>.  Be sure to specify the dimensions of your desired image as the <code>background-image</code> property will not resize your element to the correct size automatically. The CSS would look something like this:</p>


<div class="wp_syntax"><div class="code"><pre class="css"><span style="color: #cc00cc;">#myHeading</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">text-indent</span>: -<span style="color: #933;">9999px</span>;
	<span style="color: #000000; font-weight: bold;">overflow</span>: <span style="color: #993333;">hidden</span>;
	<span style="color: #000000; font-weight: bold;">background-image</span>: <span style="color: #993333;">url</span><span style="color: #66cc66;">&#40;</span><span style="color: #933;">myImage<span style="color: #6666ff;">.gif</span></span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #000000; font-weight: bold;">width</span>: <span style="color: #933;">380px</span>;
	<span style="color: #000000; font-weight: bold;">height</span>: <span style="color: #933;">123px</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>


<p>My content had 6 headings to render in this way. I also wanted to have a mouseover effect to give some affordance for the click-ability of the headings so this would require another 6 images. Rather than having 12 images to download (which would require 12 separate HTTP requests), I combined all of these images into a single image.  This would have a number of effects. Firstly, combining the 12 images into one meant that the total download would be a bit smaller due to the way that the file was compressed. (A tiny saving, but every little helps.)  Secondly, there is an overhead with making HTTP requests so when it comes to performance, the fewer the better. This method cuts out 11 HTTP requests. Score!  Thirdly, as the browser uses the same image for the original heading images and their associated mouseover images, there is no need to preload the alternate images to avoid that nasty pause when mousing over. The image is already downloaded and ready to display. A nice bonus.</p>

<p>In order to use this &#8216;image sprite&#8217; for each and every heading, I just needed to specify the <code>background-position </code>for each one. Some attributes would be common to each one so I could save some code like this:</p>


<div class="wp_syntax"><div class="code"><pre class="css">h1 <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">text-indent</span>: -<span style="color: #933;">9999px</span>;
	<span style="color: #000000; font-weight: bold;">overflow</span>: <span style="color: #993333;">hidden</span>;
	<span style="color: #000000; font-weight: bold;">background-image</span>: <span style="color: #993333;">url</span><span style="color: #66cc66;">&#40;</span><span style="color: #933;">images/unobtrusive_sprite<span style="color: #6666ff;">.gif</span></span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #000000; font-weight: bold;">width</span>: <span style="color: #933;">380px</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
h1<span style="color: #cc00cc;">#uj</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background-position</span>: <span style="color: #933;">0</span> <span style="color: #933;">0</span>;
	<span style="color: #000000; font-weight: bold;">height</span>: <span style="color: #933;">123px</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
h1<span style="color: #cc00cc;">#cmh</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background-position</span>: <span style="color: #933;">0</span> -<span style="color: #933;">123px</span>;
	<span style="color: #000000; font-weight: bold;">height</span>: <span style="color: #933;">150px</span>;
<span style="color: #66cc66;">&#125;</span>
...</pre></div></div>


<p>At this point our <a href="http://unobtrusify.com/withcss.html" title="Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement (with CSS)">page looks like this</a>.  This is exactly how we want things to appear for those without Javascript. There is no ability to toggle the display of the various sections, the content is shown in full, and there is no mouseover behavior on the headings to suggest that they can be clicked (since they cannot).  This is the essence of <a href="http://en.wikipedia.org/wiki/Progressive_enhancement" title="Progressive enhancement">Progressive Enhancement</a>.  We have a perfectly serviceable web page (albeit a simple one) which we can now enhance for those with Javascript enabled.
</p>

<p>Using jQuery to easily and unobtrusively add behavior to elements on the page, we can now hide all of the expanded sections. We do this with a simple jQuery statement like this:
</p>


<div class="wp_syntax"><div class="code"><pre class="javascript">$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'#wrapper &gt; div'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">hide</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>


<p>This hides all of the div elements which are a direct descendent of the element with an ID of wrapper. (my chosen HTML structure). 
</p>

<p>Headings are not by default clickable so we can add some behavior to suggest that the clicking a heading will have a effect by changing the cursor for them like this:
</p>


<div class="wp_syntax"><div class="code"><pre class="javascript">$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'#wrapper h1'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'clickable'</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>


<p>A CSS class of &#8216;clickable&#8217; specifies the cursor with <code>cursor: pointer;</code></p>

<p>We also use jQuery to show the hover image by just repositioning the background image when we hover with the mouse and also to show the hidden div element when we click a heading. Remember, none of this will happen unless Javascript is available.
</p>

<p><a href='http://unobtrusify.com' title='Unobtrusify.com'><img src='http://www.hawksworx.com/journal/wp-content/uploads/2009/01/unobtrusifycom-unobtrusive-javascript-for-progressive-enhancement.png' alt='Unobtrusify.com' width='400px'/></a></p>

<p>I also use an additional trick to prevent a flash of unstyled content or FOUC (gratifyingly pronounced &#8216;FOOOOOOK&#8217; by <a href="http://hicksdesign.co.uk/" title="hicksdesign: design for print and new-fangled media">John Hicks</a>) while the Javascript is being downloaded. This trick is <a href="http://www.learningjquery.com/2008/10/1-awesome-way-to-avoid-the-not-so-excellent-flash-of-amazing-unstyled-content" title="1 (Awesome) Way To Avoid the (Not So Excellent) Flash of (Amazing) Unstyled Content &raquo; Learning jQuery - Tips, Techniques, Tutorials">very well explained</a> by <a href="http://www.englishrules.com/" title="English Rules">Karl Swedberg</a> on the excellent <a href="http://www.learningjquery.com/" title="Learning jQuery - Tips, Techniques, Tutorials">learningjquery.com</a> site.
</p>

<p>
    For a better picture of exactly what is going on, why not swing by <a href="http://Unobtrusify.com" title="Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement">Unobtrusify.com</a> and exercise your right as a citizen of the Web to view the source. Hitting View Source is so often the best way to learn how things are done. Go on! Go and get your hands dirty!
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2009/01/05/unobtrusify-your-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Enthusiasm and Good Food at TiddlyParis</title>
		<link>http://www.hawksworx.com/journal/2008/08/27/enthusiasm-and-good-food-at-tiddlyparis/</link>
		<comments>http://www.hawksworx.com/journal/2008/08/27/enthusiasm-and-good-food-at-tiddlyparis/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 14:26:27 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[events]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[osmosoft]]></category>

		<category><![CDATA[tiddlywiki]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2008/08/27/enthusiasm-and-good-food-at-tiddlyparis/</guid>
		<description><![CDATA[<a href="http://farm4.static.flickr.com/3131/2803239794_6a48afbdc3.jpg" title="TiddlyParis"><img src="http://farm4.static.flickr.com/3131/2803239794_6a48afbdc3.jpg" width="400" alt="TiddlyParis" /></a>

Yesterday I was fortunate to be able to make the quick trip over to Paris to attend a meeting of <a href="http://tiddlywiki.com">TiddlyWiki</a> enthusiasts at <a href="http://upcoming.yahoo.com/event/1028826/">TiddlyParis</a>. Arranged by long time <a href="http://tiddlywiki.com">TiddlyWiki</a> community member and <a href="http://unamesa.org">Una Mesa</a> stalwart <a href="http://lewcid.org">Saq Imtiaz</a>, this event was a great chance to put some faces to the names of some of the <a href="http://tiddlywiki.com">TiddlyWiki</a> developers and users whose work I have been enjoying and benefitting from for some time.]]></description>
			<content:encoded><![CDATA[<p><a href="http://farm4.static.flickr.com/3131/2803239794_6a48afbdc3.jpg" title="TiddlyParis"><img src="http://farm4.static.flickr.com/3131/2803239794_6a48afbdc3.jpg" width="400" alt="TiddlyParis" /></a></p>

<p>Yesterday I was fortunate to be able to make the quick trip over to Paris to attend a meeting of <a href="http://tiddlywiki.com">TiddlyWiki</a> enthusiasts at <a href="http://upcoming.yahoo.com/event/1028826/">TiddlyParis</a>. Arranged by long time <a href="http://tiddlywiki.com">TiddlyWiki</a> community member and <a href="http://unamesa.org">Una Mesa</a> stalwart <a href="http://lewcid.org">Saq Imtiaz</a>, this event was a great chance to put some faces to the names of some of the <a href="http://tiddlywiki.com">TiddlyWiki</a> developers and users whose work I have been enjoying and benefitting from for some time.</p>

<p>Gathering in a funky bar on the Champs Elysees, the 10 of us shared a beer or two and got to talk about what we were all doing with <a href="http://tiddlywiki.com">TiddlyWiki</a> and get to know each other a little better.</p>

<p>The spectrum of <a href="http://tiddlywiki.com">TiddlyWiki</a> experience was pleasingly broad. </p>

<p>Zap recently found <a href="http://tiddlywiki.com">TiddlyWiki</a> and is using it to manage his notes and background material to support the effort in writing a novel. He is also tinkering with <a href="http://gettematasks.com">TeamTasks</a> and made the observation that once you start experimenting with ways to customise and extend <a href="http://tiddlywiki.com">TiddlyWiki</a>, you can easily find yourself absorbed in the endeavor. Ideas spring forth even faster than you can execute them.</p>

<p>At the other end of the spectrum we have Jacques, who has been working with <a href="http://tiddlywiki.com">TiddlyWiki</a> since the very early days.  Jacques showed us all his <a href="http://tiddlywiki.com">TiddlyWiki</a> PIM on his 4 year old tablet PC. The file was well over 3MB in size (something of a beast in <a href="http://tiddlywiki.com">TiddlyWiki</a> terms) chock full of content and heavily customised. I  mean really heavily customised!  Jacques had moulded it to fit his way of working and had borrowed from the best <a href="http://tiddlywiki.com">TiddlyWiki</a> adaptations around the web. With advanced workflow management and various task lists, widgets and doohickies, I found it a bit hard to drink it all in, but it was a perfect fit for Jacques and goes everywhere with him.  Jacques pledged to make a blank copy available at some point. You&#8217;ll need to speak French though as he had also carried out extensive translation.</p>

<p><a href="http://farm4.static.flickr.com/3013/2802391393_d939f28c9a.jpg" title="Jacques"><img src="http://farm4.static.flickr.com/3013/2802391393_d939f28c9a.jpg" width="400" alt="Jacques" /></a></p>

<p>I was delighted to learn that relative newcomer Pier, whose Google Maps / <a href="http://tiddlywiki.com">TiddlyWiki</a> mashup gathers information about popular activities and movements around Paris, chose <a href="http://tiddlywiki.com">TiddlyWiki</a> primarily because of its ease of use as a mashup platform. Score!  (He was also attracted by the snazzy tiddler animations!)</p>

<p>Loic Dachary revealed several <a href="http://tiddlywiki.com">TiddlyWiki</a> resources which have been around for a while, but I had failed to stumble upon. Perhaps targeted at the more techie geeks among us, they were impressive nonetheless. My favorite was <a href="http://tiddlywikicp.dachary.org/">TiddlyWiki_CP</a> which is a ruby gem providing a library and a command line interface to copy <a href="http://tiddlywiki.com">TiddlyWiki</a> tiddlers to files and vice versa. Incredibly useful for any developer who builds a variety of TiddlyWikis.</p>

<p><a href="http://farm4.static.flickr.com/3209/2802391055_ca4fe53d4e.jpg" title="Loic"><img src="http://farm4.static.flickr.com/3209/2802391055_ca4fe53d4e.jpg" width="400" alt="Loic" /></a></p>

<p>I was very keen to meet BidiX who has quietly been producing great <a href="http://tiddlywiki.com">TiddlyWiki</a> assets for some time. Recent work includes <a href="http://itw.bidix.info/">iTW</a>, the best iPhone <a href="http://tiddlywiki.com">TiddlyWiki</a> that I know of. The <a href="http://itw.bidix.info/tiddlyparis/">TiddlyParis edition</a> of iTW went with me in my pocket to help me find the venue and read about the agenda.  BidiX is also the man behind <a href="http://tiddlyhome.bidix.info">TiddlyHome</a>, a lovely and seemingly simple hosted <a href="http://tiddlywiki.com">TiddlyWiki</a> resource which he recently deployed to Google App Engine for its <a href="http://th2.bidix.info/">next release</a> (which we got to play with, but he insists isn&#8217;t quite ready for prime time yet).</p>

<p>For my part I spoke about <a href="http://gettematasks.com">TeamTasks</a>, which I was happy to learn was being used to some degree by several people around the table. I also answered questions about <a href="http://bt.com">BTs</a> interest in <a href="http://tiddlywiki.com">TiddlyWiki</a> and motives for being involved in such a project and community.  I&#8217;ll not go over that again here, as it has already been well articulated by several of my colleagues on <a href="http://jermolene.com/2008/08/13/what-is-the-point-of-osmosoft/">their</a> <a href="http://philwhitehouse.blogspot.com/2008/01/managing-open-source-projects.html">blogs</a>.</p>

<p>I went on to talk about a new pet project of mine which, following the <a href="http://tiddlywiki.com">TiddlyWiki</a> convention for absurd names, has been dubbed JigglyWiki. (As it turns out, the French accent lends this name much more gravitas due to the soft &#8216;j&#8217;. Marvelous!)  <a href="http://www.hawksworx.com/journal/2008/08/27/announcing-jigglywiki-a-tiddlywiki-experiment-with-jquery/">JigglyWiki deserves a blog post of its own</a>. For now, through, let&#8217;s just describe it as and experiment to explore what TiddlyWiki 3.0 might be like if it were to be developed from the ground up with the use of the jQuery javascript library and adopt an unobtrusive Javascript approach. </p>

<p>JigglyWiki (I can only hear that in a French accent now!) created quite a bit of discussion.  Proppy and Loic Dachary were particularly vocal about the potential for a <a href="http://tiddlywiki.com">TiddlyWiki</a> implementation benefitting from unobtrusive javascript and built in a modular way with a library such as jQuery.  Debate raged about the need for a javascript library to properly manage plugins and dependancies. A topic that I&#8217;m sure I will be discussing more in a later post.</p>

<p>My thanks go out to all of the folks I encountered at <a href="http://upcoming.yahoo.com/event/1028826/">TiddlyParis</a>. Not only for their passion about <a href="http://tiddlywiki.com">TiddlyWiki</a>, but also for making me feel so welcome and for conducting the entire event in English rather than in French which I know required considerable effort from some.  For what it&#8217;s worth, my French stretched far enough for me to order my meal (which was bloomin&#8217; great) and a few drinks without totally shaming myself. Big thanks also to <a href="http://lewcid.org">Saq Imtiaz</a> for putting it all together. When&#8217;s the next one?!</p>

<p>A bientôt!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2008/08/27/enthusiasm-and-good-food-at-tiddlyparis/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Announcing JigglyWiki. A TiddlyWiki experiment with jQuery.</title>
		<link>http://www.hawksworx.com/journal/2008/08/27/announcing-jigglywiki-a-tiddlywiki-experiment-with-jquery/</link>
		<comments>http://www.hawksworx.com/journal/2008/08/27/announcing-jigglywiki-a-tiddlywiki-experiment-with-jquery/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 13:15:30 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[jquery]]></category>

		<category><![CDATA[jigglywiki]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[osmosoft]]></category>

		<category><![CDATA[tiddlywiki]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2008/08/27/announcing-jigglywiki-a-tiddlywiki-experiment-with-jquery/</guid>
		<description><![CDATA[

Once upon a time I was resistant to the idea of Javascript libraries. That was due to a couple of things. Firstly, I was comfortable with writing the Javascript for my projects myself and didn&#8217;t like the idea of relying on someone else&#8217;s code which I couldn&#8217;t easily inspect. Secondly, at the time there weren&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://hawksworx.com/playground/jigglywiki/html_css_js.html" title="JigglyWiki screenshot"><img src="http://farm4.static.flickr.com/3107/2803125346_f646ff0984.jpg" width="400" alt="JigglyWiki screenshot" /></a></p>

<p>Once upon a time I was resistant to the idea of Javascript libraries. That was due to a couple of things. Firstly, I was comfortable with writing the Javascript for my projects myself and didn&#8217;t like the idea of relying on someone else&#8217;s code which I couldn&#8217;t easily inspect. Secondly, at the time there weren&#8217;t really any libraries. Then there were a few, but they were all, well, to be blunt, a bit pants.</p>

<p>That all changed for me when <a href="http://jQuery.com">jQuery</a> came along. <a href="http://jQuery.com">jQuery</a> is a lightweight, elegant but powerful Javascript library originally developed by <a href="http://ejohn.org">John Resig</a>. <a href="http://jQuery.com">jQuery</a> provides fast and efficient interrogation and manipulation of the DOM and borrows conventions from <a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a> and <a href="http://en.wikipedia.org/wiki/Xpath">XPATH</a> to provide concise and expressive queries to be constructed. It&#8217;s worth checking out if you haven&#8217;t already.</p>

<p><a href="http://www.TiddlyWiki.com">TiddlyWiki</a> has been around since before the existence of Javascript libraries and long before <a href="http://jQuery.com">jQuery</a> came along, so it was never developed in a way to take advantage of such things. It could easily be argued that <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> is itself, a Javascript library since it provides helper functions for many common Javascript tasks.  The extent of this library though, is a little limited since it has evolved to serve a single purpose: To drive <a href="http://www.TiddlyWiki.com">TiddlyWiki</a>.</p>

<p>Recently I have been longing to experiment with replacing a lot of the <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> core with code built to take advantage of <a href="http://jQuery.com">jQuery</a>. The idea of developing <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> with a Javascript library turns out not to be a new one as similar discussions have occurred in the past and different libraries considered.</p>

<p>I then began to imagine other benefits from reengineering <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> from first principles taking advantage of all of the lessons learned over its lifetime. </p>

<p>It became too hard to resist.</p>

<p>Over the course of 2 reasonably long train journeys, I set about building my own version of <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> with <a href="http://jQuery.com">jQuery</a> at its core. I settled on a number of objectives:</p>

<ol>
<li>To use <a href="http://jQuery.com">jQuery</a> to provide the core <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> functions.</li>
<li>To make the code modular such that the core could be very small and additional functionality could easily be included via bespoke <a href="http://jQuery.com">jQuery</a> plugins.</li>
<li>To use <a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript">unobtrusive Javascript</a>.</li>
<li>For the document to be sensibly parsed by screen readers and web crawlers.</li>
<li>To allow navigation of the document even without Javascript</li>
<li>To use HTML and <a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a> which is valid according to the <a href="http://www.w3.org/">W3C</a>.</li>
<li>To conform to the <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> naming convention and adopt a suitably ridiculous working title for the project.</li>
</ol>

<p>An important thing to note, is that I am not attempting to replace <a href="http://www.TiddlyWiki.com">TiddlyWiki</a>. I see JigglyWiki as an experimental prototype to explore ways that <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> 3.0 might evolve.</p>

<p>I also hoped to keep this quiet for long enough to allow it to progress to the point that I was happy to reveal a working prototype for general discussion. That proved tricky thanks to my own excitement and the way that gossip spreads around the web and discussion groups!</p>

<p>In its current state, it provides some of the more basic <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> functions in terms of displaying tiddlers and allowing editing. It also demonstrates how it might elegantly degrade when <a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a> or Javascript are not available.  Below are a few different build which demonstrate those scenarios.</p>

<ol>
<li><a href="http://hawksworx.com/playground/jigglywiki/html_only.html">Just the HTML</a>. I&#8217;ve not included <a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a> or any of the Javascript here. The data store is visible and you can navigate the document via the tiddler links.</li>
<li><a href="http://hawksworx.com/playground/jigglywiki/html_css.html">The HTML and CSS</a>. This will function just as the version above, only it will look a bit prettier. In environments where Javascript is not available or is slow to be initialised, this is how things look until the Javascript kicks in.</li>
<li><a href="http://hawksworx.com/playground/jigglywiki/html_css_js.html">HTML, CSS and Javascript</a>. Now the data store is hidden and the default content is displayed with additional, Javascript dependent functionality included.</li>
</ol>

<p>I&#8217;d love to get comments on this approach. I&#8217;d also be very interested to get advise on <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> issues that we might be able to avoid if the opportunity to develop this into <a href="http://www.TiddlyWiki.com">TiddlyWiki</a> 3.0 really did come about. I&#8217;m less interested in bug reports though. This is a very early proof of concept which will contain many bugs and glitches.</p>

<p>You can get to the source of this project via the <a href="http://svn.tiddlywiki.org/Trunk/contributors/PhilHawksworth/experimental/jigglywiki/proto/">TiddlyWiki subversion repository</a></p>

<p>More to come!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2008/08/27/announcing-jigglywiki-a-tiddlywiki-experiment-with-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Get your Task Management wiki</title>
		<link>http://www.hawksworx.com/journal/2008/07/16/get-your-task-management-wiki/</link>
		<comments>http://www.hawksworx.com/journal/2008/07/16/get-your-task-management-wiki/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 17:17:46 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[TeamTasks]]></category>

		<category><![CDATA[osmosoft]]></category>

		<category><![CDATA[bt]]></category>

		<category><![CDATA[tiddlywiki]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2008/07/16/get-your-task-management-wiki/</guid>
		<description><![CDATA[After a bit of a hiatus, I&#8217;ve recently been concentrating on developing my pet project, teamtasks again.  Teamtasks is a simple application built using TiddlyWiki to provide a place to manage your tasks alongside other content in your very own personal wiki.



This little project is by no means new. I have been tinkering with [...]]]></description>
			<content:encoded><![CDATA[<p>After a bit of a hiatus, I&#8217;ve recently been concentrating on developing my pet project, <a href="http://getteamtasks.com">teamtasks</a> again.  Teamtasks is a simple application built using <a href="http://www.tiddlywiki.com">TiddlyWiki</a> to provide a place to manage your tasks alongside other content in your very own personal wiki.</p>

<p><a href="http://getteamtasks.com" title="getteamtasks.com"><img src="http://farm4.static.flickr.com/3182/2674867706_0397fca6e0.jpg" width="400" alt="getteamtasks while it's still warm" /></a></p>

<p>This little project is by no means new. I have been tinkering with it for quite a while but have been working on other projects so <a href="http://getteamtasks.com">teamtasks</a> has had to sit patiently in the corner and wait for me to get back to working on it. </p>

<p>Rather gratifyingly, quite a few people had seen the early work on <a href="http://getteamtasks.com">teamtasks</a> and expressed interest in using it for all manor of purposes.  The attention made me realise that it was time to promote <a href="http://getteamtasks.com">teamtasks</a> from its place in my <a href="http://hawksworx.com/playground/">playground</a> (version 0.3 can <a href="http://hawksworx.com/playground/teamtasks">still be found there</a> for those keen on glancing in the rear view mirror) to the big time! Or at least, a place of its own.  And so <a href="http://www.getteamtasks.com">getteamtasks.com</a> was born. From there you can download the latest version (v0.4 at time of writing) and configure it to fit your task management habits.</p>

<p>This is an open source project and I&#8217;m doing my best to resist the urge to tinker with it until I think that it&#8217;s perfect before letting it out into the wild, so you may find things about teamtasks that don&#8217;t work perfectly or you just don&#8217;t like. If that&#8217;s the case, then please let me know, or better yet, fix it and then show me.  I&#8217;m living by the old &#8220;Release early. Release often&#8221; mantra here and welcome contributions, in the form of suggestions, bug reports, bug fixes, enhancements, criticism, praise, sticky buns, pats on the back, or hugs.</p>

<p>Along with the new site and new release, there is a new way to get in touch and keep track of developments. Obviously, you can leave your comments here, but now you can also <a href="http://twitter.com/teamtasks">follow teamtasks on Twitter</a>. You&#8217;d get to hear about teamtasks developments if you just <a href="http://twitter.com/philhawksworth">followed me on Twitter</a> too of course, but then you&#8217;d also be subject to <a href="http://twitter.com/philhawksworth/statuses/857888010">other</a> <a href="http://twitter.com/philhawksworth/statuses/853655405">random</a> <a href="http://twitter.com/philhawksworth/statuses/852759376">utterances</a>.</p>

<p>After just a few hours of launching <a href="http://www.getteamtasks.com">getteamtasks.com</a>, I have already had a nice response. This really helps to keep me motivated and on track. As the project gains a little momentum, it also gains more pairs of hands to do the work. We&#8217;ve spent some time here at <a href="http://www.osmosoft.com">Osmosoft</a> today planning the next set of enhancements for <a href="http://getteamtasks.com">teamtasks</a> which will soon be listed on the site for you to inspect.</p>

<p>Roll on version 0.5!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2008/07/16/get-your-task-management-wiki/feed/</wfw:commentRss>
		</item>
		<item>
		<title>NBA updates on Twitter</title>
		<link>http://www.hawksworx.com/journal/2008/05/19/nba-updates-on-twitter/</link>
		<comments>http://www.hawksworx.com/journal/2008/05/19/nba-updates-on-twitter/#comments</comments>
		<pubDate>Mon, 19 May 2008 16:59:17 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[twitter]]></category>

		<category><![CDATA[mash-ups]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2008/05/19/nba-updates-on-twitter/</guid>
		<description><![CDATA[Just in time for the 2008 NBA playoffs, and heavily influenced by Robbie Clutton&#8217;s marvelous UK football scores service, I have created NBA Results



This simple service monitors results published as RSS feeds from TotallyScores and then sends updates to twitter.  By following NBA Results on Twitter, you can get alerts of all NBA match [...]]]></description>
			<content:encoded><![CDATA[<p>Just in time for the 2008 NBA playoffs, and heavily influenced by <a href="http://blog.iclutton.com/">Robbie Clutton</a>&#8217;s marvelous <a href="http://code.google.com/p/latestscorestwitter/">UK football scores</a> service, I have created <a href="http://twitter.com/NBA_Results">NBA Results</a></p>

<p><img src="http://www.hawksworx.com/journal/wp-content/uploads/2008/05/twitter-nba-results.jpg" alt="Twitter - nba_Results" /></p>

<p>This simple service monitors results published as RSS feeds from <a href="http://www.totallyscored.com/">TotallyScores</a> and then sends updates to twitter.  By following <a href="http://twitter.com/NBA_Results">NBA Results</a> on Twitter, you can get alerts of all NBA match results.  Only interested in updates for your team? That&#8217;s fine, you can choose instead to follow your team.  There are currently accounts for:</p>

<p><a href="http://twitter.com/celtics_results">twitter.com/celtics_results</a></p>

<p><a href="http://twitter.com/cavs_results">twitter.com/cavs_results</a></p>

<p><a href="http://twitter.com/hornets_results">twitter.com/hornets_results</a></p>

<p><a href="http://twitter.com/jazz_results">twitter.com/jazz_results</a></p>

<p><a href="http://twitter.com/lakers_results">twitter.com/lakers_results</a></p>

<p><a href="http://twitter.com/magic_results">twitter.com/magic_results</a></p>

<p><a href="http://twitter.com/pistons_results">twitter.com/pistons_results</a></p>

<p><a href="http://twitter.com/spurs_results">twitter.com/spurs_results</a></p>

<p>I&#8217;ll be adding more teams ready for next season, but if you want to make sure that you can get updates on Twitter of your team&#8217;s results, feel free to email me (phawksworth [at] gmail [dot] com) and push your team to the top of my todo list.</p>

<p>I&#8217;m also readying <a href="http://twitter.com/mlb_results">MLB Results</a> to provide Major League Baseball results. <a href="http://twitter.com/mlb_results">MLB Results</a> will be active very soon. As with the NBA teams, please poke me if you want to get updates for your team and I&#8217;ll be sure to create their account.</p>

<p>The code which drives this, is my first outing into the world of Python. You can <a href="http://hawksworx.com/playground/tweet_results/">find the code here</a>. Feel free to take it and use it as you wish.  I also welcome feedback and suggestions on the code, please be gentle though, as I said, this is my first time playing with Python.</p>

<p>Many thanks to the nice folks at <a href="http://www.carsonified.com">Carsonified</a> for permission to use their site&#8217;s background image on <a href="http://twitter.com/NBA_Results">NBA Results</a>. 
Thanks also to <a href="http://www.flickr.com/photos/balakov">Balakov</a> who published <a href="http://www.flickr.com/photos/balakov/502470343/">the image used</a> for each NBA team twitter account icon under a Creative Commons license on <a href="http://www.flickr.com">flickr</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2008/05/19/nba-updates-on-twitter/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JSSpec bundle for Textmate helps with writing tests</title>
		<link>http://www.hawksworx.com/journal/2008/04/14/jsspec-bundle-for-textmate-helps-with-writing-tests/</link>
		<comments>http://www.hawksworx.com/journal/2008/04/14/jsspec-bundle-for-textmate-helps-with-writing-tests/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 13:31:01 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[textmate]]></category>

		<category><![CDATA[osmosoft]]></category>

		<category><![CDATA[tiddlywiki]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2008/04/14/jsspec-bundle-for-textmate-helps-with-writing-tests/</guid>
		<description><![CDATA[Recently, we at Osmosoft have been trying to make good on one of our pledges: To introduce a unit testing framework to TiddlyWiki development.

Along the way we examined several Javascript testing frameworks and found that JSSpec suited our needs quite nicely. JSSpec resembles the popular RSpec testing framework popularly used by Ruby developers.

As a result, [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, we at <a href="http://www.osmosoft.com">Osmosoft</a> have been trying to make good on one of our pledges: To introduce a unit testing framework to <a href="http://www.tiddlywiki.com">TiddlyWiki</a> development.</p>

<p>Along the way we examined several Javascript testing frameworks and found that <a href="http://code.google.com/p/jsspec/">JSSpec</a> suited our needs quite nicely. <a href="http://code.google.com/p/jsspec/">JSSpec</a> resembles the popular <a href="http://rspec.info/">RSpec</a> testing framework popularly used by Ruby developers.</p>

<p>As a result, I have been dabbling away at writing tests in my favored text editor - the rather lovely <a href="http://www.macromates.com/">Textmate</a>.  Since this is a repetitive task, I figured that it was worth creating some helper to speed things along. <a href="http://www.macromates.com/">Textmate</a> offers an easy to make powerful bundles to automate tasks and help you in your code development and so I quickly put together a <a href="http://www.hawksworx.com/resources/JSSpec.tmbundle.zip">JSSpec bundle</a>. This simple bundle offers a set of snippets which can act as a quick reference of what methods are available in <a href="http://code.google.com/p/jsspec/">JSSpec</a> and let you rapidly create your test code.  <a href="http://www.macromates.com/">Textmate</a> users can <a href="http://www.hawksworx.com/resources/JSSpec.tmbundle.zip">download this bundle</a> and just double-click it to make it available for use in <a href="http://www.macromates.com/">Textmate</a>.</p>

<p><a href="http://www.hawksworx.com/resources/JSSpec.tmbundle.zip"><img src="http://www.hawksworx.com/journal/wp-content/uploads/2008/04/jsspecbundle.png" alt="Jsspecbundle" /></a></p>

<p>I won&#8217;t go into the workings of testing with <a href="http://code.google.com/p/jsspec/">JSSpec</a> here, rather, you can learn about that at the <a href="http://code.google.com/p/jsspec/">official site</a>.</p>

<p>Feel free to take this bundle and modify it to fit your purpose. Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2008/04/14/jsspec-bundle-for-textmate-helps-with-writing-tests/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to create and distribute lovely screencasts</title>
		<link>http://www.hawksworx.com/journal/2008/03/28/how-to-create-and-distribute-lovely-screencasts/</link>
		<comments>http://www.hawksworx.com/journal/2008/03/28/how-to-create-and-distribute-lovely-screencasts/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 14:56:19 +0000</pubDate>
		<dc:creator>PhilHawksworth</dc:creator>
		
		<category><![CDATA[osx]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.hawksworx.com/journal/2008/03/28/how-to-create-and-distribute-lovely-screencasts/</guid>
		<description><![CDATA[For a while I have been meaning to start posting screencasts of some of my work to spread the word, and to explain some of the details that are difficult to describe in text.

After much tinkering, I think that I have arrived at a nice setup and have found a good way to distribute the [...]]]></description>
			<content:encoded><![CDATA[<p>For a while I have been meaning to start posting screencasts of some of my work to spread the word, and to explain some of the details that are difficult to describe in text.</p>

<p>After much tinkering, I think that I have arrived at a nice setup and have found a good way to distribute the screencasts, making them available to stream over the web or to download for consumption in your own sweet time.</p>

<p>In this post, I&#8217;ll share my findings so that you can set yourself up with a similar environment.  I use a Mac, and so these tips are leveled squarely at the Mac users out there. Sorry to everyone else, but I&#8217;m just writing about what I know.</p>

<p><a href="http://www.hawksworx.com/journal/2008/03/28/how-to-create-and-distribute-lovely-screencasts/#more-70" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawksworx.com/journal/2008/03/28/how-to-create-and-distribute-lovely-screencasts/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
