<?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>Lee Kelleher</title>
	<atom:link href="http://leekelleher.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://leekelleher.com</link>
	<description>Umbraco Specialist</description>
	<lastBuildDate>Fri, 03 Feb 2012 03:17:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Robots.txt Editor for Umbraco 5</title>
		<link>http://leekelleher.com/2012/02/03/robots-txt-editor-for-umbraco-5/</link>
		<comments>http://leekelleher.com/2012/02/03/robots-txt-editor-for-umbraco-5/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 03:17:05 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Editor]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[Robots.txt]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Umbraco]]></category>

		<guid isPermaLink="false">http://leekelleher.com/?p=351</guid>
		<description><![CDATA[First migration of my Umbraco packages to the newly released v5 (Jupiter), I am proud to announce&#8230; Robots.txt Editor for Umbraco 5! The majority of the re-development was done during the #umbWeekend (last weekend &#8211; 27th January). It was fun &#8230; <a href="http://leekelleher.com/2012/02/03/robots-txt-editor-for-umbraco-5/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>First migration of my Umbraco packages to the newly released v5 (<a href="http://umbraco.codeplex.com/releases/view/81440">Jupiter</a>), I am proud to announce&#8230; <a href="http://our.umbraco.org/projects/developer-tools/robotstxt-editor">Robots.txt Editor for Umbraco 5</a>!</p>
<p><a href="http://leekelleher.com/wordpress/wp-content/uploads/2012/02/RobotsTxt-Umbraco-5.png"><img class="aligncenter size-medium wp-image-352" title="RobotsTxt-Umbraco-5" src="http://leekelleher.com/wordpress/wp-content/uploads/2012/02/RobotsTxt-Umbraco-5-300x216.png" alt="" width="300" height="216" /></a></p>
<p>The majority of the re-development was done during the <a href="http://our.umbraco.org/forum/core/general/28098-Umbraco-Weekend-(January-27th)">#umbWeekend</a> (last weekend &#8211; 27th January). It was fun to explore the new codebase and APIs for Umbraco v5; creating tree nodes and building the editor.  Then a few evenings this week to polish-up the UI, etc.</p>
<p>For any developers wanting to know more about the code/structure, please do take a look at the <a href="https://bitbucket.org/vertino/robotstxt-editor-for-umbraco">source code</a>.  Any questions, <a href="https://twitter.com/#!/leekelleher">catch me on Twitter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2012/02/03/robots-txt-editor-for-umbraco-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Want to help develop Google Maps Umbraco package?</title>
		<link>http://leekelleher.com/2011/10/06/want-to-help-develop-google-maps-umbraco-package/</link>
		<comments>http://leekelleher.com/2011/10/06/want-to-help-develop-google-maps-umbraco-package/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 11:04:22 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[DataType]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[karma]]></category>
		<category><![CDATA[Umbraco]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=275</guid>
		<description><![CDATA[There are 2 outstanding bugs in the Google Maps for Umbraco package. Would you like to help us fix these bugs and collaborate on the project? My current workload is high and I am aware that there are 2 major &#8230; <a href="http://leekelleher.com/2011/10/06/want-to-help-develop-google-maps-umbraco-package/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There are <a href="https://bitbucket.org/vertino/google-maps-for-umbraco/issues?status=new&amp;status=open">2 outstanding bugs</a> in the <a href="http://our.umbraco.org/projects/backoffice-extensions/google-maps-datatype">Google Maps for Umbraco package</a>. Would you like to help us fix these bugs and <a href="http://our.umbraco.org/member/send-collab-request?id=4859">collaborate</a> on the project?</p>
<p>My current workload is high and I am aware that there are <a href="https://bitbucket.org/vertino/google-maps-for-umbraco/issues?status=new&amp;status=open">2 major bugs</a> that need fixing on the Google Map data-type. With my heavy involvement on the <a href="http://our.umbraco.org/projects/backoffice-extensions/ucomponents">uComponents</a> project, it&#8217;s unlikely I will fix these bugs any time soon, hence the &#8216;call for help&#8217;.</p>
<p>If you have been wanting to get more involved with the <a href="http://our.umbraco.org/">Umbraco community</a> and earn some <a href="http://our.umbraco.org/wiki/about/ourumbraco-faq">karma</a>, this is an ideal way to get involved.</p>
<p>The <a href="https://bitbucket.org/vertino/google-maps-for-umbraco">Google Maps data-type source-code</a> is available on my BitBucket repository, feel free to make a fork and submit any pull requests!</p>
<p><em><span style="text-decoration:underline;"><strong>Update:</strong></span></em> <a href="http://twitter.com/samandmoore">Sam Moore</a> came to the rescue and squished the 2 bugs! <a href="http://twitter.com/search/%23h5yr">#h5yr</a> Sam!</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2011/10/06/want-to-help-develop-google-maps-umbraco-package/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>uComponents: 100 karma votes and 10,000 downloads!</title>
		<link>http://leekelleher.com/2011/09/07/ucomponents-100-karma-votes-and-10000-downloads/</link>
		<comments>http://leekelleher.com/2011/09/07/ucomponents-100-karma-votes-and-10000-downloads/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 09:49:45 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[CodePlex]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[success]]></category>
		<category><![CDATA[uComponents]]></category>
		<category><![CDATA[Umbraco]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=261</guid>
		<description><![CDATA[Very proud and happy to announce that uComponents has reached 100 karma votes and 10,000 downloads! (that&#8217;s not including the additional 4,000 download from our CodePlex project) I just downloaded the 10,000th copy of uComponents. is.gd/ZVxhfy #H5YR #Umbraco &#8212; Douglas Robar(@drobar) September &#8230; <a href="http://leekelleher.com/2011/09/07/ucomponents-100-karma-votes-and-10000-downloads/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Very proud and happy to announce that <a href="http://our.umbraco.org/projects/backoffice-extensions/ucomponents">uComponents</a> has reached <strong>100 karma votes</strong> and <strong>10,000 downloads</strong>! (that&#8217;s not including the additional 4,000 download from our CodePlex project)</p>
<blockquote class="twitter-tweet" width="550"><p>I just downloaded the 10,000th copy of uComponents. <a href="http://t.co/P0x1JT5" title="http://is.gd/ZVxhfy">is.gd/ZVxhfy</a> <a href="https://twitter.com/search/%2523H5YR">#H5YR</a> <a href="https://twitter.com/search/%2523Umbraco">#Umbraco</a></p>
<p>&mdash; Douglas Robar(@drobar) <a href="https://twitter.com/drobar/status/111363152922415104" data-datetime="2011-09-07T09:00:19+00:00">September 7, 2011</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>A huge thank you to the <a href="http://ucomponents.codeplex.com/">uComponents</a> team for developing a great set of Umbraco components &#8211; and an even bigger <strong>THANK YOU</strong> to the <a href="http://our.umbraco.org/">Umbraco community</a> for use it! <a href="search.twitter.com/search?q=%23h5yr">#h5yr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2011/09/07/ucomponents-100-karma-votes-and-10000-downloads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>uComponents: Render Macro data-type</title>
		<link>http://leekelleher.com/2011/09/01/ucomponents-render-macro-data-type/</link>
		<comments>http://leekelleher.com/2011/09/01/ucomponents-render-macro-data-type/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 17:18:07 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[DataType]]></category>
		<category><![CDATA[Macro]]></category>
		<category><![CDATA[uComponents]]></category>
		<category><![CDATA[Umbraco]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=252</guid>
		<description><![CDATA[Developed a new data-type for uComponents called Render Macro. Watch the screencast for a brief demonstration.]]></description>
			<content:encoded><![CDATA[<p>Developed a new data-type for <a href="http://ucomponents.codeplex.com/">uComponents</a> called <strong>Render Macro</strong>. <a href="http://www.screenr.com/P4Ms">Watch the screencast for a brief demonstration.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2011/09/01/ucomponents-render-macro-data-type/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress 3 Plugin Development Essentials</title>
		<link>http://leekelleher.com/2011/07/05/wordpress-3-plugin-development-essentials/</link>
		<comments>http://leekelleher.com/2011/07/05/wordpress-3-plugin-development-essentials/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 22:15:28 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=230</guid>
		<description><![CDATA[It has been a while since I last developed a plugin for WordPress. With the release of version 3, I have been eager to learn about new improvements with plugin development. Having recently got hold of a copy of WordPress &#8230; <a href="http://leekelleher.com/2011/07/05/wordpress-3-plugin-development-essentials/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://link.packtpub.com/76gjLJ"><img class="size-full wp-image-182 alignleft" title="wordpress-3-plugin-development-essentials" src="http://leekelleher.com/wordpress/wp-content/uploads/2011/07/wordpress-3-plugin-development-essentials.jpg" alt="wordpress-3-plugin-development-essentials" width="195" height="240" /></a> It has been a while since I last developed a plugin for WordPress. With the release of version 3, I have been eager to learn about new improvements with plugin development. Having recently got hold of a copy of <a href="http://link.packtpub.com/76gjLJ">WordPress 3 Plugin Development Essentials</a> (<a href="http://www.packtpub.com/">Packt Publishing</a>, 2011), I&#8217;ve shaken the dust off my WordPress skills!</p>
<p>Whether you are a newcomer to WordPress, as long as you have some basic PHP knowledge, <strong>WordPress 3 Plugin Development Essentials</strong> provides a good solid foundation for how to develop your own plugins for WordPress. The book provides practical hands-on tutorials, best coding guidelines and good architecture advice for developing original plugins.</p>
<p>The first two chapters are aimed to ease you into preparing for WordPress, understanding the framework, setting up a development environment and an anatomy of a plugin.<br />
Next few chapters are examples of specific plugin functionality. With the remaining several chapters focusing on the deployment, distribution and maintenance of your plugins.</p>
<p>If you are looking to get into plugin development, I&#8217;d recommend picking up a copy of <a href="http://link.packtpub.com/76gjLJ">WordPress 3 Plugin Development Essentials</a> &#8211; while it is not intended to teach you PHP or MySQL, there focus is more on the core concepts, so even regular users of WordPress can delve into making their own basic plugins.</p>
<p>Having previous read (<a href="http://blog.leekelleher.com/2009/10/20/wordpress-plugin-development-beginners-guide-by-vladimir-prelovac/">and reviewed</a>) <a href="http://www.packtpub.com/wordpress-plug-in-development/mid/231009wn330g?utm_source=blog.leekelleher.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001175">WordPress Plugin Development: Beginner&#8217;s Guide</a>, (Vladimir Prelovac, Packt Publishing, 2009), there are many similarities between both books. I&#8217;d say that <strong>WordPress 3 Plugin Development Essentials</strong> offers a broader scope and range of topics.</p>
<p>In particular I was impressed with the level of detail on how to use <strong>Subversion (Chapter <img src='http://leekelleher.com/wordpress/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> </strong>, especially with how to overcome various errors and reverting to previous versions.</p>
<p><strong>Standardized Custom Content (Chapter 6)</strong> is also a good resource if you are interested in pushing the boundaries of WordPress towards being a custom content management system.</p>
<p>Having had a fair amount of experience with developing WordPress plugin in the past, I was already familiar with most of the concepts &#8211; this book helped to reinforce those principles. If you are interested in learning more how to develop your own WordPress plugins, I would recommend that you pick up a copy of this book.</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2011/07/05/wordpress-3-plugin-development-essentials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Discounts on WordPress books during June at Packt</title>
		<link>http://leekelleher.com/2011/06/27/discounts-on-wordpress-books-during-june-at-packt/</link>
		<comments>http://leekelleher.com/2011/06/27/discounts-on-wordpress-books-during-june-at-packt/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 11:43:06 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[linklog]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Discount]]></category>
		<category><![CDATA[Packt]]></category>
		<category><![CDATA[Promo]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=227</guid>
		<description><![CDATA[Packt Publishing are having a special discount on their range of WordPress books during June. If you are doing WordPress development or are interested in starting out, then take a look at their selection. They&#8217;ve just released &#8220;WordPress 3 Ultimate &#8230; <a href="http://leekelleher.com/2011/06/27/discounts-on-wordpress-books-during-june-at-packt/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.packtpub.com">Packt Publishing</a> are having a special discount on their range of <a href="http://www.packtpub.com/article/wordpress-month?utm_source=blog.leekelleher.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_008199">WordPress books</a> during June. If you are doing WordPress development or are interested in starting out, then take a look at their selection.</p>
<p>They&#8217;ve just released &#8220;<a href="http://www.packtpub.com/wordpress-3-ultimate-security/book?utm_source=blog.leekelleher.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_008199">WordPress 3 Ultimate Security</a>&#8220;, which should be essential reading for anyone wanting to protect their hosted WordPress installs!</p>
<p>To see the discounts, go to <a href="http://www.packtpub.com/article/wordpress-month?utm_source=blog.leekelleher.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_008199">Packt&#8217;s WordPress Month</a> page.</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2011/06/27/discounts-on-wordpress-books-during-june-at-packt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running Umbraco from a USB drive</title>
		<link>http://leekelleher.com/2011/01/15/umbraco-on-usb-usin-iis-express-and-sqlce4/</link>
		<comments>http://leekelleher.com/2011/01/15/umbraco-on-usb-usin-iis-express-and-sqlce4/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 01:41:43 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[IIS Express]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[SQL CE 4]]></category>
		<category><![CDATA[Umbraco]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[WebMatrix]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=215</guid>
		<description><![CDATA[With the release of Umbraco 4.6 (Juno), users now have the option of using Microsoft&#8217;s new embedded database engine, SQL CE 4. This means that you don&#8217;t need to depend on using a database server (such as SQL Server [Express] &#8230; <a href="http://leekelleher.com/2011/01/15/umbraco-on-usb-usin-iis-express-and-sqlce4/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>With the release of <a href="http://umbraco.codeplex.com/releases/view/59025">Umbraco 4.6 (Juno)</a>, users now have the option of using Microsoft&#8217;s new embedded database engine, <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0d2357ea-324f-46fd-88fc-7364c80e4fdb&amp;displaylang=en">SQL CE 4</a>.  This means that you don&#8217;t need to depend on using a database server (such as SQL Server [Express] or MySQL), you can run Umbraco exclusively from the file-system!</p>
<p>Also recently released is <a href="http://www.microsoft.com/web/gallery/install.aspx?appid=iisexpress">IIS Express 7.5</a>, (another Microsoft web technology, as part of their <a href="http://www.microsoft.com/web/webmatrix/">WebMatrix</a> framework), which offers a lightweight version of IIS &#8211; aimed at developers as a replacement for the Cassini web-server.  One of the major features of IIS Express are that it can be launched straight from disk &#8211; it does not need to be registered/configured on the operating-system/machine.</p>
<p>Now, this got me thinking&#8230; Would it be possible to run Umbraco from a USB drive? Well, guess what?</p>
<blockquote class="twitter-tweet" width="550"><p><a href="https://twitter.com/search/%2523umbraco">#umbraco</a> 4.6.1 + IIS Express 7.5 + SQL CE 4 + USB key = Success!</p>
<p>&mdash; Lee Kelleher (@leekelleher) <a href="https://twitter.com/leekelleher/status/26060538500878337" data-datetime="2011-01-14T23:38:11+00:00">January 14, 2011</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>Best of all its very very easy to do&#8230; here&#8217;s how:</p>
<ul>
<li>Download and install IIS Express 7.5 and SQL CE 4 &#8211; the quickest and easiest way is to install <a href="http://www.microsoft.com/web/">WebMatrix</a>.</li>
<li>Download <a href="http://umbraco.codeplex.com/releases/view/59025#DownloadId=197075">Umbraco 4.6.1</a> (latest version at the time of writing) and also the &#8220;<a href="http://umbraco.codeplex.com/releases/view/59025#DownloadId=197313">SQLCE4Umbraco.dll</a>&#8221; assembly.</li>
<li>Copy the following to your USB drive:
<ul>
<li>Extract the Umbraco zip file, rename the &#8220;build&#8221; folder to something else &#8211; like &#8220;wwwroot&#8221;, then copy that to the USB.</li>
<li>Copy over the &#8220;SQLCE4Umbraco.dll&#8221; into the &#8220;wwwrootbin&#8221; directory.</li>
<li>Copy the &#8220;IIS Express&#8221; directory (typically found at &#8220;C:Program Files (x86)IIS Express&#8221;) to the USB.</li>
<li>Copy the SQL CE 4 binaries (typically found at &#8220;C:Program Files (x86)Microsoft SQL Server Compact Editionv4.0Private&#8221;) - also copy the &#8220;amd64&#8243; and &#8220;x86&#8243; sub-directories - to the &#8220;wwwrootbin&#8221; on the USB drive.</li>
</ul>
</li>
<li>Once everything is in place, you should have 2 root directories, &#8220;IIS Express&#8221; and &#8220;wwwroot&#8221;.</li>
<li>Open up a command prompt, run the following command:</li>
</ul>
<pre class="brush: powershell; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">&quot;E:IIS Expressiisexpress.exe&quot; /path:E:wwwroot /port:8080</pre>
<ul>
<li>Open a new web-browser window, go to &#8220;http://localhost:8080&#8243;.</li>
<li>If everything went to plan, the command prompt will display an output of all incoming requests.</li>
<li>Back in the web-browser window, you should be prompted with the Umbraco installer wizard.  If not, something went wrong! <img src='http://leekelleher.com/wordpress/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </li>
<li>Remember to used the SQL CE 4 database engine!!! (otherwise it wont be portable)</li>
</ul>
<p>Once I had successfully installed Umbraco, I tried out a few packages; e.g. <a href="http://our.umbraco.org/projects/backoffice-extensions/ucomponents">uComponents</a>, set up an MNTP data-type, which worked as expected! Great!</p>
<p>After that I removed the USB drive; booted up my old laptop (Windows XP SP3) to see if it would still work.  First try it failed! I didn&#8217;t have .NET 4.0 framework installed.  Once I installed it, re-ran the command prompt &#8211; portable Umbraco worked as expected!</p>
<p>One point to raise is that I did notice slower performance of the Umbraco back-office &#8211; which doesn&#8217;t surprise me &#8211; since I was using a fairly old USB drive, but still the lag wasn&#8217;t enough to be overly concerned about.</p>
<p>Personally I see the portability of Umbraco to be very useful for client/customer demos/meetings&#8230; for any Umbraco developers who want to showcase their favourite CMS, now there is no excuse not to have a working copy in your pocket!</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2011/01/15/umbraco-on-usb-usin-iis-express-and-sqlce4/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>How to use umbraco.library GetMedia in XSLT for Umbraco v4.5</title>
		<link>http://leekelleher.com/2010/08/11/how-to-use-umbraco-library-getmedia-in-xslt-for-umbraco-v4-5/</link>
		<comments>http://leekelleher.com/2010/08/11/how-to-use-umbraco-library-getmedia-in-xslt-for-umbraco-v4-5/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 15:42:39 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[GetMedia]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[Umbraco]]></category>
		<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=210</guid>
		<description><![CDATA[This is a quick follow-up on my previous blog post: &#8220;How to use umbraco.library GetMedia in XSLT&#8220;.  At the request of fellow Umbraco South-West UK developer, Dan, that I should update the code snippets for the new XML schema in &#8230; <a href="http://leekelleher.com/2010/08/11/how-to-use-umbraco-library-getmedia-in-xslt-for-umbraco-v4-5/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is a quick follow-up on my previous blog post: &#8220;<a href="http://blog.leekelleher.com/2009/11/30/how-to-use-umbraco-library-getmedia-in-xslt/">How to use umbraco.library GetMedia in XSLT</a>&#8220;.  At the request of fellow <a href="http://our.umbraco.org/events/umbraco-south-west-uk-user-meetup-(july-2010)">Umbraco South-West UK</a> developer, <a href="http://our.umbraco.org/member/5585">Dan</a>, that I should update the code snippets for the new XML schema in Umbraco v4.5+</p>
<p>First a quick notice; if you are using v4.5.0, then please <a href="http://umbraco.codeplex.com/releases/view/48015">upgrade to v4.5.1</a>, as there was <a href="http://umbraco.codeplex.com/workitem/28147">a tiny bug in GetMedia</a> that caused great confusion and headaches &#8211; you have been advised!</p>
<p>Without further ado, the updated XSLT snippet that you came here for&#8230;</p>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">&lt;xsl:template match=&quot;/&quot;&gt;
	&lt;xsl:variable name=&quot;mediaId&quot; select=&quot;number($currentPage/mediaId)&quot; /&gt;
	&lt;xsl:if test=&quot;$mediaId &gt; 0&quot;&gt;
		&lt;xsl:variable name=&quot;mediaNode&quot; select=&quot;umbraco.library:GetMedia($mediaId, 0)&quot; /&gt;
		&lt;xsl:if test=&quot;$mediaNode/umbracoFile&quot;&gt;
			&lt;img src=&quot;{$mediaNode/umbracoFile}&quot; alt=&quot;[image]&quot; height=&quot;{umbracoHeight}&quot; width=&quot;{umbracoWidth}&quot; /&gt;
		&lt;/xsl:if&gt;
	&lt;/xsl:if&gt;
&lt;/xsl:template&gt;</pre>
<p>Any questions? <a href="http://our.umbraco.org/">Come join us over at Our Umbraco&#8230;</a> we are a friendly bunch!</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2010/08/11/how-to-use-umbraco-library-getmedia-in-xslt-for-umbraco-v4-5/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>ASP.NET System Information for Umbraco</title>
		<link>http://leekelleher.com/2010/05/06/asp-net-system-information-for-umbraco/</link>
		<comments>http://leekelleher.com/2010/05/06/asp-net-system-information-for-umbraco/#comments</comments>
		<pubDate>Thu, 06 May 2010 15:00:14 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Umbraco]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=202</guid>
		<description><![CDATA[Released a new Umbraco package today, that integrates the ASP.NET System Information Prober into the Umbraco back-office. What is the ASP.NET System Information Prober? It is a single page that tries to get as much useful hosting information about your &#8230; <a href="http://leekelleher.com/2010/05/06/asp-net-system-information-for-umbraco/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Released a new <a href="http://umbraco.org/">Umbraco</a> package today, that integrates the <a href="http://code.google.com/p/aspnetsysinfo/">ASP.NET System Information Prober</a> into the Umbraco back-office.</p>
<p><strong>What is the ASP.NET System Information Prober?</strong> It is a single page that tries to get as much useful hosting information about your web-server. The concept is similar to PHP&#8217;s native <a href="http://php.net/manual/en/function.phpinfo.php">phpinfo()</a> function.</p>
<p>Installing the package will add a new node tree to the developer section.</p>
<p>Here is a quick demo video: <a href="http://screenr.com/2YC">http://screenr.com/2YC</a></p>
<p>Installing this package will add a new node tree to the developer section.</p>
<p>You can download the <a href="http://our.umbraco.org/projects/aspnet-system-information">ASP.NET System Information for Umbraco</a> package from the <a href="http://our.umbraco.org/">Our Umbraco</a> community site.</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2010/05/06/asp-net-system-information-for-umbraco/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Working with XSLT using new XML schema in Umbraco 4.1</title>
		<link>http://leekelleher.com/2010/04/02/working-with-xslt-using-new-xml-schema-in-umbraco-4-1/</link>
		<comments>http://leekelleher.com/2010/04/02/working-with-xslt-using-new-xml-schema-in-umbraco-4-1/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 13:31:13 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[Legacy]]></category>
		<category><![CDATA[Transform]]></category>
		<category><![CDATA[Umbraco]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[XML Schema]]></category>
		<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=197</guid>
		<description><![CDATA[Most of the Umbraco community are aware that the XML schema in the upcoming Umbraco 4.1 release has changed. Instead of each document being a node element, the element name is the node-type alias, same with property values; they no &#8230; <a href="http://leekelleher.com/2010/04/02/working-with-xslt-using-new-xml-schema-in-umbraco-4-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Most of the Umbraco community are aware that the XML schema in the upcoming Umbraco 4.1 release has changed.</p>
<p>Instead of each document being a node element, the element name is the node-type alias, same with property values; they no longer use data elements with alias attributes. Here is a quick example, comparing the old/legacy with the new:</p>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">&lt;node id=&quot;1066&quot; parentID=&quot;-1&quot; level=&quot;1&quot; nodeName=&quot;Home&quot; ... nodeTypeAlias=&quot;Homepage&quot; path=&quot;-1,1066&quot;&gt;
	&lt;data alias=&quot;bodyText&quot;&gt;&lt;![CDATA[&lt;p&gt;Welcome to my homepage.&lt;/p&gt;]]&gt;&lt;/data&gt;
&lt;/node&gt;</pre>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">&lt;Homepage id=&quot;1066&quot; parentID=&quot;-1&quot; level=&quot;1&quot; ... nodeName=&quot;Home&quot; path=&quot;-1,1066&quot; isDoc=&quot;&quot;&gt;
    &lt;bodyText&gt;&lt;![CDATA[&lt;p&gt;Welcome to my homepage.&lt;/p&gt;]]&gt;&lt;/bodyText&gt;
&lt;/Homepage&gt;</pre>
<p>Obviously for long-time Umbraco developers this will require a small shift in mindset, as we are way too familiar with writing XPath queries like;</p>
<pre class="brush: text; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">$currentPage/descendant-or-self::node[string(data[@alias='umbracoNaviHide'])  != '1']</pre>
<p>&#8230; which will need to be rewritten to;</p>
<pre class="brush: text; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">$currentPage/descendant-or-self::*[umbracoNaviHide != '1']</pre>
<p>Not that it&#8217;s a difficult thing to change/update, but I can see a lot of questions being asked on the <a href="http://our.umbraco.org/">Our Umbraco forum</a>.</p>
<p>Since there are a lot of existing Umbraco packages that use the current, (soon to be legacy) XML schema, it might be worthwhile making use of XSLT itself to convert the new back to the old &#8211; in order to keep the existing XSLT templates working.  Here&#8217;s a quick example:</p>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">&lt;!-- ROOT element --&gt;
&lt;xsl:template match=&quot;root&quot;&gt;
	&lt;xsl:element name=&quot;root&quot;&gt;
		&lt;xsl:apply-templates select=&quot;child::*&quot; /&gt;
	&lt;/xsl:element&gt;
&lt;/xsl:template&gt;

&lt;!-- NODE elements --&gt;
&lt;xsl:template match=&quot;*[count(@isDoc) = 1]&quot;&gt;
	&lt;xsl:element name=&quot;node&quot;&gt;
		&lt;xsl:attribute name=&quot;nodeTypeAlias&quot;&gt;
			&lt;xsl:value-of select=&quot;local-name()&quot;/&gt;
		&lt;/xsl:attribute&gt;
		&lt;xsl:copy-of select=&quot;@*&quot; /&gt;
		&lt;xsl:apply-templates select=&quot;child::*&quot; /&gt;
	&lt;/xsl:element&gt;
&lt;/xsl:template&gt;

&lt;!-- DATA elements --&gt;
&lt;xsl:template match=&quot;*[count(parent::*) &amp;gt; 0 and count(@isDoc) = 0]&quot;&gt;
	&lt;xsl:element name=&quot;data&quot;&gt;
		&lt;xsl:attribute name=&quot;alias&quot;&gt;
			&lt;xsl:value-of select=&quot;local-name()&quot;/&gt;
		&lt;/xsl:attribute&gt;
		&lt;xsl:copy-of select=&quot;text()&quot; /&gt;
	&lt;/xsl:element&gt;
&lt;/xsl:template&gt;</pre>
<p>These templates would be used to transform the new schema/structure back to the old legacy schema/structure, like so:</p>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">&lt;xsl:variable name=&quot;legacyFragment&quot;&gt;
	&lt;xsl:apply-templates select=&quot;$currentPage/ancestor::root&quot; /&gt;
&lt;/xsl:variable&gt;
&lt;xsl:variable name=&quot;legacyRoot&quot; select=&quot;msxml:node-set($legacyFragment)/root&quot; /&gt;
&lt;xsl:variable name=&quot;legacyCurrentPage&quot; select=&quot;$legacyRoot/descendant-or-self::node[@id = $currentPage/@id]&quot; /&gt;</pre>
<p>Since you can&#8217;t modify a variable&#8217;s value in XSLT, it would be a case of replacing all the &#8220;$currentPage&#8221; references with &#8220;$legacyCurrentPage&#8221; (or whatever you decided to call it).   But in all honesty, if you are going to start modifying your XSLT, then it would be better to refactor the XPath statements to use the new schema!</p>
<p>Personally, I&#8217;m looking forward to using the new XML schema in Umbraco 4.1, the structure makes more sense from a semantic perspective &#8211; and I am told it will have performance gains on the XSLT processor.</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2010/04/02/working-with-xslt-using-new-xml-schema-in-umbraco-4-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bit.ly Url Shortener DataType for Umbraco</title>
		<link>http://leekelleher.com/2010/01/09/bit-ly-url-shortener-datatype-for-umbraco/</link>
		<comments>http://leekelleher.com/2010/01/09/bit-ly-url-shortener-datatype-for-umbraco/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 22:43:52 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[Bit.ly]]></category>
		<category><![CDATA[DataType]]></category>
		<category><![CDATA[Umbraco]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[Url Shortener]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=194</guid>
		<description><![CDATA[Over the weekend, I coded up a little treat&#8230; a Bit.ly Url Shortener data-type for Umbraco! The new data-type lets you shorten your Umbraco page URLs using the Bit.ly API service. For more information, go to the project page over on &#8230; <a href="http://leekelleher.com/2010/01/09/bit-ly-url-shortener-datatype-for-umbraco/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the weekend, I coded up a little treat&#8230; <a href="http://our.umbraco.org/projects/bitly-url-shortener">a Bit.ly Url Shortener data-type for Umbraco</a>!</p>
<p>The new data-type lets you shorten your <a href="http://umbraco.org/">Umbraco</a> page URLs using the <a href="http://bit.ly/">Bit.ly</a> API service.</p>
<p>For more information, go to the project page over on <a href="http://our.umbraco.org/projects/bitly-url-shortener">Our Umbraco</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2010/01/09/bit-ly-url-shortener-datatype-for-umbraco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updated Robots.txt Editor for Umbraco</title>
		<link>http://leekelleher.com/2010/01/08/updated-robots-txt-editor-for-umbraco/</link>
		<comments>http://leekelleher.com/2010/01/08/updated-robots-txt-editor-for-umbraco/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 10:53:38 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Editor]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[Robots.txt]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Umbraco]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=192</guid>
		<description><![CDATA[Last night I released version 2 of the Robots.txt Editor for Umbraco. Changes &#38; new features: Restructured the package files, they all live in a folder called &#8220;robots-txt&#8221; (still under the /umbraco folder &#8211; but self-contained) Errors are now displayed &#8230; <a href="http://leekelleher.com/2010/01/08/updated-robots-txt-editor-for-umbraco/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last night I released version 2 of the <a href="http://our.umbraco.org/projects/robotstxt-editor">Robots.txt Editor for Umbraco</a>.</p>
<p>Changes &amp; new features:</p>
<ul>
<li>Restructured the package files, they all live in a folder called &#8220;robots-txt&#8221; (still under the /umbraco folder &#8211; but self-contained)</li>
<li>Errors are now displayed using the Feedback control (as opposed to the Speech Bubble in the bottom-right corner).</li>
<li>Robots.txt editor has buttons for adding new User-Agent and Disallow rules, as well as comment/uncomment functionality.</li>
<li>Changed the Robot icon&#8230; courtesy of Mozilla Firefox&#8217;s &#8220;about:robots&#8221; favicon.</li>
</ul>
<p>Hope you all enjoy the update&#8230; if you come across any bugs or ideas for a future release, <a href="http://our.umbraco.org/projects/robotstxt-editor/feedback">please let me know via the our.umbraco forum</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2010/01/08/updated-robots-txt-editor-for-umbraco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to use umbraco.library GetMedia in XSLT</title>
		<link>http://leekelleher.com/2009/11/30/how-to-use-umbraco-library-getmedia-in-xslt/</link>
		<comments>http://leekelleher.com/2009/11/30/how-to-use-umbraco-library-getmedia-in-xslt/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 14:33:14 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[GetMedia]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[Umbraco]]></category>
		<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=188</guid>
		<description><![CDATA[From time to time I notice a reoccurring post over at the Our Umbraco forum; how to display an image (from the Media section) in XSLT? A quick answer can be found on the Our Umbraco wiki for the umbraco.library &#8230; <a href="http://leekelleher.com/2009/11/30/how-to-use-umbraco-library-getmedia-in-xslt/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>From time to time I notice a reoccurring post over at the Our Umbraco forum; how to display an image (from the Media section) in XSLT?</p>
<p>A quick answer can be found on the Our Umbraco wiki for the <a href="http://our.umbraco.org/wiki/reference/umbracolibrary/getmedia">umbraco.library GetMedia</a> method.</p>
<p>For most uses, the last example in the wiki works great.  But I want to show you a &#8220;super safe&#8221; way of dealing with GetMedia in XSLT.</p>
<p>Where I find a lot of the examples go wrong is that they make the assumption that a media node (XML) is returned from the GetMedia call, e.g.</p>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">&lt;xsl:value-of select=&quot;umbraco.library:GetMedia($currentPage/data[@alias='mediaId'], 'false')/data[@alias='umbracoFile']&quot; /&gt;</pre>
<p>If the &#8216;mediaId&#8217; property didn&#8217;t contain either a numeric value or a valid media node id, then it would return <strong>null</strong> &#8230; meaning that the following &#8220;<strong>/data</strong>&#8221; would throw an Exception! (Displaying &#8220;<em>Error parsing XSLT file</em>&#8221; message on the front-end.)  Not what you or your users want to see!</p>
<p>In order to consider any user inputs, like media IDs not being selected, or even a referenced media node is deleted in the back-office, here is the &#8220;super safe&#8221; approach:</p>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">&lt;xsl:template match=&quot;/&quot;&gt;
	&lt;xsl:variable name=&quot;mediaId&quot; select=&quot;number($currentPage/data[@alias='mediaId'])&quot; /&gt;
	&lt;xsl:if test=&quot;$mediaId &amp;gt; 0&quot;&gt;
		&lt;xsl:variable name=&quot;mediaNode&quot; select=&quot;umbraco.library:GetMedia($mediaId, 0)&quot; /&gt;
		&lt;xsl:if test=&quot;count($mediaNode/data) &amp;gt; 0&quot;&gt;
			&lt;xsl:if test=&quot;string($mediaNode/data[@alias='umbracoFile']) != ''&quot;&gt;
				&lt;img src=&quot;{$mediaNode/data[@alias='umbracoFile']}&quot; alt=&quot;[image]&quot;&gt;
					&lt;xsl:if test=&quot;string($mediaNode/data[@alias='umbracoHeight']) != ''&quot;&gt;
						&lt;xsl:attribute name=&quot;height&quot;&gt;
							&lt;xsl:value-of select=&quot;$mediaNode/data[@alias='umbracoHeight']&quot; /&gt;
						&lt;/xsl:attribute&gt;
					&lt;/xsl:if&gt;
					&lt;xsl:if test=&quot;string($mediaNode/data[@alias='umbracoWidth']) != ''&quot;&gt;
						&lt;xsl:attribute name=&quot;width&quot;&gt;
							&lt;xsl:value-of select=&quot;$mediaNode/data[@alias='umbracoWidth']&quot; /&gt;
						&lt;/xsl:attribute&gt;
					&lt;/xsl:if&gt;
				&lt;/img&gt;
			&lt;/xsl:if&gt;
		&lt;/xsl:if&gt;
	&lt;/xsl:if&gt;
&lt;/xsl:template&gt;</pre>
<p>Here&#8217;s what happens:</p>
<ol>
<li>The &#8220;mediaId&#8221; is pulled from a property of the &#8220;currentPage&#8221; and cast as a number.  Optionally the &#8220;mediaId&#8221; could be passed in via a macro parameter, or somewhere else?</li>
<li>The first condition checks the the &#8220;mediaId&#8221; is numeric, and greater-than zero.</li>
<li>The &#8220;mediaId&#8221; is passed through to &#8220;GetMedia&#8221;, along with the <em>false</em> flag to only pull-back the required node (not it&#8217;s children, for Folder media items).</li>
<li>We check if the media node has any child &#8220;data&#8221; elements &#8211; which contain the data about the image/media.</li>
<li>Then we check if the &#8220;umbracoFile&#8221; property has any data &#8211; if not, then there is no point displaying an image.</li>
<li>There are extra conditions for the &#8220;height&#8221; and &#8220;width&#8221; properties &#8211; these are optional.</li>
</ol>
<p>Personally, I add an &#8220;altText&#8221; property to the Image media-type &#8230; and use that in the XSLT &#8211; again this is optional, but strongly recommended!</p>
<p>I can see how this &#8220;super safe&#8221; approach is overkill &#8211; especially compared with a single line of XSLT &#8230; but from my experience, it&#8217;s better to be safe than sorry &#8211; especially when dealing with user data-input &#8211; your assumptions and expectations of how users will use the system aren&#8217;t always correct!</p>
<p><strong><span style="text-decoration:underline;">Update:</span></strong> OK, I agree the extra &#8220;if&#8221; statements are overkill&#8230; so here&#8217;s a condensed version &#8211; assuming that the &#8220;umbracoHeight&#8221; and &#8220;umbracoWidth&#8221; properties are always there&#8230;</p>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">&lt;xsl:template match=&quot;/&quot;&gt;
	&lt;xsl:variable name=&quot;mediaId&quot; select=&quot;number($currentPage/data[@alias='mediaId'])&quot; /&gt;
	&lt;xsl:if test=&quot;$mediaId &amp;gt; 0&quot;&gt;
		&lt;xsl:variable name=&quot;mediaNode&quot; select=&quot;umbraco.library:GetMedia($mediaId, 0)&quot; /&gt;
		&lt;xsl:if test=&quot;count($mediaNode/data) &amp;gt; 0 and string($mediaNode/data[@alias='umbracoFile']) != ''&quot;&gt;
			&lt;img src=&quot;{$mediaNode/data[@alias='umbracoFile']}&quot; alt=&quot;[image]&quot; height=&quot;{$mediaNode/data[@alias='umbracoHeight']}&quot; width=&quot;{$mediaNode/data[@alias='umbracoWidth']}&quot; /&gt;
		&lt;/xsl:if&gt;
	&lt;/xsl:if&gt;
&lt;/xsl:template&gt; </pre>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2009/11/30/how-to-use-umbraco-library-getmedia-in-xslt/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin Development: Beginner&#8217;s Guide, by Vladimir Prelovac</title>
		<link>http://leekelleher.com/2009/10/20/wordpress-plugin-development-beginners-guide-by-vladimir-prelovac/</link>
		<comments>http://leekelleher.com/2009/10/20/wordpress-plugin-development-beginners-guide-by-vladimir-prelovac/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 23:34:22 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=181</guid>
		<description><![CDATA[I have recently finished reading Vladimir Prelovac book on WordPress plug-in development, (WordPress Plug-in Development: Beginner&#8217;s Guide, Packt Publishing, 2009). As an experienced WordPress plug-in developer, I was pessimistic at the start &#8211; there is already a wealth of documentation &#8230; <a href="http://leekelleher.com/2009/10/20/wordpress-plugin-development-beginners-guide-by-vladimir-prelovac/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.packtpub.com/wordpress-plug-in-development/mid/231009wn330g?utm_source=blog.leekelleher.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001175"><img class="size-full wp-image-182 alignleft" title="wordpress-plugin-development-book" src="http://leekelleher.com/wordpress/wp-content/uploads/2009/10/wordpress-plugin-development-book.jpg" alt="wordpress-plugin-development-book" width="195" height="240" /></a> I have recently finished reading <a href="http://www.prelovac.com/vladimir/">Vladimir Prelovac</a> book on WordPress plug-in development, (<a href="http://www.packtpub.com/wordpress-plug-in-development/mid/231009wn330g?utm_source=blog.leekelleher.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001175">WordPress Plug-in Development: Beginner&#8217;s Guide</a>, <a href="https://www.packtpub.com/">Packt Publishing</a>, 2009).</p>
<p>As an experienced WordPress plug-in developer, I was pessimistic at the start &#8211; there is already a wealth of documentation and detailed tutorials on the web, who would need a book?  However with Vladimir being a well-respected WordPress plug-in developer, I was curious to see his approach on the subject, and you never know &#8211; I may learn a thing or two? (<em>hint: I did!</em>)</p>
<p><a href="http://www.amazon.co.uk/gp/product/1847193595?ie=UTF8&amp;tag=leekelleher-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=1847193595">WordPress Plug-in Development (Beginner&#8217;s Guide)</a> is a great introduction to the WordPress platform, the plug-in architecture and the ever-growing community surrounding it.</p>
<p>The first thing I noticed was that the book is centred around WordPress 2.6, (at the time of writing the latest version is 2.8.4, with 2.9 due out very soon), unfortunately all of the screenshots for the admin back-end are outdated, since there was a complete overhaul to the design in version 2.7. This is no fault of the author, but an example of how fast paced the WordPress developer community is.  Luckily, the principles that Vladimir explains are focused on the core WordPress functionality, which are solid and stable.</p>
<p>Throughout the book, Vladimir encourages you to &#8220;<a href="http://catb.org/~esr/faqs/hacker-howto.html">hack</a>&#8221; around with code, which for me is a great experience &#8211; it&#8217;s how I learnt to code! As the tagline of the book states: &#8220;<em>Learn by doing: less theory, more results</em>&#8220;.</p>
<p>There is also a great awareness of 3rd-party applications, libraries and resources, (like <a href="http://digg.com/">Digg</a>, <a href="http://jquery.com/">jQuery</a>, <a href="http://www.poedit.net/">Poedit</a>, etc), which is fine for experienced web-developers, but for beginners &#8211; it will open up a world of exciting developments!  Thinking back to when I first played with jQuery&#8230; or pulling my photos back from Flickr&#8217;s API&#8230; so cool!</p>
<p>The very nice people at <a href="https://www.packtpub.com/">Packt Publishing</a> have a sample chapter available on-line; <a href="http://www.packtpub.com/files/wordpress-plugin-development-sample-chapter-2-social-bookmarking.pdf">Chapter 2: Social Bookmarking, covers how to develop your own Digg button for your blog</a>.</p>
<p>Vladimir covers all areas of WordPress development, from action and filter hooks to shortcodes and widgets to localisation (i18n &amp; L10n).  Even I didn&#8217;t know about the &#8220;wp_localize_script&#8221; function!</p>
<p>The mantra of the book is to leverage WordPress whenever you can, try not to re-invent the wheel. Which reminds me of <a href="http://www.catonmat.net/blog/about-this-blog">Peteris Krumins</a>&#8216; blog quote: <strong>&#8220;good coders code, great reuse&#8221;</strong>!</p>
<p>As the book progresses, each chapter&#8217;s example plug-in becomes more challenging and complex. The focus on localisation over the last few chapters was most interesting for me, as it is (probably) the least understood concept in WordPress plug-in development!</p>
<p>Often it is easy for WordPress users to take plug-in functionality for granted, this book exposes the amount of thought, planning, design and skill that goes into every (popular) WordPress plug-in.</p>
<p>In summary, <a href="http://www.amazon.co.uk/gp/product/1847193595?ie=UTF8&amp;tag=leekelleher-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=1847193595">WordPress Plug-in Development (Beginner&#8217;s Guide)</a> is perfect for anyone who is interested in extending the functionality of WordPress &#8211; it goes without saying that a little PHP knowledge is required, but that isn&#8217;t a show-stopper, you can learn whilst you &#8220;hack&#8221;!</p>
<p><img style="border:none!important;margin:0!important;" src="http://www.assoc-amazon.co.uk/e/ir?t=leekelleher-21&amp;l=as2&amp;o=2&amp;a=1847193595" border="0" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2009/10/20/wordpress-plugin-development-beginners-guide-by-vladimir-prelovac/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Putting your ASP.NET Web Application in Maintenance Mode (using ISAPI_Rewrite)</title>
		<link>http://leekelleher.com/2009/09/29/putting-your-asp-net-web-application-in-maintenance-mode-using-isapi_rewrite/</link>
		<comments>http://leekelleher.com/2009/09/29/putting-your-asp-net-web-application-in-maintenance-mode-using-isapi_rewrite/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 13:22:14 +0000</pubDate>
		<dc:creator>leekelleher</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[App_Offline]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[ISAPI_Rewrite]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Redirect]]></category>
		<category><![CDATA[Umbraco]]></category>
		<category><![CDATA[web-application]]></category>

		<guid isPermaLink="false">http://blog.leekelleher.com/?p=177</guid>
		<description><![CDATA[Prompted by @slace&#8217;s tweet: i wish there was a way to use app_offline but still view from certain ip&#8217;s &#8212; Aaron Powell (@slace) September 29, 2009 I replied with a suggestion that we&#8217;ve used in the past. Aaron said I &#8230; <a href="http://leekelleher.com/2009/09/29/putting-your-asp-net-web-application-in-maintenance-mode-using-isapi_rewrite/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Prompted by <a href="http://twitter.com/slace/status/4466099083">@slace&#8217;s tweet</a>:</p>
<blockquote class="twitter-tweet" width="550"><p>i wish there was a way to use app_offline but still view from certain ip&#8217;s</p>
<p>&mdash; Aaron Powell (@slace) <a href="https://twitter.com/slace/status/4466099083" data-datetime="2009-09-29T08:53:10+00:00">September 29, 2009</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>I <a href="http://twitter.com/leekelleher/status/4466197573">replied</a> with a suggestion that we&#8217;ve used in the past. <a href="http://twitter.com/slace/status/4466254905">Aaron said I should blog about it&#8230;</a> so here I am (again)!</p>
<p>A while ago we needed to do an Umbraco upgrade (from v3 to v4) on a production server &#8211; in my opinion it was a pretty major upgrade on a live site, we had done a couple of test upgrades on dev and staging, all was successful.  But since there was various parts of the site that we need to regression test, I felt it best to take the entire site offline whilst we upgraded.</p>
<p>Usually creating an &#8220;<a href="http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx">App_Offline.htm</a>&#8221; page in the root of your web app is enough to take it offline.  However that was no good for testing&#8230; so what to do?</p>
<p>This is where <a href="http://www.helicontech.com/isapi_rewrite/">ISAPI_Rewrite</a> is your best friend, (or <a href="http://en.wikipedia.org/wiki/Htaccess">.htaccess</a> to be precise).  We needed to configure the site to allow access for us and redirect everyone else to a &#8220;Site under maintenance&#8221; page.  I found a few examples across the web, but to save you all that hassle, here are the .htaccess rules that we use:</p>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'"># BEGIN Maintanence Mode
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !/offline.html$
RewriteCond %{REMOTE_ADDR} !^82.13.23.230$
RewriteRule ^(.*)$ /offline.html [R=302,L]
&lt;/IfModule&gt;
# END Maintanence Mode</pre>
<p>What does it do? The first &#8220;RewriteCond&#8221; rule checks that you are not requesting the &#8220;offline.html&#8221; page (otherwise you would end up in a constant loop!) The second &#8220;RewriteCond&#8221; checks the IP address of the visitor &#8211; in my case it was &#8220;82.13.23.230&#8243; (remember to escape the dots). If those two rules aren&#8217;t satisfied, then the &#8220;RewriteRule&#8221; is used, redirecting the visitor to the &#8220;offline.html&#8221; page.</p>
<p>As always, I am open to any suggestions or improvements!</p>
]]></content:encoded>
			<wfw:commentRss>http://leekelleher.com/2009/09/29/putting-your-asp-net-web-application-in-maintenance-mode-using-isapi_rewrite/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

