<?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>Extensible Development</title>
	<atom:link href="http://blog.itwarlocks.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.itwarlocks.com</link>
	<description>Profession blog about Software Engineering, Web, *nix, Processes, Tools, Open Source and more.</description>
	<lastBuildDate>Tue, 24 Jan 2012 19:52:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Pig Latin</title>
		<link>http://blog.itwarlocks.com/2010/02/26/pig-latin/</link>
		<comments>http://blog.itwarlocks.com/2010/02/26/pig-latin/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 13:19:37 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
		
		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=306</guid>
		<description><![CDATA[I&#8217;ve been thinking about creating my own theme for WordPress for a while now — for over 1 year to be honest. —while looking at a few interesting designs to use as a base. I&#8217;m very interested in UX and UI Usability, but &#8230; <a href="http://blog.itwarlocks.com/2010/02/26/pig-latin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking about creating my own theme for WordPress for a while now — for over 1 year to be honest. —while looking at a few interesting designs to use as a base. I&#8217;m very interested in <a id="aptureLink_YBcv0TSffH" href="http://en.wikipedia.org/wiki/User%20experience">UX</a> and <a id="aptureLink_oygLyJWPIf" href="http://en.wikipedia.org/wiki/Web%20usability">UI Usability</a>, but lousy at drawing and creating nice graphics. (I can use Photoshop and Fireworks, but the result is never what I had in my head, more like thinking about a Ferrari and ending up with a rusted VW Beetle.)<br />
<span id="more-306"></span>Here are a few designs I found interesting:</p>
<ul>
<li><a href="http://sixrevisions.com/tutorials/photoshop-tutorials/create-a-slick-and-minimalist-web-layout-in-photoshop/">Minimalist</a> by Mahmoud Khaled at <a href="http://sixrevisions.com/">Six Revisions</a></li>
<li><a href="http://sinthux.deviantart.com/art/Wordpress-79151963" target="_blank">WordPress</a> by <a href="http://sinthux.deviantart.com/" target="_blank">=sinthux</a> at <a href="http://www.deviantart.com/" target="_blank">DeviantArt</a></li>
<li><a href="http://klosdafrau.deviantart.com/art/green-40893982" target="_blank">Green</a> by <a href="http://klosdafrau.deviantart.com/" target="_blank">~klosdafrau</a> at <a href="http://www.deviantart.com/" target="_blank">DeviantArt</a></li>
</ul>
<p>I like gray/dark professional looking styles and just love carbon steel, like iNove has.</p>
<p>As Usability and CSS expert, I like to use CSS grids. But most grids are based on hardcoded &#8216;px&#8217; values or &#8216;%&#8217;. Both have downsided. Using &#8216;px&#8217; makes the design scale badly, even though most modern browsers scale entire pages and not just the text, some browsers make mistakes when &#8216;px&#8217; is used. Using &#8216;%&#8217; will make most part scale better, but it&#8217;s harder to work with. Most Usability experts and guidelines suggest using &#8216;em&#8217;. I&#8217;m not going into the details of the &#8216;px&#8217; versus &#8216;em&#8217; debate, but I too prefer &#8216;em&#8217;. Today I found some time to invest into looking into the issue of CSS frameworks/grids and &#8216;em&#8217; again and found <a href="http://developer.yahoo.com/yui/grids/"><abbr title="Yahoo User Interface">YUI</abbr> 2 Grids CSS</a>. This seems to be a very nice grid system using &#8216;em&#8217;, so I&#8217;m definitely going to try that when creating my new theme.</p>
<p>While reading about YUI 2&#8242;s Grids CSS and took a look att some examples. Using Google Chrome and looking at the examples, my chrome asked if it should translate the examples from Spanish. Since the examples use Lorem Ipsum text, there is no Spanish present, mistake 1. You can tell the automatic language detection in Chrome what language the page is in by selecting the right language from the drop-down menu. Shame there&#8217;s no &#8216;Latin&#8217; in the list, mistake 2. Quite an amusing bug, but also quite astonishing that Latin is not in Google Translate&#8217;s repertoire.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2010/02/26/pig-latin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>32bit VPN in Windows 7 x64 and XPM</title>
		<link>http://blog.itwarlocks.com/2010/02/25/32bit-vpn-in-windows-7-x64-and-xpm/</link>
		<comments>http://blog.itwarlocks.com/2010/02/25/32bit-vpn-in-windows-7-x64-and-xpm/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 15:04:41 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
		
		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=300</guid>
		<description><![CDATA[Introduction Until a week ago I&#8217;ve been using Windows® XP as the corporate standard prescribes. But having started looking into Microsoft SharePoint 2010, I was allowed to switch to Windows® 7 x64. (The switch also included a very nice MSDN &#8230; <a href="http://blog.itwarlocks.com/2010/02/25/32bit-vpn-in-windows-7-x64-and-xpm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>Until a week ago I&#8217;ve been using Windows<sup>®</sup> XP as the corporate standard prescribes. But having started looking into <a title="Microsoft Office SharePoint Server" href="http://sharepoint.microsoft.com/" target="_blank">Microsoft SharePoint 2010</a>, I was allowed to switch to Windows<sup>®</sup> 7 x64. (The switch also included a very nice <a title="MSDN Subscriptions" href="http://msdn.microsoft.com/en-us/aa336858.aspx" target="_blank">MSDN license</a>, thus giving me access to loads of Microsoft sweetness.) The x64 stands for 64 bit of course.</p>
<p>The change from 32 to 64 bits went quite smooth, except for one minor hiccup. There is no 64bit client for Cisco <abbr title="Virtual Private Network">VPN</abbr>.<br />
There are free and Open Source based VPN clients that are compatible with Cisco that have 64bit versions, but they could not be used in this case.<span id="more-300"></span></p>
<h3>Installing Windows<sup>®</sup> XP Mode</h3>
<p>Windows<sup>®</sup> XP Mode (XPM) is an out-of-the-box solution by Microsoft, based on their Virtual PC. It allows for the installation of a licensed Windows XP machine, complete with drive, USB, desktop and Start Menu integration.</p>
<p>Visit the Virtual PC website at Microsoft for more information: <a title="Windows Virtual PC at microsoft.com" href="http://www.microsoft.com/windows/virtual-pc/default.aspx" target="_blank">Windows Virtual PC and XP Mode</a></p>
<h3>Installing the VPN client</h3>
<p>At my work, we use a Cisco VPN client. Mainly because we&#8217;ve got a Cisco VPN server, but also because it uses <a id="aptureLink_tzsAeRJ8nX" href="http://en.wikipedia.org/wiki/One-time%20password">OTP</a>. Our OTP send an SMS to our work phone and no other VPN client seems to support this. (Would be great if <a title="Shrew Soft Inc." href="http://www.shrew.net/" target="_blank">Shrew</a> would decide to support this.)</p>
<p>Log in to the XPM and install the Cisco VPN Client as usual.</p>
<h3>Connecting Windows 7 to the XPM VPN Client</h3>
<p>I could explain how to set up your networking in W7 and XPM to get access to the VPN client, but <a title="Craig Pringle: Cisco VPN Client on Windows 7 x64" href="http://www.pringle.net.nz/blog/PermaLink,guid,12ee0de7-f998-4084-8b06-537b3dbd5d9a.aspx" target="_blank">Craig Pringle</a> did that quite good already. One extra step needed for this solution is the use of static IPs. Set the IP address of the loopback device in W7 and XPM, for example 192.168.2.1 in W7 and 192.168.2.2 in XPM. Using dynamic IPs as they are by default might cause the XPM IP to change, causing problems in later steps.</p>
<div class="warning">
<div class="boxcaption"><strong>Note</strong></div>
<div class="box">I couldn&#8217;t get W7 and XPM to connect through the loopback at first, it seemed the firewall in XPM blocked the traffic. Disabling the firewall for the loopback adapter solved it. A security warning is issued when disabling the firewall, but since it&#8217;s used for W7 &#8211; XPM communication only, no firewall is needed.</div>
</div>
<h3>Routing network traffic through the XPM VPN Client</h3>
<p>When the VPN Client is active and connected to the VPN, all applications running in XPM will have access to it. Applications in W7 however will not. The network traffic needs to be routed through XPM.</p>
<p>The easiest way is by using 2 tools; a proxy running in XPM, <a title="CCProxy, Proxy Server" href="http://www.youngzsoft.net/ccproxy/" target="_blank">CCProxy</a> and a rerouter running in W7, <a title="Proxifier for Windows/Mac OS X" href="http://www.proxycap.com/" target="_blank">ProxyCap</a>.<br />
CCProxy is an easy to set up proxy, just choose the type of proxy and you&#8217;re done. ProxyCap is a small commercial application that allows you to reroute traffic from any application through a proxy. Just choose the application to reroute and specify the proxy running in XPM. I use Microsoft Visual Studio in W7, so I&#8217;ve set up ProxyCap to reroute it to CCProxy in XPM. When working out of office, run CCProxy in XPM and ProxyCap in W7 and you&#8217;re done.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2010/02/25/32bit-vpn-in-windows-7-x64-and-xpm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pretty tag cloud: Stage 1</title>
		<link>http://blog.itwarlocks.com/2010/01/05/pretty-tag-cloud-stage-1/</link>
		<comments>http://blog.itwarlocks.com/2010/01/05/pretty-tag-cloud-stage-1/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 15:01:45 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=290</guid>
		<description><![CDATA[Introduction As mentioned in my previous blog entry, I&#8217;ve been thinking about implementing a wordle/tagul plug-in for WordPress using CSS3 only. I&#8217;ve just spent about 15 minutes experimenting and have already gotten quite far. The tags To make things simple &#8230; <a href="http://blog.itwarlocks.com/2010/01/05/pretty-tag-cloud-stage-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>As mentioned in my previous blog entry, I&#8217;ve been thinking about implementing a wordle/tagul plug-in for WordPress using CSS3 only. I&#8217;ve just spent about 15 minutes experimenting and have already gotten quite far.<span id="more-290"></span></p>
<h3>The tags</h3>
<p>To make things simple I&#8217;ve taken the HTML from my own tag cloud, although slightly modified. For CSS3 to work, the tags need to be divided into groups for colour and size, tag-grp-# and tag-score-#.</p>
<p><code class="brush: xml; title: ; notranslate"><br />
&lt;div class=&quot;widget widget_tag_cloud&quot; id=&quot;tag_cloud-2&quot;&gt;&lt;h3&gt;Tags&lt;/h3&gt;<br />
	&lt;div&gt;<br />
		&lt;a title=&quot;3 topics&quot; class=&quot;tag-score-3 tag-link-13 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/agile/&quot;&gt;agile&lt;/a&gt;<br />
		&lt;a title=&quot;3 topics&quot; class=&quot;tag-score-3 tag-link-31 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/apache/&quot;&gt;apache&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-30 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/authentication/&quot;&gt;authentication&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-11 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/blog/&quot;&gt;blog&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-5 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/development/&quot;&gt;Development&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-26 tag-grp-3&quot; href=&quot;http://blog.itwarlocks.com/tag/economy/&quot;&gt;economy&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-21 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/extensibility/&quot;&gt;extensibility&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-15 tag-grp-3&quot; href=&quot;http://blog.itwarlocks.com/tag/filosophy/&quot;&gt;filosophy&lt;/a&gt;<br />
		&lt;a title=&quot;3 topics&quot; class=&quot;tag-score-3 tag-link-49 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/gnutls/&quot;&gt;gnutls&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-16 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/gui/&quot;&gt;GUI&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-62 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/http/&quot;&gt;http&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-63 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/https/&quot;&gt;https&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-27 tag-grp-3&quot; href=&quot;http://blog.itwarlocks.com/tag/humanresources/&quot;&gt;humanresources&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-28 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/innovation/&quot;&gt;innovation&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-50 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/javascript/&quot;&gt;JavaScript&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-17 tag-grp-3&quot; href=&quot;http://blog.itwarlocks.com/tag/leadership/&quot;&gt;leadership&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-19 tag-grp-3&quot; href=&quot;http://blog.itwarlocks.com/tag/management/&quot;&gt;management&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-34 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/mod_auth/&quot;&gt;mod_auth&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-35 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/mod_auth_script/&quot;&gt;mod_auth_script&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-32 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/mod_dav/&quot;&gt;mod_dav&lt;/a&gt;<br />
		&lt;a title=&quot;3 topics&quot; class=&quot;tag-score-3 tag-link-52 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/mod_gnutls/&quot;&gt;mod_gnutls&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-64 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/mod_ssl/&quot;&gt;mod_ssl&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-36 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/office/&quot;&gt;office&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-68 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/open-source/&quot;&gt;open source&lt;/a&gt;<br />
		&lt;a title=&quot;3 topics&quot; class=&quot;tag-score-3 tag-link-53 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/openssl/&quot;&gt;openssl&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-24 tag-grp-3&quot; href=&quot;http://blog.itwarlocks.com/tag/organisation/&quot;&gt;organisation&lt;/a&gt;<br />
		&lt;a title=&quot;3 topics&quot; class=&quot;tag-score-3 tag-link-29 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/php/&quot;&gt;php&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-9 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/principles/&quot;&gt;Principles&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-25 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/roi/&quot;&gt;roi&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-18 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/scm/&quot;&gt;SCM&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-14 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/scrum/&quot;&gt;scrum&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-12 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/software/&quot;&gt;software&lt;/a&gt;<br />
		&lt;a title=&quot;3 topics&quot; class=&quot;tag-score-3 tag-link-56 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/ssl/&quot;&gt;ssl&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-20 tag-grp-3&quot; href=&quot;http://blog.itwarlocks.com/tag/testing/&quot;&gt;testing&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-23 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/thinktank/&quot;&gt;thinktank&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-65 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/tls/&quot;&gt;TLS&lt;/a&gt;<br />
		&lt;a title=&quot;3 topics&quot; class=&quot;tag-score-3 tag-link-57 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/ubuntu/&quot;&gt;ubuntu&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-39 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/vba/&quot;&gt;vba&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-66 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/virtual-hosting/&quot;&gt;Virtual Hosting&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-38 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/visualbasic/&quot;&gt;visualbasic&lt;/a&gt;<br />
		&lt;a title=&quot;3 topics&quot; class=&quot;tag-score-3 tag-link-33 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/webdav/&quot;&gt;WebDAV&lt;/a&gt;<br />
		&lt;a title=&quot;1 topic&quot; class=&quot;tag-score-1 tag-link-40 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/windows/&quot;&gt;windows&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-37 tag-grp-1&quot; href=&quot;http://blog.itwarlocks.com/tag/word/&quot;&gt;word&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-86 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/wordpress/&quot;&gt;wordpress&lt;/a&gt;<br />
		&lt;a title=&quot;2 topics&quot; class=&quot;tag-score-2 tag-link-60 tag-grp-2&quot; href=&quot;http://blog.itwarlocks.com/tag/zimbra/&quot;&gt;zimbra&lt;/a&gt;<br />
	&lt;/div&gt;<br />
&lt;/div&gt;<br />
</code></p>
<h3>The styling</h3>
<p>Using CSS3 techniques like transform and transition (-webkit-transform, -webkit-transition, -moz-transform) you can easily get the tags to change then moused over.</p>
<p><code class="brush: css; title: ; notranslate"><br />
/* Generic styles */<br />
body {<br />
	font-family: Arial, Helvetica, Tahoma, sans-serif;<br />
}<br />
a {<br />
	color: #2970A6;<br />
}<br />
/* WordPress widget style */<br />
.widget {<br />
	padding: 10px 15px 16px;<br />
	width: 400px;<br />
	border: 1px solid #C0C0C0;<br />
}<br />
/* Pretty tag cloud */<br />
.widget_tag_cloud a {<br />
	/* Transform is only applied to block elements, inlineblock preserves the layout: */<br />
	display: inline-block;<br />
	text-decoration: none;<br />
	/* Animate the transitions for color, background and transform: */<br />
	-webkit-transition: color,background,-webkit-transform 1s,1s,0.5s ease-out;<br />
	-moz-transition: color,background 1s ease-out;<br />
}<br />
.widget_tag_cloud a:hover {<br />
	background: #808080;<br />
	color: #FFFFFF;<br />
	/*font-size: 22pt;*/<br />
	padding: 0.5em;<br />
	margin: -0.5em;<br />
	opacity: 0.7;<br />
	-webkit-border-radius: 0.5em;<br />
	-moz-border-radius: 0.5em;<br />
}<br />
/* Tag score determins size.<br />
 * We want the mouse over size to be the same,<br />
 * so different scales for each.<br />
 */<br />
a.tag-score-1 {<br />
	font-size: 0.8em;<br />
}<br />
a.tag-score-1:hover {<br />
	-webkit-transform: scale(2.5) !important; /* 0.8 x 2.5 = 2.0 */<br />
	-moz-transform: scale(2.5) !important;<br />
}<br />
a.tag-score-2 {<br />
	font-size: 1.25em;<br />
}<br />
a.tag-score-2:hover {<br />
	-webkit-transform: scale(1.6) !important; /* 1.25 x 1.6 = 2.0 */<br />
	-moz-transform: scale(1.6) !important;<br />
}<br />
a.tag-score-3 {<br />
	font-size: 2em;<br />
}<br />
a.tag-score-3:hover {<br />
	-webkit-transform: scale(1) !important; /* 2.0 x 1.0 = 2.0 */<br />
	-moz-transform: scale(1) !important;<br />
}<br />
/* Tag groups determine colour. */<br />
a.tag-grp-1 {<br />
	color: #2970A6;<br />
}<br />
a.tag-grp-2 {<br />
	color: #5FC159;<br />
}<br />
a.tag-grp-3 {<br />
	color: #F6872B;<br />
}<br />
/* Some randomly chosen tags to rotate. */<br />
.tag-link-21,<br />
.tag-link-35,<br />
.tag-link-24,<br />
.tag-link-68 {<br />
	-webkit-transform: rotate(90deg);<br />
	-moz-transform: rotate(90deg);<br />
}<br />
</code></p>
<h3>The result</h3>
<ul>
<li><a title="Pretty tag cloud, stage 1" href="/lab/wordle/stage-1.html" target="_blank">Pretty tag cloud, stage 1</a><br />
(Only works perfectly in Webkit; Safari, Chrome and partially in Gecko; Mozilla, Firefox.)</li>
</ul>
<h3>Next step</h3>
<p>As can be seen, the layout of the tags is not right. This cannot be done with CSS, so this is where I&#8217;ll be using some jQuery in the next step. The biggest challenges will be the algorithm and font-size/letter calculations in the browser.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2010/01/05/pretty-tag-cloud-stage-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The road ahead</title>
		<link>http://blog.itwarlocks.com/2010/01/05/the-road-ahead/</link>
		<comments>http://blog.itwarlocks.com/2010/01/05/the-road-ahead/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 07:39:22 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
		
		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=288</guid>
		<description><![CDATA[The year marker has passed, it&#8217;s 2010. What did 2009 bring and where is 2010 heading? 2009 The past year brought a lot less than I expected, no personal projects were really finished. But I did learn a lot, about &#8230; <a href="http://blog.itwarlocks.com/2010/01/05/the-road-ahead/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The year marker has passed, it&#8217;s 2010. What did 2009 bring and where is 2010 heading?</p>
<h3>2009</h3>
<p>The past year brought a lot less than I expected, no personal projects were really finished. But I did learn a lot, about maintenance, development and personal growth. I set out to read a few books, Deepak Chopra amongst then; not done. I wanted to create a new look &amp; feel for my blog; not even started. I started a small project to create a WordPress plug-in that detects vcards (<a id="aptureLink_nqVD0SuVgC" href="http://en.wikipedia.org/wiki/Microformats">microformats</a>) and creates a visible floating card; half done. In december I found Highcharts and wanted to turn it into a WordPress plug-in; going steady. It seems like 2009 wasn&#8217;t to successful, but that&#8217;s not quite true. I&#8217;ve been busy at work, helping out everywhere I can. I&#8217;ve learned quite a lot about Javascript, social media, cloud computing, architecture and so on.</p>
<p>The goals I had for 2009 were not missed, they just changed. When the road ahead for the company was discussed at work, I reminded my colleagues about the fact, that – just like in any/every agile project – goals are in constant flux, changing and moving around.</p>
<h3>2010</h3>
<p>So what&#8217;s going to happen in the coming year? Since I was on the topic of &#8220;agile&#8221;, I can say that I&#8217;m becoming a member of <a title="Dragon Open Source Foundation" href="http://www.dosf.se/" target="_blank">Dragon Open Source Foundation</a>. DOSF is a group of people from Sundsvall that aim to become the main source for information regarding Open Standards and Open Source Software for the public sector in Sweden. This fits perfectly with my goal to help the Swedish public sector to start focussing more on Open Source and Agile development. (A big thanks to <a id="aptureLink_oTS5V426eq" href="http://www.linkedin.com/in/petera1967">Peter Axelsson</a>, my previous boss at Steria, for pushing me into DOSF.)</p>
<p>Personal projects are always a bit tricky, mine are mostly revolved around development. There are a few things I&#8217;ve been thinking about turning into WordPress plug-ins; <a title="MathJax: Math display for all browsers" href="http://www.mathjax.org/" target="_blank">MathJax</a> and <a title="Wordle, beautiful word clouds" href="http://www.wordle.net/" target="_blank">Wordle</a>. MathJax should be pretty straight forward, but not Wordle. At least not how I have it in mind, pure CSS3 based. Replacing the tag cloud with something that works and looks like <a title="Pretty interactive tag clouds" href="http://tagul.com/" target="_blank">Tagul</a>, using only CSS3 should be a very nice challenge and CSS3 skill sharpening project.</p>
<p>The road ahead has been planned, now it&#8217;s time to rip it apart and just have fun sailing through 2010.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2010/01/05/the-road-ahead/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Advanced charts in WordPress</title>
		<link>http://blog.itwarlocks.com/2009/12/17/advanced-charts-in-wordpress/</link>
		<comments>http://blog.itwarlocks.com/2009/12/17/advanced-charts-in-wordpress/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 14:11:06 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
		
		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=257</guid>
		<description><![CDATA[Introduction I recently came across Highcharts, a great JavaScript library for creating charts. It uses canvas where it can, supports skins (easily changed with CSS). I&#8217;ve been searching/waiting for a decent JavaScript based charting API and it has finally arrived. Seeing &#8230; <a href="http://blog.itwarlocks.com/2009/12/17/advanced-charts-in-wordpress/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>I recently <a title="Ajaxian: Highcharts, really nice charting API" href="http://ajaxian.com/archives/highcharts-really-nice-charting-api" target="_blank">came across</a> <a title="Highcharts, Interactive JavaScript Charting Library" href="http://highcharts.com/" target="_blank">Highcharts</a>, a great JavaScript library for creating charts. It uses <a id="aptureLink_taKFFEYWh6" href="http://en.wikipedia.org/wiki/Canvas%20%28HTML%20element%29">canvas</a> where it can, supports skins (easily changed with CSS). I&#8217;ve been searching/waiting for a decent JavaScript based charting API and it has finally arrived.</p>
<p>Seeing as I&#8217;m a wordpressaholic I&#8217;m of course going to try and get it into WordPress. Although that might turn out to be quite more than I can chew.</p>
<p><span id="more-257"></span></p>
<h3>Data Source</h3>
<p>Highcharts can create charts from different sources; JSON, AJAX and HTML Tables. Each of which are actually scripted, but Highcharts has nice examples. For a WordPress plug-in the most common source would be an existing HTML table. To be easily used as a source, it would require some structure. As an example I&#8217;ll take the <a title="Browser Statistics 2009" href="http://www.w3schools.com/browsers/browsers_stats.asp" target="_blank">Browser Statistics for 2009 from w3schools.com</a>.</p>
<p>Table:</p>
<pre><code class="brush: xml; title: ; notranslate">
&lt;table width=&quot;100%&quot; cellspacing=&quot;0&quot; id=&quot;chart-1-table&quot;&gt;
	&lt;caption&gt;
		&lt;h2 class=&quot;title&quot;&gt;Browser Statistics 2009&lt;/h2&gt;
		&lt;h3 class=&quot;subtitle&quot;&gt;Source: &lt;a href=&quot;http://www.w3schools.com/browsers/browsers_stats.asp&quot; title=&quot;Browser Statistics at w3schools.com&quot;&gt;w3schools.com&lt;/a&gt;&lt;/h3&gt;
	&lt;/caption&gt;
	&lt;colgroup class=&quot;chart-axis-x&quot;&gt;
		&lt;col width=&quot;16%&quot; align=&quot;left&quot; title=&quot;Month&quot;/&gt;
	&lt;/colgroup&gt;
	&lt;colgroup width=&quot;12%&quot; align=&quot;center&quot; class=&quot;chart-axis-y&quot;&gt;
		&lt;col title=&quot;Internet Explorer 6&quot;/&gt;
		&lt;col title=&quot;Internet Explorer 7&quot;/&gt;
		&lt;col title=&quot;Internet Explorer 8&quot;/&gt;
		&lt;col title=&quot;Firefox&quot;/&gt;
		&lt;col title=&quot;Chrome&quot;/&gt;
		&lt;col title=&quot;Safari&quot;/&gt;
		&lt;col title=&quot;Opera&quot;/&gt;
	&lt;/colgroup&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th&gt;2009&lt;/th&gt;
			&lt;th&gt;IE6&lt;/th&gt;
			&lt;th&gt;IE7&lt;/th&gt;
			&lt;th&gt;IE8&lt;/th&gt;
			&lt;th&gt;Firefox&lt;/th&gt;
			&lt;th&gt;Chrome&lt;/th&gt;
			&lt;th&gt;Safari&lt;/th&gt;
			&lt;th&gt;Opera&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;November&lt;/th&gt;
			&lt;td&gt;13.3%&lt;/td&gt;
			&lt;td&gt;13.3%&lt;/td&gt;
			&lt;td&gt;11.1%&lt;/td&gt;
			&lt;td&gt;47.0%&lt;/td&gt;
			&lt;td&gt;8.5%&lt;/td&gt;
			&lt;td&gt;3.8%&lt;/td&gt;
			&lt;td&gt;2.3%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;October&lt;/th&gt;
			&lt;td&gt;12.8%&lt;/td&gt;
			&lt;td&gt;14.1%&lt;/td&gt;
			&lt;td&gt;10.6%&lt;/td&gt;
			&lt;td&gt;47.5%&lt;/td&gt;
			&lt;td&gt;8.0%&lt;/td&gt;
			&lt;td&gt;3.8%&lt;/td&gt;
			&lt;td&gt;2.3%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;September&lt;/th&gt;
			&lt;td&gt;12.2%&lt;/td&gt;
			&lt;td&gt;15.3%&lt;/td&gt;
			&lt;td&gt;12.1%&lt;/td&gt;
			&lt;td&gt;46.6%&lt;/td&gt;
			&lt;td&gt;7.1%&lt;/td&gt;
			&lt;td&gt;3.6%&lt;/td&gt;
			&lt;td&gt;2.2%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;August&lt;/th&gt;
			&lt;td&gt;10.6%&lt;/td&gt;
			&lt;td&gt;15.1%&lt;/td&gt;
			&lt;td&gt;13.6%&lt;/td&gt;
			&lt;td&gt;47.4%&lt;/td&gt;
			&lt;td&gt;7.0%&lt;/td&gt;
			&lt;td&gt;3.3%&lt;/td&gt;
			&lt;td&gt;2.1%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;July&lt;/th&gt;
			&lt;td&gt;9.1%&lt;/td&gt;
			&lt;td&gt;15.9%&lt;/td&gt;
			&lt;td&gt;14.4%&lt;/td&gt;
			&lt;td&gt;47.9%&lt;/td&gt;
			&lt;td&gt;6.5%&lt;/td&gt;
			&lt;td&gt;3.3%&lt;/td&gt;
			&lt;td&gt;2.1%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;June&lt;/th&gt;
			&lt;td&gt;7.1%&lt;/td&gt;
			&lt;td&gt;18.7%&lt;/td&gt;
			&lt;td&gt;14.9%&lt;/td&gt;
			&lt;td&gt;47.3%&lt;/td&gt;
			&lt;td&gt;6.0%&lt;/td&gt;
			&lt;td&gt;3.1%&lt;/td&gt;
			&lt;td&gt;2.1%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;May&lt;/th&gt;
			&lt;td&gt;5.2%&lt;/td&gt;
			&lt;td&gt;21.3%&lt;/td&gt;
			&lt;td&gt;14.5%&lt;/td&gt;
			&lt;td&gt;47.7%&lt;/td&gt;
			&lt;td&gt;5.5%&lt;/td&gt;
			&lt;td&gt;3.0%&lt;/td&gt;
			&lt;td&gt;2.2%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;April&lt;/th&gt;
			&lt;td&gt;3.5%&lt;/td&gt;
			&lt;td&gt;23.2%&lt;/td&gt;
			&lt;td&gt;15.4%&lt;/td&gt;
			&lt;td&gt;47.1%&lt;/td&gt;
			&lt;td&gt;4.9%&lt;/td&gt;
			&lt;td&gt;3.0%&lt;/td&gt;
			&lt;td&gt;2.2%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;March&lt;/th&gt;
			&lt;td&gt;1.4%&lt;/td&gt;
			&lt;td&gt;24.9%&lt;/td&gt;
			&lt;td&gt;17.0%&lt;/td&gt;
			&lt;td&gt;46.5%&lt;/td&gt;
			&lt;td&gt;4.2%&lt;/td&gt;
			&lt;td&gt;3.1%&lt;/td&gt;
			&lt;td&gt;2.3%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;February&lt;/th&gt;
			&lt;td&gt;0.8%&lt;/td&gt;
			&lt;td&gt;25.4%&lt;/td&gt;
			&lt;td&gt;17.4%&lt;/td&gt;
			&lt;td&gt;46.4%&lt;/td&gt;
			&lt;td&gt;4.0%&lt;/td&gt;
			&lt;td&gt;3.0%&lt;/td&gt;
			&lt;td&gt;2.2%&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;January&lt;/th&gt;
			&lt;td&gt;0.6%&lt;/td&gt;
			&lt;td&gt;25.7%&lt;/td&gt;
			&lt;td&gt;18.5%&lt;/td&gt;
			&lt;td&gt;45.5%&lt;/td&gt;
			&lt;td&gt;3.9%&lt;/td&gt;
			&lt;td&gt;3.0%&lt;/td&gt;
			&lt;td&gt;2.3%&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</code></pre>
<p>Style:</p>
<pre><code class="brush: css; title: ; notranslate">
.chart table {
	margin: 0;
	padding: 0;
	font-size: 0.86em;
}
.chart table tr {
	line-height: 1.5em;
}
.chart table th,
.chart table td {
	padding: 0.5em;
	border-top: 1px solid #999999;
}
.chart table thead {
	background-color: #F0F0F0;
	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#E0E0E0), to(#FFFFFF));
}
.chart table thead th {
	border-bottom: 1px solid #999999;
	border-top: 1px solid #999999;
}
.chart table thead th:first-child,
.chart table tbody th {
	text-align: left;
}
.chart table tbody td {
	text-align: center;
}
.chart table h2.title {
	font-size: 1.2em;
	margin-bottom: 0px;
}
.chart table h3.subtitle {
	font-size: 0.86em;
	margin-top: 0px;
}
</code></pre>
<h3>Charting</h3>
<p>The Highcharts API has a lot of <a title="Hightcharts: Options Reference" href="http://www.highcharts.com/ref" target="_blank">options</a>, too much to mention here, but a few are key to working successfully with pre-existing tables. The examples don&#8217;t use jQuery to parse the HTML, but since both WordPress and Highcharts use it, I will too. These properties are static in the examples, but were they&#8217;ll need to be more dynamic; <code>title</code>, <code>subtitle</code>, <code>xAxis</code>, <code>plotOptions.series</code>. These options can be obtained from the table text or structure.</p>
<p><code>title</code> and <code>subtitle</code> can be grabbed from the <code>&lt;caption&gt;</code>:</p>
<pre><code class="brush: jscript; title: ; notranslate">
title: {
	text: (function(){
		var table = $('#chart-1-table');
		var title = $('caption .title', table);

		return title ? title.html() : '';
	}())
},
subtitle: {
	text: (function(){
		var table = $('#chart-1-table');
		var subtitle = $('caption .subtitle', table);

		return subtitle ? subtitle.html() : '';
	}())
},
</code></pre>
<p>Currently the title and subtitle are taken from tags with the &#8216;title&#8217; and &#8216;subtitle&#8217; classes, but just using H2 and H3 (or H1 and H2) would work too of course.</p>
<p><code>xAxis</code> as in the examples:</p>
<pre><code class="brush: jscript; title: ; notranslate">
xAxis: {
	categories: [
		'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
	],
	title: {
		text: 'Month'
	}
}
</code></pre>
<p>Since we&#8217;ve got an existing table with labels, we can do it more dynamically.<br />
<code>xAxis</code> from existing table:</p>
<pre><code class="brush: jscript; title: ; notranslate">
xAxis: {
	categories: (function(){
		var table = $('#chart-1-table');
		/*
		 * The first column in the table body uses &lt;TH&gt; tags,
		 * to separate them from data.
		 */
		var cats = $('tbody &gt; tr &gt; th', table)
			.map(function(){
				return $(this).text();
			});

		return $.makeArray(cats);
	}()),
	title: {
		text: 'Month'
	}
}
</code></pre>
<p><code>map</code> allows you to turn the array with elements into an array with the actual text.</p>
<p><code>series</code> as in the examples:</p>
<pre><code class="brush: jscript; title: ; notranslate">
series: [{
	name: 'November'
}, {
	name: 'October'
}, {
	name: 'September'
}, {
	name: 'August'
}, {
	name: 'July'
}, {
	name: 'June'
}, {
	name: 'May'
}, {
	name: 'April'
}, {
	name: 'March'
}, {
	name: 'February'
}, {
	name: 'January'
}]
</code></pre>
<p>Since we&#8217;ve got an existing table with labels, we can do it more dynamically.<br />
<code>series</code> from existing table:</p>
<pre><code class="brush: jscript; title: ; notranslate">
series: (function(){
	var result = [];

	var table = $('#chart-1-table');
	/*
	 * Get all the columns from the table head.
	 * Some tables have multiple rows in the header.
	 */
	var head = $('thead &gt; tr:last', table);
	/*
	 * Skip the first column, it's the Y-axis label.
	 */
	var columns = $('th:gt(0)', head);

	for (var i = 0, iMax = columns.length; i &lt; iMax; i++) {
		result.push(
			{
				name: $(columns[i]).text()
			}
		);
	};

	return result;
}())
</code></pre>
<p>And lastly the <code>plotOptions.dataParser</code> function:</p>
<pre><code class="brush: jscript; title: ; notranslate">
dataParser: function(data) {
	var result = [];

	var table = $('#chart-1-table');

	/*
	 * The series are defined by names, so we need to check what series we're in.
	 */
	var head = $('thead &gt; tr:last', table);
	var column = $('th:gt(0)', head).map(function(){
		return $(this).text();
	}).index(this.options.name);

	/*
	 * Loop through all the data rows for this series.
	 */
	var rows = $('tbody &gt; tr', table);
	for (var i = 0, max = rows.length; i &lt; max; i++) {
		/*
		 * The first column (using a &lt;TH&gt; tag) contains the category name.
		 */
		var rowDate = $('th', rows[i]);
		if (rowDate.size() &gt; 1) {
			rowDate = rowDate[0];
		}
		rowDate = rowDate.text();

		/*
		 * Grab the cell in the right column for this series.
		 */
		var cell = $('td', rows[i])[column];
		cell = $(cell);

		/*
		 * Add an array to the result with the category name and cell value.
		 */
		result.push([
			rowDate,
			parseFloat(cell.text())
		]);
	}

	return result;
}
</code></pre>
<p>The code for above <code>dataParser</code> is very specific for tables using categories. Tables with a lot more data that use timestamp should use <code>xAxis.type = 'datetime'</code> and convert the value of the row header to a UTC date.</p>
<p>Compete code:</p>
<pre><code class="brush: jscript; title: ; notranslate">
var chart1 = null;

$(document).ready(function(){
	chart1 = new Highcharts.Chart({
		chart: {
			renderTo: 'chart-1-container',
			defaultSeriesType: 'line'
		},
		title: {
			text: (function(){
				var table = $('#chart-1-table');
				var title = $('caption .title', table);

				return title ? title.html() : '';
			}())
		},
		subtitle: {
			text: (function(){
				var table = $('#chart-1-table');
				var subtitle = $('caption .subtitle', table);

				return subtitle ? subtitle.html() : '';
			}())
		},
		xAxis: {
			categories: (function(){
				var table = $('#chart-1-table');
				/*
				 * The first column in the table body uses &lt;TH&gt; tags,
				 * to separate them from data.
				 */
				var cats = $('tbody &gt; tr &gt; th', table)
					.map(function(){
						return $(this).text();
					});

				return $.makeArray(cats);
			}()),
			title: {
				text: 'Month'
			},
			type: 'linear'
		},
		yAxis: {
			title: {
				text: 'Percent'
			},
			labels: {
				formatter: function() {
					return this.value + '%';
				}
			}
		},
		tooltip: {
			formatter: function() {
				return	'&lt;strong&gt;' + this.series.name + '&lt;/strong&gt;&lt;br /&gt;'+
						this.x + ': ' + Highcharts.numberFormat(this.y, 1) + '%';
			}
		},
		plotOptions: {
			line: {
				//stacking: 'percent',
				lineColor: '#ffffff',
				lineWidth: 1,
				marker: {
					lineWidth: 1,
					lineColor: '#ffffff'
				},
				data: 'datatable',
				dataParser: function(data) {
					var result = [];

					var table = $('#chart-1-table');

					/*
					 * The series are defined by names, so we need to check what series we're in.
					 */
					var head = $('thead &gt; tr:last', table);
					var column = $('th:gt(0)', head).map(function(){
						return $(this).text();
					}).index(this.options.name);

					/*
					 * Loop through all the data rows for this series.
					 */
					var rows = $('tbody &gt; tr', table);
					for (var i = 0, max = rows.length; i &lt; max; i++) {
						/*
						 * The first column (using a &lt;TH&gt; tag) contains the category name.
						 */
						var rowDate = $('th', rows[i]);
						if (rowDate.size() &gt; 1) {
							rowDate = rowDate[0];
						}
						rowDate = rowDate.text();

						/*
						 * Grab the cell in the right column for this series.
						 */
						var cell = $('td', rows[i])[column];
						cell = $(cell);

						/*
						 * Add an array to the result with the category name and cell value.
						 */
						result.push([
							rowDate,
							parseFloat(cell.text())
						]);
					}

					return result;
				}
			}
		},
		series: (function(){
			var result = [];

			var table = $('#chart-1-table');
			/*
			 * Get all the columns from the table head.
			 * Some tables have multiple rows in the header.
			 */
			var head = $('thead &gt; tr:last', table);
			/*
			 * Skip the first column, it's the Y-axis label.
			 */
			var columns = $('th:gt(0)', head);

			for (var i = 0, iMax = columns.length; i &lt; iMax; i++) {
				result.push(
					{
						name: $(columns[i]).text()
					}
				);
			};

			return result;
		}())
	});
});
</code></pre>
<h3>Demo</h3>
<ul>
<li>[drain file 1 url Browser statistics]</li>
</ul>
<h3>Next steps</h3>
<p>The above code works great for a single instance, but for use in a plug-in it&#8217;s too scattered. The first thing to do is to create a dataSource Interface or base Class that provides functions for series, categories and dataParser.<br />
For a WordPress plug-in an advanced GUI for the WYSIWYG editor is needed to allow access to the complex options, not to mention a chart preview inside the editor.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2009/12/17/advanced-charts-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RTFM is dead, long live STFG</title>
		<link>http://blog.itwarlocks.com/2009/10/06/rtfm-is-dead-long-live-stfg/</link>
		<comments>http://blog.itwarlocks.com/2009/10/06/rtfm-is-dead-long-live-stfg/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 14:17:32 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
		
		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=238</guid>
		<description><![CDATA[Knowledge is power, or for developers it&#8217;s skill. Or is it? Before the time of Google developers were required to learn, remember and never forget the knowledge they needed to perform their work. I might be a bit of a &#8230; <a href="http://blog.itwarlocks.com/2009/10/06/rtfm-is-dead-long-live-stfg/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Knowledge is power, or for developers it&#8217;s skill. Or is it?</p>
<p>Before the time of Google developers were required to learn, remember and never forget the knowledge they needed to perform their work. I might be a bit of a dinosaur in that way, since I&#8217;d rather simply know than rely too much on Google. The media has reported cases of student relying more and more on Google (or Bing or anyother web search.) No longer is anyone required to know everything, the web answers all questions.</p>
<p>A fun example is something that actually happens around me sometimes. Since I live and work in Sweden many Operating Systems are in Swedish. Everything is in Swedish, even the error messages. That&#8217;s a great feat of the developers to successfully implement <abbr title="Internationalisation">I18n</abbr>, but sometimes other developers can&#8217;t find the solution to their problems because they don&#8217;t know the English version.</p>
<p>A well known expression in the programming world is <abbr title="Read The Fucking Manual">RTFM</abbr>, but this is becoming a relic of an older age, these days a new expression is more valid, <abbr title="Search The Friendly Google">STFG</abbr>.</p>
<p>Unfortunately the expression &#8220;Knowledge is power&#8221; is still very true. Search engines hold more and more knowledge and thus power. Since it&#8217;s all free and open, there is absolutely no problem with that, in fact it&#8217;s great. It means everyone can share the knowledge. The real problem is that the people who are supposed to have the knowledge in their brains are become reliant on web search. What happens if the web is not accessible when they need it, or &#8211; god forbid &#8211; companies like Google and Microsoft start putting a price on that knowledge?</p>
<p>Yes, web search can solve many problems and provide a wealth of knowledge. But don&#8217;t just remember the URL to the knowledge you require, remember the actual knowledge instead. Reading news feeds about new techniques in HTML, CSS, JAVA, .NET, Ruby, etc. is great. But you should remember it, quite easy if you experiment with what you&#8217;ve read. Doing it stores more in the mind than reading about it.</p>
<p>Go ahead, <abbr title="Search The Friendly Google">STFG</abbr>. Experiment, do, develop, extend and <strong>Remember</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2009/10/06/rtfm-is-dead-long-live-stfg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Back in the saddle</title>
		<link>http://blog.itwarlocks.com/2009/10/01/back-in-the-saddle/</link>
		<comments>http://blog.itwarlocks.com/2009/10/01/back-in-the-saddle/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 11:08:48 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
		
		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=236</guid>
		<description><![CDATA[After almost 2 months of leave (having baby can hardly be called a vacation), I&#8217;m back at work and eager to start again. A lot of things have changed at work while I was gone, so I&#8217;m curious to see &#8230; <a href="http://blog.itwarlocks.com/2009/10/01/back-in-the-saddle/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After almost 2 months of leave (having baby can hardly be called a vacation), I&#8217;m back at work and eager to start again.<br />
A lot of things have changed at work while I was gone, so I&#8217;m curious to see how they play out.</p>
<p>My goals of being a part of the OSOSS movement and resharpening my web skills are back in action and I hope to be blogging a lot more from now on.</p>
<p>For now I&#8217;ve got an enormous pile of e-mails to dig through and lots of things to update.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2009/10/01/back-in-the-saddle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog syndication</title>
		<link>http://blog.itwarlocks.com/2009/07/24/blog-syndication/</link>
		<comments>http://blog.itwarlocks.com/2009/07/24/blog-syndication/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 10:57:10 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
		
		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=229</guid>
		<description><![CDATA[This blog now supports SourcedFrom. SourcedFrom allows for re-publishing of WordPress content using their open API. If you wish to re-publish the content on this blog, please ask to be added to the list.]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright"><img class="size-full wp-image-230" title="SourcedFrom" src="http://blog.itwarlocks.com/wp-content/uploads/2009/07/sourcedfrom_logo.jpg" alt="SourcedFrom" width="153" height="41" /></div>
<p>This blog now supports <a title="SourcedFrom | Analytics and syndication solutions for the web." href="http://www.sourcedfrom.com" target="_blank">SourcedFrom</a>. SourcedFrom allows for re-publishing of WordPress content using their <a title="SourcedFrom API" href="http://sourcedfrom.com/analytics/app/track.php#api" target="_blank">open API</a>.</p>
<p>If you wish to re-publish the content on this blog, please ask to be added to the list.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2009/07/24/blog-syndication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSOSS movement</title>
		<link>http://blog.itwarlocks.com/2009/07/21/ososs-movement/</link>
		<comments>http://blog.itwarlocks.com/2009/07/21/ososs-movement/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 11:26:56 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
		
		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=226</guid>
		<description><![CDATA[A few weeks ago I asked the Dutch OSOSS public-sector organisation (NOiV) for permission to translate information on their website and their documents. Today I received a reply and they agreed. That means I&#8217;ll be translating some of their work &#8230; <a href="http://blog.itwarlocks.com/2009/07/21/ososs-movement/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="attachment_227" class="wp-caption alignright" style="width: 128px"><a href="http://www.opensource.org"><img class="size-full wp-image-227" title="Open Source" src="http://blog.itwarlocks.com/wp-content/uploads/2009/07/garland_logo.png" alt="Open Source" width="118" height="100" /></a><p class="wp-caption-text">Open Source</p></div>
<p>A few weeks ago I asked the Dutch OSOSS public-sector organisation (<a title="Nederland Open in Verbinding" href="http://www.ososs.nl" target="_blank">NOiV</a>) for permission to translate information on their website and their documents. Today I received a reply and they agreed. That means I&#8217;ll be translating some of their work into Swedish.</p>
<p>The Dutch OSOSS movement is quite a bit ahead of the Swedish OSOSS movement, thus it only seems logical to use their experience and materials to fuel the Swedish movement. There are OSOSS organisations in Sweden, but they seem disconnected (<a title="Open Sweden Kompetenscenter" href="http://www.opensweden.se" target="_blank">Open Sweden</a>, <a title="Dragon Open Source Foundation" href="http://www.opensourcefoundation.se/" target="_blank">Dragon OSF</a>, <a title="Almedalsveckan" href="http://www.gotland.se/almedalsveckan/" target="_blank">Almedalsveckan</a>). I&#8217;m going to try to leverage the gap between the OSOSS groups and even moreso, I&#8217;m going to try and get <a title="Steria Global Website" href="http://www.steria.com/" target="_blank">Steria</a> to become a major player in OSOSS movements in every country Steria operates.</p>
<p>Steria operates in 16 countries across different sectors, in Sweden the public sector is the major working area. Reusing resources, materials and experience from all countries will create a stronger, more robust OSOSS movement throughout all countries. Whether I succeed in taking Steria along with me for this journey remains to be seem, but I&#8217;m very hopeful.</p>
<p>The use of Open Standards and Open Source Software for the public sector is crucial for everyone, so I intend to do whatever I can for society, the public sector and the Open Source community.</p>
<p>I&#8217;m going to start with translating a whitepaper that describes the fiction and facts about Open Standards and Open Source Software. Let&#8217;s see what we can accomplish with that.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2009/07/21/ososs-movement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update: HTTPS Virtual Hosts on Ubuntu 8.04 LTS Server</title>
		<link>http://blog.itwarlocks.com/2009/07/16/update-https-virtual-hosts-on-ubuntu-8-04-lts-server/</link>
		<comments>http://blog.itwarlocks.com/2009/07/16/update-https-virtual-hosts-on-ubuntu-8-04-lts-server/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 13:59:28 +0000</pubDate>
		<dc:creator>Jeffrey Ridout</dc:creator>
		
		<guid isPermaLink="false">http://blog.itwarlocks.com/?p=219</guid>
		<description><![CDATA[Original article: [intlink id="167" type="post" target="_self"]HTTPS Virtual Hosts on Ubuntu 8.04 LTS Server[/intlink] The gnutls and gcrypt packages were updated for Ubuntu 8.04, but they are still not right for mod_gnutls. libgnutls-dev (2.0.4-1ubuntu2.5) libgnutls13 (2.0.4-1ubuntu2.5) gnutls-bin (2.0.4-1ubuntu2.5) libgcrypt11-dev (1.2.4-2ubuntu7) libgcrypt11 &#8230; <a href="http://blog.itwarlocks.com/2009/07/16/update-https-virtual-hosts-on-ubuntu-8-04-lts-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="messagebox"><strong>Original article:</strong> [intlink id="167" type="post" target="_self"]HTTPS Virtual Hosts on Ubuntu 8.04 LTS Server[/intlink]</div>
<p>The gnutls and gcrypt packages were updated for Ubuntu 8.04, but they are still not right for mod_gnutls.</p>
<ul>
<li>libgnutls-dev (2.0.4-1ubuntu2.5)</li>
<li>libgnutls13 (2.0.4-1ubuntu2.5)</li>
<li>gnutls-bin (2.0.4-1ubuntu2.5)</li>
<li>libgcrypt11-dev (1.2.4-2ubuntu7)</li>
<li>libgcrypt11 (1.2.4-2ubuntu7)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.itwarlocks.com/2009/07/16/update-https-virtual-hosts-on-ubuntu-8-04-lts-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: blog.itwarlocks.com @ 2012-05-20 22:12:31 -->
