<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Martin Ström &#187; javascript</title>
	<atom:link href="http://my-domain.se/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://my-domain.se</link>
	<description></description>
	<lastBuildDate>Tue, 15 May 2012 10:02:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Quicker way to observe events in prototype.js</title>
		<link>http://my-domain.se/quicker-way-to-observe-events-in-prototype-js/</link>
		<comments>http://my-domain.se/quicker-way-to-observe-events-in-prototype-js/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 11:33:41 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2009/12/07/quicker-way-to-observe-events-in-prototype-js/</guid>
		<description><![CDATA[Here&#8217;s a shorter way to listen for events in prototype.js.]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a shorter way to listen for events in prototype.js.</p>

<script src="http://gist.github.com/250775.js?file=prototype-events.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/quicker-way-to-observe-events-in-prototype-js/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Copying to clipboard with JavaScript in Flash 10</title>
		<link>http://my-domain.se/copying-to-clipboard-with-javascript-in-flash-10/</link>
		<comments>http://my-domain.se/copying-to-clipboard-with-javascript-in-flash-10/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 20:12:46 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[clipboard]]></category>
		<category><![CDATA[copypastecharacter]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flash10]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/?p=158</guid>
		<description><![CDATA[As you might know, we have a feature on CopyPasteCharacter to let the user copy a character to their clipboard by just clicking on the character. An invisible Flash movie would do the copying using the ActionScript function System.setClipboard. In October, Adobe updated the Flash Player to version 10, which included some security changes, like: [...]]]></description>
			<content:encoded><![CDATA[<p>As you might know, we have a feature on <a href="http://copypastecharacter.com">CopyPasteCharacter</a> to let the user copy a character to their clipboard by just clicking on the character. An invisible Flash movie would do the copying using the ActionScript function <code>System.setClipboard</code>.</p>

<p>In October, Adobe updated the Flash Player to version 10, which included some <a href="http://www.adobe.com/devnet/flashplayer/articles/fplayer10_security_changes.html">security changes</a>, like: &#8220;Setting the Clipboard will now have to be invoked through a button, keyboard shortcut, or some other event initiated by the user.&#8221;. This broke CopyPasteCharacter (<a href="http://www.google.com/search?hl=en&amp;rls=en&amp;q=%22flash+10%22+broken+clipboard">and many other sites</a>) for people running Flash 10. I had some ideas on how to <del>solve</del> <add>workaround</add> this a pretty long time ago but too little time to implement it until now.</p>

<p>We&#8217;re now having a fully working version which, since I couldn&#8217;t find any other solutions online, I thought could be useful for others/Google to know about.</p>

<p>The workaround I came up with is to use a hidden Flash movie which will get resized and moved to overlay the element/character where the user&#8217;s mouse is. This way, when the user clicks on the character, the Flash movie will receive the mouse event and therefore be allowed to set the system&#8217;s clipboard.</p>

<ol>
<li>The mouse roll overs a character.</li>
<li>A JavaScript will resize and move the invisible Flash movie to match the character&#8217;s size and position</li>
<li>The flash movie receives the mouseover and mouseouts so JavaScript can set the element&#8217;s class name (like a faked :hover selector)</li>
<li>When (if?) the user clicks on the character, the click event will get received by the invisible Flash movie and not the document itself.</li>
<li>The Flash movie asks JavaScript for the characters to copy (Clipboard#textToCopy) since it differs a bit depending on which element was clicked. Also, Flash tells JS if the the alt/option key was pressed (so the copy-multiple-characters-at-once feature works).</li>
<li>The same #textToCopy function highlights the clicked element using the same code as we had for the Flash 9 version.</li>
</ol>

<p>Here&#8217;s the code for the Flash movie (<a href="http://gist.github.com/65322">highlighted version</a>)</p>

<pre><code>import flash.external.*;

var text:String;

button.onRelease = function() {
  text = String(ExternalInterface.call("Clipboard.textToCopy", Key.isDown(KEY.ALT))) || ' ';
  System.setClipboard(text);
  trace('copied [' + text + ']');
}

button.onRollOver = function() {
  ExternalInterface.call('Clipboard.onFlashButtonOver');
}

button.onRollOut = function() {
  ExternalInterface.call('Clipboard.onFlashButtonOut');
}
</code></pre>

<p>The Clipboard class <a href="http://copypastecharacter.com/javascripts/clipboard.js">can be found here</a> if you&#8217;re interested. It should keep the old behaviour for Flash 9 players but we had some problems with it in some browsers on Windows so right now all players get the updated code.</p>

<div class="updated">
Note: This post has been lurking in my &#8220;Drafts&#8221; folder for about a month and shortly after we deployed the new code for Flash 10 a few weeks ago, I found the <a href="http://code.google.com/p/zeroclipboard">Zero Clipboard</a> project which seems to use a similar approach as we did but as a stand alone library. I haven&#8217;t looked at the code yet but it seems promising.
</div>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/copying-to-clipboard-with-javascript-in-flash-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Copy Paste Character</title>
		<link>http://my-domain.se/copy-paste-character/</link>
		<comments>http://my-domain.se/copy-paste-character/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 18:11:31 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[konst-teknik]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/?p=130</guid>
		<description><![CDATA[Two weeks ago we (me and Konst &#38; Teknik) launched copypastecharacter.com—a site to make it dead easy to copy those special characters which otherwise can be hard to find. We just pushed an update and I realized I hadn&#8217;t mentioned it here. The character you click will automatically get copied into your clipboard, thanks to [...]]]></description>
			<content:encoded><![CDATA[<p>Two weeks ago we (me and <a href="http://www.konst-teknik.se">Konst &amp; Teknik</a>) launched <a href="http://copypastecharacter.com">copypastecharacter.com</a>—a site to make it dead easy to copy those special characters which otherwise can be hard to find. We just pushed an update and I realized I hadn&#8217;t mentioned it here.</p>

<p>The character you click will automatically get copied into your clipboard, thanks to the <a href="http://www.jeffothy.com/weblog/clipboard-copy">flash technique mentioned here</a>. However, I wrote my own JavaScript class to handle the clipboard and the buffer of clicked characters since you can hold down ‹alt› to copy multiple characters at once.</p>

<p><a href="http://www.copypastecharacter.com/javascripts/copy_buffer.js">Here&#8217;s the source for the copy buffer class</a> in case anyone&#8217;s interested.</p>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/copy-paste-character/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Multi-dimensional array sorter</title>
		<link>http://my-domain.se/multi-dimensional-array-sorter/</link>
		<comments>http://my-domain.se/multi-dimensional-array-sorter/#comments</comments>
		<pubDate>Sat, 24 Nov 2007 09:41:54 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[konst-teknik]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[sorting]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2007/11/24/multi-dimensional-array-sorter/</guid>
		<description><![CDATA[The other day when working on some small updates on konst-teknik.se I wanted to sort the projects in a multi dimensional way, and take the other factors than the first into account. JavaScript&#8217;s Array#sort only supports one dimensional sorting so I wrapped my own sorter. The results turned up pretty good (at least compared to [...]]]></description>
			<content:encoded><![CDATA[<p>The other day when working on some small updates on <a href="http://konst-teknik.se">konst-teknik.se</a> I wanted to sort the projects in a multi dimensional way, and take the other factors than the first into account. JavaScript&#8217;s <code>Array#sort</code> only supports one dimensional sorting so I wrapped my own sorter.</p>

<p>The results turned up pretty good (at least compared to the first test), or perhaps I just like recursing functions.</p>

<pre><code>

var sortOrder = {
  'cat-no': ['cat-no', 'name', 'type', 'year'],
  'name':   ['name',   'type', 'year', 'cat_no'],
  'year':   ['year',   'name', 'type', 'cat_no'],
  'type':   ['type',   'name', 'year', 'cat_no']
};

function sort(order) {
  var ordering = sortOrder[order], length = ordering.length;
  $$('#projects > li').sort(function(left, right) {
    left = Project.find(left), right = Project.find(right);
    return (function(index) {
      var a = left.getSortValue(ordering[index]),
          b = right.getSortValue(ordering[index]);
      return a < b ? -1 : a > b ? 1 :
        index < length ? arguments.callee(++index) : 0;
    })(0);
  }).each(function(project) {
    project.parentNode.appendChild(project);
  });
}

</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/multi-dimensional-array-sorter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax.CachedRequest</title>
		<link>http://my-domain.se/ajaxcachedrequest/</link>
		<comments>http://my-domain.se/ajaxcachedrequest/#comments</comments>
		<pubDate>Sun, 11 Nov 2007 17:40:48 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2007/11/11/ajaxcachedrequest/</guid>
		<description><![CDATA[Recently I wanted to cache the results (responseText) from a lot of Ajax.Requests since the returning data would not change and made the roundtrip to the server unnecessary. Maybe there are others out there interested so here&#8217;s the code. It&#8217;s not very well tested except the project where it is in use so there might [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I wanted to cache the results (responseText) from a lot of <code>Ajax.Request</code>s since the returning data would not change and made the roundtrip to the server unnecessary. Maybe there are others out there interested so here&#8217;s the code. It&#8217;s not very well tested except <a href="http://rbg6.se">the project where it is in use</a> so there might be some bugs or tweaks needed.</p>

<pre><code>
Ajax.CachedRequest = Class.create(Ajax.Request, {
  initialize: function($super, url, options) {
    options = options || {};
    var onSuccess = options.onSuccess || Prototype.K;
    if (!Ajax.CachedRequest.cache[url] || options.reload) {
      options.onSuccess = function(transport) {
        Ajax.CachedRequest.cache[url] = transport.responseText;
        onSuccess(transport);
      }
      $super(url, options);
    } else {
      eval(Ajax.CachedRequest.cache[url]);
      this.dispatch.defer();
      [onSuccess, options.onComplete].each(function(m) { m &#038;&#038; m() });
    }
  },

  dispatch: function() {
    Ajax.Responders.dispatch('onComplete', null);
  }
});

Ajax.CachedRequest.cache = {};
</code></pre>

<p>Of course this assumes you&#8217;re using the brand new <a href="http://prototypejs.org">Prototype 1.6 </a></p>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/ajaxcachedrequest/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Prototype &amp; Script.aculo.us SVN checkins RSS feed</title>
		<link>http://my-domain.se/prototype-scriptaculous-svn-checkins-rss-feed/</link>
		<comments>http://my-domain.se/prototype-scriptaculous-svn-checkins-rss-feed/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 20:39:29 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[script.aculo.us]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2007/07/25/prototype-scriptaculous-svn-checkins-rss-feed/</guid>
		<description><![CDATA[Thanks to Yahoo Pipes I created two RSS feeds for the Ruby on Rails checkins (changesets). One containing only the Rails-spinoffs checkins (that is Prototype and Script.aculo.us right now) and another without the spinoffs. This way I can follow the JavaScript-related changes as they happen but watch the Ruby-stuff every now and then. Only Spinoffs [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to <a href="http://pipes.yahoo.com">Yahoo Pipes</a> I created two RSS feeds for the Ruby on Rails checkins (changesets). One containing only the Rails-spinoffs checkins (that is Prototype and Script.aculo.us right now) and another without the spinoffs. This way I can follow the JavaScript-related changes as they happen but watch the Ruby-stuff every now and then.</p>

<ul>
<li><p><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=wIRE5es63BGEPMGyl7okhQ">Only Spinoffs checkins</a></p></li>
<li><p><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=aCK7Ne463BG9h_H9jknRlg">Without Spinoffs checkins</a></p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/prototype-scriptaculous-svn-checkins-rss-feed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#039;s new in Prototype svn?</title>
		<link>http://my-domain.se/whats-new-in-prototype-svn/</link>
		<comments>http://my-domain.se/whats-new-in-prototype-svn/#comments</comments>
		<pubDate>Tue, 01 May 2007 09:59:04 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2007/05/01/whats-new-in-prototype-svn/</guid>
		<description><![CDATA[Just after posting this I saw that sam tagged the 1.5.1 release in svn so I guess this means that 1.5.1 is final. Great work! There has been a lot of action the past days in the Prototype SVN; the release of 1.5.1 RC4, the new DOM and Position branches and a lot of other [...]]]></description>
			<content:encoded><![CDATA[<p><em>Just after posting this I saw that sam <a href="http://dev.rubyonrails.org/changeset/6643">tagged the 1.5.1 release</a> in svn so I guess this means that 1.5.1 is final. Great work!</em></p>

<p>There has been a lot of action the past days in the <a href="http://svn.rubyonrails.org/rails/spinoffs/prototype">Prototype SVN</a>; the <a href="http://prototypejs.org/2007/4/28/release-candidate-4">release of 1.5.1 RC4</a>, the new DOM and Position branches and a lot of other work. Since I watch most of the tickets and changesets I thought I write something about what&#8217;s (might be) in the future for Prototype.</p>

<h3>DOM branch</h3>

<p>I was happy to see a patch I&#8217;ve been working on (<a href="http://dev.rubyonrails.org/ticket/7476">#7476</a>) to get <a href="http://dev.rubyonrails.org/changeset/6638">included</a> some days ago.
It will define a new <code>Element#writeAttribute</code> method which will work together as the already existing <code>#readAttribute</code> to work around many issues browsers having with the native <code>set/getAttribute</code> methods (as always mostly in IE) but also to make chaining work:</p>

<pre><code>$('my_image').writeAttribute('src', 'new-image.png').show();
</code></pre>

<p>The method will also accept a hash for the attributes to let you set multiple attributes at once:</p>

<pre><code>$('my_image').writeAttribute({src: 'new-image.png', custom_attr: 'foo'}).show();
</code></pre>

<p>The patch will also make the <code>Element</code> object into a constructor for very easy and fast element creation (i.e. <code>document.createElement</code> wrapper):</p>

<pre><code>var header = new Element('h1');
</code></pre>

<p>The constructor will also accept an optional attributes hash for the attributes (as seen above in the <code>#writeAttribute</code> method):</p>

<pre><code>var header = new Element('h1', {id: 'myHeader'});
</code></pre>

<p>Of course chaining will work so for a simple image switcher with preloading you could do this:</p>

<pre><code>&lt;!-- html --&gt;
&lt;img src="thumbnail.jpg" id="thumbnail" hires="big.jpg"&gt;

// javascript
$('thumbnail').observe('click', function(event) {
    var thumb = Event.element(event),
      preloader = new Element('img', {src: thumb.readAttribute('hires')});
    preloader.observe('load', function(event) {
        thumb.writeAttribute('src', preloader.readAttribute('src'));
    });
});
</code></pre>

<h3>Event Branch</h3>

<p>I haven&#8217;t followed the event branch very closely but from the code and messages on the <a href="http://groups.google.com/group/prototype-core">ML</a> I&#8217;ve seen there should be new functionality for better garbage collection (to prevent memory leaks) and for e.g. easier removal of observers from elements.</p>

<p>Where you before had to manually collect all an element&#8217;s event listeners to be able to remove them later:</p>

<pre><code>var listener1 = function(event) {...}.bindAsEventListener();
var listener2 = function(event) {...}.bindAsEventListener();

// start listening
$('myElement').observe('click', listener1);
$('myElement').observe('click', listener2);

// stop listening
$('myElement').stopObserving('click', listener1);
$('myElement').stopObserving('click', listener2);
</code></pre>

<p>you will now be able to remove all event listener for a specfic event:</p>

<pre><code>$('myElement').stopObserving('click'); // or Event.stopObserving('myElement', 'click');
</code></pre>

<h3>Other</h3>

<p>Some other new additions worth mentioning are:</p>

<ul>
<li><a href="http://dev.rubyonrails.org/changeset/6639"><code>Element#wrap</code></a></li>
<li><a href="http://dev.rubyonrails.org/changeset/6636"><code>Element#insert</code></a></li>
<li><a href="http://dev.rubyonrails.org/changeset/6626"><code>Function#defer, Function#delay, Function#curry, Function#wrap</code></a></li>
</ul>

<p>But to not make this post too long you&#8217;ll have to read about it on your own (check the source and/or the changesets manually).</p>

<p>Please notice that all these are subject to change since it&#8217;s under development right now and might never get into any future release of Prototype.</p>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/whats-new-in-prototype-svn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>One animated background image for multiple elements in Safari</title>
		<link>http://my-domain.se/animated_background_image_safari/</link>
		<comments>http://my-domain.se/animated_background_image_safari/#comments</comments>
		<pubDate>Tue, 27 Feb 2007 17:32:14 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2007/02/27/animated_background_image_safari/</guid>
		<description><![CDATA[I&#8217;ve found out that Safari can&#8217;t handle the same animated gif as background for multiple elements, it will just animate one of them at the same time. On a project I&#8217;m currently working on my I use the following trick to make all requests to the background image (in this case indicator_black.gif) unique. [...] var [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve found out that Safari can&#8217;t handle the same animated gif as background for multiple elements, it will just animate one of them at the same time. On a project I&#8217;m currently working on my I use the following trick to make all requests to the background image (in this case <code>indicator_black.gif</code>) unique.</p>

<pre><code>[...]
var text = transport.responseText;
if (Browser.WebKit) {
    text = text.gsub('indicator_black.gif', function(match) {
        return match + '?' + new Date().valueOf() +
          Math.round(Math.random() * 5000);
    });
}
[...]
</code></pre>

<p>Note that it uses <a href="http://prototypejs.org">Prototype JavaScript framework</a> and you should too.</p>

<div class="updated">
  <h3>Update:</h3>
  This is fixed in WebKit nightly (and therefore Safari 3 but I haven&#8217;t tested yet).
</div>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/animated_background_image_safari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails&#039; time extensions ported to JavaScript</title>
		<link>http://my-domain.se/rails-time-extensions-ported-to-javascript/</link>
		<comments>http://my-domain.se/rails-time-extensions-ported-to-javascript/#comments</comments>
		<pubDate>Fri, 15 Sep 2006 17:59:29 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[script.aculo.us]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2006/09/15/rails-time-extensions-ported-to-javascript/</guid>
		<description><![CDATA[I&#8217;ve ported Rails&#8217; Numeric Time extensions to JavaScript since I needed to do some date calculations for a project I&#8217;m working on. Now one should be able to calculate dates in JS like this: (5).seconds() // =&#62; 5000 (2).weeks() + (2).hours() + (15).seconds() // =&#62; 1216815000 (1).week().fromNow().toDate() // =&#62; Fri Sep 22 2006 19:16:32 GMT+0200 [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve ported <a href="http://api.rubyonrails.com/classes/ActiveSupport/CoreExtensions/Numeric/Time.html">Rails&#8217; Numeric Time extensions</a> to JavaScript since I needed to do some date calculations for a project I&#8217;m working on. Now one should be able to calculate dates in JS like this:</p>

<pre><code>(5).seconds() // =&gt; 5000
(2).weeks() + (2).hours() + (15).seconds() // =&gt; 1216815000
(1).week().fromNow().toDate() // =&gt; Fri Sep 22 2006 19:16:32 GMT+0200 (CEST)
var date = new Date(2000, 11, 18, 18, 15, 23);
(2).years().since(date).toDate() // =&gt; Thu Dec 19 2002 06:15:23 GMT+0100 (CET)
</code></pre>

<p>Thought it could be useful for others as well.
You&#8217;ll need the latest <a href="http://prototype.conio.net/">prototype</a> library, unit tests are included.</p>

<p>Download a <a href="http://burnfield.com/martin/wordpress/wp-content/uploads/js_numeric_time_ext.zip">zip with both .js file and unit tests</a> or <a href="http://burnfield.com/martin/wordpress/wp-content/uploads/js_numeric_time_ext.js">just the .js-file</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/rails-time-extensions-ported-to-javascript/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>TextMate Prototype &amp; Scriptaculous Bundle</title>
		<link>http://my-domain.se/textmate-prototype-scriptaculus-bundle/</link>
		<comments>http://my-domain.se/textmate-prototype-scriptaculus-bundle/#comments</comments>
		<pubDate>Fri, 14 Jul 2006 19:40:14 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[script.aculo.us]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2006/07/14/textmate-prototype-scriptaculus-bundle/</guid>
		<description><![CDATA[This the first version of a TextMate bundle for Prototype and script.aculo.us JavaScript libraries. The language grammar is based on from Justin Palmers Prototype Bundle but the other commands/snippets are all new. Please let me know if you have any comments and/or improvements. Download here Update 2006-07-16 The bundle is now added to TextMates official [...]]]></description>
			<content:encoded><![CDATA[<p>This the first version of a <a href="http://macromates.com">TextMate</a> bundle for <a href="http://prototype.conio.net">Prototype</a> and <a href="http://script.aculo.us">script.aculo.us</a> JavaScript libraries. The language grammar is based on from <a href="http://encytemedia.com/blog/articles/2006/01/03/textmate-vibrant-ink-theme-and-prototype-bundle">Justin Palmers Prototype Bundle</a> but the other commands/snippets are all new.
Please let me know if you have any comments and/or improvements.</p>

<p><a href="/wordpress/wp-content/uploads/Prototype &#038; Scriptaculous.tmbundle.zip">Download here</a></p>

<div class="updated">
    <h3>Update 2006-07-16</h3>
    The bundle is now added to TextMates <a href="http://macromates.com/svn/Bundles/trunk/Bundles/JavaScript%20Prototype%20&#038;%20Script_aculo_us.tmbundle">official svn repository</a>.
</div>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/textmate-prototype-scriptaculus-bundle/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Prototypish Style Sheet Switcher</title>
		<link>http://my-domain.se/prototypish-style-sheet-switcher/</link>
		<comments>http://my-domain.se/prototypish-style-sheet-switcher/#comments</comments>
		<pubDate>Wed, 12 Jul 2006 11:21:42 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2006/07/12/prototypish-style-sheet-switcher/</guid>
		<description><![CDATA[This is a Prototypish rewrite of Paul Sowdens Style Sheet Switcher. The original version has a lot of global functions so I put everything into a class instead and made the code a bit more elegant. It should work as the normal one except for some methods have been renamed. A cookie library is included [...]]]></description>
			<content:encoded><![CDATA[<p>This is a <a href="http://prototype.conio.net">Prototypish</a> rewrite of <a href="http://www.idontsmoke.co.uk">Paul Sowdens</a> <a href="http://alistapart.com/stories/alternate">Style Sheet Switcher</a>. The original version has a lot of global functions so I put everything into a class instead and made the code a bit more elegant. It should work as the normal one except for some methods have been renamed.</p>

<p>A cookie library is included as well since the switcher needs to read and create cookies to save the users preferred style sheet.</p>

<div class="updated">
    <h3>Update</h3>
    I fixed a bug for pages without any alternate style sheets and updated the script to version 0.2.
</div>

<p><a href="/wordpress/wp-content/uploads/stylesheetswitcher.js">Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/prototypish-style-sheet-switcher/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WordPress theme</title>
		<link>http://my-domain.se/burnfield-dark-wordpress-theme/</link>
		<comments>http://my-domain.se/burnfield-dark-wordpress-theme/#comments</comments>
		<pubDate>Wed, 12 Apr 2006 07:48:19 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[websites]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress-theme]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/2006/04/12/wordpress-theme/</guid>
		<description><![CDATA[Finally this site looks like something other than the default WordPress theme. Peter and I wanted to connect our work sites to each other and decided to use his simple but easy-to-use WordPress theme as a base. The problem was that his theme never was cross browser compatible and worked more or less only in [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://my-domain.se/wordpress/wp-content/uploads/wordpress-theme.png" alt=""></p>

<p>Finally this site looks like something other than the <a href="http://themes.wordpress.net/wordpress/" title="Default WordPress theme 'Kubrick'">default WordPress theme</a>. <a href="http://konst-teknik.se">Peter</a> and I wanted to connect our work sites to each other and decided to use his simple but easy-to-use <a href="http://konst-teknik.se">WordPress theme</a> as a base.</p>

<p>The problem was that his theme never was cross browser compatible and worked more or less only in <a href="http://www.apple.com/safari">Safari</a>. My first task was to re-code the theme from scratch to make it work in all modern browsers using valid <a href="http://validator.w3.org/check?uri=referer">XHTML</a> and <a href="http://http://jigsaw.w3.org/css-validator/check/referer">CSS</a> with as clean and simple code as possible.</p>

<p>I also set all font sizes using <a href="http://www.w3.org/WAI/GL/css2em.htm">em</a>:s (instead of px or pt) to make the text resizable. It wasn&#8217;t too hard making it work (even in Microsoft Internet Explorer) thanks to <a href="http://www.alistapart.com/articles/sizematters/">some</a> <a href="http://www.clagnut.com/blog/348/">great</a> <a href="http://css-discuss.incutio.com/?page=UsingEms">resources</a>. Sooner or later I&#8217;ll convert the positions, margins etc to em:s as well, but font sizes should be enough for now.</p>

<p>I also added <a href="http://zeo.unic.net.my/2005/12/25/wordpress-ajax-commenting-revisited/">AJAX comments</a> and used effects from <a href="http://script.aculo.us/" title="Web 2.0 JavaScript">script.aculo.us</a>. I&#8217;m using <a href="http://prototype.conio.net/" title="Prototype JavaScript Framework">Prototype</a> to add CSS classes to some elements and to wrap i.e. all <code>&lt;h3&gt;</code>&#8216;s content in a <code>&lt;span&gt;</code> to achieve the look I wanted without any unnecessary  markup. Since <code>&lt;input type="search" /&gt;</code> only is supported by Safari and I wanted to use it, I used a script (thanks <a href="http://www.bartelme.at">Wolfgang Bartelme</a>) that replaces the regular text input field with a search field for Safari only. This way the document will stay valid XHTML 1.1.</p>

<p>Next task was to make the theme more personal for my site. I&#8217;ve tried some different looks but couldn&#8217;t really decide how I wanted it and choose (for now at least) a slightly darker version of Peter&#8217;s theme. I think it looks good and is easy to use without making too much noise.</p>

<p>When I implanted the tagging I first looked at <a href="http://www.neato.co.nz/ultimate-tag-warrior/">Ultimate Tag Warrior 3</a> but it seemed too advanced for my needs, so I decided to use the native category system in WordPress 2.0, that lets one add tags (categories) by just entering them in separated by comma in a text field (WP 1.x didn&#8217;t have this feature). The <a href="/martin/tags">tag cloud</a> is a modified and simplified version of <a href="http://register.intruder.ru/2005/08/30/tag-cloud-plugin/">Tag Cloud Plugin</a>.</p>

<p class="download">
  <a href="http://burnfield.com/martin/wordpress/wp-content/uploads/burnfield-dark.zip">Download</a>
</p>

<div markdown="1" class="updated">
Update April 20, 2006
The theme is now released in a beta version. Some notes:

* You&#8217;ll need the [Post Updated Plugin](http://guff.szub.net/2005/02/22/post-updated) to get a page&#8217;s last modified date.

* My &#8220;lite&#8221; version of the [TagCloud plugin][tagcloud] can be [downloaded here][tagcloudlite].

* You&#8217;ll problably want to change the `autosave` attributes value in `javascripts/global.js` (line #24) to your own unique id. [Read more on the attribute](http://weblogs.mozillazine.org/hyatt/archives/2004_07.html#005890).

I also found this great plugin for the admin area, <del>[Cat2Tag](http://www.agkamai.org/cat2tag)</del> <add>The link seems to be broken, get it <a href="/martin/wordpress/wp-content/uploads/cat2tag.phps">download it here</a> for now</add> for easier tagging of your content without using a separete database like [Ultimate Tag Warrior 3][utw] does. Cat2Tag just use WordPress&#8217; own categories instead.

[Download](http://my-domain.se/wordpress/wp-content/uploads/burnfield-dark.zip).
</div>

<div markdown="1" class="updated">
Update May 4, 2006
The [TagCloud plugin][tagcloudlite] is updated to use the [rel-tag](http://microformats.org/wiki/rel-tag) [microformat](http://microformats.org/about).
</div>

<div markdown="1" class="updated">
Update August 18, 2007

Since a lot of people ask me how to get the thumbnails to work, here is the instructions I usually email them:

<br /><br />— ✄ ——————<br /><br />

First, download a newer version of <a href="http://burnfield.com/martin/wordpress/wp-content/uploads/posts-thumbnail.phps">`posts-thumbnail.php`</a> replace the current one (from the downloaded .zip file) with this one attached in this message.

Create the thumbnail image and name it &#8220;thumb-POST_SLUG.png&#8221;. The post slug is shown on the &#8220;edit post&#8221; screen in the admin (i.e my latest post with title &#8220;Rails&#8217; time extensions ported to JavaScript&#8221; has post slug &#8220;rails-time-extensions-ported-to-javascript&#8221; and the thumbnail should therefore be named &#8220;thumb-rails-time-extensions-ported-to-javascript.png&#8221;). Then just upload the image from the same screen using WordPress&#8217; built-in uploader (you dont have to give it any description or title). Then the theme should automatically find the image for you and show it in the list view.

<br /><br />———— ✄ ——<br /><br />

Btw is a new version of this theme under development and will make the thumbnail handling easier.

</div>

<div markdown="1" class="updated">
Update October 31, 2007

The link to the plugin &#8220;Cat2Tag&#8221; seems to be down (thanks Kris Aubuchon) so, for now at least, you can <a href="/martin/wordpress/wp-content/uploads/cat2tag.phps">download it here</a>.

I haven&#8217;t really looked into the new tagging system in WP 2.3 so perhaps this plugin isn&#8217;t necessary any more.
</div>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/burnfield-dark-wordpress-theme/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
		<item>
		<title>Pluxemburg</title>
		<link>http://my-domain.se/pluxemburg/</link>
		<comments>http://my-domain.se/pluxemburg/#comments</comments>
		<pubDate>Fri, 10 Feb 2006 15:36:36 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[pluxemburg]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[websites]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/wordpress/2006/02/10/pluxemburg/</guid>
		<description><![CDATA[Pluxemburg is a record label I&#8217;m co-running with some friends. The site in its current form is almost two years old, but a lot of things have changed since it was first released. Since I just released some updates, I thought I&#8217;d write something about them and show how the CMS/administrative interface works. Recent site [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://my-domain.se/wordpress/wp-content/uploads/pluxemburg-site.png" alt="pluxemburg-site.png" /></p>

<p>Pluxemburg is a record label I&#8217;m co-running with some friends. The site in its current form is almost two years old, but a lot of things have changed since it was first released. Since I just released some updates, I thought I&#8217;d write something about them and show how the CMS/administrative interface works.</p>

<h3>Recent site updates</h3>

<p>I won&#8217;t go through the whole site and tell you everything about it. Instead, <a href="http://www.pluxemburg.com">go browse it by yourself</a>.
The shop has been improved with a smarter cart that doesn&#8217;t forget your items if you by accident reload your browser or hit the back button. Validation is more clear and better looking in the same style as the improved (and AJAX powered) guestbook and newsletter subscription.</p>

<h3>Browser support</h3>

<p>When the site launched almost two years ago, it fully supported Internet Explorer 5 (Mac), IE 5, 5.5 and 6 on PC and of course, old and new Firefox versions, Mozilla, Safari etc etc. It was a pain to fix the CSS especially for IE Mac and IE5, IE5.5 on Windows. Currently, I’ve dropped support for MacIE (it’is not even supported by Microsoft any more), IE5 and IE5.5 for Windows. I think the site should work more or less using outdated browsers, but it might not look exacly as intended.</p>

<h3>CMS and site admin</h3>

<p>The site is powered by an advanced CMS that helps us adding and editing news, products in the shop, guestbook spam and a lot of other things. When I first wrote it for this site, I had in mind to keep it so general I could, so it could be extended and used in other projects. Of course the administrative interface is password protected, but I&#8217;ve recorded two movies showing some parts of it. <del>I&#8217;ll convert the movies to H.264 right after this is posted, so for now, the movies are pretty large in size.</del><add> The movies are now in H.264 format and are 75% smaller (before: total 44.8 MB, now: 11.6 MB)</add></p>

<p>The first movie, shows a basic task such as adding some news items to specific part of the site and then view it. Pretty basic.</p>

<p><a href="/wordpress/wp-content/uploads/pluxemburg_admin_news.mov">Watch the first movie (QuickTime 7, <del>20.9</del><add> 3.1</add> MB)</a></p>

<p>The second show how easy it is to manage products in the shop, as well as track orders.</p>

<p><a href="/wordpress/wp-content/uploads/pluxemburg_admin_shop.mov">Watch the second movie (QuickTime 7, <del>23.9</del><add> 8.5<add> MB)</a></p>

<p>To download them, hold the ⌥ (alt) key down and click the link or right click and choose &#8220;Download Linked File&#8221;</p>

<p>You&#8217;ll need <a href="http://apple.com/quicktime/download">QuickTime 7</a> to watch them.</p>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/pluxemburg/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Marie Frans</title>
		<link>http://my-domain.se/marie-frans/</link>
		<comments>http://my-domain.se/marie-frans/#comments</comments>
		<pubDate>Fri, 10 Feb 2006 14:31:07 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[websites]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/wordpress/2006/02/10/marie-frans/</guid>
		<description><![CDATA[Website and CMS for swedish photographer’s agency I made together with Peter. We also did their graphic identity. The frontend is optimized to be a fast, simple but effective way of browsing the photographers and their photos, check it out. The CMS makes it easy for the photographers to upload, edit and organize their photos [...]]]></description>
			<content:encoded><![CDATA[<p>Website and CMS for swedish photographer’s agency I made together with <a href="/peter">Peter</a>. We also did their <a href="/peter/work/marie-frans/">graphic identity</a>.</p>

<p>The frontend is optimized to be a fast, simple but effective way of browsing the photographers and their photos, <del>check it out</del>. The CMS makes it easy for the photographers to upload, edit and organize their photos and for the site editors to write news and edit information on the site. It&#8217;s a customized version of the <a href="/pluxemburg/">administrative interface I coded for pluxemburg.com</a> with added functionality such as image uploading and photo organization. I wanted to let the server handle the image resizing and creation of thumbnails as well, but found out that <a href="http://php.net/gd">PHP&#8217;s image functions</a> didn&#8217;t do as good work as expected. I tried all kind of different techniques but we ended up using Photoshop and manually make the thumbnails. Photoshop does a way better job and with this kind of client (working with photographs) we wanted as good quality as possible.</p>

<p>I&#8217;ve made a <a href="/wordpress/wp-content/uploads/marie-frans_admin.mov">movie (QuickTime, 4.9 MB)</a> showing how the admin interface works when uploading and reordering the photos, since it&#8217;s password protected. You&#8217;ll need <a href="http://apple.com/quicktime/download">QuickTime 7</a> to watch it.</p>

<div class="updated">
    <h3>Update 2006-03-13</h3>
    Since the agency and the site was shut down some weeks ago, I&#8217;ve put up some screen shots to show how it was done. I might record a movie and/or a mirrored version for reference.
</div>

<h3>Index</h3>

<p><img id="image46" src="http://burnfield.com/martin/wordpress/wp-content/uploads/mf-index.png" alt="mf-index.png" /></p>

<h3>Photographers</h3>

<p><img id="image49" src="http://my-domain.se/wordpress/wp-content/uploads/2006/04/mf-photographers.png" alt="mf-photographers.png" /></p>

<h3>Photos</h3>

<p><img id="image50" src="http://my-domain.se/wordpress/wp-content/uploads/2006/04/mf-photos.png" alt="mf-photos.png" /></p>

<h3>Loading a photo</h3>

<p><img id="image48" src="http://my-domain.se/wordpress/wp-content/uploads/2006/04/mf-loading.png" alt="mf-loading.png" /></p>

<h3>Showing a photo</h3>

<p><img id="image51" src="http://burnfield.com/martin/wordpress/wp-content/uploads/mf-show.png" alt="mf-show.png" /></p>

<h3>Information</h3>

<p><img id="image47" src="http://my-domain.se/wordpress/wp-content/uploads/2006/04/mf-info.png" alt="mf-info.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/marie-frans/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Konst &amp; Teknik site</title>
		<link>http://my-domain.se/konst-teknik-site/</link>
		<comments>http://my-domain.se/konst-teknik-site/#comments</comments>
		<pubDate>Wed, 11 Jan 2006 11:05:56 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[websites]]></category>

		<guid isPermaLink="false">http://burnfield.com/martin/wordpress/2006/01/11/konst-teknik-site/</guid>
		<description><![CDATA[My friends over at Konst &#38; Teknik asked me to code their web site. It&#8217;s only one page, that should show the results from Google Image searches for the word in their name, &#8220;konst&#8221; and &#8220;teknik&#8221; (&#8220;art&#8221; and &#8220;technology&#8221; in swedish). I liked the idea and also got the opportunity to do some ruby scripting [...]]]></description>
			<content:encoded><![CDATA[<p><img id="image43" src="http://my-domain.se/wordpress/wp-content/uploads/2006/04/konst-teknik-se.png" alt="Konst &#038; Teknik website" /></p>

<p>My friends over at <a href="http://konst-teknik.se">Konst &amp; Teknik</a> asked me to code their web site. It&#8217;s only one page, that should show the results from <a href="http://images.google.com/imghp?hl=en">Google Image</a> searches for the word in their name, &#8220;konst&#8221; and &#8220;teknik&#8221; (&#8220;art&#8221; and &#8220;technology&#8221; in swedish). I liked the idea and also got the opportunity to do some <a href="http://ruby-lang.org">ruby</a> scripting and try the <a href="http://prototype.conio.net">Prototype JavaScript library</a>.</p>

<h3>Server side</h3>

<p>Since Google <a href="http://www.google.com/apis/api_faq.html#ini2">currently doesn&#8217;t offer any API</a> to do other searches than pure web searches and we wanted to use Google Image Search, I had to do my own image fetching script. The script is a ruby script that will pull the images and info from Google Images and store them in a local index file. First, I used <a href="http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/">Net::HTTP</a> but I found out that it had problem dealing with the swedish characters (used in swedish, ie åäö) so I changed the URL-fetching to use <a href="http://curl.haxx.se/">curl</a> instead, witch also was slightly faster. The index is written from ruby using <a href="http://www.ruby-doc.org/core/classes/Marshal.html">Marshal</a>. It is scheduled to run twice a week using cron.</p>

<h3>Client side</h3>

<p>My first approach was to make one class that downloads and shows the image for the given keyword. Then create one instance for each word (<em>konst</em> and <em>teknik</em>), controlling the preloading and image-switching every 4th second (meaning; updating one of the images every second second). But I found out it was hard to make the updates smooth and exacly on time.</p>

<p>Instead I split the client side script into of two main classes, the <code>Preloader</code> class and the <code>Switcher</code> class. The Preloader triggers a request using AJAX to a server side ruby script that will return a new random image from the image index and then stores the info received from the server in a local array. After some delay the script will start over again with a new request for another image.
When the Preloader is done indexing some images then the Switcher will kick in and start showing them and switch every other second between the images for each word as long as there are images preloaded and ready to be shown. If the Preloader is out of preloaded images then the Switcher will pause and show a loader while the Preloader&#8217;s buffering.
We wanted the images to be vertical aligned by bottom but I couldn&#8217;t make it work with CSS only (nor with <code>vertical-align</code>, <code>float</code> or <code>position</code>). Instead, the script is switching between two <code>&lt;div&gt;</code>s (for each word, totally four divs) and when the &#8220;not active&#8221; div got a new image loaded into it, it will find its dimensions and set its margins automatically. The next time it&#8217;s time to switch image (for this word) this div will be shown instead, the other one becomes invisible and get the next image loaded.</p>

<p>The script should work fine in Safari, Firefox, Camino etc (even WinIE6). It needs some code cleaning (mostly OO-issues; currently I&#8217;m referencing the instances from the class, which I think is a bit ugly) but I&#8217;m releasing it anyway.</p>

<p>Check it out
<a href="konst-teknik.se">http://www.konst-teknik.se</a></p>
]]></content:encoded>
			<wfw:commentRss>http://my-domain.se/konst-teknik-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

