<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Simon McManus</title>
	<atom:link href="http://simonmcmanus.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://simonmcmanus.wordpress.com</link>
	<description></description>
	<lastBuildDate>Mon, 16 Jan 2012 15:17:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='simonmcmanus.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Simon McManus</title>
		<link>http://simonmcmanus.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://simonmcmanus.wordpress.com/osd.xml" title="Simon McManus" />
	<atom:link rel='hub' href='http://simonmcmanus.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Learning from Single Page Web Applications</title>
		<link>http://simonmcmanus.wordpress.com/2012/01/05/learning-from-single-page-web-applications/</link>
		<comments>http://simonmcmanus.wordpress.com/2012/01/05/learning-from-single-page-web-applications/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 19:56:54 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[application architecture]]></category>
		<category><![CDATA[application templates]]></category>
		<category><![CDATA[javascript application]]></category>
		<category><![CDATA[javascript applications]]></category>
		<category><![CDATA[page applications]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/?p=402</guid>
		<description><![CDATA[Learning from Single Page Web Applications I&#8217;ve spent the last three years working on single page applications of various shapes and sizes. I don&#8217;t like em,  this post isn&#8217;t about why but I will just say I like data to be exposed at the lowest level (HTTP) and not require Javascript to turn it into &#8230; <a href="http://simonmcmanus.wordpress.com/2012/01/05/learning-from-single-page-web-applications/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=402&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>Learning from Single Page Web Applications</h1>
<p>I&#8217;ve spent the last three years working on single page applications of various shapes and sizes. I don&#8217;t like em,  this post isn&#8217;t about why but I will just say I like data to be exposed at the lowest level (HTTP) and not require Javascript to turn it into something useful.   All that being said I&#8217;ve been lucky enough to work with some clever folks and the end results have all been very interesting and pushed boundaries in their own way.</p>
<p>At <a href="http://2011.full-frontal.org/">Full Frontal</a> I enjoyed listening to <a href="https://twitter.com/#!/slicknet">Nicholas Zakas</a> talking about <a href="http://www.slideshare.net/nzakas/scalable-javascript-application-architecture">Scalable Javascript Application Architecture</a>. In many ways he described the architecture we used for the <a href="http://configurator.vw.com">Volkswagen Configurator</a>. Earlier in the day <a href="http://hawksworx.com/">Phil Hawksworth</a> had been talking about <a href="http://speakerdeck.com/u/philhawksworth/p/excessive-enhancement">Excessive Enhancement</a>.</p>
<p>It struck me that while most front end MVC frameworks make it easy to build Javascript applications, making them work as web applications (without Javascript) becomes much more difficult. This is largely due to the fact that you define and build your application, templates/page structure using the browser&#8217;s Javascript interpreter.</p>
<p>I&#8217;m of the view that if you architect something properly you can get the same full experience provided by Javascript applications but still have a reliable fallback for those who do not have Javascript enabled. That is what I call a proper web application.</p>
<p>In the back of my mind I&#8217;ve been thinking about Charlie Robbins excellent post: <a href="http://blog.nodejitsu.com/scaling-isomorphic-javascript-code">Scaling Isomorphic Javascript Code</a> which talks elegantly about why MVC might not be the best pattern in an environment where you can execute Javascript on the server. He suggests the Resource-View-Presenter pattern.</p>
<p>It seemed that the way we currently split our frameworks between front and back end reduces reuse of configuration/code and actually encourages duplication.</p>
<p>I wanted to try defining all of these things on the server, so they could be consumed on the server and client.</p>
<div>As soon as the talk finished I found myself writing code. This blog post talks about what I have been building and why.</p>
</div>
<div></div>
<h2>Sharing URLs between client and server</h2>
<p>Allow me to deviate for a moment.</p>
<p>On large applications it&#8217;s common practice to split the code and teams between front and back end developers.  This often results in duplication and unnecessary bugs.  A common example being maintaining URLs in two places.  In the browser we might a have a URLs object:</p>
<pre>namespace.urls = {
     login: '/login',
     user: '/user/:username',
     ....
}</pre>
<p>And then on the server the same URLs would be defined possibly using a different syntax.  Changing one does not change the other, and with split teams this can result in unnecessary bugs.</p>
<p>With <a href="http://nodejs.org/">Node.js</a> it&#8217;s particularly easy to share exactly the same URL object on the client and server. If you ensure your HTML links are populated from the same URL object your application will continue to function when URLs change.</p>
<p>This is what I&#8217;ve been doing in some of my Node apps:</p>
<pre>(function(exports){
    exports.HOME = '/';
    exports.LOGIN = '/login';
    exports.USERS = '/users';
    exports.USER = '/users/:user';
    // also add URL functions here that can be shared between client and server.
    exports.build = function(str, tokens) {
        for(token in tokens){
            str = str.replace(':'+token, tokens[token]);
        }
        return str;
    };
})(typeof exports === 'undefined' ? namespace.urls={} : exports);</pre>
<p>That allows it to be used as a Node module using require(&#8216;./urls.js&#8217;) and when served to the browser the URLs are available at namespace.urls.</p>
<p>I&#8217;ve been using <a href="http://expressjs.com/">Express.js</a>, the parameter sytax seems to work nicely with <a href="https://github.com/PaulKinlan/leviroutes">Levi routes</a> on the front end.</p>
<p>This seems like common sense. It&#8217;s a fine example of <a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY.</a>  Define as much as possible in server-side JS and then allow it to be consumed by the client-side JS reusing as much logic as possible.</p>
<h2>Reusable modules</h2>
<p><a href="http://tiddlywiki.com/">TiddlyWiki</a> has the concept of plugins which are essentially just a chunk of HTML/CSS/JS relevant to a particular piece of functionality which could be added to HTML using a special syntax:</p>
<pre>&lt;&lt;pluginName&gt;&gt;</pre>
<p>On the <a href="http://configurator.vw.com">Volkswagen Configurator</a> we also have the concept of UI&#8217;s which were reusable chunks of HTML/CSS/JS which could be appended into any DOM node.</p>
<p>Both are essentially variants of the <a href="http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth">Module Pattern</a> with added support for HTML and CSS as part of the module.  Both methods work really nicely just so long as you&#8217;ve got Javascript turned on.</p>
<p>I started to build a simple Node.js app which could parse a modules folder and serve the resources at appropriate URLs. See the following folder structure:</p>
<p><img class="alignnone" title="Folder Strucutre" src="https://img.skitch.com/20120102-cyxfm2b6pgs8c5fasj7b1ppg5b.jpg" alt="" width="198" height="208" /></p>
<p>Generated the following URLs:</p>
<pre>/contact.css
/contact.html
/contact.js
/content.css
/content.html
/content.js
/flickr.css
/flickr.html
/flickr.js</pre>
<p>You will notice there is an app.js file in the flickr folder which contains the server-side JS required by the module. Later this will provide a getData method to asynchronously generate a templating object which can populate the HTML.</p>
<h2>Define your views on the server</h2>
<p>In browserland it&#8217;s really easy to mess around with the DOM. You can completely transform a page, especially when you start appending modules of HTML/CSS/JS to DOM nodes. The problem comes when you want to show the same view to something that doesn&#8217;t understand Javascript, an RSS feed or search engine for example.</p>
<p>I decided to create a view specification which could be read by the server and also served to the browser. Doing so should make it really easy to render the exact same HTML with or without Javascript enabled.  Using<a href="https://github.com/simonmcmanus/sizlate"> Sizlate</a> I started with this (it has since changed):</p>
<pre>var views = [{
    url: '/user/:user'
    view: 'userpage',
    modules: [
        'photos',
        'login',
        'timeline'
    ]
 }];</pre>
<p>In the following example I have left out the JS and CSS files.  The view is just a folder containing a HTML file of the same name and an optional app.js (as with the modules). It assumes the view HTML file contains a  tag with a id corresponding to each of the modules specified for the view.</p>
<p>I like this simple approach but in order for it to scale I may soon need to start using HTML data attributes instead of ids. This is what the folder structure looked like:<br />
<img src="https://img.skitch.com/20120102-naqptbhb5cn63tgcx7gky8f83x.jpg" alt="" width="206" height="208" /></p>
<p>project/views/userpage/userpage.html (the view HTML file) contains:</p>
<pre>&lt;html&gt;
&lt;body&gt;
    &lt;nav&gt;...&lt;/nav&gt;
    &lt;div id="photos" /&gt; 
    &lt;div id="login" /&gt;
    &lt;div id="timeline" /&gt; 
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>The end result would look something like this:</p>
<pre>&lt;html&gt;
&lt;body&gt;
    &lt;nav&gt;...&lt;/nav&gt;
    &lt;div id="photos"&gt;
        .. contents of /modules/photos/photos.html appended in here
    &lt;/div&gt; 
    &lt;div id="login"&gt;
        .. contents of /modules/login/login.html appended in here
    &lt;/div&gt; 
    &lt;div id="timeline"&gt; 
        .. contents of /modules/timeline/timeline.html appended in here
    &lt;/div&gt;  
&lt;/body&gt;
&lt;/html&gt;</pre>
<div></div>
<h2>Concatenation vs Caching</h2>
<p>At this stage I was able to build a sample app with my re-usable modules and a view. I thought it would be useful to concatenate all the JS and CSS files together for each view. It turns out I was wrong.</p>
<p>In a situation where you&#8217;re reusing modules across multiple views concatinating per view makes no sense because you end up serving the same CSS across multiple URLs. The CSS/JS will be cached per view, not per module.</p>
<p>I decided it was actually better to use the URLs generated for the CSS/JS by the modules so they can be cached at the most granular level.  Both methods will be possible.  Currently CSS modules are served inline with the module HTML (not the document HEAD).  There will be some work to ensure that all CSS LINK tags are moved to the document HEAD before the view is rendered. <a href="https://github.com/tmpvar/jsdom">JSDOM</a> should make that quite easy.</p>
<h2>History API</h2>
<p>With views and modules defined on the server I&#8217;ve started to put together a front end framework which can consume the same application specification and make the whole experience a bit more pleasant.  I&#8217;m currently experimenting with generating popstate listeners from the specification which can then fire off the default/custom transitions between views.</p>
<h2>Whats going on here?</h2>
<p>Essentially I have started building a framework for mixing up reusable modules of HTML/CSS/JS in ways usually associated with Javascript applications but with progressive enhancement as one of its core values.</p>
<p>The functionality described above will almost certainly change.  What I have built so far is a simple proof of concept to test the best way to define views in this way using Sizlate.</p>
<p>At the moment I&#8217;m working on a sample app pulling in data from Flickr to demonstrate how it might all fit together in the real world.  Its pretty messy and requires lots of work but you can see the code <a href="https://github.com/simonmcmanus/framework">here</a>.</p>
<p>I thought it was worth blogging about my approach just to get some feedback. Please do let me know what you think. All idea&#8217;s, contributions, criticisms welcomed.</p>
<p>I&#8217;m going to be talking about Sizlate at the London Node user group on the 25th January at the Forward Offices in Camden, London. <a href="http://lnugjanuary12.eventbrite.co.uk/">Please register here if you would like to attend.</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/402/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=402&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2012/01/05/learning-from-single-page-web-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>

		<media:content url="https://img.skitch.com/20120102-cyxfm2b6pgs8c5fasj7b1ppg5b.jpg" medium="image">
			<media:title type="html">Folder Strucutre</media:title>
		</media:content>

		<media:content url="https://img.skitch.com/20120102-naqptbhb5cn63tgcx7gky8f83x.jpg" medium="image" />
	</item>
		<item>
		<title>Sizlate</title>
		<link>http://simonmcmanus.wordpress.com/2011/11/22/sizlate/</link>
		<comments>http://simonmcmanus.wordpress.com/2011/11/22/sizlate/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 14:39:18 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[osmososft]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/?p=400</guid>
		<description><![CDATA[Over the past year I have been experimenting with Node.js. Its been a pretty interesting journey and I have learned a great deal. One of my more interesting experiments has been Sizlate. On projects at work I often find myself doing things like this: domNode.find('div.class').html('&#60;b&#62;INSERT SOME STUFF HERE&#60;/b&#62;'); It&#8217;s a really powerful way to populate &#8230; <a href="http://simonmcmanus.wordpress.com/2011/11/22/sizlate/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=400&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Over the past year I have been experimenting with <a href="http://nodejs.org/">Node.js</a>. Its been a pretty interesting journey and I have learned a great deal.</p>
<p>One of my more interesting experiments has been <a href="https://github.com/simonmcmanus/sizlate/">Sizlate</a>.</p>
<p>On projects at work I often find myself doing things like this:</p>
<pre><code> domNode.find('div.class').html('&lt;b&gt;INSERT SOME STUFF HERE&lt;/b&gt;'); </code></pre>
<p>It&#8217;s a really powerful way to populate HTML. What I really like is that there is no need to add any crazy syntax into my templates.  Templates are just valid HTML and the point of insertion is specified by the jQuery selector.</p>
<p>From the developers point of view this is really simple, it does however introduce problems when Javascript is not turned on. I found myself wondering how this technique might be transferred onto the server.</p>
<p>After some experimentation I came up with <a href="https://github.com/simonmcmanus/sizlate/">Sizlate</a>. A HTML templating engine for Express.js.</p>
<p>Its pretty easy to get jQuery running on Node.js but I decided that  jQuery wasn&#8217;t  a good fit for my use case.  <a title="sizzle" href="http://sizzlejs.com/">Sizzle</a> is the selector engine used by jQuery, I decided to investigate using Sizzle to provide the selector functionality. It turned out that this works quite nicely using the J<a href="https://github.com/tmpvar/jsdom">SDOM</a> project.</p>
<p>To use Sizlate you simple need to register it as your templating engine:</p>
<pre><code>var sizlate = require('sizlate'); </code>
<code>app.register('.html', sizlate); </code></pre>
<p>And then just call res.render as you would normally with Express:</p>
<pre><code> res.render('template.html',  { selectors: { 'a': 'hi there' } }); </code></pre>
<p>That&#8217;s the most basic example. On github I have provided an <a href="https://github.com/simonmcmanus/sizlate/tree/master/examples">example</a> of  <a href="https://github.com/simonmcmanus/sizlate/tree/master/examples/object">passing sizlate an object</a> allowing more complex data structures to be used. There is also an <a href="https://github.com/simonmcmanus/sizlate/tree/master/examples/partial">example using partials</a>.</p>
<p>At the moment Sizlate only works on the serverside but it should be quite easy to get it working in the browser.</p>
<p>Feel free to have a play and let me know if you have any feedback.</p>
<p>Sizlate is available as a NPM package and can be installed using the command:</p>
<pre><code> NPM install sizlate </code>
<code> </code>
For more details please read the <a href="https://github.com/simonmcmanus/sizlate">readme on github.com.</a></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/400/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=400&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2011/11/22/sizlate/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>
	</item>
		<item>
		<title>Cross Browser CSS3 Gradient</title>
		<link>http://simonmcmanus.wordpress.com/2011/04/05/cross-browser-css3-gradient/</link>
		<comments>http://simonmcmanus.wordpress.com/2011/04/05/cross-browser-css3-gradient/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 13:55:51 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[osmososft]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/?p=394</guid>
		<description><![CDATA[Publishing this here for my own convenience. background: #FF8D2C; /* for non-css3 browsers */ /* For WebKit (Safari, Google Chrome etc) */ background: -webkit-gradient(linear, left top, left bottom, from(#FFFFFF), to(#FF8D2C)); /* For Mozilla/Gecko (Firefox etc) */ background: -moz-linear-gradient(top, #FFFFFF, #FF8D2C); /* For Internet Explorer 5.5 - 7 */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#FFFFFF, endColorstr=#FF8D2C); /* For Internet Explorer &#8230; <a href="http://simonmcmanus.wordpress.com/2011/04/05/cross-browser-css3-gradient/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=394&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Publishing this here for my own convenience.</p>
<pre>background: #FF8D2C; /* for non-css3 browsers */
/* For WebKit (Safari, Google Chrome etc) */
background: -webkit-gradient(linear, left top, left bottom, from(#FFFFFF), to(#FF8D2C));
/* For Mozilla/Gecko (Firefox etc) */
background: -moz-linear-gradient(top, #FFFFFF, #FF8D2C);
/* For Internet Explorer 5.5 - 7 */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#FFFFFF, endColorstr=#FF8D2C);
/* For Internet Explorer 8 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#FFFFFF, endColorstr=#FF8D2C)";</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/394/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=394&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2011/04/05/cross-browser-css3-gradient/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>
	</item>
		<item>
		<title>Building on the Web</title>
		<link>http://simonmcmanus.wordpress.com/2011/02/11/building-on-the-web/</link>
		<comments>http://simonmcmanus.wordpress.com/2011/02/11/building-on-the-web/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 11:55:38 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[osmososft]]></category>
		<category><![CDATA[hashbang]]></category>
		<category><![CDATA[javascript apps]]></category>
		<category><![CDATA[progressive enhancement]]></category>
		<category><![CDATA[pushState]]></category>
		<category><![CDATA[web apps]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/?p=257</guid>
		<description><![CDATA[Foundations When building a house the foundations are fundamental to it&#8217;s structural integrity. Without good strong foundations the house is weak and liable to fall over at any moment. Things on the web also have foundations in the form of HTML and URIs.  JavaScript can then be layered on top to improve the experience. It&#8217;s called &#8230; <a href="http://simonmcmanus.wordpress.com/2011/02/11/building-on-the-web/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=257&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Foundations</strong></p>
<p>When building a house the foundations are fundamental to it&#8217;s structural integrity. Without good strong foundations the house is weak and liable to fall over at any moment.</p>
<p>Things on the web also have foundations in the form of HTML and URIs.  JavaScript can then be layered on top to improve the experience. It&#8217;s called progressive enhancement and people seem to be forgetting about it these days.</p>
<p>It&#8217;s pretty simple, build your HTML and CSS  first and then override the default behaviours with JavaScript.  This will ensure you are building on solid foundations.</p>
<p>When generating HTML on the server, you can easily re-use it with JavaScript. Its far better than generating the HTML in the browser (with JavaScript) and either ignoring Search engines or having to duplicate your logic on the server for SEO, accessibility and things like RSS feeds.</p>
<p><strong><span style="font-size:15px;"> </span></strong></p>
<p>Here are some rather sweeping statements:</p>
<p><strong>1.</strong> JavaScript should NEVER be used to process data in the browser.</p>
<p><strong>2. </strong>JavaScript should rarely be used in the browser to generate html (sharing code with server-side JavaScript is acceptable).</p>
<p>I did warn you they were rather sweeping.</p>
<p>I&#8217;ve heard it said that if you want to provide an app/flash like experience you need to use JavaScript to render your pages: You need to build single page JavaScript apps.</p>
<p>history.pushState() tells us otherwise. You can read about it <a title="history.pushState docs" href="https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history">here</a>.</p>
<p>Basically it makes it possible for what we now call single page web apps to exist across multiple pages while still providing nice page transitions (no page refresh).</p>
<p><strong>history.pushState() &#8211; A Fallback</strong></p>
<p>History.pushState is all well and good but it&#8217;s only available in WebKit and Firefox(4) at the moment.  Maybe that is why people are seeing <a href="http://www.isolani.co.uk/blog/javascript/BreakingTheWebWithHashBangs">hashbangs</a> as an alternative solution. Personally I would rather fallback to a fragment identifier (#) only in situations where history.pushState is not available.</p>
<p>There would need to be a bit of JavaScript at the top of each page redirecting users to the appropriate fragment identifier in browsers that do not support pushState.</p>
<p>So when pushState is not available:</p>
<p>http://simonmcmanus.com/page.html</p>
<p>might redirect to :</p>
<p>http://simonmcmanus.com#page.html</p>
<p>which would then go and fetch the contents from</p>
<p>http://simonmcmanus.com/page.html</p>
<p>If a page is loaded with the fragment identifier in a browser that supports pushState the hash should be removed and pushState used.</p>
<p><strong><span style="font-size:20px;">Summary</span></strong></p>
<p>When you require JavaScript for templating and data processing you are on a very slippery slope to writing JavaScript applications.</p>
<p>We have for a long time been able to obfuscate our data with technologies like Flash, I for one have avoided these technologies because I believe that when we publish data properly on the web it becomes more re-usable, findable, accessible and actually has far greater potential.</p>
<p>By all means use JavaScript, but please don&#8217;t rely on it.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/257/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=257&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2011/02/11/building-on-the-web/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>
	</item>
		<item>
		<title>3D Transforms with CSS3</title>
		<link>http://simonmcmanus.wordpress.com/2011/01/05/3d-transforms-with-css3/</link>
		<comments>http://simonmcmanus.wordpress.com/2011/01/05/3d-transforms-with-css3/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 11:08:05 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[3d]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/?p=259</guid>
		<description><![CDATA[Over Christmas I started moving simonmcmanus.com over to node.js making some tweaks to the CSS as I went. I wanted to examine the z-index of my page so decided to investigate CSS3 3D transformations. I won&#8217;t be launching the new simonmcmanus.com for a while but here is what I found out about 3D CSS transformations. &#8230; <a href="http://simonmcmanus.wordpress.com/2011/01/05/3d-transforms-with-css3/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=259&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Over Christmas I started moving <a title="Simon McManus homepage" href="http://simonmcmanus.com">simonmcmanus.com</a> over to <a href="http://nodejs.org/">node.js</a> making some tweaks to the CSS as I went. I wanted to examine the z-index of my page so decided to investigate CSS3 3D transformations. I won&#8217;t be launching the new <a href="http://simonmcmanus.com">simonmcmanus.com</a> for a while but here is what I found out about 3D CSS transformations.</p>
<p>The following examples only work on the latest webkit browsers (Chrome and Safari). In Chrome you will need to enable &#8220;GPU Accelerated Compositing&#8221;. Goto <a href="flags">about:flags</a> turn on &#8220;GPU Accelerated Compositing&#8221; and then restart Chrome.</p>
<p>I started off with one of <a href="http://www.paulrhayes.com/experiments/perspective/">Paul Hayes early experiments</a> which later progressed into his <a href="http://www.paulrhayes.com/2009-07/animated-css3-cube-interface-using-3d-transforms/">animated cube demo.</a></p>
<p><a href="http://simonmcmanus.com/stuff/css3/rotate/standalone/index.html">Here is what I came up with.</a></p>
<p>Screenshots:</p>
<p><a href="http://simonmcmanus.files.wordpress.com/2011/01/1.png"><img title="1" src="http://simonmcmanus.files.wordpress.com/2011/01/1.png?w=300&#038;h=236" alt="" width="300" height="236" /></a></p>
<p><a href="http://simonmcmanus.files.wordpress.com/2011/01/2.png"><img title="2" src="http://simonmcmanus.files.wordpress.com/2011/01/2.png?w=300&#038;h=209" alt="" width="300" height="209" /></a></p>
<p><a href="http://simonmcmanus.files.wordpress.com/2011/01/3.png"><img title="3" src="http://simonmcmanus.files.wordpress.com/2011/01/3.png?w=300&#038;h=198" alt="" width="300" height="198" /></a></p>
<p>This is what I did:</p>
<h3>Step 1: Create the 3d space</h3>
<p>Wrap two divs round the elements to appear in 3D :</p>
<pre>&lt;div id="perspective"&gt;
   &lt;div id="rotator"&gt;
      &lt;!--original HTML in here--&gt;
   &lt;/div&gt;
&lt;/div&gt;</pre>
<p>Set the following CSS:</p>
<pre>.perspective { -webkit-perspective: 2400; }
.three-d { -webkit-transform-style: preserve-3d; }</pre>
<h3>Step 2: Setting translateZ</h3>
<p>Set translateZ for each item to appear 3D:</p>
<pre>-webkit-transform: translateZ(3em);</pre>
<p>In my example I set it for the following items:</p>
<pre>h1,
.item,
.twitter-bird.sign,
.vcard{
   -webkit-transform: translateZ(3em);
}</pre>
<p>In this case each z-index will be represented by 3ems.</p>
<h3>Step 3: Making it move</h3>
<p>Define the animation :</p>
<pre>#rotator {
   -webkit-animation-name: rotate;
   -webkit-animation-duration: 15s;
   -webkit-animation-iteration-count: infinite;
}</pre>
<p>And then specify the steps of the animation:</p>
<pre>@-webkit-keyframes rotate {
   0% {
      -webkit-transform:rotateY(0deg);
   }
   5% {
      -webkit-transform:rotateY(0deg);
   }
   30% {
      -webkit-transform:rotateY(-40deg);
   }
   50% {
      -webkit-transform:rotateY(85deg);
   }
   55% {
      -webkit-transform:rotateY(85deg);
   }
   90% {
      -webkit-transform:rotateY(0deg);
   }
}</pre>
<p><a title="rotate demo" href="http://simonmcmanus.com/stuff/css3/rotate/standalone/1.html">demo here.</a></p>
<h3>Step 4 ..  Perspective</h3>
<p>To give a zoom effect I created a second animation:</p>
<pre>#perspective {
   -webkit-animation-name: perspective;
   -webkit-animation-duration: 15s;
   -webkit-animation-iteration-count: infinite;
 }</pre>
<pre>@-webkit-keyframes perspective {
   0% {
      -webkit-perspective: 2400;
   }
   5% {
      -webkit-perspective:2400;
   }
   30% {
      -webkit-perspective:650;
   }
   50% {
      -webkit-perspective:2000;
   }
   55% {
      -webkit-perspective:2000;
   }
   70% {
      -webkit-perspective: 2400;
   }
}</pre>
<p><a title="final demo" href="http://simonmcmanus.com/stuff/css3/rotate/standalone/index.html">final demo</a></p>
<p>That&#8217;s what I&#8217;ve done so far. Comments and modifications welcomed.</p>
<p>Happy New Year</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/259/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=259&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2011/01/05/3d-transforms-with-css3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>

		<media:content url="http://simonmcmanus.files.wordpress.com/2011/01/1.png?w=300" medium="image">
			<media:title type="html">1</media:title>
		</media:content>

		<media:content url="http://simonmcmanus.files.wordpress.com/2011/01/2.png?w=300" medium="image">
			<media:title type="html">2</media:title>
		</media:content>

		<media:content url="http://simonmcmanus.files.wordpress.com/2011/01/3.png?w=300" medium="image">
			<media:title type="html">3</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing CKEditor with standalone TiddlyWiki</title>
		<link>http://simonmcmanus.wordpress.com/2010/06/28/installing-ckeditor-with-standalone-tiddlywiki/</link>
		<comments>http://simonmcmanus.wordpress.com/2010/06/28/installing-ckeditor-with-standalone-tiddlywiki/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 16:06:58 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[osmososft]]></category>
		<category><![CDATA[CKEditor TiddlyWiki]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/?p=238</guid>
		<description><![CDATA[I was recently asked how to use CKEditor with a standalone TiddlyWiki. CKEditor is the replacement for FCKEditor. I&#8217;ve been using it for a while in MyDocs (a customisation of TiddlyDocs) but thought I would take this opportunity to document how it can be used in a standalone TiddlyWiki. First off we need to get &#8230; <a href="http://simonmcmanus.wordpress.com/2010/06/28/installing-ckeditor-with-standalone-tiddlywiki/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=238&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was recently asked how to use <a href="http://ckeditor.com/">CKEditor</a> with a standalone<a href="http://tiddlywiki.com"> TiddlyWiki</a>. <a href="http://ckeditor.com/">CKEditor</a> is the replacement for FCKEditor. I&#8217;ve been using it for a while in MyDocs (a customisation of <a href="http://tiddlydocs.com">TiddlyDocs</a>) but thought I would take this opportunity to document how it can be used in  a standalone TiddlyWiki.</p>
<p>First off we need to get all the tiddlers required for <a href="ckeditor.com">CKEditor</a>, the easiest way to do that is to cook the <a href="http://svn.tiddlywiki.org/Trunk/verticals/ckeditor/index.html.recipe">ckeditor vertical recipe</a>.</p>
<p>For your convenience I&#8217;ve uploaded the <a href="tiddlywiki.com">TiddlyWiki</a> file it produces <a href="http://simonmcmanus.com/stuff/ckeditor/index.html">here</a>.</p>
<p>Now we need to download the <a href="ckeditor.com">CKEditor</a> files, You can download them <a href="http://download.cksource.com/CKEditor/CKEditor/CKEditor%203.3.1/ckeditor_3.3.1.zip">here</a>.</p>
<p>Finally you just need to change the location set in the <a href="http://simonmcmanus.com/stuff/ckeditor/index.html#MarkupPreHead">MarkupPreHead</a> tiddler so it points to the CKEditor folder you just downloaded. In my case:</p>
<p>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;<strong>./ckeditor/ckeditor.js</strong>&#8220;&gt;&lt;/script&gt;</p>
<p>If you are using cook you will need to save the MarkupPreHead tiddler from within the TiddlyWiki file for it to be set correctly. I have already done so in the example provided.</p>
<p>You may also want to change the values in the &#8220;CKEditorSettings&#8221; tiddler.</p>
<p>Save your changes, refresh the browser and that should do it.</p>
<p><strong>Update: </strong></p>
<p>As some folks experienced problems getting this setup I have provided a zip file of the output:<br />
<a href="http://simonmcmanus.com/stuff/ckeditor/twCKEditor.zip"></p>
<p>http://simonmcmanus.com/stuff/ckeditor/twCKEditor.zip</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/238/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=238&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2010/06/28/installing-ckeditor-with-standalone-tiddlywiki/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>
	</item>
		<item>
		<title>A Simple CKEditor Plugin Template</title>
		<link>http://simonmcmanus.wordpress.com/2010/05/12/a-simple-ckeditor-plugin-template/</link>
		<comments>http://simonmcmanus.wordpress.com/2010/05/12/a-simple-ckeditor-plugin-template/#comments</comments>
		<pubDate>Wed, 12 May 2010 10:42:37 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[osmososft]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/?p=230</guid>
		<description><![CDATA[FCKEditor has recently released a new version called CKEditor. Unfortunately much of the documentation has not been updated which makes building things on top of the API somewhat difficult at the moment. I have published a basic template which make it clear how to create a plugin that adds an item to the CKEditor toolbar, &#8230; <a href="http://simonmcmanus.wordpress.com/2010/05/12/a-simple-ckeditor-plugin-template/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=230&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>FCKEditor has recently released a new version called <a href="http://ckeditor.com/">CKEditor</a>. Unfortunately much of the documentation has not been updated which makes building things on top of the API somewhat difficult at the moment.</p>
<p>I have published a basic template which make it clear how to create a plugin that adds an item to the CKEditor toolbar, when that button is pressed the users is presented with a simple dialog box containing two tabs which can interact with the parent editor.</p>
<p>The template can be found at :</p>
<p><a href="http://simonmcmanus.com/stuff/tw_uploader/testPlugin.zip">http://simonmcmanus.com/stuff/tw_uploader/testPlugin.zip</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=230&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2010/05/12/a-simple-ckeditor-plugin-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing TiddlyDocs latest on TiddlyWeb (Mac)</title>
		<link>http://simonmcmanus.wordpress.com/2009/09/21/installing-tiddlydocs-latest-on-tiddlyweb-mac/</link>
		<comments>http://simonmcmanus.wordpress.com/2009/09/21/installing-tiddlydocs-latest-on-tiddlyweb-mac/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 12:47:37 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[osmososft]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/?p=225</guid>
		<description><![CDATA[Assuming you have already installed TiddlyWeb and TiddlyWebWiki (http://tiddlyweb.peermore.com/wiki/) this is how to install the very latest development version of TiddlyDocs on your local machine : curl http://svn.tiddlywiki.org/Trunk/contributors/SimonMcManus/tiddlyweb/tiddlydocs/install.sh &#62;install.sh sudo sh install.sh cd tiddlydocs twanager server 127.0.0.1 8080 In your browsers then goto : http://127.0.0.1:8080/recipes/tiddlydocs/tiddlers.wiki<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=225&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Assuming you have already installed TiddlyWeb and TiddlyWebWiki (http://tiddlyweb.peermore.com/wiki/) this is how to install the very latest development version of TiddlyDocs on your local machine :</p>
<blockquote>
<pre>curl http://svn.tiddlywiki.org/Trunk/contributors/SimonMcManus/tiddlyweb/tiddlydocs/install.sh &gt;install.sh
sudo sh install.sh
cd tiddlydocs
twanager server 127.0.0.1 8080

In your browsers then goto :</pre>
<p>http://127.0.0.1:8080/recipes/tiddlydocs/tiddlers.wiki</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/225/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=225&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2009/09/21/installing-tiddlydocs-latest-on-tiddlyweb-mac/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>
	</item>
		<item>
		<title>My Recent Contribution to the House of Lords Information Committee</title>
		<link>http://simonmcmanus.wordpress.com/2009/06/24/my-recent-contribution-to-the-house-of-lords-information-committee/</link>
		<comments>http://simonmcmanus.wordpress.com/2009/06/24/my-recent-contribution-to-the-house-of-lords-information-committee/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 08:36:01 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[osmososft]]></category>
		<category><![CDATA[data]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/2009/06/24/my-recent-contribution-to-the-house-of-lords-information-committee/</guid>
		<description><![CDATA[My name is Simon McManus. I work as a web developer. After recently attending a UKGovBarCamp I noticed that it was difficult to reuse parliament&#8217;s publications. I made a comment on a parliamentary blog post which resulted in Richard contacting me via e-mail. The fact that I was able to comment in the first place &#8230; <a href="http://simonmcmanus.wordpress.com/2009/06/24/my-recent-contribution-to-the-house-of-lords-information-committee/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=224&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My name is Simon McManus. I work as a web developer. After recently attending a UKGovBarCamp I noticed that it was difficult to reuse parliament&#8217;s publications. I made a comment on a parliamentary blog post<br />
which resulted in Richard contacting me via e-mail. The fact that I was able to comment in the first place has made it possible for me to speak to you now. Thank you for this opportunity.</p>
<p>The essential dissatisfaction I have with the parliament website is that the information is not being published for re-use. In this paper I will explain what I mean by this, why I believe it and offer some alternative solutions. I would be more than happy to come and discuss this with you further and would appreciate any feedback that you might have.</p>
<p>Executive Summary</p>
<p> Websites like Wikipedia demonstrate how conversations can take place around information. For each article there is a discussions tab which allows readers and authors to discuss the articles. If you would like the same thing to occur around your meeting transcripts and legislation you need to change the format to make the data referenceable, commentable and easily queried by a programming language.</p>
<p>I believe there are five steps to opening up Parliamentary data:<br />
1 . Data Copyright<br />
2 . Making raw data available<br />
3 . Marking up data with semantic information<br />
4 . Making data linkable<br />
5 . exposing data through APIs</p>
<p>each of these parts will now be discussed.</p>
<p>::: 1 . Data Copyright</p>
<p>Publishing data online holds little value if the data has not been licensed for reuse. I suggest all parliamentary publications be made available under a creative commons copyright, so that anyone can republish commercially or otherwise.</p>
<p>::: 2 . Making Raw data available.</p>
<p>It is important that the raw data dumps which make any application possible are also available to the public. The data should be available be with no style information, no scripting nothing but pure, unadulterated data.   While there is value in Parliament building websites/applications it is far more important that developers have equal access to the original data so they can build other applications without the unaffected by the preconceptions of parliament.uk developers.</p>
<p>Currently most parliamentary publications are in PDF form. This causes a number of problems :<br />
1 .. Individual pages and sections are not indexed by search engines.<br />
2 .. It is difficult to programmatically extract data from a PDF.<br />
3 .. It is not possible to reference particular sections of a document.</p>
<p>::: 3 . Marking up data with semantic information</p>
<p>Theyworkforyou.com have put together a basic template of how parliament can improve the semantics of parliamentary publications. More details of their suggestions can be found at the following address :</p>
<p>http://www.theyworkforyou.com/freeourbills/techy</p>
<p>I fully endorse these suggestions. If followed, they would make it a great deal easier for developers like me to build new and richer interfaces because it makes the data more meaningful.</p>
<p>::: 4 . Making data linkable</p>
<p>When writing the paper it was particularly difficult to find the references from transcripts of your Committee&#8217;s meetings. It was sent to me in the following form :</p>
<p>&#8220;The transcript of the meetings the Committee has had as part of its inquiry are available here:</p>
<p>http://www.publications.parliament.uk/pa/ld/lduncorr.htm#info</p>
<p>(See in particular questions 78, 85 and 86 of the 1 April meeting).&#8221;</p>
<p>Finding the information required the following steps to be taken:<br />
1 .. clicking the above link</p>
<p>2 .. Searching for the meeting on the 1 April<br />
3 .. clicking another link which downloaded a big PDF file<br />
4 .. Waiting for the entire document to download</p>
<p>5 .. Searching the pdf for question 78<br />
6 .. Searching the pdf for question 85<br />
7 .. Searching the pdf for question 86</p>
<p>I would like to see an implementation where clicking the following three URLs would take you straight to view each question, allow you to read its answer and comment against either.</p>
<p>1 .. http://www.publications.parliament.uk/InformationCommittee/PeopleAndParliament/Meetings/1April09/Question78<br />
2 .. http://www.publications.parliament.uk/InformationCommittee/PeopleAndParliament/Meetings/1April09/Question85<br />
3 .. http://www.publications.parliament.uk/InformationCommittee/PeopleAndParliament/Meetings/1April09/Question86</p>
<p>If the information is published in HTML files which are being indexed by Google the bills will be findable in google and extend your outreach to every single user of google.</p>
<p>The simplest way to expose data on the web is to break it down into small individually addressable sections each of which has a unique URL.  These URLs can then be sent round in emails, added to a user&#8217;s favorites or programmatically interrogated.</p>
<p>::: 5 . Exposing data through APIs</p>
<p>An Application Programming Interface (API) provides developers an interface for interacting with a data set easily. By making it possible to programatically search legislation and comment against a particular section from a remote site, it becomes much easier for people to build new interfaces for the available data. A good API would make it really easy to build new ways of browsing, searching and commenting on legislation.</p>
<p>Data should be exposed so that it can be presented in ways never expected by those collating the data. It is through this approach that you help people to view and, most importantly, interact with both Houses regarding proposed legislation.</p>
<p>A good API will make data available in a number of different formats. HTML, XML and JSON are a good starting point. From the earliest possible opportunity any code being used to expose data should be open sourced so that developers can extend the existing code base without needing to start from scratch.  Not only does this allow people to build things more quickly, it allows developers to extend functionality and form a community of developers working together to improve the nations data infrastructure.</p>
<p>If  Parliament wants to engage with people it will be a great deal easier on sites they already visit rather than the parliament.uk site. You cannot expect to engage the majority of the electorate at parliament.uk. It needs to be made particularly easy to integrate the goings on of both Houses into any website so that useful (relevant) data can be pulled in about a given subject.</p>
<p>A site about digital rights and copyright should be able to make a call to the API which looks for any recent mentions of &#8220;Digital Rights&#8221; and &#8220;Copyright&#8221; and can then embed the results in its own site.  I also suspect that providing functionality to comment against the results would massively increase the potential of both Houses to engage with the electorate.</p>
<p>Below I have put together a general criteria for exposing data on the web :<br />
1 .. The data should be indexable and discoverable in google/other search engines.<br />
2 .. The data should be exposed using open data formats (HTML, oof)<br />
3 .. The data should be licensed for re-use, even by commercial organisations.<br />
4 .. It should be possible to browse the data in a web browser.<br />
5 .. Make the original data set available.<br />
6 .. Maintain a consistent interface for developers to build against.<br />
7 .. Any code used to abstract away from the data should be open sourced.<br />
8 .. Any semantics that can be added to data are beneficial.<br />
9 .. There should not be separate systems for MPs and the public. Whatever system MPs use to look up bills, track their progress through parliament, find out amendments etc should be available to the public.</p>
<p>The following criteria are not essential but I suspect could have a major effect on parliaments ability to interact with the people online :<br />
1 .. the information should have a plain English summary. Often bills are full of jargon that makes them incomprehensible to many. A good example is the creative commons licenses. These have a plain English version and a legalspeak version.<br />
2 .. Electronic book support. All bill, minutes etc should be available in a non-proprietary electronic book format (eg epub) for download.</p>
<p>Please note all that all the above should be possible for very little cost.  All the software required is available for free with open source software licenses.  The primary cost should be for one or two developers who work with the community to expose data based on user/developer feedback.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/224/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=224&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2009/06/24/my-recent-contribution-to-the-house-of-lords-information-committee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>
	</item>
		<item>
		<title>TiddlyDocs &#8211; Collaborating on large documents</title>
		<link>http://simonmcmanus.wordpress.com/2009/02/06/tiddlydocs-collaborating-on-large-documents/</link>
		<comments>http://simonmcmanus.wordpress.com/2009/02/06/tiddlydocs-collaborating-on-large-documents/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 18:57:47 +0000</pubDate>
		<dc:creator>simonmcmanus</dc:creator>
				<category><![CDATA[osmososft]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[FCKEditor]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[tiddlywiki]]></category>
		<category><![CDATA[XSL-FO]]></category>

		<guid isPermaLink="false">http://simonmcmanus.wordpress.com/?p=197</guid>
		<description><![CDATA[Recently I&#8217;ve been building a proof of concept, the brief was simple&#8230; &#8220;Come up with a way for my team to collaborate with people outside the organisation on large Word document. At the moment, we tend to email them between us, which can degenerate into a nightmare.&#8221; Our approach was to think about breaking these &#8230; <a href="http://simonmcmanus.wordpress.com/2009/02/06/tiddlydocs-collaborating-on-large-documents/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=197&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been building a proof of concept, the brief was simple&#8230;</p>
<p>&#8220;Come up with a way for my team to collaborate with people outside the organisation on large Word document. At the moment, we tend to email them between us, which can degenerate into a nightmare.&#8221;</p>
<p>Our approach was to think about breaking these large documents down into small sections which could be assigned to individuals for authoring and/or review. These sections could then be reassembled into a single document for printing.</p>
<p>To build this proof of concept we used <a href="http://tiddlywiki.com">TiddlyWiki </a>and <a href="http://jquery.com/">jQuery</a>. The latest release of TiddlyWiki (2.5) includes jQuery (1.2.6) so this provided a fine opportunity to explore the new potential.</p>
<p>So <a href="http://wiki.osmosoft.com/TiddlyDocs/">here is the demo</a>,</p>
<p>The online demo does not demonstrate the iGoogle integration of TiddlyDocs.   The iGoogle integration showed how we could provide a personalised view of the sections assigned to each user.  While we used iGoogle for the original demo this portlet just contains HTML so could be embedded into any portal framework which supports HTML.</p>
<p><a href="http://blog.whatfettle.com/">PSD</a> wrote some <a href="http://www.w3schools.com/xslfo/xslfo_intro.asp">XSL-FO</a> to translate the generated HTML into a printable PDF document. Paul&#8217;s code can be found <a href="http://svn.tiddlywiki.org/Trunk/contributors/PaulDowney/server/html2pdf/">here</a>.</p>
<h1><span style="color:#000000;"><span style="font-size:x-large;"><strong>Features :</strong></span></span></h1>
<p><span style="font-size:larger;"><strong>Drag and Drop your Table of Content</strong></span></p>
<p><img class="alignnone" title="TiddlyDocs - drag n drop " src="http://farm4.static.flickr.com/3318/3253469780_55cedf9eea.jpg" alt="" width="500" height="140" /></p>
<p>Allows users to change the order and hierarchy of the document table of content</p>
<p><span style="font-size:larger;"><strong>Easily assign sections to Users</strong></span></p>
<p><img class="alignnone" title="TiddlyDoc - Assign chunk" src="http://farm4.static.flickr.com/3391/3252648993_18d90588aa.jpg" alt="" width="368" height="184" /></p>
<p>Allows each section to be easily assigned to a pre-populated list of users.</p>
<p><span style="font-size:larger;"><strong>Full WYSIWYG text editing with FCKEditor</strong></span></p>
<p><img class="alignnone" title="TiddlyDocs" src="http://farm4.static.flickr.com/3503/3253482874_bc934ce199.jpg" alt="" width="500" height="290" /></p>
<p>Allows users to edit the document content in a familiar word style environment.  Also allows content including images to be pasted in the textarea from the clipboard.</p>
<p><span style="font-size:larger;"><strong>iGoogle Integration of Personalised Task Lists</strong></span></p>
<p><img class="alignnone" title="TiddlyDoc" src="http://img.skitch.com/20090205-k7u7rpctmxsbmstudwr3mphiug.jpg" alt="" width="505" height="365" /></p>
<p>The iGoogle integration allows each users to have their own view of all the tasks assigned to them. This can be used in various portal frameworks.</p>
<p><span style="font-size:larger;"><strong>Easy view of the documents status</strong></span></p>
<p><img class="alignnone" title="TiddlyDoc - Status" src="http://farm4.static.flickr.com/3316/3253512996_30f9a0787c.jpg?v=0" alt="" width="500" height="488" /></p>
<p>The bar to the right of the table of content shows the status of each section. When the bar is completely green the document is complete.  This example demonstrates that only one of the sections has been completed.</p>
<p><span style="font-size:larger;"><strong>Each Section Allows for Comments<br />
</strong></span></p>
<p><img class="alignnone" title="TiddlyDoc" src="http://farm4.static.flickr.com/3302/3253503268_0b5bd3e38e.jpg" alt="" width="500" height="356" /></p>
<p>Each section allows multi-threaded comments which will not be printed in the final document.  This allows for conversations to take place around each section of content.</p>
<p><span style="font-size:x-large;"><strong>The Components :</strong></span></p>
<p>We were able to build this proof of concept so quickly by reusing open source code that is available in the TiddlyWiki and jQuery communities.  Below I talk about the components that make up TiddlyDocs.</p>
<p><strong>SplitView Plugin<br />
</strong></p>
<p>This is one of the plugins I wrote specifically for the demo. The macro accepts one parameter which is the name of another tiddler to store the document specification. The document specification is stored in list format, eg:</p>
<p><em>* Heading 1</em><em><br />
* Heading 2<br />
</em><em>** Heading 2.1<br />
** Heading 2.2</em><em><br />
* Heading 3</em></p>
<p>Every time the document is re-arranged the specification tiddler is saved.</p>
<p><strong>PrintView Plugin </strong></p>
<p>This is the other plugin which I wrote specifically for the demo.  This plugin can read the document specification, collect the data from each of the required tiddlers, and then generate a static html file on the server which can then be converted to PDF for printing.</p>
<p><strong>Single Page Mode Plugin</strong></p>
<p>Provided by Eric of <a href="http://tiddlytools.com">TiddlyTools,</a> the singlePageModePlugin ensures only one tiddler is viewed at a time.</p>
<p><a href="http://tiddlytools.com/#SinglePageModePlugin">http://tiddlytools.com/#SinglePageModePlugin</a></p>
<p><strong>Comments Plugin</strong></p>
<p>Allows users to post comments against individual sections. These comments are presented as a threaded discussion, allowing rich conversations to take place around the content.  Thanks to <a href="http://softwareas.com/">Michael Mahemoff </a>for this plugin who also helped with the demo.<a href="http://softwareas.com/"><br />
</a></p>
<p><a href="http://tiddlyguv.com/CommentsPlugin.html">http://tiddlyguv.com/CommentsPlugin.html</a></p>
<p><strong>Value Switcher Plugin TeamTasks</strong></p>
<p>Taken from<a href="http://hawksworx.com/"> Phil Hawksworth</a>&#8216;s TeamTasks, this allows the fields provided by TiddlyWiki to be used to store information about ownership and current status.</p>
<p><a href="http://svn.tiddlywiki.org/Trunk/contributors/PhilHawksworth/verticals/TeamTasks/core/plugins/ValueSwitcherPlugin.js">http://svn.tiddlywiki.org/Trunk/contributors/PhilHawksworth/verticals/TeamTasks/core/plugins/ValueSwitcherPlugin.js</a></p>
<p>from:  <a href="http://getteamtasks.com">http://getteamtasks.com</a></p>
<p><strong>FCKEditor<br />
</strong><br />
<a href="http://www.fckeditor.net/">FCKEditor</a> is a project to make a nice WYSIWYG editor from any HTML textarea.  I have to say a I have been very impressed with FCKEditor.</p>
<p><a href="http://www.fckeditor.net/">http://www.fckeditor.net/</a></p>
<p><strong>TiddlyWiki FCKEditor Plugin</strong></p>
<p>A TiddlyWiki plugin that makes FCKEditor work nicely with TiddlyWiki.</p>
<p><a href="http://visualtw.ouvaton.org/VisualTW.html#FCKeditorPlugin">http://visualtw.ouvaton.org/VisualTW.html#FCKeditorPlugin</a></p>
<p><strong>NestedSortable -(a  jQuery plugin)</strong><br />
This jQuery plugin provides the drag and drop interface for the demo.</p>
<p><a href="http://code.google.com/p/nestedsortables/">http://code.google.com/p/nestedsortables/</a></p>
<p>This demo is hosted by <a href="http://www.tiddlywiki.org/wiki/CcTiddly">ccTiddly</a> but its been written to work on <a href="http://www.tiddlywiki.org/wiki/TiddlyWeb">TiddlyWeb</a> and any other server-side implementation of TiddlyWiki.  Over the next few months I will be working on TiddlyDocs to prepare it for easy consumption.</p>
<p>Updated :  <a href="http://softwareas.com/">Michael Mahemoff</a> has produced a screencast talking through the features of this demo :  <a href="http://vimeo.com/3109248">http://vimeo.com/3109248 </a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/simonmcmanus.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/simonmcmanus.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/simonmcmanus.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/simonmcmanus.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/simonmcmanus.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/simonmcmanus.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/simonmcmanus.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/simonmcmanus.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/simonmcmanus.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/simonmcmanus.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/simonmcmanus.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/simonmcmanus.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/simonmcmanus.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/simonmcmanus.wordpress.com/197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simonmcmanus.wordpress.com&amp;blog=457335&amp;post=197&amp;subd=simonmcmanus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simonmcmanus.wordpress.com/2009/02/06/tiddlydocs-collaborating-on-large-documents/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b37d279fa03f2b57b76a961833b438f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">simonmcmanus</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3318/3253469780_55cedf9eea.jpg" medium="image">
			<media:title type="html">TiddlyDocs - drag n drop </media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3391/3252648993_18d90588aa.jpg" medium="image">
			<media:title type="html">TiddlyDoc - Assign chunk</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3503/3253482874_bc934ce199.jpg" medium="image">
			<media:title type="html">TiddlyDocs</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20090205-k7u7rpctmxsbmstudwr3mphiug.jpg" medium="image">
			<media:title type="html">TiddlyDoc</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3316/3253512996_30f9a0787c.jpg?v=0" medium="image">
			<media:title type="html">TiddlyDoc - Status</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3302/3253503268_0b5bd3e38e.jpg" medium="image">
			<media:title type="html">TiddlyDoc</media:title>
		</media:content>
	</item>
	</channel>
</rss>
