<?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>soderlind.no</title>
	<atom:link href="http://soderlind.no/feed/" rel="self" type="application/rss+xml" />
	<link>http://soderlind.no</link>
	<description>I code for fun</description>
	<lastBuildDate>Fri, 05 Mar 2010 17:03:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WordPress plugin template</title>
		<link>http://soderlind.no/archives/2010/03/04/wordpress-plugin-template/</link>
		<comments>http://soderlind.no/archives/2010/03/04/wordpress-plugin-template/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 10:21:45 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[wp-plugins]]></category>
		<category><![CDATA[admin_print_scripts]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins_url]]></category>
		<category><![CDATA[wp_enqueue_script]]></category>
		<category><![CDATA[wp_localize_script]]></category>
		<category><![CDATA[wp_print_scripts]]></category>

		<guid isPermaLink="false">http://soderlind.no/?p=873</guid>
		<description><![CDATA[UPDATE: You can create a personalized plugin template by using my WordPress Plugin Template Creator
When I  rewrote my WP-DenyHost plugin, I wanted to do it as fast as possible. Instead of reinventing the wheel (again), I googled after a plugin template and found a very good one at Pressography. It had most of what I [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE</strong>: You can create a personalized plugin template by using my <a href="http://soderlind.no/wordpress-plugin-template-creator/">WordPress Plugin Template Creator</a></p>
<p>When I  rewrote my <a href="http://soderlind.no/archives/2008/04/18/wp-denyhost/">WP-DenyHost</a> plugin, I wanted to do it as fast as possible. Instead of reinventing the wheel (again), I googled after a plugin template and found a very good one at <a href="http://pressography.com/plugins/wordpress-plugin-template/">Pressography</a>. It had most of what I needed in a plugin template.</p>
<p><span id="more-873"></span></p>
<h3>Modifications to the Pressography plugin template</h3>
<p>I&#8217;ve made some changes to the Pressography plugin template and I have explained them below.  Before you continue to read this article, you should view the video at <a href="http://pressography.com/plugins/wordpress-plugin-template/">Pressography</a>, it presents the idea behind the plugin template and how it works. You get the full source of my modified plugin template by using my <a href="http://soderlind.no/wordpress-plugin-template-creator/">WordPress Plugin Template Creator</a></p>
<p>Being able to use new functionality in WordPress, I&#8217;ve decided that my plugins will only support WordPress one <a href="http://en.wikipedia.org/wiki/Software_versioning#Incrementing_sequences">minor version</a> lower than the current i.e. the current is 2.9 and hence my plugins and this plugin template will only supports WordPress 2.8 and later.</p>
<h3>plugins_url()</h3>
<p>WordPress 2.8 extended the <a href="http://codex.wordpress.org/Function_Reference/plugins_url">plugins_url</a>() function which makes it easy to find the plugin location. In the plugin template constructor, I use plugins_url() to find the languages files and the plugin itself:</p>
<pre class="brush: php; gutter: false;">
function __construct(){
	//Language Setup
	$locale = get_locale();
	$mo = plugins_url(&quot;/languages/&quot; . $this-&gt;localizationDomain . &quot;-&quot;.$locale.&quot;.mo&quot;, __FILE__);
	load_textdomain($this-&gt;localizationDomain, $mo);

	//&quot;Constants&quot; setup
	$this-&gt;url = plugins_url(basename(__FILE__), __FILE__);
	$this-&gt;urlpath = plugins_url('', __FILE__);

	//Initialize the options
	$this-&gt;getOptions();

	//Actions
	add_action(&quot;admin_menu&quot;, array(&amp;$this,&quot;admin_menu_link&quot;));
	add_action('wp_print_scripts', array(&amp;$this,'{plugin_slug}_script'));
	add_action(&quot;init&quot;, array(&amp;$this,&quot;{plugin_slug}_init&quot;));
}
</pre>
<h3>Adding JavaScript</h3>
<p>I&#8217;ve done it and I still see plugin authors adding scripts using the wp_head function. There&#8217;s only one correct way of adding scripts, and that&#8217;s using <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">wp_enqueue_script</a> via one of the script hooks (admin_print_scripts, wp_print_scripts etc). wp_enqueue_script makes sure that the script loads in the correct order and that a script is only loaded once (e.g. If another plugin has already loaded jQuery, my plugin will not load jQuery, but use the script already loaded).</p>
<p>I&#8217;ve added the wp_print_scripts hook to the plugin template (see the constructor above)  since it&#8217;s the generic load-script-hook. The wp_print_scripts hook adds the  {plugin_slug}_script function in which  I enqueue the scripts:</p>
<pre class="brush: php; gutter: false;">
function {plugin_slug}_script() {
	if (is_admin()){ // Only run when in wp-admin. Other conditional tags at http://codex.wordpress.org/Conditional_Tags
		wp_enqueue_script('jquery'); // other scripts included with Wordpress: http://tinyurl.com/y875age
		wp_enqueue_script('jquery-validate', 'http://ajax.microsoft.com/ajax/jquery.validate/1.6/jquery.validate.min.js', array('jquery'));
		wp_enqueue_script('{plugin_slug}_script', $this-&gt;url.'?{plugin_slug}_javascript', array('jquery-validate')); // load embedded javascript
		wp_localize_script( '{plugin_slug}_script', '{plugin_slug}_lang', array(
			'required' =&gt; __('Please enter a number.', $this-&gt;localizationDomain),
			'number'   =&gt; __('Please enter a number.', $this-&gt;localizationDomain),
			'min'	   =&gt; __('Please enter a value greater than or equal to 1.', $this-&gt;localizationDomain),
		));
	}
}
</pre>
<p>wp_localize_script, in the code above, creates a JavaScript object that passes the language strings to the embedded JavaScript:</p>
<pre class="brush: jscript; gutter: false;">
&lt;script type='text/javascript'&gt;
/* CDATA[ */
var {plugin_slug}_lang = {
	required: &quot;Please enter a number.&quot;,
	number: &quot;Please enter a number.&quot;,
	min: &quot;Please enter a value greater than or equal to 1.&quot;
};
/* ]]&gt; */
&lt;/script&gt;
</pre>
<h3>Embedding JavaScript</h3>
<p>When I write my plugins I like to keep the code in one file, that&#8217;s why I also embed the JavaScript code:</p>
<pre class="brush: php; gutter: false;">
if (isset($_GET['{plugin_slug}_javascript'])) {

	Header(&quot;content-type: application/x-javascript&quot;);
	echo&lt;&lt;&lt;ENDJS
/**
* @desc {Full Plugin Name}
* @author {Author} - {URL}
*/

jQuery(document).ready(function(){
	jQuery(&quot;#{plugin_slug}_options&quot;).validate({
		rules: {
			{plugin_slug}_option1: {
				required: true,
				number: true,
				min: 1
			}
		},
		messages: {
			{plugin_slug}_option1: {
				// the {plugin_slug}_lang object is define using wp_localize_script() in function {plugin_slug}_script()
				required: {plugin_slug}_lang.required,
				number: {plugin_slug}_lang.number,
				min: {plugin_slug}_lang.min
			}
		}
	});
});

ENDJS;
}
</pre>
<p>Note: If you prefer to keep your JavaScript code in a separate file, you can add it by adding the following to {plugin_slug}_script:</p>
<pre class="brush: php; gutter: false; highlight: [5];">
function {plugin_slug}_script() {
	if (is_admin()){ // Only run when in wp-admin. Other conditional tags at http://codex.wordpress.org/Conditional_Tags
		wp_enqueue_script('jquery'); // other scripts included with Wordpress: http://tinyurl.com/y875age
		wp_enqueue_script('jquery-validate', 'http://ajax.microsoft.com/ajax/jquery.validate/1.6/jquery.validate.min.js', array('jquery'));
		wp_enqueue_script('{plugin_slug}_script', $this-&gt;urlpath.'/myscript.js', array('jquery)); //load your script
		wp_localize_script( '{plugin_slug}_script', '{plugin_slug}_lang', array(
			'required' =&gt; __('Please enter a number.', $this-&gt;localizationDomain),
			'number'   =&gt; __('Please enter a number.', $this-&gt;localizationDomain),
			'min'	   =&gt; __('Please enter a value greater than or equal to 1.', $this-&gt;localizationDomain),
		));
	}
}
</pre>
<h3>WordPress Plugin Template Creator</h3>
<p>While writing this article, I decided to create a tool that will create a personalized plugin template. The <a href="http://soderlind.no/wordpress-plugin-template-creator/">WordPress Plugin Template Creator</a> takes your input, creates the necessary slugs and returns a personalized plugin template you can build your own plugin with.</p>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2010/03/04/wordpress-plugin-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When .LESS is more</title>
		<link>http://soderlind.no/archives/2010/03/04/when-less-is-more/</link>
		<comments>http://soderlind.no/archives/2010/03/04/when-less-is-more/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 22:01:06 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://soderlind.no/?p=864</guid>
		<description><![CDATA[
@the-border: 1px;
@base-color: #111;

#header {
	color: @base-color * 3;
	border-left: @the-border;
	border-right: @the-border * 2;
}

#footer {
	color: (@base-color + #111) * 1.5;
}

ul
{
	list-style-type: none;
	height: 30px;

	li
	{
		float: left;
		padding-right: 15px;

		a
		{
			padding: 5px;
			display: block;
			color: black;
			text-decoration: none;
		}

		a:hover
		{
			background-color: @menu_color - #222;
		}
	}
}

Curious? 4GuysFromRolla has a nice article about .LESS
btw, if you&#8217;re not doing ASP.NET, you can create css from .less by using the command line compiler:
dotless.Compiler.exe -m Styles.less Styles.css
]]></description>
			<content:encoded><![CDATA[<pre class="brush: css;">
@the-border: 1px;
@base-color: #111;

#header {
	color: @base-color * 3;
	border-left: @the-border;
	border-right: @the-border * 2;
}

#footer {
	color: (@base-color + #111) * 1.5;
}

ul
{
	list-style-type: none;
	height: 30px;

	li
	{
		float: left;
		padding-right: 15px;

		a
		{
			padding: 5px;
			display: block;
			color: black;
			text-decoration: none;
		}

		a:hover
		{
			background-color: @menu_color - #222;
		}
	}
}
</pre>
<p>Curious? 4GuysFromRolla has a nice <a href="http://www.4guysfromrolla.com/articles/030310-1.aspx">article about .LESS</a></p>
<p>btw, if you&#8217;re not doing ASP.NET, you can create css from .less by using the command line compiler:</p>
<pre><span style="color: #993366;"><strong>dotless.Compiler.exe -m Styles.less Styles.css</strong></span></pre>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2010/03/04/when-less-is-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery 101: Adding unobtrusive ajax to your existing form page</title>
		<link>http://soderlind.no/archives/2010/02/25/jquery-101-adding-unobtrusive-ajax-to-your-existing-form-page/</link>
		<comments>http://soderlind.no/archives/2010/02/25/jquery-101-adding-unobtrusive-ajax-to-your-existing-form-page/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 17:50:48 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://soderlind.no/?p=787</guid>
		<description><![CDATA[Using jQuery and the form and validate plugins, it is simple to add  unobtrusive ajax to your existing form page
1, Modify your existing form page

Add &#60;input type="hidden" name="isAjax" id="isAjax" value="0" /&#62; to your form. This field will tell the processing script, process_input.php in my example, if the values in the form were submitted using ajax or [...]]]></description>
			<content:encoded><![CDATA[<p>Using <a href="http://jquery.com/">jQuery</a> and the <a href="http://jquery.malsup.com/form/">form</a> and <a href="http://docs.jquery.com/Plugins/Validation">validate</a> plugins, it is simple to add  <a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript">unobtrusive</a> ajax to your existing form page</p>
<p><strong>1, Modify your existing form page</strong></p>
<ol>
<li>Add <code>&lt;input type="hidden" name="isAjax" id="isAjax" value="0" /&gt;</code> to your form. This field will tell the processing script, process_input.php in my example, if the values in the form were submitted using ajax or as an ordinary form submit, defaulting to isAjax = 0 (false).</li>
<li>Add <code>class="required"</code> to the fields that requires input</li>
<li>Add the <code>&lt;div id="result"&gt;&lt;/div&gt;</code> where you want the ajax output</li>
</ol>
<pre class="brush: xml;">
&lt;form id=&quot;form1&quot; name=&quot;form1&quot; method=&quot;post&quot; action=&quot;process_input.php&quot;&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;isAjax&quot; id=&quot;isAjax&quot; value=&quot;0&quot; /&gt;
	Name: &lt;input type=&quot;text&quot; name=&quot;name&quot; class=&quot;required&quot; id=&quot;name&quot; value=&quot;&quot; /&gt; &lt;br /&gt;
	&lt;input type=&quot;submit&quot; name=&quot;submit&quot; id=&quot;submit&quot; value=&quot;submit&quot; /&gt;
&lt;/form&gt;
&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;
</pre>
<p><span id="more-787"></span><br />
<strong>2, update your process_input.php code</strong></p>
<p>The process_input.php, uses the value in isAjax to decide how output is displayed</p>
<pre class="brush: php; html-script: false;">
&lt;?php
if ($_POST['isAjax']) {
	// out will be return, using ajax, to the calling form page
	echo &quot;Hello &quot; . $_POST['name'];
} else {
	// no javascript, this page will do the output
	echo &quot;&lt;h1&gt;Welcome&lt;/h1&gt;&quot;;
	echo $_POST['name'];
}
?&gt;
</pre>
<p><strong>3, Add the jQuery code</strong></p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://github.com/malsup/form/raw/master/jquery.form.js?v2.38&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.microsoft.com/ajax/jquery.validate/1.6/jquery.validate.min.js&quot;&gt;&lt;/script&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
jQuery(document).ready(function(){        // wait until the page is loaded before executing the jQuery code
    var v = $(&quot;#form1&quot;).validate({        // enable form validation
        submitHandler: function(form) {
            $(&quot;#isAjax&quot;).val(1),          // set the hidden input isAjax to 1 (true)
                $(form).ajaxSubmit({      // submit the form using ajax
                    target: &quot;#result&quot;     // put output from process_input.php into &lt;div id=&quot;result&quot;&gt;&lt;/div&gt;
                });
        }
    });
});
&lt;/script&gt;
</pre>
<p><strong>Here&#8217;s the complete form page</strong></p>
<pre class="brush: jscript;">
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://github.com/malsup/form/raw/master/jquery.form.js?v2.38&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.microsoft.com/ajax/jquery.validate/1.6/jquery.validate.min.js&quot;&gt;&lt;/script&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
jQuery(document).ready(function(){
	var v = $(&quot;#form1&quot;).validate({
		submitHandler: function(form) {
			$(&quot;#isAjax&quot;).val(1),
			$(form).ajaxSubmit({
				target: &quot;#result&quot;
			});
		}
	});
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form id=&quot;form1&quot; name=&quot;form1&quot; method=&quot;post&quot; action=&quot;process_input.php&quot;&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;isAjax&quot; id=&quot;isAjax&quot; value=&quot;0&quot; /&gt;
	Name: &lt;input type=&quot;text&quot; name=&quot;name&quot; class=&quot;required&quot; id=&quot;name&quot; value=&quot;&quot; /&gt; &lt;br /&gt;
	&lt;input type=&quot;submit&quot; name=&quot;submit&quot; id=&quot;submit&quot; value=&quot;submit&quot; /&gt;
&lt;/form&gt;
&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2010/02/25/jquery-101-adding-unobtrusive-ajax-to-your-existing-form-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fighting spam</title>
		<link>http://soderlind.no/archives/2010/02/10/fighting-spam/</link>
		<comments>http://soderlind.no/archives/2010/02/10/fighting-spam/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 17:48:42 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[wp-plugins]]></category>

		<guid isPermaLink="false">http://soderlind.no/?p=745</guid>
		<description><![CDATA[I have reduced the number of  splog attacks on my site

I use the Akismet and WP-DenyHost anti-spam plugins for WordPress. Akismet is a must-have and has, since I installed it, caught 304,056 spams (!!).  When Akismet catch a spammer, it logs the spammers IP address. WP-DenyHost, written by me, prevents spammers from getting access to my site a second time [...]]]></description>
			<content:encoded><![CDATA[<p>I have reduced the number of  <a href="http://en.wikipedia.org/wiki/Spam_blog">splog</a> attacks on my site</p>
<p style="text-align: center;"><a href="http://soderlind.no/wp-content/uploads/2010/02/soderlind.no-spam-vs-visits.png" rel="wp-prettyPhoto[g745]"><img class="aligncenter size-medium wp-image-746" title="soderlind.no spam vs visits" src="http://soderlind.no/wp-content/uploads/2010/02/soderlind.no-spam-vs-visits-300x171.png" alt="" width="300" height="171" /></a></p>
<p>I use the <a href="http://wordpress.org/extend/plugins/akismet/">Akismet</a> and <a href="http://soderlind.no/archives/2008/04/18/wp-denyhost/">WP-DenyHost</a> anti-spam plugins for WordPress. Akismet is a must-have and has, since I installed it, caught 304,056 spams (!!).  When Akismet catch a spammer, it logs the spammers IP address. WP-DenyHost, written by me, prevents spammers from getting access to my site a second time by blocking access from this IP address.</p>
<p>I installed WP-DenyHost in the fall 2009 and, as you can see from <a href="http://soderlind.no/wp-content/uploads/2010/02/soderlind.no-spam-vs-visits.png" rel="wp-prettyPhoto[g745]">the graph</a> above, the number of spam has dropped dramatically.</p>
<p>.</p>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2010/02/10/fighting-spam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile blogging</title>
		<link>http://soderlind.no/archives/2010/02/02/mobile-blogging/</link>
		<comments>http://soderlind.no/archives/2010/02/02/mobile-blogging/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 21:07:51 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://soderlind.no/?p=738</guid>
		<description><![CDATA[
Earlier WordPress.org has release their WordPress for iPhone and WordPress for Blackberry, today they released WordPress for Android
You&#8217;ll find WordPress for Android in the Android Market. If you are visiting my site from an Android device, you can download it here
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><p><a href="http://soderlind.no/archives/2010/02/02/mobile-blogging/"><em>Click here to view the embedded video.</em></a></p></p>
<p>Earlier <a href="http://wordpress.org">WordPress.org</a> has release their <a href="http://iphone.wordpress.org/">WordPress for iPhone</a> and <a href="http://blackberry.wordpress.org/">WordPress for Blackberry</a>, today they released <a href="http://android.wordpress.org/">WordPress for Android</a></p>
<p>You&#8217;ll find WordPress for Android in the Android Market. If you are visiting my site from an Android device, you can download it <a href="market://search/?q=pname:org.wordpress.android">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2010/02/02/mobile-blogging/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery 1.4 Released</title>
		<link>http://soderlind.no/archives/2010/01/15/jquery-1-4-is-released/</link>
		<comments>http://soderlind.no/archives/2010/01/15/jquery-1-4-is-released/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 12:09:44 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://soderlind.no/?p=721</guid>
		<description><![CDATA[*DRUM ROLL*  jQuery 1.4 is released !!! 
It has a lot of new features and enhancements like the examples below:

jQuery(&#34;&#60;div&#62;&#34;, {
    &#34;class&#34;: &#34;test&#34;,
    text: &#34;Click me!&#34;,
    click: function(){
        $(this).toggleClass(&#34;test&#34;);
    }
}).appendTo(&#34;body&#34;);

jQuery(&#34;&#60;input&#62;&#34;, {
    type: &#34;text&#34;,
 [...]]]></description>
			<content:encoded><![CDATA[<p>*DRUM ROLL*  <a href="http://jquery14.com/day-01/jquery-14"><strong>jQuery 1.4</strong></a><strong> is released !!! </strong></p>
<p><strong></strong>It has a lot of <a href="http://api.jquery.com/category/version/1.4/">new features and enhancements</a> like the <a href="http://net.tutsplus.com/tutorials/javascript-ajax/jquery-1-4-released-the-15-new-features-you-must-know/">examples</a> below:</p>
<pre class="brush: jscript; gutter: true;">
jQuery(&quot;&lt;div&gt;&quot;, {
    &quot;class&quot;: &quot;test&quot;,
    text: &quot;Click me!&quot;,
    click: function(){
        $(this).toggleClass(&quot;test&quot;);
    }
}).appendTo(&quot;body&quot;);

jQuery(&quot;&lt;input&gt;&quot;, {
    type: &quot;text&quot;,
    val: &quot;Test&quot;,
    focusin: function() {
        $(this).addClass(&quot;active&quot;);
    },
    focusout: function() {
        $(this).removeClass(&quot;active&quot;);
    }
}).appendTo(&quot;form&quot;);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2010/01/15/jquery-1-4-is-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bergensbanen, a 7 hours train ride in HD released under Creative Commons</title>
		<link>http://soderlind.no/archives/2009/12/18/bergensbanen-7-hours-train-ride-in-hd-released-under-creative-commons/</link>
		<comments>http://soderlind.no/archives/2009/12/18/bergensbanen-7-hours-train-ride-in-hd-released-under-creative-commons/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 15:44:41 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://soderlind.no/?p=640</guid>
		<description><![CDATA[UPDATE: The 1080i 50P ProRes file is available as a torrent (NOTE, it&#8217;s a 246GB file !)

Friday November 27th over 1,4 million Norwegians watched parts of “Bergensbanen” on NRK2. The longest documentary ever? At least the longest we have made, almost 7 1/2 hours, showing every minute of the scenic train ride between Bergen on the [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">UPDATE: The 1080i 50P <a href="http://en.wikipedia.org/wiki/ProRes_422">ProRes</a> file i<a href="http://nl.nrk.no/torrent/bergensbanen/Bergensbanen.1080i50.ProRes422.Nrk.mov.torrent">s available as a torrent</a> (NOTE, it&#8217;s a 246GB file !)</p>
<blockquote>
<p style="text-align: left;"><strong>Friday November 27th over 1,4 million Norwegians watched parts of “Bergensbanen” on NRK2. The longest documentary ever? At least the longest we have made, almost 7 1/2 hours, showing every minute of the scenic train ride between Bergen on the Norwegian west coast, crossing the mountains to the capital of Oslo.<br />
<span style="font-weight: normal;"> .. source: </span><a href="http://nrkbeta.no/2009/12/18/bergensbanen-eng/"><span style="font-weight: normal;">http://nrkbeta.no/2009/12/18/bergensbanen-eng/</span></a></strong></p>
</blockquote>
<p style="text-align: left;">To wet your appetite, here’s a <a onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.youtube.com/watch?v=Ql2qXpNVTjw');" href="http://www.youtube.com/watch?v=Ql2qXpNVTjw" rel="wp-prettyPhoto[g640]"">10 minute video</a>, from <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Finse,norway&amp;sll=37.0625,-95.677068&amp;sspn=42.766543,93.076172&amp;ie=UTF8&amp;hq=&amp;hnear=Finse,+Ulvik,+Hordaland,+Norway&amp;ll=60.519454,8.009033&amp;spn=1.668016,7.910156&amp;t=p&amp;z=8">Finse</a>:</p>
<p style="text-align: center;"><p><a href="http://soderlind.no/archives/2009/12/18/bergensbanen-7-hours-train-ride-in-hd-released-under-creative-commons/"><em>Click here to view the embedded video.</em></a></p></p>
<p style="text-align: left;">Facts:</p>
<ul>
<li>7 hours continues front view recording.</li>
<li>Recorded on a Sony 700 camera in XDCAM HD 1080 50i.</li>
<li>Available as 720 50P, 1280×720 version, 22 GB file, and as a 1080i 50P <a href="http://en.wikipedia.org/wiki/ProRes_422">ProRes</a> file (NOTE, it&#8217;s a <a href="http://nl.nrk.no/torrent/bergensbanen/Bergensbanen.1080i50.ProRes422.Nrk.mov.torrent">246GB file</a> !)</li>
<li>Released under <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons</a></li>
</ul>
<p>Trivia:</p>
<ul>
<li>Filming for <a title="Star Wars Episode V: The Empire Strikes Back" href="/wiki/Star_Wars_Episode_V:_The_Empire_Strikes_Back">Star Wars Episode V: The Empire Strikes Back</a> took place at <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Finse,norway&amp;sll=37.0625,-95.677068&amp;sspn=42.766543,93.076172&amp;ie=UTF8&amp;hq=&amp;hnear=Finse,+Ulvik,+Hordaland,+Norway&amp;ll=60.519454,8.009033&amp;spn=1.668016,7.910156&amp;t=p&amp;z=8">Finse</a> in 1979 to represent <a title="Echo Base" href="/wiki/Echo_Base">Echo Base</a> on the planet <a title="Hoth" href="/wiki/Hoth">Hoth</a>.</li>
</ul>
<p style="text-align: left;">For more information, and the download, head over to <a href="http://nrkbeta.no/2009/12/18/bergensbanen-eng/">http://nrkbeta.no/2009/12/18/</a><a href="http://nrkbeta.no/2009/12/18/bergensbanen-eng/">bergensbanen-eng</a><a href="http://nrkbeta.no/2009/12/18/bergensbanen-eng/">/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2009/12/18/bergensbanen-7-hours-train-ride-in-hd-released-under-creative-commons/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Drool Radio 1.3 with 30 000 radio stations</title>
		<link>http://soderlind.no/archives/2009/12/10/drool-radio-1-3-with-30-000-radio-stations/</link>
		<comments>http://soderlind.no/archives/2009/12/10/drool-radio-1-3-with-30-000-radio-stations/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 08:30:22 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://soderlind.no/?p=636</guid>
		<description><![CDATA[Drool Radio version 1.3  is available.
What&#8217;s new:

Drool Radio is now integrated with SHOUTcast.com
You can now listen to 30 000 radio stations from around the world
Set volume on Radio Alarm Clock
Support for ACC+
Stops playing when you remove the headset
Stops playing when removed from docking station
Other minor bug fixes

]]></description>
			<content:encoded><![CDATA[<p>Drool Radio version 1.3  <a href="http://itunes.apple.com/no/app/drool-radio/id327347560?mt=8">is available</a>.</p>
<p>What&#8217;s new:</p>
<ul>
<li>Drool Radio is now integrated with <a href="http://shoutcast.com/">SHOUTcast.com</a></li>
<li>You can now listen to 30 000 radio stations from around the world</li>
<li>Set volume on Radio Alarm Clock</li>
<li>Support for ACC+</li>
<li>Stops playing when you remove the headset</li>
<li>Stops playing when removed from docking station</li>
<li>Other minor bug fixes</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2009/12/10/drool-radio-1-3-with-30-000-radio-stations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The best of 2009</title>
		<link>http://soderlind.no/archives/2009/12/04/the-best-of-2009/</link>
		<comments>http://soderlind.no/archives/2009/12/04/the-best-of-2009/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 14:52:53 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://soderlind.no/?p=627</guid>
		<description><![CDATA[Web Design Ledger has collected a great list with the best of  2009. Head over and get inspired:

The Best jQuery Plugins
The Best Free WordPress Themes
The Best Photoshop Tutorials
The Best Free Icon Sets
The Best Free Fonts

]]></description>
			<content:encoded><![CDATA[<p><a href="http://webdesignledger.com/">Web Design Ledger</a> has collected a great list with <em>the best of  2009</em>. Head over and get inspired:</p>
<ul>
<li><a href="http://webdesignledger.com/resources/the-best-jquery-plugins-of-2009">The Best jQuery Plugins</a></li>
<li><a href="http://webdesignledger.com/freebies/the-best-free-wordpress-themes-of-2009">The Best Free WordPress Themes</a></li>
<li><a href="http://webdesignledger.com/tutorials/the-best-photoshop-tutorials-of-2009">The Best Photoshop Tutorials</a></li>
<li><a href="http://webdesignledger.com/freebies/the-best-free-icon-sets-of-2009">The Best Free Icon Sets</a></li>
<li><a href="http://webdesignledger.com/freebies/the-best-free-fonts-of-2009">The Best Free Fonts</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2009/12/04/the-best-of-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>delicious tagroll for WordPress</title>
		<link>http://soderlind.no/archives/2009/11/18/delicious-tagroll-for-wordpress/</link>
		<comments>http://soderlind.no/archives/2009/11/18/delicious-tagroll-for-wordpress/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 21:13:17 +0000</pubDate>
		<dc:creator>PerS</dc:creator>
				<category><![CDATA[wp-plugins]]></category>

		<guid isPermaLink="false">http://www.soderlind.no/?p=584</guid>
		<description><![CDATA[The Delicious tagroll for WordPress plugin adds a new shortcode to WordPress, the  shortcode. The shortcode creates a tag cloud or a list of tags (see parameters below).

Demo: http://soderlind.no/bookmarks/
Plugin: You&#8217;ll find the plugin at http://wordpress.org/extend/plugins/delicious-tagroll-shortcode/
Installation: Download the plugin and save it in wp-content/plugins (remember to activate in Plugins) or wp-content/mu-plugins or install it from [...]]]></description>
			<content:encoded><![CDATA[<div><strong>The Delicious tagroll for WordPress plugin</strong> adds a new shortcode to WordPress, the <img class="alignnone size-full wp-image-605" style="vertical-align: middle; padding: 0 0 5px 0;" title="the shortcode" src="http://soderlind.no/wp-content/uploads/2009/11/ps_delicious_tagroll_shortcode.png" alt="the shortcode" width="243" height="20" /> shortcode. The shortcode creates a tag cloud or a list of tags (see parameters below).</div>
<div><a href="http://soderlind.no/bookmarks/"><img class="aligncenter size-medium wp-image-595" title="[ delicious_tagroll username=&quot;soderlind&quot; ]" src="http://soderlind.no/wp-content/uploads/2009/11/ps_delicious_tagroll-300x179.png" alt="ps_delicious_tagroll" width="300" height="179" /></a><span id="more-584"></span></div>
<p><strong>Demo</strong>: <a href="http://soderlind.no/bookmarks/">http://soderlind.no/bookmarks/</a></p>
<p><strong>Plugin</strong>: You&#8217;ll find the plugin at <a href="http://wordpress.org/extend/plugins/delicious-tagroll-shortcode/">http://wordpress.org/extend/plugins/delicious-tagroll-shortcode/</a><a href="http://soderlind.no/code/view/ps_delicious_tagroll.php"></a></p>
<p><strong>Installation</strong>: <a href="http://downloads.wordpress.org/plugin/delicious-tagroll-shortcode.zip">Download the plugin</a> and save it in wp-content/plugins (remember to activate in Plugins) or wp-content/mu-plugins or install it from inside WordPress in Plugins-&gt;Add New (search for &#8220;delicious tagroll&#8221;)</p>
<p><strong>Usage</strong>: <a title="Adding the shortcode to a Page" href="http://soderlind.no/wp-content/uploads/2009/11/ps_delicious_tagroll_edit_page.png" rel="wp-prettyPhoto[g584]">Add the shortcode to a Page</a>. The shortcode supports the following parameters (the parameters are also &#8220;documented&#8221; at<a href="http://delicious.com/help/tagrolls"> http://delicious.com/help/tagrolls</a>):</p>
<ul>
<li><strong>Mandatory</strong>:
<ul>
<li>username=&#8221;delicious username&#8221; (if you forget it, my tagroll is displayed instead <img src='http://soderlind.no/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</li>
</ul>
</li>
<li>Optional:
<ul>
<li>title=&#8221;tagroll title&#8221; (default =&#8221;My Delicious Tags&#8221;, use &#8221; &#8221; if you don&#8217;t want a tagroll title)</li>
<li>icon=&#8221;true or false&#8221; (default=&#8221;true&#8221;)</li>
<li>count=&#8221;number of tags&#8221; (default=&#8221;100&#8243;)</li>
<li>sort=&#8221;alpha or freq&#8221; (default = &#8220;alpha&#8221;)</li>
<li>flow=&#8221;cloud or list&#8221; (default = &#8220;cloud&#8221;)</li>
<li>showname=&#8221;true or false&#8221;(default = &#8220;true&#8221;, show your delicious name)</li>
<li>showadd=&#8221;true or false&#8221;  (default = &#8220;true&#8221;, show add to network)</li>
<li>showcounts=&#8221;true or false&#8221; (default = &#8220;false&#8221;, show tag counts)</li>
<li>mincolor=&#8221;73adff&#8221;</li>
<li>maxcolor=&#8221;3274d0&#8243;</li>
<li>minfont=&#8221;12&#8243;</li>
<li>maxfont=&#8221;35&#8243;</li>
</ul>
</li>
</ul>
<p><strong>Change log</strong></p>
<p><strong>v 1.1</strong></p>
<ul>
<li>changed parameter name=&#8221;true&#8221; to showname=&#8221;true&#8221;</li>
<li>added missing parameter showcounts=&#8221;false&#8221;</li>
</ul>
<p><strong>v 1.0</strong></p>
<ul>
<li>initial release<strong><br />
</strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://soderlind.no/archives/2009/11/18/delicious-tagroll-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
