<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>!DOCTYPE</title>
	
	<link>http://www.createsoft.co.uk/blog</link>
	<description>Software Development and Web Design</description>
	<lastBuildDate>Mon, 31 May 2010 09:36:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mydoctype" /><feedburner:info uri="mydoctype" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>CushyCMS</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/dNLFoWLbzYg/</link>
		<comments>http://www.createsoft.co.uk/blog/2010/05/cushycms/#comments</comments>
		<pubDate>Mon, 31 May 2010 09:31:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[cms]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[webdesign]]></category>
		<category><![CDATA[cushy cms]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=49</guid>
		<description><![CDATA[I&#8217;ve used a number of Content Management systems in the past, both as a developer and as an author.  Many people have their own favourite CMS, whether it be based on cost, usability, suitability, or even platform (.NET, PHP, Java, etc).
However it can often come down to the best tool for the job, and for [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve used a number of Content Management systems in the past, both as a developer and as an author.  Many people have their own favourite CMS, whether it be based on cost, usability, suitability, or even platform (.NET, PHP, Java, etc).</p>
<p>However it can often come down to the best tool for the job, and for some people, or some situations, <a href="http://www.cushycms.com">CushyCMS</a> is going to be that tool.</p>
<p>CushyCMS is a very, very simple content management system.  It&#8217;s simplicity really makes it a great little tool.</p>
<p><span id="more-49"></span>To develop a site based on Cushy CMS, you do not need any particular skillset outside of HTML, CSS, and optionally &#8211; JavaScript.  As a web designer, if you are able to build HTML/CSS renditions of your PSP designs, but do not have Java/.NET/PHP skills, then Cushy CMS could be for you.</p>
<p>To get started, all you have to do is set up a bog-standard static HTML website. No specific serverside technology is required; you do not need PHP hosting or C# or anything like that.  Just set up a static website, and test.</p>
<p>When you are ready to allow authors to begin editing the copy on the site, simply add additional classes to your HTML &#8211; &#8216;cushycms&#8217;.</p>
<pre>&lt;div id="intro" class="<strong>cushycms</strong>"&gt;&lt;p&gt;copy goes here....&lt;/p&gt;&lt;/div&gt;</pre>
<p>HTML elements tagged with a &#8216;cushycms&#8217; class are then identified as editable.</p>
<h2>Configuring CushyCMS</h2>
<p>Once you have a site up and running, you will need to configure CushyCMS so that it is aware of the website.  To do this you&#8217;ll need to sign up for an account at <a href="http://www.cushycms.com/">http://www.cushycms.com/</a></p>
<p>Then you need to add your site by giving Cushy information about your web host.</p>
<p><img class="alignnone size-full wp-image-50" title="CushyCMS New Site" src="http://www.createsoft.co.uk/blog/wp-content/uploads/2010/05/new_site.jpg" alt="CushyCMS New Site form" width="586" height="372" /></p>
<p>That is the crux of how Cushy CMS works: it FTP&#8217;s into your website, downloads your HTML, and provides a simple web based interface for authors to enter &#8216;WYSIWYG&#8217; copy into the site.</p>
<p>The next step to allow Cushy CMS to do this is to assign pages to Cushy CMS.  This is done by clicking the &#8216;assign page&#8217; form, selecting an HTML page from the provided list, and giving a name for that page.</p>
<p>If you have already added CMS authors to the account, you can also indicate which authors are able to edit the page.</p>
<p><img class="alignnone size-full wp-image-51" title="New Cushy CMS Page" src="http://www.createsoft.co.uk/blog/wp-content/uploads/2010/05/new_cushy_page.jpg" alt="New Page" width="609" height="473" /></p>
<p>Cushy CMS can now provide the user with the ability to edit the HTML copy in a simple CMS interface.</p>
<p><a href="http://www.createsoft.co.uk/blog/wp-content/uploads/2010/05/cushy_edit.jpg"><img class="alignnone size-full wp-image-52" title="Edit page in Cushy CMS" src="http://www.createsoft.co.uk/blog/wp-content/uploads/2010/05/cushy_edit.jpg" alt="" width="593" height="454" /></a></p>
<h2>Pros</h2>
<p><strong>Free:</strong> Cushy CMS is a free system.  You can pay to add your own brand/domain to the Cushy CMS backend.</p>
<p><strong>Cheap Hosting:</strong> So long as your web host offers HTML hosting and FTP access, you can use Cushy CMS.  No need for Java/.NET/PHP plans (although you can use Cushy CMS with PHP pages)</p>
<p><strong>Basic Skill Set:</strong> You only need the basic web skill set to be able to use Cushy CMS.  If you know HTML and CSS, you are good to go.</p>
<h2>Cons</h2>
<p><strong>Can&#8217;t add pages: </strong>You cannot add new pages using the Cushy CMS interface; you will need to go set up the new page manually.</p>
<p><strong>No Plugins/Modules: </strong>You won&#8217;t find plugins or modules for Cushy CMS.  But on the other hand you are free to use Flash/Jquery plugins and widgets to your hearts content.</p>
<p><strong>No blog: </strong>You probably could try to build a blog using Cushy CMS, but it wouldn&#8217;t be very functional.  If you need a blog you&#8217;ll either need to install one separately, or use a separately hosted blog such as WordPress.com or Blogger.com.  Contact forms will have to be developed separately (and so require some other skillset such as PHP).</p>
<h2>Summary</h2>
<p>Cushy CMS is ideal for very small websites and projects.  In those situations it can offer a very fast installation, low cost hosting, and very low cost maintenance.</p>
<p>If your development skillset is restricted to HTML and CSS, then Cushy CMS could also be for you.</p>
<p>If you need more advanced functionality or an integrated blog, then you may need to look at other solutions however.</p>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/dNLFoWLbzYg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2010/05/cushycms/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2010/05/cushycms/</feedburner:origLink></item>
		<item>
		<title>JavaScript Tip: Identify the location of a JavaScript file</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/nl-mii10uNU/</link>
		<comments>http://www.createsoft.co.uk/blog/2010/05/javascript-tip-identify-the-location-of-a-javascript-file/#comments</comments>
		<pubDate>Mon, 03 May 2010 13:56:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=38</guid>
		<description><![CDATA[This is a very short JavaScript tip.
Occasionally it is useful to obtain the path of a JavaScript file; for example, in order to refer to an image or other file which is located relative to your file.
Updated.

Suppose you have built a JQuery plugin or other JavaScript file, which requires a &#8216;loading&#8217; animation; you might set [...]]]></description>
			<content:encoded><![CDATA[<p>This is a very short JavaScript tip.</p>
<p>Occasionally it is useful to obtain the path of a JavaScript file; for example, in order to refer to an image or other file which is located <em>relative</em> to your file.</p>
<p><em>Updated.</em></p>
<p><span id="more-38"></span></p>
<p>Suppose you have built a JQuery plugin or other JavaScript file, which requires a &#8216;loading&#8217; animation; you might set a directory structure such as,</p>
<ul>
<li>js/myfile.js</li>
<li>js/loading.gif</li>
</ul>
<p>In order to locate the loading GIF you need to know the exact location of the JavaScript file, &#8216;myfile.js&#8217;</p>
<p>To do this, add the following to the top of the JavaScript file;</p>
<pre>    var jsPath= document.scripts[document.scripts.length-1].src;
    if(jsPath.lastIndexOf('/')!=-1) {
        jsPath = jsPath.substring(0, jsPath.lastIndexOf('/')+1);
    }</pre>
<p>This works because at the moment a script is loaded, it is the last script to appear in the document.scripts array.</p>
<p>Later, you can use the path, in this example to reference an image;</p>
<pre>    var imgPath = jsPath+"/loading.gif";</pre>
<p>Update:</p>
<p>I discovered that this does not work in Firefox, though it works fine in other browsers.</p>
<p>To get around it, I used a jQuery construct instead.</p>
<pre>var jsPath = '';</pre>
<pre>if(typeof document.scripts != 'undefined') {</pre>
<pre>    jsPath = document.scripts[document.scripts.length-1].src;</pre>
<pre>} else {</pre>
<pre><strong>    var srcArr = $('head script');</strong></pre>
<pre><strong>    jsPath = srcArr[srcArr.length-1].src;</strong></pre>
<pre>}</pre>
<pre>I'd have preferred a non-jQuery solution, will add that in when I can!</pre>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/nl-mii10uNU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2010/05/javascript-tip-identify-the-location-of-a-javascript-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2010/05/javascript-tip-identify-the-location-of-a-javascript-file/</feedburner:origLink></item>
		<item>
		<title>Driving people to your website</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/hTPpjfQvmQw/</link>
		<comments>http://www.createsoft.co.uk/blog/2010/04/driving-people-to-your-website/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 19:01:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[webdesign]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=26</guid>
		<description><![CDATA[STN7ZM4GS8B4
A beginners guide to SEO?
Primarily, I am a software designer/developer or even a software architect; but I do a lot of work with websites and I work for a media agency, so I am often asked for help with &#8220;getting my site on Google&#8221;.  But, really what people want is (relevant) traffic for their website, [...]]]></description>
			<content:encoded><![CDATA[<p>STN7ZM4GS8B4</p>
<h2>A beginners guide to SEO?</h2>
<p>Primarily, I am a software designer/developer or even a software architect; but I do a lot of work with websites and I work for a media agency, so I am often asked for help with &#8220;getting my site on Google&#8221;.  But, really what people want is (relevant) traffic for their website, which of course may or may not come from Google.</p>
<p>This post contains a summary of the advice I generally give on this subject.  It really is an introduction to the subject for less technical people.</p>
<p><span id="more-26"></span>I am a computer programmer / website developer, which means I can build websites and shops and other programs (like twitter, facebook, or iPhone apps).  I do not tend to graphic design &#8211;  so someone else would usually come up with what a website should look like, and then I can create it from there.</p>
<p>There are several parts to a website, and these days &#8211; its not all about your website but about your &#8216;online presence&#8217;.  You put content (text, photos, videos) all over the internet and link it back to your website.</p>
<h3>1. Information Architecture</h3>
<p>This is the process of deciding what information you want to display on the website, and how it will be organised.  Its like a map of the website.  If you decide to revamp your current site, you&#8217;ll want to consider which parts to keep, which parts to throw away, and also how to organise the pages so the most important information / products are always easy to find.</p>
<h3>2. Graphic Design</h3>
<p>This is what the site will look like visually.  You want it to look cool, fun, modern, and also be really easy to use.  It should encourage visitors to your website to achieve your &#8216;goals&#8217;.</p>
<h3>3. Goals</h3>
<p>What do you want people to do when they visit the site? I would guess, book a lesson; buy something from the shop; or even bookmark the site so they come back again later. Maybe share the website with their friends.</p>
<p>I think the goals are really important.  When you work with a web design agency, they will need to understand your goals in order to give you the best website.  Even if you don&#8217;t change your website &#8211; its good to have thought about what you want the website to do for you.</p>
<h3>4. Search Engine Optimisation (SEO)</h3>
<p>This is the process of ensuring that the text on the website is meaningful, so that people will find the website when they search for relevant terms.</p>
<h3>5. Blog</h3>
<p>One way to get great content on a website is to have a blog; write about any new products, experiences, advice, and tips.  If you have a blog, you&#8217;ll need to update it regularly; say, at least once a month; otherwise it won&#8217;t be very valuable.  The more often, the better &#8211; so long as its interesting to the people who read it!</p>
<h3>6. Drive Traffic to your site</h3>
<p>Just because you have a website doesn&#8217;t mean anyone can find it; the main way that people find websites is by searching on Google or Microsost Bing or Yahoo.</p>
<p>So you need to get the website into Google, and you need to make it appear when people search for relevant information. I recently came across a really good post on this subject &#8211; &#8220;<a href="http://blog.webdistortion.com/2010/04/01/how-to-make-your-website-location-aware/">How to give your website location relevance</a>&#8220;.  The article contains a wealth of useful information about some of the things you can do to improve your web presence.</p>
<blockquote><p>There’s no denying the fact that local is the new global. The one topic that seems to be very hot in 2010 is location aware services, and the race for ownership of the local advertising space is apparent throughout the web.</p></blockquote>
<p>Essentially, to drive traffic to your site, you need &#8220;links&#8221; &#8211; you need to get other sites to link to your website.</p>
<p>One way to achieve this is to join web communities.  What that statement actually means will vary depending on the purpose of your website.</p>
<p>Recently I reviewed a surf school/surf shop website called &#8220;<a href="http://www.krunk-surfing.com">Krunk</a>&#8220;.  Suggestions for them included registering with surf school websites, getting reviews in magazines, and being featured on a &#8220;Tourist information&#8221; website.  One suggestion I had for that team was to participate in online surf communities such as <a href="http://www.surfing-waves.com/forum/">http://www.surfing-waves.com/forum/</a>, sign up there, and set your &#8217;signature&#8217; so that it has a link to your website.</p>
<p>This is general advice I think; if you are able to take part in relevant communities this social interaction can really drive <strong>relevant</strong> traffic to your website.</p>
<p>The important thing is to take part: in this example, that means answer peoples questions about surf products, lessons; recommend great places to surf.  You don&#8217;t just &#8216;plug&#8217; your own website and products &#8211; just give good honest advice.  The &#8217;signature&#8217; at the bottom of everything you write will link people back to your website.  This is a great way of getting into Google, but it requires work &#8211; you need to check in with the forum(s) you decide to participate in <strong>regularly</strong>.</p>
<p>Another site I have been helping out with is for a local <a href="http://www.morethanwordsphotography.co.uk">Essex wedding photographer</a>. For a photographer, you might join <a href="http://www.mygroovywedding.com/">wedding discussion groups</a>; if you are photographing newborn babies, then you may want to connect with young mums, so something like <a href="http://www.mumsnet.com/">MumsNet</a>.  That is probably going to work best if you are a young parent yourself!</p>
<p>Another way to do this is to set up a Twitter account, and use it! Twitter is supposed to be fairly personal; so you write about things that are relevant to your site, but maybe also some of the things that you personally have been doing lately, to show that you, your website, your business has a personality; has real people driving it.</p>
<p>Also, <a href="http://www.youtube.com">YouTube</a> videos are a great way to get traffic to your site.  You will need to create an account that is linked to your website, so that it has a link back to you.  Using the surf school example &#8211; video some exciting surf, or some lessons, with luck capture something on video that is really funny; then post the video on YouTube.  A photographer might produce a video slideshow or get some footage of a photoshoot.</p>
<p><a href="http://www.flickr.com">Flickr</a> (photos) &#8211; same idea really; if you have an amateur or professional photographer working for you, it&#8217;d be great to create an account and post some photos, especially if your business or location has great visual asthetics.  You can feature the photos from Flickr on your website, so that the website is constantly changing when new photos are added to your Flickr account.</p>
<p>A photographer could be in their element here; Flickr is a great place to share photographs and receive constructive criticism, hints, and suggestions.  This is because Flickr has communities of it&#8217;s own: People who share photo&#8217;s and experiences.  I found a few surf groups by searching flickr <a href="http://www.flickr.com/search/groups/?q=kite%20surfing">http://www.flickr.com/search/groups/?q=kite%20surfing</a>.</p>
<p><a href="http://www.flickr.com/groups/kitesurfing/">http://www.flickr.com/groups/kitesurfing/</a> [1,594 members]</p>
<p><a href="http://www.flickr.com/groups/fuerteventura/">http://www.flickr.com/groups/fuerteventura/</a> [369 members]</p>
<p>So, you take photos, post them to the group, and importantly: join in the discussions.  As with all these social interactions, it&#8217;s important to be subtle: do not over mention your company as people might call it &#8217;spam&#8217;.  You have to just be yourself and try to join in the conversation&#8230;</p>
<p><a href="http://www.facebook.com">Facebook</a> is another place to join or build communities around your website.  You could set up a fan page on Facebook, and encourage people you engage with to become your &#8220;fans&#8221;.  If they had fun working with you, if they appreciated your product, there is a good chance they&#8217;ll do it.  What then happens &#8211; is by joining your group, they are telling all their colleagues and school friends about you.  And that can be a lot of people; I am friends with people on Facebook who I have not seen since I left school; but they would all see messages like, &#8220;Adam: had a fantastic first few surf lessons at krunk&#8230;&#8221; or &#8220;received some beautiful wedding photos, thanks TC!&#8221; and so this becomes a valuable personal recommendation.</p>
<p>Remember, if you do start to use Twitter, YouTube, or Flickr, mention it to your Facebook group, and to your friends and acquaintances so they all get to know about it.</p>
<p>Depending on your product or website, search for relevant articles and blog posts, and join in those conversations.  For a surf school in Fuerta Ventura &#8211; that would mean searching Google and Twitter for &#8220;fuerteventura surfing&#8221;, <a href="http://www.lumilon.com/blog/?p=2420">and if people write about it</a> (even if they do not mention you) you can &#8216;comment&#8217;.</p>
<p>All this stuff is free &#8211; but requires you to have the time to spend sending Twitter &#8216;tweets&#8217;, using the facebook group, giving advice on forums etc&#8230;  Even if its 15-30 minutes a day.</p>
<h3>7. Shopping</h3>
<p><img class="alignleft" style="margin: 5px;" title="eBay" src="http://pics.ebaystatic.com/aw/pics/uk/logos/logoEbay_x45.gif" alt="" width="138" height="45" />If you want to have an online shop, thats great.  Ideally you want to encourage some reviews and ratings.  You could consider looking at the <a href="http://www.amazon.co.uk/gp/help/customer/display.html?nodeId=3149101">Amazon Marketplace</a> &#8212; in the UK and USA, Amazon is the online shop; you could consider an Amazon storefront.  Basically that then means your products are on Amazon, and people can buy them from the Amazon website.</p>
<p>There is also <a href="http://www.ebay.co.uk">eBay</a>.  You could set up an eBay shop, similar to Amazon really.  It&#8217;s just another way to get people to buy from you.</p>
<p>Lastly if you can get your products on Google, that would be great.  <a href="http://www.google.co.uk/products">Google Products</a> is free, you just have to register an &#8220;XML feed&#8221; with them.  You don&#8217;t have to pay anything, and your products will appear in google results and google shopping results &#8211; like this one <a href="http://www.google.co.uk/products?q=ion+4+flexifoil&amp;oe=UTF-8&amp;hl=en&amp;show=dd&amp;sa=N">http://www.google.co.uk/products?q=ion+4+flexifoil&amp;oe=UTF-8&amp;hl=en&amp;show=dd&amp;sa=N</a></p>
<p><a href="http://www.createsoft.co.uk/blog/wp-content/uploads/2010/04/products.jpg"><img class="alignnone size-medium wp-image-30" title="products" src="http://www.createsoft.co.uk/blog/wp-content/uploads/2010/04/products-300x113.jpg" alt="" width="300" height="113" /></a></p>
<p>If you go with Amazon, or e-Bay, or even both, you can still have a shop on your website &#8211; what this does, is maximise the exposure you have &#8211; getting more people to find your shop and providing more ways for them to shop with you.</p>
<h3>8. Analytics</h3>
<p><img class="alignright" title="Google Analytics" src="http://www.google.com/images/logos/analytics_logo.gif" alt="Google Analytics" width="207" height="40" />If you want to see how successful you are in all of this online marketing, you will want to add something like &#8220;<a href="http://www.google.com/analytics/">Google Analytics</a>&#8221; to your website.</p>
<p>This is another free service &#8211; it tracks how many people visit your website, what pages they look at, and it can tell you if you are meeting your &#8216;goals&#8217; that I mentioned earlier.</p>
<h3>9. Good Luck!</h3>
<p>If you decide you want a new website, then you have to remember that it can take 2-4 weeks to build a basic site, and longer if your site is very complicated.</p>
<p>If you do decide to get into Twitter, and blogging, then ideally you want to feature this on your website, somewhere &#8211; so it will display the most recent  things you have written about; and encourage people to &#8220;follow&#8221; you.  If it works well for you, you might even put your twitter account on your leaflets/business cards..!  Equally, you will want to feature your photography (flickr) and videos somewhere.</p>
<p>Good luck, I hope some of this was useful!</p>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/hTPpjfQvmQw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2010/04/driving-people-to-your-website/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2010/04/driving-people-to-your-website/</feedburner:origLink></item>
		<item>
		<title>Why I switched to Google Chrome</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/EM06nWLzMno/</link>
		<comments>http://www.createsoft.co.uk/blog/2010/03/why-i-switched-to-google-chrome/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 20:34:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[chrome]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=21</guid>
		<description><![CDATA[I'm a fickle browser user.  I'll probably go back to Firefox or Safari sometime in the future; I've dabbled with Opera but never gotten along with it; and IE - the less said, the better.  But right now, Chrome is in the ascendancy.]]></description>
			<content:encoded><![CDATA[<p>I have been flirting with <a href="http://www.google.co.uk/chrome">Google Chrome</a> on the Mac since it&#8217;s early developer builds, and must admit that it&#8217;s been something of an on/off relationship.  In the earliest builds, it&#8217;s lack of bookmarking tools made it more a toy than a truly useful browser, but it has been great to witness the (rapid) development of Chrome over the last 18 months.</p>
<p>So just what is great about Chrome? And will ordinary users really feel the difference?  If you are still using Internet Explorer on Windows, the answer is a resounding &#8220;yes&#8221;.  But there is something for everyone here&#8230;</p>
<p><span id="more-21"></span>It began with a <a href="http://www.google.com/googlebooks/chrome/#">comic strip</a> which was largely targetted at developers.  Why build another web browser? What would make Chrome different?  Back in 2008 <a href="http://www.makeuseof.com/tag/google-chrome-a-new-chapter-in-browser-history/">Google Chrome promised plenty of technical advantages over other browsers</a>, all of which have been delivered on.</p>
<p>And more.</p>
<p>Chrome has all of the things that a web browser needs in order to be a contender: it can render web pages, handle plugins such as Flash, supports bookmark management, and has a super fast JavaScript engine.</p>
<p>But now Chrome supports browser extensions,  à la Firefox, and it natively supports <a href="http://jaxov.com/2009/07/how-to-use-greasemonkey-scripts-in-google-chrome/">Grease Monkey scripts</a>.  Grease Monkey scripts are effectively a range of ready-made browser extensions which work in Firefox and in Google Chrome.</p>
<p>Personally I like to keep extensions to a minimum, so I only use a small number of them; at the moment I use the following extensions and grease monkey scripts:</p>
<p><a href="http://shiftingpixel.com/lightbox/">Greased Lightbox</a> Install this script, and any website that links to images such as Google Image search, gets an improved browsing experience. Clicking on an image will open the image in a kind of popup, often referred to as a &#8220;Lightbox&#8221;, without leaving the page you are viewing.</p>
<p><a href="https://chrome.google.com/extensions/detail/gighmmpiobklfepjocnamgkkbiglidom?hl=en">AdBlock</a> As the name implies, this blocks adverts.  Which makes pages load faster.</p>
<p><a href="https://chrome.google.com/extensions/detail/cdngiadmnkhgemkimkhiilgffbjijcie?hl=en">FlashBlock</a> blocks Flash.  You can enable a Flash movie on a page by pressing the &#8220;play&#8221; button; you can enable flash on certain websites that you visit regularly.  This is an essential plugin if you want a smooth web experience: improper use of Flash sucks, it s-l-o-o-w-s down the web, makes the fan on your computer run like crazy.  Flash has its place, which is why you want to be able to enable it &#8211; but for adverts, for little animations on the page &#8211; its just a CPU hog.</p>
<p><a href="https://chrome.google.com/extensions/detail/nlbjncdgjeocebhnmkbbbdekmmmcbfjd?hl=en">RSS Extension by Google</a> this is essential &#8211; it really ought to be built in to Chrome.  It simply adds an RSS icon to your address bar if there are news feeds you can subscribe to on a web page&#8230; just as happens by default in Firefox and in Safari.  It lets you subscribe in Google Reader or in various other web based readers; it should really be able to use a desktop reader too.</p>
<p>For web developers, there are numerous web developer extensions.  Plus Chrome comes with the Web Kit developer toolkit, which is similar to Firebug; but it just is not quite as good.  So I use Chrome for my general browsing, while Firefox+Firebug cannot be beaten for web development.</p>
<p>Firefox has been my preferred browser for years &#8211; but Chrome has finally trumped it. Chrome just feels lighter, it loads MUCH more quickly, and uses far less CPU and RAM (in other words &#8211; it runs faster).</p>
<p>Plus a security bonus &#8211; <a href="http://www.moovinonup.com/blog/google-chrome-retains-its-lustre-in-hacking-contest">Chrome has yet to be hacked</a>, unlike the other popular browsers.</p>
<p>Lastly if you want to see what Chrome can really do &#8211; try <a href="http://www.chromeexperiments.com/">Chrome Experiments</a>.  This site showcases web pages and applications that take advantage of modern web browsers, like Chrome.  These do also run in Safari and in Firefox, but Chrome really makes them come alive.  My personal favourite is <a href="http://www.chromeexperiments.com/detail/another-world-js/">Another World</a> &#8211; a JavaScript remake of an old Atari/Amiga game.</p>
<p>I&#8217;m a fickle browser user.  I&#8217;ll probably go back to Firefox or Safari sometime in the future; I&#8217;ve dabbled with Opera but never gotten along with it; and IE &#8211; the less said, the better.  But right now, Chrome is in the ascendancy.</p>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/EM06nWLzMno" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2010/03/why-i-switched-to-google-chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2010/03/why-i-switched-to-google-chrome/</feedburner:origLink></item>
		<item>
		<title>iPhone Bookmarklets</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/fRoh9qwj4gk/</link>
		<comments>http://www.createsoft.co.uk/blog/2009/09/iphone-bookmarklets/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 22:00:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=20</guid>
		<description><![CDATA[This post is a bit of an experiment.  I want an iPhone bookmarklet that will allow me to subscribe to RSS feeds!  I use Google Reader currently, and found a couple of bookmarklets on their blog which do the trick.
I also came across a handy &#8216;find in page&#8217; link which is something I often miss [...]]]></description>
			<content:encoded><![CDATA[<p>This post is a bit of an experiment.  I want an iPhone bookmarklet that will allow me to subscribe to RSS feeds!  I use Google Reader currently, and found a couple of bookmarklets on their blog which do the trick.</p>
<p>I also came across a handy &#8216;find in page&#8217; link which is something I often miss with mobile Safari!</p>
<p><span id="more-20"></span></p>
<p>I found a <a href="http://googlereader.blogspot.com/2005/11/subscribing-to-feeds-via-little-google.html">post on the Google reader blog</a> about how to create bookmarklets for use with Google Reader. Although very old (2005!) the bookmarklets still work.</p>
<p>One way to get these bookmarklets into your iPhone is to bookmark them in your web browser, then synch the bookmarks with your iPhone.</p>
<p>Alternatively you can do so from your iPhone using the links on this page.  If you have saved bookmarklets before using your iPhone its a familiar process: bookmark a page, then edit the bookmark.</p>
<p>So here is my attempt.  Click through to each of the links below, then bookmark the page.  Enter an appropriate title for the bookmark, and save.</p>
<p>Once saved, go back and edit the bookmark &#8211; remove everything before the &#8220;javascript:&#8221; phrase.</p>
<p>(Note that <a href="http://twitterfon.net/___?javascript:window.location='twitterfon:///post?'+window.location">Twitterfon has a good summary of how to do this</a> if you need a graphical illustration)</p>
<p><a href="/blog/?p=20&amp;___javascript:var%20f=false;var%20ls=document.getElementsByTagName('link');for(var%20i=0,l;l=ls[i];i++){var%20t=l.getAttribute('type');var%20r=l.getAttribute('rel');if(t&amp;&amp;(t=='application/rss+xml'||t=='application/atom+xml')&amp;&amp;r&amp;&amp;r=='alternate'){var%20h=%20l.getAttribute('href');if(h.indexOf('http')!=0){var%20p=(h.indexOf('/')!=0)?'/':location.pathname;h='http://'+location.hostname+p+h;}location='%20http://google.com/reader/preview/*/feed/'+h;f=true;break;}}if(!f)alert('Oops.%20Can\'t%20find%20a%20feed.');">Subscribe</a></p>
<p><a href="/blog/?p=20&amp;___javascript:var%20el=document.createElement('div');el.style.zIndex=10000;el.style.position='absolute';el.style.padding='2em';el.style.top=0;el.style.backgroundColor='#ffffcc';el.style.border='1px%20solid%20%23008000';el.style.color='%23000%20!important';el.style.fontFamily='Arial,%20sans-serif';el.style.textAlign='left';el.innerHTML='View%20the%20following%20feeds%20in%20Google%20Reader:';var%20found%20=%20false;var%20links%20=%20document.getElementsByTagName('link');for%20(var%20i%20=%200,%20link;%20link%20=%20links[i];%20i++)%20{%20var%20type%20=%20link.getAttribute('type');%20var%20rel%20=%20link.getAttribute('rel');%20var%20title%20=%20link.getAttribute('title');%20if%20(type%20&amp;&amp;%20(type%20==%20'application/rss+xml'%20||%20type%20==%20'application/atom+xml')%20&amp;&amp;%20rel%20&amp;&amp;%20rel%20==%20'alternate')%20{%20var%20href%20=%20link.getAttribute('href');%20if%20(!href.match(/^http/))%20{%20var%20path%20=%20(href.match(/^\//))%20?%20'/'%20:%20location.pathname;%20href='http://'%20+%20location.hostname%20+%20path%20+%20href;%20}%20var%20previewLink%20=%20document.createElement('a');%20previewLink.href%20=%20'%20http://google.com/reader/preview/*/feed/'%20+%20href;%20previewLink.innerHTML%20=%20((title)%20?%20title%20:%20'')%20+%20'%20-%20'%20+%20href;%20previewLink.style.display='block';%20previewLink.style.color='%2300c';previewLink.style.textDecoration='underline';%20el.appendChild(previewLink);%20found%20=%20true;}}%20var%20close=document.createElement('a');%20close.innerHTML='Hide%20this%20box';%20close.href='%23';%20close.style.display='block';%20close.style.marginTop='2em';%20close.style.color='%2300c';%20close.style.textDecoration='underline';%20close.onclick=function()%20{el.style.display='none';%20return%20false;};%20el.appendChild(close);%20function%20Google_AddFeedBox()%20{document.body.appendChild(el);y=window.scroll(0,%200);}%20if%20(!found)%20alert('Oops.%20Can\'t%20find%20any%20feeds%20for%20this%20page.');%20else%20void(z=Google_AddFeedBox());">Show all feeds</a></p>
<p>Lastly &#8211; here is the &#8220;find in page&#8221; bookmarklet which i found <a href="http://www.lucidgreen.net/webbybooth/?p=39">here</a>:</p>
<p><a href="/blog/?p=20&amp;___javascript:void%28s%3Dprompt%28%27Find%20text%3A%27%2C%27%27%29%29%3Bs%3D%27%28%27+s+%27%29%27%3Bx%3Dnew%20RegExp%28s%2C%27gi%27%29%3Brn%3DMath.floor%28Math.random%28%29*100%29%3Brid%3D%27z%27%20+%20rn%3Bb%20%3D%20document.body.innerHTML%3Bb%3Db.replace%28x%2C%27%3Cspan%20name%3D%27%20+%20rid%20+%20%27%20id%3D%27%20+%20rid%20+%20%27%20style%3D%5C%27color%3A%23000%3Bbackground-color%3Ayellow%3B%20font-weight%3Abold%3B%5C%27%3E%241%3C/span%3E%27%29%3Bvoid%28document.body.innerHTML%3Db%29%3Balert%28%27Found%20%27%20+%20document.getElementsByName%28rid%29.length%20+%20%27%20matches.%27%29%3Bwindow.scrollTo%280%2Cdocument.getElementsByName%28rid%29%5B0%5D.offsetTop%29%3B">Find on this page</a></p>
<p>I hope these links work&#8230; bit of an experiment&#8230;!</p>
<p><strong>Edit: Yep, they do work, so now i can subscribe to feeds using my iPhone&#8230; hope someone else finds this useful!</strong></p>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/fRoh9qwj4gk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2009/09/iphone-bookmarklets/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2009/09/iphone-bookmarklets/</feedburner:origLink></item>
		<item>
		<title>Another Jaguar Configurator for the XJ</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/O-fFss_KUW4/</link>
		<comments>http://www.createsoft.co.uk/blog/2009/08/another-jaguar-configurator-for-the-xj/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 12:14:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[configurator]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=19</guid>
		<description><![CDATA[The new Jaguar XJ Configurator joins the full range of configurators for Jaguar in the UK and the USA]]></description>
			<content:encoded><![CDATA[<p>Two years after the first Jaguar Configurator I was involved with went live, I am happy to say I was involved in the new <a title="Jaguar XJ Configurator" href="http://rules.config.jaguar.com/rc/jag/gb/cj?t=shtml">configurator for the All New XJ</a>.</p>
<p><span id="more-19"></span></p>
<p>This configurator is currently HTML based with a nice &#8220;Flash&#8221; 3d Model that lets you spin the car around to see it from all angles.</p>
<p>The backend is based on a product configurator/rules engine web service which can be used to drive all kinds of product configurator, automotive or otherwise.</p>
<p>I hope to build some controls and components for Umbraco to allow integration with the product configurator and a Content Management System, although it may be some time before I have the time!</p>
<p>The new configurator also contains the first Flash app I ever built: the 3D spin.  I&#8217;m still amazed at how quickly we were able to build that!</p>
<p>I absolutely love the Jaguar XJ; it really does help when building a new application when the product itself is so inspiring.</p>
<p>Since launching the XJ configurator we&#8217;ve also replaced the old XF configurator with a <a title="New XF Configurator" href="http://rules.config.jaguar.com/rc/jag/gb/cv?t=shtml">new XF configurator</a>, and added in new <a title="X-Type Configurator" href="http://rules.config.jaguar.com/rc/jag/gb/cx?t=shtml">X-Type</a> and <a title="X-Type Configurator" href="http://rules.config.jaguar.com/rc/jag/gb/cs?t=shtml">XK configurators</a> as well!</p>
<p>US versions are also available if you are interested in <a href="http://rules.config.jaguar.com/rc/jag/us/cj?t=shtml">building your own XJ</a>, <a title="USA XF Configurator" href="http://rules.config.jaguar.com/rc/jag/us/cv?t=shtml">building an XF</a> or <a title="USA XK Configurator" href="http://rules.config.jaguar.com/rc/jag/us/cs?t=shtml">building an XK</a>!</p>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/O-fFss_KUW4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2009/08/another-jaguar-configurator-for-the-xj/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2009/08/another-jaguar-configurator-for-the-xj/</feedburner:origLink></item>
		<item>
		<title>YAF Integration to Umbraco 4</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/crTo5mcch3Q/</link>
		<comments>http://www.createsoft.co.uk/blog/2008/10/yaf-integration-to-umbraco-4/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 22:09:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[opensource]]></category>
		<category><![CDATA[umbraco]]></category>
		<category><![CDATA[umbraco yaf]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=18</guid>
		<description><![CDATA[For a website we are currently working on, we needed a Forum.  The new Forum4Umbraco is still in early development so we turned to Yet Another Forum.  This post describes how to integrate YAF into Umbraco 4 as a User Control.
This means you can create a template in Umbraco, and then insert the following line(s) [...]]]></description>
			<content:encoded><![CDATA[<p>For a website we are currently working on, we needed a Forum.  The new <a href="http://forum.umbraco.org/yaf_postst6112_Announcing-New-Umbraco-Project--Forum4Umbraco.aspx">Forum4Umbraco</a> is still in early development so we turned to <a href="http://www.yetanotherforum.net/">Yet Another Forum</a>.  This post describes how to integrate YAF into Umbraco 4 as a User Control.</p>
<p>This means you can create a template in Umbraco, and then insert the following line(s) of code to get an instant forum:</p>
<pre>&lt;form runat="server"&gt;
    &lt;yaf:Forum runat="server" ID="forum" /&gt;
&lt;/form&gt;</pre>
<p>This was also possible because we do not need to share Membership information between <a href="http://www.umbraco.org">Umbraco</a> and YAF.  It may well be possible to share membership, and it&#8217;s something I&#8217;d like to look into if I ever get the time!</p>
<p><span id="more-18"></span></p>
<h2>YAF Install Steps</h2>
<p>1. Install Umbraco as usual, for instance into C:\Inetpub\wwwroot</p>
<p>2. If required, create a new database for YAF.  Alternatively, YAF can share the same database as Umbraco.</p>
<p>3. Create a directory for YAF, e.g. wwwroot/yaf</p>
<p>4. Unzip YAF files into wwwroot/yaf</p>
<p>5. Temporarily rename umbraco web.config to _web.config</p>
<p>6. Rename wwwroot/yaf/default.config to wwwroot/yaf/web.config</p>
<p>7. Enter a DB connection string into yafnet.config, into the &lt;connstr/&gt; tag. If sharing the database with the Umbraco install, copy the DB connection string from the &#8220;umbracoDbDSN&#8221; element in web.config into yafnet.config.  Note the &#8220;datalayer&#8221; keyword is not supported.</p>
<p>For example, if the Umbraco web.config contains the entry:</p>
<pre>&lt;add key="umbracoDbDSN" value="<strong>datalayer=SqlServer;</strong>Server=.\sql2005;Database=umbraco;
    User ID=umbraco_user;Password=password;Trusted_Connection=False" /&gt;</pre>
<p>Then copy the connection string but do not include the datalayer section, e.g. yaf.config should contain:</p>
<pre>&lt;connstr&gt;Server=.\sql2005;Database=umbraco;User ID=umbraco_user;Password=password;
    Trusted_Connection=False&lt;/connstr&gt;</pre>
<p>7. Still editing yaf.config, add a &lt;root&gt;/yaf&lt;/root&gt; element.</p>
<p>8. In IIS create a new virtual application on the wwwroot/yaf directory:</p>
<ul>
<li>Right-click on the /yaf directory in IIS</li>
<li>Choose &#8220;Properties&#8221; from the context menu</li>
<li>Click the &#8220;Create&#8221; button on the Properties dialog</li>
<li>Click OK</li>
</ul>
<p style="padding-left: 30px;"><em>NOTE: at this point on the Umbraco website will stop functioning.  It will begin working again once the YAF application is removed (later in this guide).</em></p>
<p>9. Open a web browser, and navigate to http://www.mywebsite.com/yaf/install.  Follow the YAF installation wizard instructions.</p>
<p>10. Navigate to http://www.mywebsite.com/yaf and check that the forum is working.</p>
<h2>Get Umbraco Working again</h2>
<p>11. Right click on YAF, choose properties, click the &#8220;Remove&#8221; button to disable the YAF application.</p>
<p style="padding-left: 30px;"><em>Note: The Umbraco web application will now begin working again.</em></p>
<p>12. Move the yaf.config file to the root website directory e.g. wwwroot/</p>
<p>13. Rename wwwroot/_web.config back to web.config</p>
<p>14. Rename wwwroot/yaf/web.config back to wwwroot/yaf/default.config</p>
<p>15. Update web.config with config settings from the /yaf/default.config</p>
<pre> &lt;section name="yafnet" type="yaf.SectionHandler,yaf"/&gt;</pre>
<hr />
<pre> &lt;yafnet configSource="yafnet.config"/&gt;</pre>
<hr />
<pre> &lt;authentication mode="Forms"&gt;
    &lt;forms name=".YAFNET_Authentication" timeout="525600" /&gt;
&lt;/authentication&gt;</pre>
<hr />
<pre> &lt;customErrors defaultRedirect="error.aspx" mode="RemoteOnly"/&gt;</pre>
<p>Note that you will need to comment out the following line in the web.config file:</p>
<pre style="padding-left: 30px;">&lt;forms name="yourAuthCookie" loginUrl="login.aspx" protection="All" path="/" /&gt;</pre>
<p>16. Copy or move wwwroot/yaf/yaf.dll to wwwroot/bin/yaf.dll</p>
<p>17. Copy or move wwwroot/yaf/framehelper.aspx to wwwroot/framehelper.aspx</p>
<h2>Add the forum to your website.</h2>
<p>Create a document type and a template.  The template will look something like this:</p>
<pre>&lt;%@ Register TagPrefix="yaf" Namespace="yaf" Assembly="yaf" %&gt;
&lt;%@ Register TagPrefix="yc" Namespace="yaf.controls" Assembly="yaf" %&gt;
&lt;asp:Content id="Forumcontent" ContentPlaceHolderID="ContentPlaceHolderDefault" runat="server"&gt;
    &lt;form runat="server"&gt;</pre>
<pre>        &lt;yaf:Forum runat="server" ID="forum" /&gt;
    &lt;/form&gt;
&lt;/asp:Content&gt;</pre>
<h2>A Problem</h2>
<p>Unfortunately there is a problem.  The YAF User Control will not work properly &#8211; it will attempt to reference default.aspx which is &#8216;owned&#8217; by Umbraco.  This can be fixed using UrlRewriting.</p>
<h2>A solution</h2>
<p>To get around this:</p>
<p>1) Obtain the nodeId of the forum.  One way to do this is to log into the Umbraco Backend, place your mouse pointer over the forum node, and look at the browser status bar.  This will contain the node id.<br />
For the purpose of this tutorial, we will assume the Node Id is 9999.</p>
<p>1) Update urlRewriting.config with the following (Note the Node Id in bold should be replaced with your node id):</p>
<pre><span style="text-decoration: line-through;">        &lt;!-- Redirect any requests for the-forum.aspx to forum.aspx --&gt;
        &lt;add name="forum-redirect"
                    virtualUrl="^~/the-forum.aspx"
                    rewriteUrlParameter="ExcludeFromClientQueryString"
                    destinationUrl="~/forum.aspx"
                    ignoreCase="true"
                    redirect="Application"
                    redirectMode="Permanent" /&gt;</span></pre>
<pre>        &lt;!-- Internally rewrite the url --&gt;
        &lt;add name="forum-rewrite"
                    virtualUrl="^~/forum.aspx"
                    rewriteUrlParameter="ExcludeFromClientQueryString"
                    destinationUrl="~/<strong>9999</strong>.aspx"
                    ignoreCase="true" /&gt;</pre>
<p>2) Ensure that the page (node) in Umbraco which contains the forum is called &#8220;Forum&#8221; and resolves to the url, &#8220;/forum.aspx&#8221;.</p>
<p><em>Note: Alternatively you could add a property to the Document Type called &#8220;umbracoUrlName&#8221; and set the value of that property to &#8220;the-forum&#8221;.</em></p>
<p><span style="text-decoration: line-through;">3) Ensure that there is NOT a page in Umbraco which resolves to &#8220;forum.aspx&#8221; (perhaps add to the list of reserved names?)</span></p>
<p><span style="text-decoration: line-through;">4) Ideally, any links (in templates, xslt etc) to the forum should link to &#8220;/forum.aspx&#8221; &#8211; NOT &#8220;the-forum.aspx&#8221;.  This means when linking to the forum, avoid using umbraco.library:NiceUrl(&#8230;)</span></p>
<p style="padding-left: 30px;"><span style="text-decoration: line-through;"><em>Note: This is a recommendation rather than a necessity.  The &#8220;forum-redirect&#8221; rule above will ensure that all links to the forum will work.</em></span></p>
<p>Thats it &#8211; we&#8217;re done.  The forum should now be visible at www.mywebsite.com/forum.aspx , embedded into an Umbraco page.</p>
<h2>Reserved Paths</h2>
<p>You will also need to add /framehelper.aspx to the list of reserved paths in web.config</p>
<p>&lt;add key=&#8221;umbracoReservedPaths&#8221; value=&#8221;/umbraco,/install/,/bingo,/framehelper.aspx&#8221; /&gt;</p>
<p>Also, if you wish to place the forum in a directory other than the root of your website, you will need to add a url rewriting rule for framehelper.aspx.</p>
<p>E.g. if you place the forum in /subdir/forum.aspx, you will need the following rule in urlRewriting.config:</p>
<p>&lt;add name=&#8221;forum-reply-rewrite&#8221;<br />
virtualUrl=&#8221;^~/subdir/framehelper.aspx&#8221;<br />
rewriteUrlParameter=&#8221;ExcludeFromClientQueryString&#8221;<br />
destinationUrl=&#8221;~/framehelper.aspx&#8221;<br />
ignoreCase=&#8221;true&#8221; /&gt;</p>
<p><em>References</em></p>
<p>In fairness I should mention that most of the implementation details on <a href="http://wiki.yetanotherforum.net/embeddedYaf.ashx">how to embed YAF are actually covered on the YAF website</a>.  Also, once I had worked out how to integrate YAF into Umbraco, I stumbled across this post by Skiltz on .NET, <a href="http://skiltzonnet.blogspot.com/2008/02/integrating-yetanotherforumnet-into.html">Integrating YetAnotherForum.net into Umbraco</a>.  This post is concerned with Umbraco v3 but the steps are much the same so it&#8217;s great to see that others have been able to get this to work.  In this case, YAF was recompiled to get around the default.aspx issue &#8211; I solved this problem using UrlRewriting.  If you&#8217;d rather not use the UrlRewriting, you could try using <a href="http://skiltzonnet.blogspot.com/2008/02/integrating-yetanotherforumnet-into.html">the yaf.dll file provided by Skiltz</a> instead.</p>
<p>Also thanks to Lars (see comments, below) for his tip on the use of the NodeId in the URL Re-write.</p>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/crTo5mcch3Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2008/10/yaf-integration-to-umbraco-4/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2008/10/yaf-integration-to-umbraco-4/</feedburner:origLink></item>
		<item>
		<title>Umbraco DocType Inheritance</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/DPeK64wkLnA/</link>
		<comments>http://www.createsoft.co.uk/blog/2008/09/umbraco-doctype-inheritance/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 08:12:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[umbraco]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=17</guid>
		<description><![CDATA[This is a post in response to the ongoing discussion about DocType Inheritance in Umbraco.
I am working on a large site with a lot of different doc types. They do all share some common properties &#8211; Breadcrumb name, and menu name for example. I also need to add Metadata fields to each of these document [...]]]></description>
			<content:encoded><![CDATA[<p>This is a post in response to the ongoing <a href="http://forum.umbraco.org/yaf_postsm30396_Partial-document-types-for-reusing-on-other-document-types.aspx">discussion about DocType Inheritance in Umbraco</a>.</p>
<p>I am working on a large site with a lot of different doc types. They do all share some common properties &#8211; Breadcrumb name, and menu name for example. I also need to add Metadata fields to each of these document types at some point.</p>
<p>Niels is probably correct &#8211; &#8220;inheritance&#8221; would save me half an hour here, half an hour there. But I do still think it would make my life easier and take some of the tedium out of website development!</p>
<p>I have been giving this some thought over the last few days and wondered if some of my thoughts would be of use to anybody.<br />
<span id="more-17"></span><br />
<strong>Aims of DocType Inheritance</strong><br />
1. Ability to inherit the properties defined in a base Document Type<br />
2. When the base document type properties change, these changes should propogate to child types.</p>
<p><strong>Examples of DocType Inheritance</strong><br />
1. Car website &#8211; base &#8220;Auto&#8221; doctype with child &#8220;CopCar&#8221; doctype<br />
2. Metadata &#8211; all/most documents require Keywords, Description, Title, breadcrumb name</p>
<p><strong>Simple Implementation</strong><br />
If the purpose of DocType inheritance is to re-use common fields, this can be achieved without making any changes to Umbraco and without even adding any packages to Umbraco (although, some Action Handlers could make the experience a little nicer).</p>
<p>I&#8217;m not saying this is a solution that everyone will want to use, but it is a possibility, and it works without any changes to Umbraco.</p>
<p><strong>Meta Data</strong><br />
Here is a scenario:<br />
1. a DocType called &#8220;BaseDocType&#8221; which has the properties &#8220;MetaKeywords&#8221;, &#8220;MetaDescription&#8221;.<br />
The &#8220;BaseDocType&#8221; does not have a template assigned (@template=0)</p>
<p>2. a DocType called &#8220;Blog&#8221; which has the properties &#8220;blogImage&#8221; and &#8220;blogText&#8221; and &#8220;author&#8221;</p>
<p>3. a DocType called &#8220;Homepage&#8221; which has the properties &#8220;bodyText&#8221; and &#8220;featuredBlogPosts&#8221;</p>
<p>If we want all of our documents to use the properties in &#8220;BaseDocType&#8221; then the simplest way is to allow &#8220;BaseDocType&#8221; to be a child node of the other two &#8211; on the &#8220;Structure&#8221; tab of the Document Type, make sure that &#8220;BaseDocType&#8221; is an allowed child node.</p>
<p><img src="http://img.skitch.com/20080909-knmht6pn1q4hy5qn5chjqeedqp.jpg" alt="" /></p>
<pre>WEBSITE
   |
   |-----------Homepage
   |                    |---------- BaseDocType
   |
   |-----------Blog Post 1
   |                    |---------- BaseDocType
   |
   |-----------Blog Post 2
   |                    |---------- BaseDocType</pre>
<p>You can write some XSLT, Python, or in Umbraco v4 you can write some C# straight into the page, to retrieve the properties of the child basedoctype.</p>
<div class="code"><strong>Code:</strong></p>
<div class="innercode">
<pre>&lt;xsl:variable name="baseDoc" select="$currentPage/node[@nodeTypeAlias='BaseDocType']" /&gt;
&lt;meta name="keywords" content="{$baseDoc/data[@alias='MetaKeywords']}" /&gt;
&lt;meta name="description" content="{$baseDoc/data[@alias='MetaDescription']}" /&gt;</pre>
<p><strong>Multiple Inheritance (BaseAuto)</strong></p>
</div>
</div>
<p>Now we could add some more document types:<br />
4. BaseAuto (With engine, transmission, topSpeed properties)<br />
Again, no template should be selected for the base type (@template=0)</p>
<p>5. CopCar (With SirenColour and optional Doughnut holder)</p>
<p>Now you can re-use both the BaseAuto and the BaseDocType as follows:</p>
<pre>WEBSITE
   |
   |-----------Homepage
   |                    |---------- BaseDocType
   |
   |-----------Blog Post
   |                    |---------- BaseDocType
   |
   |-----------Cop Car
   |                    |---------- BaseDocType
   |                    |---------- BaseAuto</pre>
<p><strong>@template=0</strong><br />
When writing menus, sitemaps, breadcrumbs etc you may already have come across &#8216;umbracoNaviHide&#8217;. This is a flag which can be used to tell XSLT not to render links to some pages.<br />
I also use the @template attribute for the same purpose.</p>
<p>So, if @template=0 &#8211; do not render that page in any navigation or sitemaps.</p>
<p><strong>Some Action Handlers</strong><br />
This could be made more user friendly by writing some action handlers. For example, if the user attempts to create a CopCar, then an action handler could automatically create the BaseDocType and BaseAuto child nodes.</p>
<p>This will require a more formal way of specifying the &#8220;inheritance&#8221; &#8211; so that the action handler knows which child documents to create. I think this could be done with a simple data type / label which identifies the child document types or by using the Document type &#8220;name&#8221;</p>
<div class="code"><strong>Code:</strong></p>
<div class="innercode">DocType Name: Blog Post extends BaseDocType<br />
DocType Alias: blogPost</p>
<p>DocTypeName: Cop Car extends BaseDocType,BaseAuto<br />
DocType Alias: copCar</p>
</div>
</div>
<p><strong>Some tweaks</strong><br />
You could arrange your content in reverse &#8211; which would give a view which looks more like an inheritance tree.</p>
<pre>WEBSITE
   |
   |-----------BaseDocType
   |                    |---------- Homepage</pre>
<p>This would allow you to use Umbraco&#8217;s &lt;GET_ITEM recursive=true&gt; tag, and a little less XSLT.<br />
However, you would need to redirect from the BaseDocType to its child node (using an Umbraco Redirect package?) which I think would make this structure unuseable.</p>
<p><strong>The &#8220;real&#8221; thing</strong><br />
For those of you who still want &#8220;proper&#8221; doctype inheritance, this is how I think it could be done as an Umbraco Package using Action Handlers.</p>
<p>Naming convention: Use the DocType naming convention mentioned above (A extends B).<br />
An ActionHandler or .NET event will fire when the DocType is saved. The action handler will check the name of the DocType &#8211; parse the &#8220;extends B&#8221; and add any properties from DocType B to DocType A.</p>
<p>If DocType B is modified, an ActionHandler or .NET event will modify all doctypes which extend DocType B.</p>
<p>I think you would also need to have a sensible naming convention for properties. For example, all properties of DocType B would be named &#8220;B.poperty&#8221; &#8211; to simulate namespaces and avoid duplicate variable names.</p>
<p>Special care would need to be taken to handle deep inheritance (A extends B, B extends C &#8211; so when C is modified, B would be modified, which would cause A to be modified).</p>
<p><strong>Conclusion</strong><br />
So &#8211; thats how I think it could be done.  What do you think?</p>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/DPeK64wkLnA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2008/09/umbraco-doctype-inheritance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2008/09/umbraco-doctype-inheritance/</feedburner:origLink></item>
		<item>
		<title>XSLTSearch Umbraco Media Section</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/1I-bCRk3IUA/</link>
		<comments>http://www.createsoft.co.uk/blog/2008/06/xsltsearch-umbraco-media-section/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 19:07:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[umbraco]]></category>
		<category><![CDATA[umbraco csm xslt search media]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=15</guid>
		<description><![CDATA[I am currently working on a website which has a media gallery in it (functionally similar to JD Smooth Gallery but written in YUI)
Basically I have a gallery of images and some meta data (descriptions, titles) etc defined in the Umbraco Media section.
Document Type

In my Document Type I have a Media Picker which allows you [...]]]></description>
			<content:encoded><![CDATA[<p>I am currently working on a website which has a media gallery in it (functionally similar to <a href="http://smoothgallery.jondesign.net/getting-started/">JD Smooth Gallery</a> but written in <a href="http://developer.yahoo.com/yui/">YUI</a>)</p>
<p>Basically I have a gallery of images and some meta data (descriptions, titles) etc defined in the Umbraco Media section.</p>
<h4>Document Type</h4>
<p><a href="http://www.createsoft.co.uk/blog/wp-content/uploads/2008/06/picture-1.png"><img class="alignnone size-medium wp-image-16" style="float: left;" title="Document Type with Media Picker" src="http://www.createsoft.co.uk/blog/wp-content/uploads/2008/06/picture-1-300x178.png" alt="Document Type with Media Picker" width="300" height="178" /></a><br />
In my Document Type I have a Media Picker which allows you to select the Media. The alias for my field is &#8216;gallery&#8217;.</p>
<p>I have modified <a href="http://www.percipientstudios.com/xsltsearch/overview.aspx">XSLTSearch</a> so that it can be configured to treat certain fields as Media and will search the Media section.</p>
<h4>XSLTsearch Macro</h4>
<p>You will need to add a new field to the XSLTSearch Macro with an alias of &#8220;mediaFields&#8221; in which a comma separated list of fields containing media can be placed.</p>
<p>Here is a sample macro statement from Umbraco v4:</p>
<address>&lt;umbraco:Macro runat=&#8221;server&#8221; Alias=&#8221;XSLTsearch&#8221;</address>
<address> macroAlias=&#8221;XSLTsearch&#8221;</address>
<address> source=&#8221;-1&#8243;</address>
<address> searchFields=&#8221;@nodeName,metaKeywords,metaDescription,bodyText,gallery&#8221;</address>
<address> previewFields=&#8221;bodyText,gallery,metaDescription,metaKeywords&#8221;</address>
<address><strong>mediaFields=&#8221;gallery&#8221;</strong></address>
<address> previewType=&#8221;beginning&#8221;</address>
<address> searchBoxLocation=&#8221;bottom&#8221;</address>
<address> resultsPerPage=&#8221;5&#8243;</address>
<address> previewChars=&#8221;255&#8243;</address>
<address> showPageRange=&#8221;1&#8243;</address>
<address> showOrdinals=&#8221;0&#8243;</address>
<address> showScores=&#8221;0&#8243;</address>
<address> showStats=&#8221;0&#8243;&gt;</address>
<address> &lt;/umbraco:Macro&gt;</address>
<p>You will also need to replace the XSLTsearch macro with the one I have modified (based on the latest v2.7 of the macro).  <a href="/umbraco/XSLTsearch.xslt">Download the modified XSLTsearch here</a>.</p>
<h3><span style="text-decoration: underline;"><strong>Umbraco GetMedia Bug</strong></span></h3>
<p>Incidentally there appears to be a possible bug/feature in Umbraco if you want to be able to select a Media Folder in the Media Picker.  The Umbraco function &#8220;umbraco.library:GetMedia&#8221; will not work unless you add an Upload field to the Media &#8220;Folder&#8221; data type, with an alias of &#8220;umbracoFile&#8221;.</p>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/1I-bCRk3IUA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2008/06/xsltsearch-umbraco-media-section/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2008/06/xsltsearch-umbraco-media-section/</feedburner:origLink></item>
		<item>
		<title>Umbraco Codegarden ‘08, Umbraco hints and tips</title>
		<link>http://feedproxy.google.com/~r/mydoctype/~3/-SzVolFFNBc/</link>
		<comments>http://www.createsoft.co.uk/blog/2008/06/umbraco-codegarden-08-umbraco-hints-and-tips/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 19:49:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[umbraco]]></category>
		<category><![CDATA[umbraco cms]]></category>

		<guid isPermaLink="false">http://www.createsoft.co.uk/blog/?p=14</guid>
		<description><![CDATA[Having only used Umbraco for a couple of weeks, it was great to have the opportunity to attend the Codegarden event.  This was an opportunity to meet other developers and to learn about Umbraco.
It was also an opportunity to pick up some helpful hints and tips, which I&#8217;ve documented in this post.

Since I am barely [...]]]></description>
			<content:encoded><![CDATA[<p>Having only used Umbraco for a couple of weeks, it was great to have the opportunity to attend the Codegarden event.  This was an opportunity to meet other developers and to learn about Umbraco.</p>
<p>It was also an opportunity to pick up some helpful hints and tips, which I&#8217;ve documented in this post.</p>
<p><span id="more-14"></span></p>
<p>Since I am barely a .NET developer (I have taught myself .NET in around 3 days !) I was quite apprehensive about how much I would understand.  Fortunately, there were 2 different streams &#8211; intermediate and advanced.</p>
<p>I attended the intermediate streams on Day 1 and found that they were generally very good, although (surprisingly!) they were aimed at real beginners: I&#8217;d been using Umbraco for a couple of weeks and some of the subjects (XSLT for example) I had already experienced at home.</p>
<p>That said, for those who had not yet felt some of that pain, I am sure it was a welcome introduction!</p>
<p>The announcement of Umbraco v4 was extremely welcome.  It looks as though the v4 enhancements will not only be welcome, but will make Umbraco a more serious tool.</p>
<p>In particular, the ability to roll between environments is a &#8220;must have&#8221; and I can&#8217;t wait for that functionality to be released!</p>
<h2>Hints and Tips</h2>
<p>While at Code Garden I captured some helpful hints and tips which I&#8217;ve documented below.</p>
<h3>Control your URLs</h3>
<p>It is possible to override the default url generated by Umbraco (based on the document Name).  To do this, you must add a field named &#8220;umbracoUrlName&#8221; (of data type &#8220;Textstring&#8221; to your Document Type).</p>
<p>When entering/editing content, the value entered for &#8220;umbracoUrlName&#8221; will be used to create the filename portion of the URL (&#8220;filename.aspx&#8221;).</p>
<h3>Multiple URLs for the same document</h3>
<p>If you add a field named &#8220;umbracoUrlAlias&#8221; to the Document Type, this can be used to specify alternative URLs for a document.  Again, this field should have the &#8220;Textstring&#8221; datatype.  Multiple aliases can be specified &#8211; they can be comma-separated.</p>
<h3>Tokens in Templates</h3>
<p>Umbraco allows you to specify tokens when passing information to Macros within templates.  Tokens are then replaced at runtime with suitable content.</p>
<p>Tokens are placed inside square brackets [...].  The tokens which were discussed were:</p>
<ul>
<li>[#pageID]<br />
This token will be replaced with the ID of the current page.</li>
<li>[#key]<br />
Pull the dictionary item with the specified key</li>
<li>[@name]<br />
return the value of Request(name); for example, from either the query string or from a POST request</li>
<li>[%name]<br />
return a value from Session.  Session information can be set using XSLT if required, using the umbraco library functions.  For example,</p>
<pre>&lt;xsl:variable name="sessionVar" select="umbraco.library.setSession('name','value')" /&gt;</pre>
</li>
<li><span style="text-decoration: line-through;">[$recursive]<br />
returns the value of a field named &#8220;recursive&#8221;.  If this field is not found, or is empty, Umbraco will search for a parent document which has a field named &#8220;recursive&#8221; which is not empty. </span><em>I cannot get this to work so have struck this from the post.</em><span style="text-decoration: line-through;"><br />
</span></li>
</ul>
<h3>Recursive Fields</h3>
<p>When inserting a field into a template, the dialog has a &#8220;Recursive&#8221; check box.  If this is ticked, the [$recursive] functionality described above is activated: If this field is not found, or is empty, Umbraco will search for a parent document which has a field named &#8220;recursive&#8221; which is not empty.</p>
<h3>Struggling with XSLT? Take a peek at the Umbraco XML file</h3>
<p>You can view the XML which is parsed by the XSLT processor.  Simply locate the &#8220;data/umbraco.config&#8221; file on the Umbraco IIS server.  This can be used to develop and even debug XSLT in Visual Studio.</p>
<h3>umbracoNaviHide</h3>
<p>Many XSLT functions and templates refer to a document property called &#8220;umbracoNaviHide&#8221;.  If you include this property (as a true/false data type) in your documents, you can hide the document/content node from XSLT queries which adhere to this convention.</p>
<h3>Multiple Domains</h3>
<p>You can have multiple domains point to the same Umbraco site.  Right-Click on the site root node, choose Copy, and tick the &#8220;Relate&#8221; check box.  The copied site can then be associated with a different domain name.  Updates to the copy/original site will be mirrored in the original/copied site.</p>
<h3>Multilingual Sites</h3>
<p>Insert an Umbraco field into a template.  The name of the field should begin with the &#8216;#&#8217; character.  The rest of the field name will be treated as a dictionary key, and the dictionary value will be used in place of the field.</p>
<h3>Scheduled Tasks</h3>
<p>Scheduled tasks can be configured by editing the web.config file.  This will cause a particular aspx page to be executed at a regular interval.</p>
<h3>Insert Images without using XSLT</h3>
<p>It is possible to insert images without using XSLT! Unfortunately, my notes on this one turned out to be innaccurate.  So I asked the guys on <a href="http://forum.umbraco.org/yaf_postst5147_Gems-Insert-an-image-without-using-XSLT.aspx">the Umbraco forum</a> for help and this is what they came up with:</p>
<pre>&lt;img src='&lt;umbraco:Item field="umbracoFile" nodeid="1072" runat="server"&gt;&lt;/umbraco:Item&gt;' /&gt;</pre>
<p>It should also be possible to use &#8220;insertTextBefore&#8221; and &#8220;insertTextAfter&#8221;, however this is not currently working on my copy of Umbraco v4.  The modified syntax would then be:</p>
<pre>&lt;umbraco:Item field="umbracoFile" nodeid="1072"</pre>
<pre>              insertTextBefore="&lt;img src='"</pre>
<pre>              insertTextAfter="' /&gt;"</pre>
<pre>              runat="server"&gt;&lt;/umbraco:Item&gt;</pre>
<img src="http://feeds.feedburner.com/~r/mydoctype/~4/-SzVolFFNBc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.createsoft.co.uk/blog/2008/06/umbraco-codegarden-08-umbraco-hints-and-tips/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.createsoft.co.uk/blog/2008/06/umbraco-codegarden-08-umbraco-hints-and-tips/</feedburner:origLink></item>
	</channel>
</rss>

